From 46e85fee025964dd9a8ce2d615bc5f8ece530519 Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Thu, 20 Feb 2014 23:51:36 +0000 Subject: [PATCH] url: Fixed connection re-use when using different log-in credentials 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 [upstream commit 517b06d657aceb11a234b05cc891170c367ab80d] Signed-off-by: Kamil Dudka --- 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 f4b7a48..c78036b 100644 --- a/lib/http.c +++ b/lib/http.c @@ -142,7 +142,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 9690dfa..0174ff4 100644 --- a/lib/url.c +++ b/lib/url.c @@ -2961,10 +2961,10 @@ ConnectionExists(struct SessionHandle *data, continue; } } - if((needle->handler->protocol & CURLPROTO_FTP) || + if((!(needle->handler->flags & PROTOPT_CREDSPERREQUEST)) || ((needle->handler->protocol & CURLPROTO_HTTP) && wantNTLM)) { - /* This is FTP or HTTP+NTLM, verify that we're using the same name - and password as well */ + /* This proto 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 d597c67..cbf4102 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -755,6 +755,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.1