Commit abdbd310 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

- 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.
parent ddace02e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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.

+1 −1
Original line number Diff line number Diff line
@@ -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)
+8 −3
Original line number Diff line number Diff line
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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

tests/data/test287

0 → 100644
+45 −0
Original line number Diff line number Diff line
<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>