aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES5
-rw-r--r--RELEASE-NOTES2
-rw-r--r--lib/http.c11
-rw-r--r--tests/data/Makefile.am2
-rw-r--r--tests/data/test28745
5 files changed, 60 insertions, 5 deletions
diff --git a/CHANGES b/CHANGES
index 4249a58da..f3b197162 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,11 @@
Changelog
+Daniel (29 January 2007)
+- Michael Wallner reported that when doing a CONNECT with a custom User-Agent
+ header, you got _two_ User-Agent headers in the CONNECT request...! Added
+ test case 287 to verify the fix.
+
Daniel (28 January 2007)
- curl_easy_reset() now resets the CA bundle path correctly.
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index c3a9da4ff..d14582827 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -80,6 +80,6 @@ advice from friends like these:
Stefan Krause, Sebastien Willemijns, Alexey Simak, Brendan Jurd,
Robson Braga Araujo, David McCreedy, Robert Foreman, Nathanael Nerode,
Victor Snezhko, Linus Nielsen Feltzing, Toby Peterson, Dan Fandrich,
- Armel Asselin
+ Armel Asselin, Michael Wallner, Guenter Knauf
Thanks! (and sorry if I forgot to mention someone)
diff --git a/lib/http.c b/lib/http.c
index 89509491f..c07053bdd 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -1101,6 +1101,8 @@ Curl_compareheader(char *headerline, /* line to check */
* like any ordinary HTTP request, and not specially crafted like this. This
* function only remains here like this for now since the rewrite is a bit too
* much work to do at the moment.
+ *
+ * This function is BLOCKING which is nasty for all multi interface using apps.
*/
CURLcode Curl_proxyCONNECT(struct connectdata *conn,
@@ -1160,15 +1162,18 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
if(CURLE_OK == result) {
char *host=(char *)"";
const char *proxyconn="";
+ const char *useragent="";
if(!checkheaders(data, "Host:")) {
host = aprintf("Host: %s\r\n", host_port);
if(!host)
result = CURLE_OUT_OF_MEMORY;
}
- if(!checkheaders(data, "Proxy-Connection:")) {
+ if(!checkheaders(data, "Proxy-Connection:"))
proxyconn = "Proxy-Connection: Keep-Alive\r\n";
- }
+
+ if(!checkheaders(data, "User-Agent:") && data->set.useragent)
+ useragent = conn->allocptr.uagent;
if(CURLE_OK == result) {
/* Send the connect request to the proxy */
@@ -1184,7 +1189,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
host,
conn->allocptr.proxyuserpwd?
conn->allocptr.proxyuserpwd:"",
- data->set.useragent?conn->allocptr.uagent:"",
+ useragent,
proxyconn);
if(CURLE_OK == result)
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 37078bafa..c8c36bedb 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -37,4 +37,4 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test274 test275 test524 test525 test276 test277 test526 test527 test528 \
test530 DISABLED test278 test279 test531 test280 test529 test532 test533 \
test534 test535 test281 test537 test282 test283 test284 test538 test285 \
- test286 test307 test308
+ test286 test307 test308 test287
diff --git a/tests/data/test287 b/tests/data/test287
new file mode 100644
index 000000000..c67818cd0
--- /dev/null
+++ b/tests/data/test287
@@ -0,0 +1,45 @@
+<testcase>
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data nocheck="1">
+HTTP/1.1 405 Method Not Allowed swsclose
+
+And you should ignore this data.
+</data>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP proxy CONNECT with custom User-Agent header
+ </name>
+ <command>
+http://test.remote.server.com:287/path/287 -H "User-Agent: looser/2007" --proxy http://%HOSTIP:%HTTPPORT --proxytunnel
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+CONNECT test.remote.server.com:287 HTTP/1.0
+Host: test.remote.server.com:287
+Proxy-Connection: Keep-Alive
+User-Agent: looser/2007
+
+</protocol>
+# CURLE_RECV_ERROR
+<errorcode>
+56
+</errorcode>
+<stdout>
+HTTP/1.1 405 Method Not Allowed swsclose
+
+</stdout>
+</verify>
+</testcase>