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 host_match = FALSE;
|
||||||
int port_match = FALSE;
|
int port_match = FALSE;
|
||||||
|
|
||||||
|
*host_result = NULL;
|
||||||
|
*port_result = -1;
|
||||||
|
|
||||||
if(*ptr == ':') {
|
if(*ptr == ':') {
|
||||||
/* an empty hostname always matches */
|
/* an empty hostname always matches */
|
||||||
host_match = TRUE;
|
host_match = TRUE;
|
||||||
@ -5739,9 +5742,9 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
|
|||||||
{
|
{
|
||||||
CURLcode result = CURLE_OK;
|
CURLcode result = CURLE_OK;
|
||||||
char *host = NULL;
|
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,
|
result = parse_connect_to_string(data, conn, conn_to_host->data,
|
||||||
&host, &port);
|
&host, &port);
|
||||||
if(result)
|
if(result)
|
||||||
@ -5760,7 +5763,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
|
|||||||
else {
|
else {
|
||||||
/* no "connect to host" */
|
/* no "connect to host" */
|
||||||
conn->bits.conn_to_host = FALSE;
|
conn->bits.conn_to_host = FALSE;
|
||||||
free(host);
|
Curl_safefree(host);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(port >= 0) {
|
if(port >= 0) {
|
||||||
@ -5771,6 +5774,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
|
|||||||
else {
|
else {
|
||||||
/* no "connect to port" */
|
/* no "connect to port" */
|
||||||
conn->bits.conn_to_port = FALSE;
|
conn->bits.conn_to_port = FALSE;
|
||||||
|
port = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
conn_to_host = conn_to_host->next;
|
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 \
|
test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
|
||||||
test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
|
test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
|
||||||
test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
|
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