]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
vtls: only re-use session-ids using the same scheme
authorDaniel Stenberg <daniel@haxx.se>
Mon, 10 Oct 2016 14:47:54 +0000 (16:47 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 13 Oct 2016 09:24:16 +0000 (11:24 +0200)
To make it harder to do cross-protocol mistakes

lib/urldata.h
lib/vtls/vtls.c

index fd9870e26aa3d7ed3bbbffbe133603fe0eb537e3..7c7bf1ba0743744677edf0c08cbf453f3adb9ff5 100644 (file)
@@ -374,6 +374,7 @@ struct ssl_config_data {
 struct curl_ssl_session {
   char *name;       /* host name for which this ID was used */
   char *conn_to_host; /* host name for the connection (may be NULL) */
+  const char *scheme; /* protocol scheme used */
   void *sessionid;  /* as returned from the SSL layer */
   size_t idsize;    /* if known, otherwise 0 */
   long age;         /* just a number, the higher the more recent */
index fe69306de0b61ae2eef9a00214f78a4099cdbbbd..66b49540c481d371f57603da81ea2bab8a342e13 100644 (file)
@@ -398,6 +398,7 @@ bool Curl_ssl_getsessionid(struct connectdata *conn,
          (conn->bits.conn_to_port && check->conn_to_port != -1 &&
            conn->conn_to_port == check->conn_to_port)) &&
        (conn->remote_port == check->remote_port) &&
+       Curl_raw_equal(conn->handler->scheme, check->scheme) &&
        Curl_ssl_config_matches(&conn->ssl_config, &check->ssl_config)) {
       /* yes, we have a session ID! */
       (*general_age)++;          /* increase general age */
@@ -528,6 +529,7 @@ CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
   store->conn_to_host = clone_conn_to_host; /* clone connect to host name */
   store->conn_to_port = conn_to_port; /* connect to port number */
   store->remote_port = conn->remote_port; /* port number */
+  store->scheme = conn->handler->scheme;
 
   if(!Curl_clone_ssl_config(&conn->ssl_config, &store->ssl_config)) {
     store->sessionid = NULL; /* let caller free sessionid */