You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.6 KiB
68 lines
2.6 KiB
From 46e85fee025964dd9a8ce2d615bc5f8ece530519 Mon Sep 17 00:00:00 2001 |
|
From: Steve Holme <steve_holme@hotmail.com> |
|
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 <kdudka@redhat.com> |
|
--- |
|
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 |
|
|
|
|