]> granicus.if.org Git - curl/commitdiff
- Michael Wallner reported that when doing a CONNECT with a custom User-Agent
authorDaniel Stenberg <daniel@haxx.se>
Mon, 29 Jan 2007 09:26:36 +0000 (09:26 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 29 Jan 2007 09:26:36 +0000 (09:26 +0000)
  header, you got _two_ User-Agent headers in the CONNECT request...! Added
  test case 287 to verify the fix.

CHANGES
RELEASE-NOTES
lib/http.c
tests/data/Makefile.am
tests/data/test287 [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 4249a58da4be872c968d942d03ed0da224e53432..f3b19716223b16fa70f5dcdd3a19b6fbfba57134 100644 (file)
--- 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.
 
index c3a9da4ffc18d0689794433abc3245b33157f739..d1458282700b263acd409aa5171681379ae3b46c 100644 (file)
@@ -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)
index 89509491fcdaaf4ef3be394ca013c71672eb4b24..c07053bdde94c2eb9ae6b5baf93db2ad86a59d9e 100644 (file)
@@ -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)
index 37078bafae04a05940b96bfb42dfd129d46e6893..c8c36bedb8e44871199dc74acae181af707b9635 100644 (file)
@@ -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 (file)
index 0000000..c67818c
--- /dev/null
@@ -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\r
+\r
+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\r
+Host: test.remote.server.com:287\r
+Proxy-Connection: Keep-Alive\r
+User-Agent: looser/2007\r
+\r
+</protocol>
+# CURLE_RECV_ERROR
+<errorcode>
+56
+</errorcode>
+<stdout>
+HTTP/1.1 405 Method Not Allowed swsclose\r
+\r
+</stdout>
+</verify>
+</testcase>