]> granicus.if.org Git - curl/commitdiff
darwinssl: fix session ID keys to only reuse identical sessions
authorDaniel Stenberg <daniel@haxx.se>
Fri, 19 Dec 2014 07:50:00 +0000 (08:50 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 7 Jan 2015 21:55:56 +0000 (22:55 +0100)
...to avoid a session ID getting cached without certificate checking and
then after a subsequent _enabling_ of the check libcurl could still
re-use the session done without cert checks.

Bug: http://curl.haxx.se/docs/adv_20150108A.html
Reported-by: Marc Hesse
lib/vtls/curl_darwinssl.c

index 5658673cae1aa0adda0904fd2dccfefaa6e32a99..c056198bbdcb7bb59f9a37be64c972a3c47b2af7 100644 (file)
@@ -6,7 +6,7 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2012 - 2014, Nick Zitzmann, <nickzman@gmail.com>.
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -1482,9 +1482,10 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
      to starting the handshake. */
   else {
     CURLcode result;
-
-    ssl_sessionid = aprintf("curl:%s:%hu",
-                            conn->host.name, conn->remote_port);
+    ssl_sessionid =
+      aprintf("%s:%d:%d:%s:%hu", data->set.str[STRING_SSL_CAFILE],
+              data->set.ssl.verifypeer, data->set.ssl.verifyhost,
+              conn->host.name, conn->remote_port);
     ssl_sessionid_len = strlen(ssl_sessionid);
 
     err = SSLSetPeerID(connssl->ssl_ctx, ssl_sessionid, ssl_sessionid_len);