mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
CURLOPT_CONNECT_TO: Skip non-matching "connect-to" entries properly
If a port number in a "connect-to" entry does not match, skip this entry instead of connecting to port 0. If a port number in a "connect-to" entry matches, use this entry and look no further. Reported-by: Jay Satiro Assisted-by: Jay Satiro, Daniel Stenberg Closes #1148
This commit is contained in:
parent
12d6794b10
commit
b34ea05d9d
10
lib/url.c
10
lib/url.c
@ -5677,6 +5677,9 @@ static CURLcode parse_connect_to_string(struct Curl_easy *data,
|
||||
int host_match = FALSE;
|
||||
int port_match = FALSE;
|
||||
|
||||
*host_result = NULL;
|
||||
*port_result = -1;
|
||||
|
||||
if(*ptr == ':') {
|
||||
/* an empty hostname always matches */
|
||||
host_match = TRUE;
|
||||
@ -5739,9 +5742,9 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
|
||||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
char *host = NULL;
|
||||
int port = 0;
|
||||
int port = -1;
|
||||
|
||||
while(conn_to_host && !host) {
|
||||
while(conn_to_host && !host && port == -1) {
|
||||
result = parse_connect_to_string(data, conn, conn_to_host->data,
|
||||
&host, &port);
|
||||
if(result)
|
||||
@ -5760,7 +5763,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
|
||||
else {
|
||||
/* no "connect to host" */
|
||||
conn->bits.conn_to_host = FALSE;
|
||||
free(host);
|
||||
Curl_safefree(host);
|
||||
}
|
||||
|
||||
if(port >= 0) {
|
||||
@ -5771,6 +5774,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
|
||||
else {
|
||||
/* no "connect to port" */
|
||||
conn->bits.conn_to_port = FALSE;
|
||||
port = -1;
|
||||
}
|
||||
|
||||
conn_to_host = conn_to_host->next;
|
||||
|
@ -175,4 +175,4 @@ test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
|
||||
test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
|
||||
test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
|
||||
test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
|
||||
test2048 test2049 test2050 test2051 test2052
|
||||
test2048 test2049 test2050 test2051 test2052 test2053 test2054
|
||||
|
56
tests/data/test2053
Normal file
56
tests/data/test2053
Normal file
@ -0,0 +1,56 @@
|
||||
<testcase>
|
||||
<info>
|
||||
<keywords>
|
||||
HTTP
|
||||
HTTP GET
|
||||
CURLOPT_CONNECT_TO
|
||||
</keywords>
|
||||
</info>
|
||||
|
||||
#
|
||||
# Server-side
|
||||
<reply>
|
||||
<data>
|
||||
HTTP/1.1 200 OK
|
||||
Date: Thu, 09 Nov 2010 14:49:00 GMT
|
||||
Content-Length: 3
|
||||
Content-Type: text/plain
|
||||
|
||||
OK
|
||||
</data>
|
||||
</reply>
|
||||
|
||||
#
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
Connect to specific host with IP addresses
|
||||
</name>
|
||||
|
||||
<command>
|
||||
http://10.0.0.1:8081/2053 --connect-to 10.0.0.1:8081:%HOSTIP:%HTTPPORT --next http://[fc00::1]:8082/2053 --connect-to [fc00::1]:8082:%HOSTIP:%HTTPPORT
|
||||
</command>
|
||||
</client>
|
||||
|
||||
#
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<strip>
|
||||
^User-Agent:.*
|
||||
</strip>
|
||||
<protocol>
|
||||
GET /2053 HTTP/1.1
|
||||
Host: 10.0.0.1:8081
|
||||
Accept: */*
|
||||
|
||||
GET /2053 HTTP/1.1
|
||||
Host: [fc00::1]:8082
|
||||
Accept: */*
|
||||
|
||||
</protocol>
|
||||
|
||||
</verify>
|
||||
</testcase>
|
64
tests/data/test2054
Normal file
64
tests/data/test2054
Normal file
@ -0,0 +1,64 @@
|
||||
<testcase>
|
||||
<info>
|
||||
<keywords>
|
||||
HTTP
|
||||
HTTP GET
|
||||
CURLOPT_CONNECT_TO
|
||||
</keywords>
|
||||
</info>
|
||||
|
||||
#
|
||||
# Server-side
|
||||
<reply>
|
||||
<data>
|
||||
HTTP/1.1 200 OK
|
||||
Date: Thu, 09 Nov 2010 14:49:00 GMT
|
||||
Content-Length: 3
|
||||
Content-Type: text/plain
|
||||
|
||||
OK
|
||||
</data>
|
||||
</reply>
|
||||
|
||||
#
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
Connect to specific host: use the first "connect-to" string that matches
|
||||
</name>
|
||||
|
||||
<command>
|
||||
http://%HOSTIP:%HTTPPORT/2054 --connect-to foo::bar: --connect-to :123::456 --next http://www.example.com:%HTTPPORT/2054 --connect-to www.example.com::%HOSTIP: --connect-to www.example.com::foo: --next http://%HOSTIP:8083/2054 --connect-to :8083::%HTTPPORT --connect-to :8083::123 --next http://www.example.com:8084/2054 --connect-to www.example.com:8084:%HOSTIP:%HTTPPORT --connect-to www.example.com:8084:foo:123
|
||||
</command>
|
||||
</client>
|
||||
|
||||
#
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<strip>
|
||||
^User-Agent:.*
|
||||
</strip>
|
||||
<protocol>
|
||||
GET /2054 HTTP/1.1
|
||||
Host: %HOSTIP:%HTTPPORT
|
||||
Accept: */*
|
||||
|
||||
GET /2054 HTTP/1.1
|
||||
Host: www.example.com:%HTTPPORT
|
||||
Accept: */*
|
||||
|
||||
GET /2054 HTTP/1.1
|
||||
Host: %HOSTIP:8083
|
||||
Accept: */*
|
||||
|
||||
GET /2054 HTTP/1.1
|
||||
Host: www.example.com:8084
|
||||
Accept: */*
|
||||
|
||||
</protocol>
|
||||
|
||||
</verify>
|
||||
</testcase>
|
Loading…
Reference in New Issue
Block a user