diff options
author | Daniel Stenberg <daniel@haxx.se> | 2009-05-17 14:47:50 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2009-05-17 14:47:50 +0000 |
commit | 3cb06eb2b2e80795d8f97d1fcfdcb8f1d01f02ce (patch) | |
tree | 0414301b28f6402ba7914a5333a9d1f27b19aed9 | |
parent | b8e73495a5ae4882b3ba81558be7cdccdd2f7f49 (diff) |
- James Bursa posted a patch to the mailing list that fixed a problem with
no_proxy which made it not skip the proxy if the URL entered contained a
user name. I added test case 1101 to verify.
-rw-r--r-- | CHANGES | 5 | ||||
-rw-r--r-- | RELEASE-NOTES | 3 | ||||
-rw-r--r-- | lib/url.c | 77 | ||||
-rw-r--r-- | tests/data/Makefile.am | 2 | ||||
-rw-r--r-- | tests/data/test1101 | 53 |
5 files changed, 99 insertions, 41 deletions
@@ -6,6 +6,11 @@ Changelog +Daniel Stenberg (17 May 2009) +- James Bursa posted a patch to the mailing list that fixed a problem with + no_proxy which made it not skip the proxy if the URL entered contained a + user name. I added test case 1101 to verify. + Daniel Stenberg (11 May 2009) - Balint Szilakszi reported a memory leak when libcurl did gzip decompression of streams that had some parts (legitimately) missing. We now provide and use diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 57dcac95a..60324d119 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -47,6 +47,7 @@ This release includes the following bugfixes: o POST, NTLM and following a redirect hang o libcurl+NSS endless loop on incorrect password for private key o gzip decompression memory leak + o no_proxy flaw with user name in URL This release includes the following known bugs: @@ -61,6 +62,6 @@ advice from friends like these: Pramod Sharma, Gisle Vanem, Lenaic Lefever, Rainer Koenig, Sven Wegener, Tim Chen, Constantine Sapuntzakis, David McCreedy, Michael Smith, Colin Watson, Ebenezer Ikonne, Laurent Rabret, Michael Cronenworth, - Balint Szilakszi + Balint Szilakszi, James Bursa Thanks! (and sorry if I forgot to mention someone) @@ -4316,6 +4316,44 @@ static CURLcode create_conn(struct SessionHandle *data, return result; } + /************************************************************* + * No protocol part in URL was used, add it! + *************************************************************/ + if(conn->protocol&PROT_MISSING) { + /* We're guessing prefixes here and if we're told to use a proxy or if + we're gonna follow a Location: later or... then we need the protocol + part added so that we have a valid URL. */ + char *reurl; + + reurl = aprintf("%s://%s", conn->protostr, data->change.url); + + if(!reurl) { + Curl_safefree(proxy); + return CURLE_OUT_OF_MEMORY; + } + + data->change.url = reurl; + data->change.url_alloc = TRUE; /* free this later */ + conn->protocol &= ~PROT_MISSING; /* switch that one off again */ + } + + /************************************************************* + * Setup internals depending on protocol + *************************************************************/ + result = setup_connection_internals(data, conn); + if(result != CURLE_OK) { + Curl_safefree(proxy); + return result; + } + + /************************************************************* + * Parse a user name and password in the URL and strip it out + * of the host name + *************************************************************/ + result = parse_url_userpass(data, conn, user, passwd); + if(result != CURLE_OK) + return result; + #ifndef CURL_DISABLE_PROXY /************************************************************* * Extract the user and password from the authentication string @@ -4371,37 +4409,6 @@ static CURLcode create_conn(struct SessionHandle *data, } #endif /* CURL_DISABLE_PROXY */ - /************************************************************* - * No protocol part in URL was used, add it! - *************************************************************/ - if(conn->protocol&PROT_MISSING) { - /* We're guessing prefixes here and if we're told to use a proxy or if - we're gonna follow a Location: later or... then we need the protocol - part added so that we have a valid URL. */ - char *reurl; - - reurl = aprintf("%s://%s", conn->protostr, data->change.url); - - if(!reurl) { - Curl_safefree(proxy); - return CURLE_OUT_OF_MEMORY; - } - - data->change.url = reurl; - data->change.url_alloc = TRUE; /* free this later */ - conn->protocol &= ~PROT_MISSING; /* switch that one off again */ - } - - /************************************************************* - * Setup internals depending on protocol - *************************************************************/ - result = setup_connection_internals(data, conn); - if(result != CURLE_OK) { - Curl_safefree(proxy); - return result; - } - - #ifndef CURL_DISABLE_PROXY /*********************************************************************** * If this is supposed to use a proxy, we need to figure out the proxy @@ -4463,14 +4470,6 @@ static CURLcode create_conn(struct SessionHandle *data, conn->bits.tunnel_proxy = TRUE; /************************************************************* - * Parse a user name and password in the URL and strip it out - * of the host name - *************************************************************/ - result = parse_url_userpass(data, conn, user, passwd); - if(result != CURLE_OK) - return result; - - /************************************************************* * Figure out the remote port number and fix it in the URL *************************************************************/ result = parse_remote_port(data, conn); diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 6574ab0ee..72afc5128 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -62,7 +62,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test635 test636 test637 test558 test559 test1086 test1087 test1088 \ test1089 test1090 test1091 test1092 test1093 test1094 test1095 test1096 \ test1097 test560 test561 test1098 test1099 test562 test563 test1100 \ - test564 + test564 test1101 filecheck: @mkdir test-place; \ diff --git a/tests/data/test1101 b/tests/data/test1101 new file mode 100644 index 000000000..5624e3121 --- /dev/null +++ b/tests/data/test1101 @@ -0,0 +1,53 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +NO_PROXY +</keywords> +</info> +# Server-side +<reply> +<data> +HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 4
+Content-Type: text/html
+
+boo +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +NO_PROXY test, with user name in URL + </name> + +<setenv> +no_proxy=%HOSTIP +http_proxy=http://non-existing-host.haxx.se:3128/ +</setenv> + <command> +http://user:secret@%HOSTIP:%HTTPPORT/gimme/1101 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /gimme/1101 HTTP/1.1
+Authorization: Basic dXNlcjpzZWNyZXQ=
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol> +</verify> +</testcase> |