- 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.
This commit is contained in:
Daniel Stenberg 2007-01-29 09:26:36 +00:00
parent ddace02efe
commit abdbd3100f
5 changed files with 60 additions and 5 deletions

View File

@ -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.

View 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)

View 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)

View 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

45
tests/data/test287 Normal file
View File

@ -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>