cURL / Mailing Lists / curl-library / Single Mail

curl-library

[PATCH] url: Fixed connection re-use when using different log-in credentials

From: Steve Holme <steve_holme_at_hotmail.com>
Date: Thu, 20 Feb 2014 23:51:36 +0000

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

(based on commit 517b06d657aceb11a234b05cc891170c367ab80d)

---
 lib/http.c    |    2 +-
 lib/url.c     |    6 +++---
 lib/urldata.h |    2 ++
 3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/lib/http.c b/lib/http.c
index ec76bbe..723b6ac 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -148,7 +148,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
 
diff --git a/lib/url.c b/lib/url.c
index 7924b63..860fe72 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -3066,12 +3066,12 @@ ConnectionExists(struct SessionHandle *data,
             continue;
           }
         }
-        if((needle->handler->protocol & CURLPROTO_FTP) ||
+        if((!(needle->handler->flags & PROTOPT_CREDSPERREQUEST)) ||
            ((needle->handler->protocol & CURLPROTO_HTTP) &&
             ((data->state.authhost.want & CURLAUTH_NTLM) ||
              (data->state.authhost.want & CURLAUTH_NTLM_WB)))) {
-          /* This is FTP or HTTP+NTLM, verify that we're using the same name
-             and password as well */
+          /* 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 */
diff --git a/lib/urldata.h b/lib/urldata.h
index 7830686..a11420a 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -712,6 +712,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 */
-- 
1.7.10
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html
Received on 2001-09-17