]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Fixed the receipt of session tickets during session resumption.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 30 Sep 2012 10:53:37 +0000 (12:53 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 30 Sep 2012 10:54:14 +0000 (12:54 +0200)
Reported by danblack
http://savannah.gnu.org/support/?108146

lib/ext/session_ticket.c
lib/gnutls_handshake.c

index c94242cac2b449852f5161221568a8012cfa1c94..ad965ef142efe8165704226970bac3a6a3d9f605 100644 (file)
@@ -54,7 +54,7 @@ static void session_ticket_deinit_data (extension_priv_data_t priv);
 extension_entry_st ext_mod_session_ticket = {
   .name = "SESSION TICKET",
   .type = GNUTLS_EXTENSION_SESSION_TICKET,
-  .parse_type = GNUTLS_EXT_TLS,
+  .parse_type = GNUTLS_EXT_MANDATORY,
 
   .recv_func = session_ticket_recv_params,
   .send_func = session_ticket_send_params,
index 63ba755b6f76a7274db0e53a905829522aaa2428..84dcd707a62ef9b154e5e1da288342f7fb740ef1 100644 (file)
@@ -2645,14 +2645,22 @@ _gnutls_handshake_client (gnutls_session_t session)
         }
       else
         {
-          ret = _gnutls_recv_handshake_final (session, TRUE);
-          IMED_RET ("recv handshake final", ret, 1);
+          ret = _gnutls_recv_new_session_ticket (session);
+          IMED_RET ("recv handshake new session ticket", ret, 1);
         }
 
     case STATE16:
-      ret = _gnutls_recv_new_session_ticket (session);
       STATE = STATE16;
-      IMED_RET ("recv handshake new session ticket", ret, 1);
+      if (session->internals.resumed == RESUME_FALSE)
+        {
+          ret = _gnutls_recv_new_session_ticket (session);
+          IMED_RET ("recv handshake new session ticket", ret, 1);
+        }
+      else
+        {
+          ret = _gnutls_recv_handshake_final (session, TRUE);
+          IMED_RET ("recv handshake final", ret, 1);
+        }
 
     case STATE17:
       STATE = STATE17;