]> granicus.if.org Git - curl/commitdiff
url: Fixed connection re-use when using different log-in credentials
authorSteve Holme <steve_holme@hotmail.com>
Thu, 20 Feb 2014 23:51:36 +0000 (23:51 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 25 Mar 2014 22:01:37 +0000 (23:01 +0100)
In addition to FTP, other connection based protocols such as IMAP, POP3,
SMTP, SCP, SFTP and LDAP require a new connection when different log-in
credentials are specified. Fixed the detection logic to include these
other protocols.

Bug: http://curl.haxx.se/docs/adv_20140326A.html

lib/http.c
lib/url.c
lib/urldata.h

index 558699967d6372532481920c2845f4b1e69db823..4a29058c2d61a597e4d72e19a969e7bc259b4ec8 100644 (file)
@@ -145,7 +145,7 @@ const struct Curl_handler Curl_handler_https = {
   ZERO_NULL,                            /* readwrite */
   PORT_HTTPS,                           /* defport */
   CURLPROTO_HTTP | CURLPROTO_HTTPS,     /* protocol */
-  PROTOPT_SSL                           /* flags */
+  PROTOPT_SSL | PROTOPT_CREDSPERREQUEST /* flags */
 };
 #endif
 
index 2240f113275655423711f32deeaff503880e164a..0e420c7a30ecc8274857ed0425c07cdab52bc794 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -3060,9 +3060,10 @@ ConnectionExists(struct SessionHandle *data,
           continue;
       }
 
-      if((needle->handler->protocol & CURLPROTO_FTP) || wantNTLMhttp) {
-        /* This is FTP or HTTP+NTLM, verify that we're using the same name
-           and password as well */
+      if((!(needle->handler->flags & PROTOPT_CREDSPERREQUEST)) ||
+         wantNTLMhttp) {
+        /* This protocol requires credentials per connection or is HTTP+NTLM,
+           so verify that we're using the same name and password as well */
         if(!strequal(needle->user, check->user) ||
            !strequal(needle->passwd, check->passwd)) {
           /* one of them was different */
index 3ab4ed9fc761fdb511d26deedbc73cb4e9e2922c..25f96769321399cf8fb0c6d0e2c856a2de25ffe9 100644 (file)
@@ -795,6 +795,8 @@ struct Curl_handler {
                                       gets a default */
 #define PROTOPT_NOURLQUERY (1<<6)   /* protocol can't handle
                                         url query strings (?foo=bar) ! */
+#define PROTOPT_CREDSPERREQUEST (1<<7) /* requires login creditials per request
+                                          as opposed to per connection */
 
 
 /* return the count of bytes sent, or -1 on error */