Send and receive the ticket_nonce field in a NewSessionTicket
[openssl.git] / ssl / ssl_sess.c
index e7fe714e58a982cf2e2f6aa59fd60c02545fb602..8740e15daa7816c9c37d465c38c1f9214c5aab4e 100644 (file)
@@ -130,6 +130,8 @@ SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket)
     dest->peer = NULL;
     memset(&dest->ex_data, 0, sizeof(dest->ex_data));
 
+    dest->ext.tick_nonce = NULL;
+
     /* We deliberately don't copy the prev and next pointers */
     dest->prev = NULL;
     dest->next = NULL;
@@ -222,6 +224,13 @@ SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket)
         }
     }
 
+    if (src->ext.tick_nonce != NULL) {
+        dest->ext.tick_nonce = OPENSSL_memdup(src->ext.tick_nonce,
+                                              src->ext.tick_nonce_len);
+        if (dest->ext.tick_nonce == NULL)
+            goto err;
+    }
+
 #ifndef OPENSSL_NO_SRP
     if (src->srp_username) {
         dest->srp_username = OPENSSL_strdup(src->srp_username);
@@ -785,6 +794,7 @@ void SSL_SESSION_free(SSL_SESSION *ss)
     OPENSSL_free(ss->srp_username);
 #endif
     OPENSSL_free(ss->ext.alpn_selected);
+    OPENSSL_free(ss->ext.tick_nonce);
     CRYPTO_THREAD_lock_free(ss->lock);
     OPENSSL_clear_free(ss, sizeof(*ss));
 }