diff options
author | Daniel Stenberg <daniel@haxx.se> | 2013-03-15 17:28:32 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2013-03-27 15:30:46 +0100 |
commit | 1e29d275c643ef6aab7948f0f55a7a9397e56b42 (patch) | |
tree | 84c06b93ee8092deb48da90e1f21e29dc4a1c11d | |
parent | 142755fa5cdd2fea72c68663bfefeb9c6ccf5315 (diff) | |
download | curl-1e29d275c643ef6aab7948f0f55a7a9397e56b42.tar.gz |
test1509: verify proxy header response headers count
Modified sws to support and use custom CONNECT responses instead of the
previously naive hard-coded version. Made the HTTP test server able to
extract test case number from the host name in a CONNECT request by
finding the number after the last dot. It makes 'machine.moo.123' use
test case 123.
Adapted a larger amount of tests to the new <connect> style.
Bug: http://curl.haxx.se/bug/view.cgi?id=1204
Reported by: Martin Jansen
-rw-r--r-- | tests/FILEFORMAT | 16 | ||||
-rw-r--r-- | tests/data/Makefile.am | 2 | ||||
-rw-r--r-- | tests/data/test1008 | 20 | ||||
-rw-r--r-- | tests/data/test1021 | 28 | ||||
-rw-r--r-- | tests/data/test1059 | 4 | ||||
-rw-r--r-- | tests/data/test1060 | 22 | ||||
-rw-r--r-- | tests/data/test1061 | 22 | ||||
-rw-r--r-- | tests/data/test1078 | 17 | ||||
-rw-r--r-- | tests/data/test1097 | 14 | ||||
-rw-r--r-- | tests/data/test1316 | 16 | ||||
-rw-r--r-- | tests/data/test1319 | 14 | ||||
-rw-r--r-- | tests/data/test1320 | 11 | ||||
-rw-r--r-- | tests/data/test1321 | 12 | ||||
-rw-r--r-- | tests/data/test1509 | 88 | ||||
-rw-r--r-- | tests/data/test206 | 24 | ||||
-rw-r--r-- | tests/data/test209 | 20 | ||||
-rw-r--r-- | tests/data/test213 | 20 | ||||
-rw-r--r-- | tests/data/test217 | 10 | ||||
-rw-r--r-- | tests/data/test265 | 20 | ||||
-rw-r--r-- | tests/data/test275 | 19 | ||||
-rw-r--r-- | tests/data/test287 | 11 | ||||
-rw-r--r-- | tests/data/test302 | 13 | ||||
-rw-r--r-- | tests/data/test503 | 12 | ||||
-rw-r--r-- | tests/data/test80 | 12 | ||||
-rw-r--r-- | tests/data/test83 | 12 | ||||
-rw-r--r-- | tests/data/test94 | 4 | ||||
-rw-r--r-- | tests/data/test95 | 12 | ||||
-rw-r--r-- | tests/libtest/Makefile.inc | 5 | ||||
-rw-r--r-- | tests/libtest/lib1509.c | 81 | ||||
-rw-r--r-- | tests/server/sws.c | 183 |
30 files changed, 488 insertions, 256 deletions
diff --git a/tests/FILEFORMAT b/tests/FILEFORMAT index 0029a8eec..063925f09 100644 --- a/tests/FILEFORMAT +++ b/tests/FILEFORMAT @@ -75,6 +75,11 @@ to complete a transfer. The response to each request is found in its own data section. Validating the entire negotiation sequence can be done by specifying a datacheck section. </dataNUM> +<connect> +The connect section is used instead of the 'data' for all CONNECT +requests. The remainder of the rules for the data section then apply but with +a connect prefix. +</connect> <datacheck [nonewline="yes"]> if the data is sent but this is what should be checked afterwards. If 'nonewline' is set, we will cut off the trailing newline of this given data @@ -247,13 +252,10 @@ that is returned. The last slash in the URL must be followed by a number. That number (N) will be used by the test-server to load test case N and return the data that is defined within the <reply><data></data></reply> section. -If a CONNECT is used to the server (to emulate HTTPS etc over proxy), the port -number given in the CONNECT request will be used to identify which test that -is being run, if the proxy host name is said to start with 'test'. - -If there's no non-zero test number found in the above two places, the HTTP test -server will use the number following the last dot in the given url so that -"foo.bar.123" gets treated as test case 123. +If there's no test number found above, the HTTP test server will use the +number following the last dot in the given hostname (made so that a CONNECT +can still pass on test number) so that "foo.bar.123" gets treated as test case +123. Set type="perl" to write the test case as a perl script. It implies that there's no memory debugging and valgrind gets shut off for this test. diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index a377c0ddd..3d7b04e1d 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -109,7 +109,7 @@ test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 \ test1408 test1409 test1410 test1411 test1412 test1413 \ \ test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \ -test1508 \ +test1508 test1509 \ \ test1900 test1901 test1902 test1903 \ \ diff --git a/tests/data/test1008 b/tests/data/test1008 index e576e7197..30714f9af 100644 --- a/tests/data/test1008 +++ b/tests/data/test1008 @@ -16,7 +16,7 @@ connection-monitor </servercmd> # this is returned first since we get no proxy-auth -<data1001> +<connect1001> HTTP/1.1 407 Authorization Required to proxy me my dear
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
Transfer-Encoding: chunked
@@ -27,16 +27,16 @@ FA0 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0
-</data1001> +</connect1001> # This is supposed to be returned when the server gets the second # Authorization: NTLM line passed-in from the client -<data1002> +<connect1002> HTTP/1.1 200 Things are fine in proxy land
Server: Microsoft-IIS/5.0
Content-Type: text/html; charset=iso-8859-1
-</data1002> +</connect1002> # this is returned when we get a GET! <data2> @@ -96,7 +96,7 @@ CURL_GETHOSTNAME=curlhost LD_PRELOAD=%PWD/libtest/.libs/libhostname.so </setenv> <command> -http://test.remote.example.com:1008/path/10080002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel +http://test.remote.example.com.1008:%HTTPPORT/path/10080002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel </command> <precheck> chkhostname curlhost @@ -109,19 +109,19 @@ chkhostname curlhost ^User-Agent: curl/.* </strip> <protocol> -CONNECT test.remote.example.com:1008 HTTP/1.1
-Host: test.remote.example.com:1008
+CONNECT test.remote.example.com.1008:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.1008:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
Proxy-Connection: Keep-Alive
-CONNECT test.remote.example.com:1008 HTTP/1.1
-Host: test.remote.example.com:1008
+CONNECT test.remote.example.com.1008:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.1008:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
Proxy-Connection: Keep-Alive
GET /path/10080002 HTTP/1.1
User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
-Host: test.remote.example.com:1008
+Host: test.remote.example.com.1008:%HTTPPORT
Accept: */*
[DISCONNECT] diff --git a/tests/data/test1021 b/tests/data/test1021 index 1979f7507..81127249a 100644 --- a/tests/data/test1021 +++ b/tests/data/test1021 @@ -12,32 +12,32 @@ HTTP proxy NTLM auth # Server-side <reply> -<data> +<connect> HTTP/1.1 407 Authorization Required to proxy me my dear swsclose
Proxy-Authenticate: NTLM
Content-Length: 21
Connection: close
data to discard -</data> +</connect> # this is returned first since we get no proxy-auth -<data1001> +<connect1001> HTTP/1.1 407 Authorization Required to proxy me my dear
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
Content-Length: 28
And you should ignore this data.
-</data1001> +</connect1001> # This is supposed to be returned when the server gets the second # Authorization: NTLM line passed-in from the client -<data1002> +<connect1002> HTTP/1.1 200 Things are fine in proxy land
Server: Microsoft-IIS/5.0
Content-Type: text/html; charset=iso-8859-1
-</data1002> +</connect1002> # this is returned when we get a GET! <data2> @@ -102,7 +102,7 @@ CURL_GETHOSTNAME=curlhost LD_PRELOAD=%PWD/libtest/.libs/libhostname.so </setenv> <command> -http://test.remote.example.com:1021/path/10210002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-anyauth --proxytunnel +http://test.remote.example.com.1021:%HTTPPORT/path/10210002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-anyauth --proxytunnel </command> <precheck> chkhostname curlhost @@ -115,23 +115,23 @@ chkhostname curlhost ^User-Agent: curl/.* </strip> <protocol> -CONNECT test.remote.example.com:1021 HTTP/1.1
-Host: test.remote.example.com:1021
+CONNECT test.remote.example.com.1021:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.1021:%HTTPPORT
Proxy-Connection: Keep-Alive
-CONNECT test.remote.example.com:1021 HTTP/1.1
-Host: test.remote.example.com:1021
+CONNECT test.remote.example.com.1021:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.1021:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
Proxy-Connection: Keep-Alive
-CONNECT test.remote.example.com:1021 HTTP/1.1
-Host: test.remote.example.com:1021
+CONNECT test.remote.example.com.1021:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.1021:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
Proxy-Connection: Keep-Alive
GET /path/10210002 HTTP/1.1
User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
-Host: test.remote.example.com:1021
+Host: test.remote.example.com.1021:%HTTPPORT
Accept: */*
</protocol> diff --git a/tests/data/test1059 b/tests/data/test1059 index 5a96de61a..6820ea679 100644 --- a/tests/data/test1059 +++ b/tests/data/test1059 @@ -12,13 +12,13 @@ FAILURE # # Server-side <reply> -<data> +<connect> HTTP/1.1 501 Method not implemented swsclose
Date: Thu, 09 Nov 2010 14:49:00 GMT
Connection: close
Content-Length: 0
-</data> +</connect> </reply> # diff --git a/tests/data/test1060 b/tests/data/test1060 index 767a7ccc9..da1be78b7 100644 --- a/tests/data/test1060 +++ b/tests/data/test1060 @@ -14,7 +14,7 @@ HTTP proxy Digest auth <reply> # this is returned first since we get no proxy-auth -<data> +<connect> HTTP/1.1 407 Authorization Required to proxy me my dear
Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
Content-Length: 40000
@@ -820,7 +820,7 @@ And you should ignore this data. aaaaaaaaaaaaaaaa And you should ignore this data. aaaaaaaaaaaaaaaa And you should ignore this data. aaaaaaaaaaaaaaaa end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -</data> +</connect> # this is returned when we get a GET! <data2> @@ -835,12 +835,12 @@ daniel </data2> # then this is returned when we get proxy-auth -<data1000> +<connect1000> HTTP/1.1 200 OK swsbounce
Server: no Nice proxy auth sir! -</data1000> +</connect1000> <datacheck> HTTP/1.1 407 Authorization Required to proxy me my dear
@@ -874,7 +874,7 @@ crypto HTTP proxy CONNECT auth Digest, large headers and data </name> <command> -http://test.remote.haxx.se:1060/path/10600002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel +http://test.remote.haxx.se.1060:%HTTPPORT/path/10600002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel </command> </client> @@ -884,17 +884,17 @@ http://test.remote.haxx.se:1060/path/10600002 --proxy http://%HOSTIP:%HTTPPORT - ^User-Agent: curl/.* </strip> <protocol> -CONNECT test.remote.haxx.se:1060 HTTP/1.1
-Host: test.remote.haxx.se:1060
+CONNECT test.remote.haxx.se.1060:%HTTPPORT HTTP/1.1
+Host: test.remote.haxx.se.1060:%HTTPPORT
Proxy-Connection: Keep-Alive
-CONNECT test.remote.haxx.se:1060 HTTP/1.1
-Host: test.remote.haxx.se:1060
-Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se:1060", response="79e394ffcd42b6c771c7582da1fc4498"
+CONNECT test.remote.haxx.se.1060:%HTTPPORT HTTP/1.1
+Host: test.remote.haxx.se.1060:%HTTPPORT
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se.1060:%HTTPPORT", response="e1fbed39c26f4efe284adc0e576ff638"
Proxy-Connection: Keep-Alive
GET /path/10600002 HTTP/1.1
-Host: test.remote.haxx.se:1060
+Host: test.remote.haxx.se.1060:%HTTPPORT
Accept: */*
</protocol> diff --git a/tests/data/test1061 b/tests/data/test1061 index 0fb8c5110..05c3209c4 100644 --- a/tests/data/test1061 +++ b/tests/data/test1061 @@ -15,7 +15,7 @@ HTTP proxy Digest auth <reply> # this is returned first since we get no proxy-auth -<data> +<connect> HTTP/1.1 407 Authorization Required to proxy me my dear
Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
Transfer-Encoding: chunked
@@ -825,7 +825,7 @@ end of 1 KB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0
-</data> +</connect> # this is returned when we get a GET! <data2> @@ -840,12 +840,12 @@ daniel </data2> # then this is returned when we get proxy-auth -<data1000> +<connect1000> HTTP/1.1 200 OK swsbounce
Server: no Nice proxy auth sir! -</data1000> +</connect1000> <datacheck> HTTP/1.1 407 Authorization Required to proxy me my dear
@@ -879,7 +879,7 @@ crypto HTTP proxy CONNECT auth Digest, large headers and chunked data </name> <command> -http://test.remote.haxx.se:1061/path/10610002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel +http://test.remote.haxx.se.1061:%HTTPPORT/path/10610002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel </command> </client> @@ -889,17 +889,17 @@ http://test.remote.haxx.se:1061/path/10610002 --proxy http://%HOSTIP:%HTTPPORT - ^User-Agent: curl/.* </strip> <protocol> -CONNECT test.remote.haxx.se:1061 HTTP/1.1
-Host: test.remote.haxx.se:1061
+CONNECT test.remote.haxx.se.1061:%HTTPPORT HTTP/1.1
+Host: test.remote.haxx.se.1061:%HTTPPORT
Proxy-Connection: Keep-Alive
-CONNECT test.remote.haxx.se:1061 HTTP/1.1
-Host: test.remote.haxx.se:1061
-Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se:1061", response="8e96acf6a6214012183879e28e73b2d3"
+CONNECT test.remote.haxx.se.1061:%HTTPPORT HTTP/1.1
+Host: test.remote.haxx.se.1061:%HTTPPORT
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se.1061:%HTTPPORT", response="4e23449fa93224834299e7282a70472c"
Proxy-Connection: Keep-Alive
GET /path/10610002 HTTP/1.1
-Host: test.remote.haxx.se:1061
+Host: test.remote.haxx.se.1061:%HTTPPORT
Accept: */*
</protocol> diff --git a/tests/data/test1078 b/tests/data/test1078 index cacdf4dd4..a9bb771be 100644 --- a/tests/data/test1078 +++ b/tests/data/test1078 @@ -13,6 +13,12 @@ proxytunnel # # Server-side <reply> +<connect> +HTTP/1.1 200 Mighty fine indeed
+Server: test tunnel 2000
+
+</connect> + <data nocheck="yes"> HTTP/1.0 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
@@ -37,7 +43,7 @@ http-proxy HTTP 1.0 CONNECT with proxytunnel and downgrade GET to HTTP/1.0 </name> <command> ---proxy1.0 %HOSTIP:%PROXYPORT -p http://%HOSTIP:%HTTPPORT/we/want/that/page/1078 http://%HOSTIP:%HTTPPORT/we/want/that/page/1078 +--proxy1.0 %HOSTIP:%PROXYPORT -p http://%HOSTIP.1078:%HTTPPORT/we/want/that/page/1078 http://%HOSTIP.1078:%HTTPPORT/we/want/that/page/1078 </command> </client> @@ -48,23 +54,24 @@ HTTP 1.0 CONNECT with proxytunnel and downgrade GET to HTTP/1.0 ^User-Agent:.* </strip> <proxy> -CONNECT %HOSTIP:%HTTPPORT HTTP/1.0
-Host: %HOSTIP:%HTTPPORT
+CONNECT %HOSTIP.1078:%HTTPPORT HTTP/1.0
+Host: %HOSTIP.1078:%HTTPPORT
Proxy-Connection: Keep-Alive
</proxy> <protocol> GET /we/want/that/page/1078 HTTP/1.1
-Host: %HOSTIP:%HTTPPORT
+Host: %HOSTIP.1078:%HTTPPORT
Accept: */*
GET /we/want/that/page/1078 HTTP/1.0
-Host: %HOSTIP:%HTTPPORT
+Host: %HOSTIP.1078:%HTTPPORT
Accept: */*
</protocol> <stdout> HTTP/1.1 200 Mighty fine indeed
+Server: test tunnel 2000
HTTP/1.0 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
diff --git a/tests/data/test1097 b/tests/data/test1097 index ebb039962..b899810d0 100644 --- a/tests/data/test1097 +++ b/tests/data/test1097 @@ -18,13 +18,15 @@ Content-Length: 27 This is all fine and dandy </data> -<data1001> + +<connect1001> HTTP/1.1 200 We are fine and cool
Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2
Content-Length: 27
This is all fine and dandy -</data1001> +</connect1001> + <datacheck> HTTP/1.1 200 We are fine and cool
Server: Apache/1.3.27 (Dorw1n) PHP/44.1.2
@@ -50,7 +52,7 @@ NTLM HTTP POST using CONNECT with --proxy-ntlm but no auth is required </name> <command> -http://test.a.galaxy.far.far.away:1097/1097 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm -d "dummy=value" -p +http://test.a.galaxy.far.far.away.1097:%HTTPPORT/1097 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm -d "dummy=value" -p </command> </client> @@ -60,15 +62,15 @@ http://test.a.galaxy.far.far.away:1097/1097 --proxy http://%HOSTIP:%HTTPPORT --p ^User-Agent: curl/.* </strip> <protocol> -CONNECT test.a.galaxy.far.far.away:1097 HTTP/1.1
-Host: test.a.galaxy.far.far.away:1097
+CONNECT test.a.galaxy.far.far.away.1097:%HTTPPORT HTTP/1.1
+Host: test.a.galaxy.far.far.away.1097:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
User-Agent: curl/7.19.5-CVS (i686-pc-linux-gnu) libcurl/7.19.5-CVS OpenSSL/0.9.8g zlib/1.2.3.3 c-ares/1.6.1-CVS libidn/1.12 libssh2/1.0.1_CVS
Proxy-Connection: Keep-Alive
POST /1097 HTTP/1.1
User-Agent: curl/7.19.5-CVS (i686-pc-linux-gnu) libcurl/7.19.5-CVS OpenSSL/0.9.8g zlib/1.2.3.3 c-ares/1.6.1-CVS libidn/1.12 libssh2/1.0.1_CVS
-Host: test.a.galaxy.far.far.away:1097
+Host: test.a.galaxy.far.far.away.1097:%HTTPPORT
Accept: */*
Content-Length: 0
Content-Type: application/x-www-form-urlencoded
diff --git a/tests/data/test1316 b/tests/data/test1316 index e65bd5f6a..51f58c268 100644 --- a/tests/data/test1316 +++ b/tests/data/test1316 @@ -12,12 +12,21 @@ HTTP proxy # # Server-side <reply> + +<connect> +HTTP/1.1 200 Mighty fine indeed
+Magic: sure you can FTP me
+
+</connect> + # When doing LIST, we get the default list output hard-coded in the test # FTP server <datacheck> HTTP/1.1 200 Mighty fine indeed
+Magic: sure you can FTP me
HTTP/1.1 200 Mighty fine indeed
+Magic: sure you can FTP me
total 20 drwxr-xr-x 8 98 98 512 Oct 22 13:06 . @@ -36,6 +45,11 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr # # Client-side <client> + +# please send the real CONNECT connect off to the FTP server's port +<connectport> +%FTPPORT +</connectport> <server> ftp http-proxy @@ -44,7 +58,7 @@ http-proxy FTP LIST tunneled through HTTP proxy </name> <command> -ftp://%HOSTIP:%FTPPORT/ -p -x %HOSTIP:%PROXYPORT +ftp://ftp.1316:%FTPPORT/ -p -x %HOSTIP:%PROXYPORT </command> </client> diff --git a/tests/data/test1319 b/tests/data/test1319 index dc46a69a5..7818503bd 100644 --- a/tests/data/test1319 +++ b/tests/data/test1319 @@ -11,6 +11,13 @@ HTTP proxy # # Server-side <reply> + +<connect> +HTTP/1.1 200 Mighty fine indeed
+pop3: sure hit me
+
+</connect> + # When doing LIST, we get the default list output hard-coded in the test # FTP server <data> @@ -25,6 +32,7 @@ body <datacheck> HTTP/1.1 200 Mighty fine indeed
+pop3: sure hit me
From: me@somewhere To: fake@nowhere @@ -47,7 +55,7 @@ http-proxy POP3 fetch tunneled through HTTP proxy </name> <command> -pop3://%HOSTIP:%POP3PORT/1319 -p -x %HOSTIP:%PROXYPORT -u user:secret +pop3://pop.1319:%POP3PORT/1319 -p -x %HOSTIP:%PROXYPORT -u user:secret </command> </client> @@ -65,8 +73,8 @@ RETR 1319 QUIT
</protocol> <proxy> -CONNECT %HOSTIP:%POP3PORT HTTP/1.1
-Host: %HOSTIP:%POP3PORT
+CONNECT pop.1319:%POP3PORT HTTP/1.1
+Host: pop.1319:%POP3PORT
User-Agent: curl/7.24.0-DEV (i686-pc-linux-gnu) libcurl/7.24.0-DEV OpenSSL/1.0.0e zlib/1.2.3.4 c-ares/1.7.6-DEV libidn/1.23 libssh2/1.4.0_DEV librtmp/2.2e
Proxy-Connection: Keep-Alive
diff --git a/tests/data/test1320 b/tests/data/test1320 index f7af40aa1..7ccf67246 100644 --- a/tests/data/test1320 +++ b/tests/data/test1320 @@ -11,6 +11,11 @@ HTTP proxy # # Server-side <reply> +<connect> +HTTP/1.1 200 Mighty fine indeed
+smtp: sure hit me
+
+</connect> </reply> # @@ -30,7 +35,7 @@ To: another body </stdin> <command> -smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 1320@foo --mail-rcpt 1320@foobar.example --mail-from 1320@from -T - -p -x %HOSTIP:%PROXYPORT +smtp://smtp.1320:%SMTPPORT/user --mail-rcpt 1320@foo --mail-rcpt 1320@foobar.example --mail-from 1320@from -T - -p -x %HOSTIP:%PROXYPORT </command> </client> @@ -57,8 +62,8 @@ body .
</upload> <proxy> -CONNECT %HOSTIP:%SMTPPORT HTTP/1.1
-Host: %HOSTIP:%SMTPPORT
+CONNECT smtp.1320:%SMTPPORT HTTP/1.1
+Host: smtp.1320:%SMTPPORT
User-Agent: curl/7.24.0-DEV (i686-pc-linux-gnu) libcurl/7.24.0-DEV OpenSSL/1.0.0e zlib/1.2.3.4 c-ares/1.7.6-DEV libidn/1.23 libssh2/1.4.0_DEV librtmp/2.2e
Proxy-Connection: Keep-Alive
diff --git a/tests/data/test1321 b/tests/data/test1321 index 74f5a1d99..bfa31e00c 100644 --- a/tests/data/test1321 +++ b/tests/data/test1321 @@ -12,6 +12,11 @@ HTTP proxy # # Server-side <reply> +<connect> +HTTP/1.1 200 Mighty fine indeed
+imap: sure hit me
+
+</connect> <data> From: me@somewhere
To: fake@nowhere
@@ -23,6 +28,7 @@ body </data> <datacheck> HTTP/1.1 200 Mighty fine indeed
+imap: sure hit me
From: me@somewhere
To: fake@nowhere
@@ -45,7 +51,7 @@ http-proxy IMAP FETCH tunneled through HTTP proxy </name> <command> -'imap://%HOSTIP:%IMAPPORT/1321/;UID=1' -u user:secret -p -x %HOSTIP:%PROXYPORT +'imap://imap.1321:%IMAPPORT/1321/;UID=1' -u user:secret -p -x %HOSTIP:%PROXYPORT </command> </client> @@ -63,8 +69,8 @@ A004 FETCH 1 BODY[] A005 LOGOUT
</protocol> <proxy> -CONNECT %HOSTIP:%IMAPPORT HTTP/1.1
-Host: %HOSTIP:%IMAPPORT
+CONNECT imap.1321:%IMAPPORT HTTP/1.1
+Host: imap.1321:%IMAPPORT
User-Agent: curl/7.24.0-DEV (i686-pc-linux-gnu) libcurl/7.24.0-DEV OpenSSL/1.0.0e zlib/1.2.3.4 c-ares/1.7.6-DEV libidn/1.23 libssh2/1.4.0_DEV librtmp/2.2e
Proxy-Connection: Keep-Alive
diff --git a/tests/data/test1509 b/tests/data/test1509 new file mode 100644 index 000000000..dd68b05d1 --- /dev/null +++ b/tests/data/test1509 @@ -0,0 +1,88 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +HTTP CONNECT +HTTP proxy +proxytunnel +</keywords> +</info> + +# Server-side +<reply> +<servercmd> +connection-monitor +</servercmd> +<connect> +HTTP/1.1 200 Mighty fine indeed
+Server: the beast that eats naughty clients
+
+</connect> + +<data> +HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" + +</data> +<datacheck> +HTTP/1.1 200 Mighty fine indeed
+Server: the beast that eats naughty clients
+
+HTTP/1.1 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" + +header length is ........: 239 +header length should be..: 239 +</datacheck> +</reply> + +# Client-side +<client> +<server> +http +http-proxy +</server> +# tool is what to use instead of 'curl' +<tool> +lib1509 +</tool> + + <name> +simple multi http:// through proxytunnel with authentication info + </name> + <command> +http://the.old.moo.1509:%HTTPPORT/1509 %HOSTIP:%PROXYPORT +</command> +<file name="log/test1509.txt"> +foo + bar +bar + foo +moo +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<proxy> +CONNECT the.old.moo.1509:%HTTPPORT HTTP/1.1
+Host: the.old.moo.1509:%HTTPPORT
+Proxy-Connection: Keep-Alive
+
+</proxy> +<protocol> +GET /1509 HTTP/1.1
+Host: the.old.moo.1509:%HTTPPORT
+Accept: */*
+
+[DISCONNECT] +</protocol> +</verify> +</testcase> diff --git a/tests/data/test206 b/tests/data/test206 index 9c1e0248d..3ddc1d995 100644 --- a/tests/data/test206 +++ b/tests/data/test206 @@ -14,16 +14,18 @@ HTTP proxy Digest auth <reply> <servercmd> connection-monitor +auth_required </servercmd> + # this is returned first since we get no proxy-auth -<data> +<connect> HTTP/1.1 407 Authorization Required to proxy me my dear
Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
Content-Length: 33
And you should ignore this data. -</data> +</connect> # this is returned when we get a GET! <data2> @@ -38,11 +40,11 @@ daniel </data2> # then this is returned when we get proxy-auth -<data1000> +<connect1000> HTTP/1.1 200 OK swsbounce
Server: no -</data1000> +</connect1000> <datacheck> HTTP/1.1 407 Authorization Required to proxy me my dear
@@ -75,7 +77,7 @@ crypto HTTP proxy CONNECT auth Digest </name> <command> -http://test.remote.haxx.se:206/path/2060002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel +http://test.remote.haxx.se.206:%HTTPPORT/path/2060002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel </command> </client> @@ -85,18 +87,18 @@ http://test.remote.haxx.se:206/path/2060002 --proxy http://%HOSTIP:%HTTPPORT --p ^User-Agent: curl/.* </strip> <protocol> -CONNECT test.remote.haxx.se:206 HTTP/1.1
-Host: test.remote.haxx.se:206
+CONNECT test.remote.haxx.se.206:%HTTPPORT HTTP/1.1
+Host: test.remote.haxx.se.206:%HTTPPORT
Proxy-Connection: Keep-Alive
-CONNECT test.remote.haxx.se:206 HTTP/1.1
-Host: test.remote.haxx.se:206
-Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se:206", response="676e0836f3e1c5b31bf29770ef9d8224"
+CONNECT test.remote.haxx.se.206:%HTTPPORT HTTP/1.1
+Host: test.remote.haxx.se.206:%HTTPPORT
+Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se.206:%HTTPPORT", response="003e36decb4dbf6366b3ecb9b87c24ec"
Proxy-Connection: Keep-Alive
GET /path/2060002 HTTP/1.1
User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
-Host: test.remote.haxx.se:206
+Host: test.remote.haxx.se.206:%HTTPPORT
Accept: */*
[DISCONNECT] diff --git a/tests/data/test209 b/tests/data/test209 index b248faf9f..d8bd8bd24 100644 --- a/tests/data/test209 +++ b/tests/data/test209 @@ -13,21 +13,21 @@ HTTP proxy NTLM auth <reply> # this is returned first since we get no proxy-auth -<data1001> +<connect1001> HTTP/1.1 407 Authorization Required to proxy me my dear
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
And you should ignore this data. -</data1001> +</connect1001> # This is supposed to be returned when the server gets the second # Authorization: NTLM line passed-in from the client -<data1002> +<connect1002> HTTP/1.1 200 Things are fine in proxy land
Server: Microsoft-IIS/5.0
Content-Type: text/html; charset=iso-8859-1
-</data1002> +</connect1002> # this is returned when we get a GET! <data2> @@ -86,7 +86,7 @@ CURL_GETHOSTNAME=curlhost LD_PRELOAD=%PWD/libtest/.libs/libhostname.so </setenv> <command> -http://test.remote.example.com:209/path/2090002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel +http://test.remote.example.com.209:%HTTPPORT/path/2090002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel </command> <precheck> chkhostname curlhost @@ -99,19 +99,19 @@ chkhostname curlhost ^User-Agent: curl/.* </strip> <protocol> -CONNECT test.remote.example.com:209 HTTP/1.1
-Host: test.remote.example.com:209
+CONNECT test.remote.example.com.209:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.209:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
Proxy-Connection: Keep-Alive
-CONNECT test.remote.example.com:209 HTTP/1.1
-Host: test.remote.example.com:209
+CONNECT test.remote.example.com.209:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.209:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
Proxy-Connection: Keep-Alive
GET /path/2090002 HTTP/1.1
User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
-Host: test.remote.example.com:209
+Host: test.remote.example.com.209:%HTTPPORT
Accept: */*
</protocol> diff --git a/tests/data/test213 b/tests/data/test213 index 55b20b0d8..5c14aa875 100644 --- a/tests/data/test213 +++ b/tests/data/test213 @@ -13,21 +13,21 @@ HTTP proxy NTLM auth <reply> # this is returned first since we get no proxy-auth -<data1001> +<connect1001> HTTP/1.1 407 Authorization Required to proxy me my dear
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
And you should ignore this data. -</data1001> +</connect1001> # This is supposed to be returned when the server gets the second # Authorization: NTLM line passed-in from the client -<data1002> +<connect1002> HTTP/1.1 200 Things are fine in proxy land
Server: Microsoft-IIS/5.0
Content-Type: text/html; charset=iso-8859-1
-</data1002> +</connect1002> # this is returned when we get a GET! <data2> @@ -86,7 +86,7 @@ CURL_GETHOSTNAME=curlhost LD_PRELOAD=%PWD/libtest/.libs/libhostname.so </setenv> <command> -http://test.remote.example.com:213/path/2130002 --proxy1.0 http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel -d "postit" +http://test.remote.example.com.213:%HTTPPORT/path/2130002 --proxy1.0 http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel -d "postit" </command> <precheck> chkhostname curlhost @@ -99,19 +99,19 @@ chkhostname curlhost ^User-Agent: curl/.* </strip> <protocol nonewline="yes"> -CONNECT test.remote.example.com:213 HTTP/1.0
-Host: test.remote.example.com:213
+CONNECT test.remote.example.com.213:%HTTPPORT HTTP/1.0
+Host: test.remote.example.com.213:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
Proxy-Connection: Keep-Alive
-CONNECT test.remote.example.com:213 HTTP/1.0
-Host: test.remote.example.com:213
+CONNECT test.remote.example.com.213:%HTTPPORT HTTP/1.0
+Host: test.remote.example.com.213:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
Proxy-Connection: Keep-Alive
POST /path/2130002 HTTP/1.1
User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
-Host: test.remote.example.com:213
+Host: test.remote.example.com.213:%HTTPPORT
Accept: */*
Content-Length: 6
Content-Type: application/x-www-form-urlencoded
diff --git a/tests/data/test217 b/tests/data/test217 index 4b1bed9c9..f10df566b 100644 --- a/tests/data/test217 +++ b/tests/data/test217 @@ -15,11 +15,11 @@ followlocation <reply> # this is returned first since we get no proxy-auth -<data nocheck="yes"> +<connect nocheck="yes"> HTTP/1.1 405 Method Not Allowed swsclose
And you should ignore this data. -</data> +</connect> </reply> @@ -32,7 +32,7 @@ http HTTP proxy CONNECT to proxy returning 405 </name> <command> -http://test.remote.example.com:217/path/2170002 --proxy http://%HOSTIP:%HTTPPORT --proxytunnel -w "%{http_code} %{http_connect}\n" +http://test.remote.example.com.217:%HTTPPORT/path/2170002 --proxy http://%HOSTIP:%HTTPPORT --proxytunnel -w "%{http_code} %{http_connect}\n" </command> </client> @@ -42,8 +42,8 @@ http://test.remote.example.com:217/path/2170002 --proxy http://%HOSTIP:%HTTPPORT ^User-Agent: curl/.* </strip> <protocol> -CONNECT test.remote.example.com:217 HTTP/1.1
-Host: test.remote.example.com:217
+CONNECT test.remote.example.com.217:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.217:%HTTPPORT
Proxy-Connection: Keep-Alive
</protocol> diff --git a/tests/data/test265 b/tests/data/test265 index dfac8bfaf..07de45547 100644 --- a/tests/data/test265 +++ b/tests/data/test265 @@ -13,23 +13,23 @@ HTTP proxy NTLM auth <reply> # this is returned first since we get no proxy-auth -<data1001> +<connect1001> HTTP/1.0 407 Authorization Required to proxy me my dear
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
Content-Length: 1033
And you should ignore this data. QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQz -</data1001> +</connect1001> # This is supposed to be returned when the server gets the second # Authorization: NTLM line passed-in from the client -<data1002> +<connect1002> HTTP/1.1 200 Things are fine in proxy land
Server: Microsoft-IIS/5.0
Content-Type: text/html; charset=iso-8859-1
-</data1002> +</connect1002> # this is returned when we get a GET! <data2> @@ -89,7 +89,7 @@ CURL_GETHOSTNAME=curlhost LD_PRELOAD=%PWD/libtest/.libs/libhostname.so </setenv> <command> -http://test.remote.example.com:265/path/2650002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel -d "postit" +http://test.remote.example.com.265:%HTTPPORT/path/2650002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm --proxytunnel -d "postit" </command> <precheck> chkhostname curlhost @@ -102,19 +102,19 @@ chkhostname curlhost ^User-Agent: curl/.* </strip> <protocol nonewline="yes"> -CONNECT test.remote.example.com:265 HTTP/1.1
-Host: test.remote.example.com:265
+CONNECT test.remote.example.com.265:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.265:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
Proxy-Connection: Keep-Alive
-CONNECT test.remote.example.com:265 HTTP/1.1
-Host: test.remote.example.com:265
+CONNECT test.remote.example.com.265:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.265:%HTTPPORT
Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAAIAAgAdQAAAAAAAAAAAAAABoKBAKAeQjzKtCQ7ubW8S6MN7B59436GAxPu0CVROwwNBsgxML49gcbAXLT/bU+H5wrS9XNpbGx5Y3VybGhvc3Q=
Proxy-Connection: Keep-Alive
POST /path/2650002 HTTP/1.1
User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4
-Host: test.remote.example.com:265
+Host: test.remote.example.com.265:%HTTPPORT
Accept: */*
Content-Length: 6
Content-Type: application/x-www-form-urlencoded
diff --git a/tests/data/test275 b/tests/data/test275 index 713990544..ac54e2594 100644 --- a/tests/data/test275 +++ b/tests/data/test275 @@ -14,6 +14,12 @@ proxytunnel # # Server-side <reply> +<connect> +HTTP/1.1 200 OK
+Connected-fine: sure
+
+</connect> + <data> HTTP/1.1 200 OK Date: Thu, 09 Nov 2010 14:49:00 GMT @@ -24,7 +30,8 @@ Content-Length: 9 contents </data> <datacheck> -HTTP/1.1 200 Mighty fine indeed
+HTTP/1.1 200 OK
+Connected-fine: sure
HTTP/1.1 200 OK Date: Thu, 09 Nov 2010 14:49:00 GMT @@ -47,7 +54,7 @@ http-proxy HTTP CONNECT with proxytunnel getting two URLs from the same host </name> <command> -http://remotesite.com:%HTTPPORT/we/want/that/page/275 -p -x %HOSTIP:%PROXYPORT --user iam:myself --proxy-user youare:yourself http://remotesite.com:%HTTPPORT/we/want/that/page/275 +http://remotesite.com.275:%HTTPPORT/we/want/that/page/275 -p -x %HOSTIP:%PROXYPORT --user iam:myself --proxy-user youare:yourself http://remotesite.com.275:%HTTPPORT/we/want/that/page/275 </command> </client> @@ -58,8 +65,8 @@ http://remotesite.com:%HTTPPORT/we/want/that/page/275 -p -x %HOSTIP:%PROXYPORT - ^User-Agent:.* </strip> <proxy> -CONNECT remotesite.com:%HTTPPORT HTTP/1.1
-Host: remotesite.com:%HTTPPORT
+CONNECT remotesite.com.275:%HTTPPORT HTTP/1.1
+Host: remotesite.com.275:%HTTPPORT
Proxy-Authorization: Basic eW91YXJlOnlvdXJzZWxm
User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
Proxy-Connection: Keep-Alive
@@ -68,12 +75,12 @@ Proxy-Connection: Keep-Alive <protocol> GET /we/want/that/page/275 HTTP/1.1
Authorization: Basic aWFtOm15c2VsZg==
-Host: remotesite.com:%HTTPPORT
+Host: remotesite.com.275:%HTTPPORT
Accept: */*
GET /we/want/that/page/275 HTTP/1.1
Authorization: Basic aWFtOm15c2VsZg==
-Host: remotesite.com:%HTTPPORT
+Host: remotesite.com.275:%HTTPPORT
Accept: */*
</protocol> diff --git a/tests/data/test287 b/tests/data/test287 index 323d3f392..ec4dfeb05 100644 --- a/tests/data/test287 +++ b/tests/data/test287 @@ -11,12 +11,11 @@ proxytunnel # Server-side <reply> -# this is returned first since we get no proxy-auth -<data nocheck="yes"> +<connect nocheck="yes"> HTTP/1.1 405 Method Not Allowed swsclose
And you should ignore this data. -</data> +</connect> </reply> @@ -29,15 +28,15 @@ http HTTP proxy CONNECT with custom User-Agent header </name> <command> -http://test.remote.example.com:287/path/287 -H "User-Agent: looser/2007" --proxy http://%HOSTIP:%HTTPPORT --proxytunnel +http://test.remote.example.com.287:%HTTPPORT/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.example.com:287 HTTP/1.1
-Host: test.remote.example.com:287
+CONNECT test.remote.example.com.287:%HTTPPORT HTTP/1.1
+Host: test.remote.example.com.287:%HTTPPORT
Proxy-Connection: Keep-Alive
User-Agent: looser/2007
diff --git a/tests/data/test302 b/tests/data/test302 index 1223f1c33..7bb162b41 100644 --- a/tests/data/test302 +++ b/tests/data/test302 @@ -9,6 +9,17 @@ FAILURE </keywords> </info> +# Server-side +<reply> + +<connect nocheck="yes"> +HTTP/1.1 405 Method Not Allowed swsclose
+
+And you should ignore this data. +</connect> + +</reply> + # Client-side <client> <features> @@ -21,7 +32,7 @@ https HTTPS GET over HTTP proxy fails </name> <command> --k -U fake:user -x %HOSTIP:%HTTPPORT https://bad.fakeurl-to.test/slash/302 +-k -U fake:user -x %HOSTIP:%HTTPPORT https://bad.fakeurl-to.test:302/slash/302 </command> </client> diff --git a/tests/data/test503 b/tests/data/test503 index 2acfc4a16..ea3148300 100644 --- a/tests/data/test503 +++ b/tests/data/test503 @@ -16,6 +16,10 @@ multi <servercmd> connection-monitor </servercmd> +<connect> +HTTP/1.1 200 Mighty fine indeed
+
+</connect> <data> HTTP/1.1 200 OK swsclose Date: Thu, 09 Nov 2010 14:49:00 GMT @@ -51,7 +55,7 @@ lib503 simple multi http:// through proxytunnel with authentication info </name> <command> -http://%HOSTIP:%HTTPPORT/503 %HOSTIP:%PROXYPORT +http://machine.503:%HTTPPORT/503 %HOSTIP:%PROXYPORT </command> <file name="log/test503.txt"> foo @@ -65,8 +69,8 @@ moo # Verify data after the test has been "shot" <verify> <proxy> -CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
-Host: %HOSTIP:%HTTPPORT
+CONNECT machine.503:%HTTPPORT HTTP/1.1
+Host: machine.503:%HTTPPORT
Proxy-Authorization: Basic dGVzdDppbmc=
Proxy-Connection: Keep-Alive
@@ -74,7 +78,7 @@ Proxy-Connection: Keep-Alive <protocol> GET /503 HTTP/1.1
Authorization: Basic dGVzdDppbmc=
-Host: %HOSTIP:%HTTPPORT
+Host: machine.503:%HTTPPORT
Accept: */*
[DISCONNECT] diff --git a/tests/data/test80 b/tests/data/test80 index 2fa196910..16805cabb 100644 --- a/tests/data/test80 +++ b/tests/data/test80 @@ -24,6 +24,10 @@ Content-Length: 9 contents </data> +<connect> +HTTP/1.1 200 Mighty fine indeed
+
+</connect> <datacheck> HTTP/1.1 200 Mighty fine indeed
@@ -49,7 +53,7 @@ http-proxy HTTP 1.0 CONNECT with proxytunnel and proxy+host Basic authentication </name> <command> -http://%HOSTIP:%HTTPPORT/we/want/that/page/80 -p --proxy1.0 %HOSTIP:%PROXYPORT --user iam:myself --proxy-user youare:yourself +http://test.80:%HTTPPORT/we/want/that/page/80 -p --proxy1.0 %HOSTIP:%PROXYPORT --user iam:myself --proxy-user youare:yourself </command> </client> @@ -60,8 +64,8 @@ http://%HOSTIP:%HTTPPORT/we/want/that/page/80 -p --proxy1.0 %HOSTIP:%PROXYPORT - ^User-Agent:.* </strip> <proxy> -CONNECT %HOSTIP:%HTTPPORT HTTP/1.0
-Host: %HOSTIP:%HTTPPORT
+CONNECT test.80:%HTTPPORT HTTP/1.0
+Host: test.80:%HTTPPORT
Proxy-Authorization: Basic eW91YXJlOnlvdXJzZWxm
User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
Proxy-Connection: Keep-Alive
@@ -71,7 +75,7 @@ Proxy-Connection: Keep-Alive GET /we/want/that/page/80 HTTP/1.1
Authorization: Basic aWFtOm15c2VsZg==
User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
-Host: %HOSTIP:%HTTPPORT
+Host: test.80:%HTTPPORT
Accept: */*
</protocol> diff --git a/tests/data/test83 b/tests/data/test83 index 3015c9ca7..4386c12b9 100644 --- a/tests/data/test83 +++ b/tests/data/test83 @@ -21,6 +21,10 @@ Content-Length: 9 contents </data> +<connect> +HTTP/1.1 200 Mighty fine indeed
+
+</connect> <datacheck> HTTP/1.1 200 Mighty fine indeed
@@ -46,7 +50,7 @@ http-proxy HTTP over proxy-tunnel with site authentication </name> <command> -http://%HOSTIP:%HTTPPORT/we/want/that/page/83 -p -x %HOSTIP:%PROXYPORT --user iam:myself +http://test.83:%HTTPPORT/we/want/that/page/83 -p -x %HOSTIP:%PROXYPORT --user iam:myself </command> </client> @@ -57,9 +61,9 @@ http://%HOSTIP:%HTTPPORT/we/want/that/page/83 -p -x %HOSTIP:%PROXYPORT --user ia ^User-Agent:.* </strip> <proxy> -CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
+CONNECT test.83:%HTTPPORT HTTP/1.1
User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
-Host: %HOSTIP:%HTTPPORT
+Host: test.83:%HTTPPORT
Proxy-Connection: Keep-Alive
</proxy> @@ -67,7 +71,7 @@ Proxy-Connection: Keep-Alive GET /we/want/that/page/83 HTTP/1.1
Authorization: Basic aWFtOm15c2VsZg==
User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
-Host: %HOSTIP:%HTTPPORT
+Host: test.83:%HTTPPORT
Accept: */*
</protocol> diff --git a/tests/data/test94 b/tests/data/test94 index a7bafa695..2f3f4824d 100644 --- a/tests/data/test94 +++ b/tests/data/test94 @@ -11,14 +11,14 @@ FAILURE # # Server-side <reply> -<data nocheck="yes"> +<connect nocheck="yes"> HTTP/1.1 407 Needs proxy authentication Server: test-server/fake swsclose yesyes Proxy-Authenticate: Basic "oh please" Connection: close bing -</data> +</connect> </reply> # diff --git a/tests/data/test95 b/tests/data/test95 index 55b0e6583..1cd88acab 100644 --- a/tests/data/test95 +++ b/tests/data/test95 @@ -21,6 +21,10 @@ Content-Length: 9 contents </data> +<connect> +HTTP/1.1 200 Mighty fine indeed
+
+</connect> <datacheck> HTTP/1.1 200 Mighty fine indeed
@@ -46,7 +50,7 @@ http-proxy HTTP over proxytunnel using POST </name> <command> -http://%HOSTIP:%HTTPPORT/we/want/that/page/95 -p -x %HOSTIP:%PROXYPORT -d "datatopost=ohthatsfunyesyes" +http://test.95:%HTTPPORT/we/want/that/page/95 -p -x %HOSTIP:%PROXYPORT -d "datatopost=ohthatsfunyesyes" </command> </client> @@ -57,16 +61,16 @@ http://%HOSTIP:%HTTPPORT/we/want/that/page/95 -p -x %HOSTIP:%PROXYPORT -d "datat ^User-Agent:.* </strip> <proxy> -CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
+CONNECT test.95:%HTTPPORT HTTP/1.1
User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
-Host: %HOSTIP:%HTTPPORT
+Host: test.95:%HTTPPORT
Proxy-Connection: Keep-Alive
</proxy> <protocol nonewline="yes"> POST /we/want/that/page/95 HTTP/1.1
User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3
-Host: %HOSTIP:%HTTPPORT
+Host: test.95:%HTTPPORT
Accept: */*
Content-Length: 27
Content-Type: application/x-www-form-urlencoded
diff --git a/tests/libtest/Makefile.inc b/tests/libtest/Makefile.inc index b880e4ca4..4cc2f80d2 100644 --- a/tests/libtest/Makefile.inc +++ b/tests/libtest/Makefile.inc @@ -21,6 +21,7 @@ noinst_PROGRAMS = chkhostname libauthretry libntlmconnect \ lib571 lib572 lib573 lib574 lib575 lib576 lib578 lib579 lib582 \ lib583 lib585 lib586 lib587 lib590 lib591 lib597 lib598 lib599 \ lib1500 lib1501 lib1502 lib1503 lib1504 lib1505 lib1506 lib1507 lib1508 \ + lib1509 \ lib1900 \ lib2033 @@ -326,6 +327,10 @@ lib1508_SOURCES = lib1508.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1508_LDADD = $(TESTUTIL_LIBS) lib1508_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1508 +lib1509_SOURCES = lib1509.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) +lib1509_LDADD = $(TESTUTIL_LIBS) +lib1509_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1509 + lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib1900_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/tests/libtest/lib1509.c b/tests/libtest/lib1509.c new file mode 100644 index 000000000..5087363d7 --- /dev/null +++ b/tests/libtest/lib1509.c @@ -0,0 +1,81 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +#include "test.h" + +#include "testutil.h" +#include "warnless.h" +#include "memdebug.h" + +#define VERBOSE 0 + +size_t WriteOutput(void *ptr, size_t size, size_t nmemb, void *stream); +size_t WriteHeader(void *ptr, size_t size, size_t nmemb, void *stream); + +long realHeaderSize = 0; + +int test(char *URL) +{ + CURL *curl; + long headerSize; + CURLcode res=CURLE_OK; + + curl_global_init(CURL_GLOBAL_ALL); + curl = curl_easy_init(); + + easy_setopt(curl, CURLOPT_PROXY, libtest_arg2); /* set in first.c */ + + easy_setopt(curl, CURLOPT_WRITEFUNCTION, *WriteOutput); + easy_setopt(curl, CURLOPT_HEADERFUNCTION, *WriteHeader); + + easy_setopt(curl, CURLOPT_HEADER, 1L); + easy_setopt(curl, CURLOPT_VERBOSE, 1L); + easy_setopt(curl, CURLOPT_URL, URL); + easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L); + res = curl_easy_perform(curl); + + curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &headerSize); + printf("header length is ........: %lu\n", headerSize); + printf("header length should be..: %lu\n", realHeaderSize); + +test_cleanup: + + /* undocumented cleanup sequence - type UA */ + + curl_easy_cleanup(curl); + curl_global_cleanup(); + return (int)res; +} + +size_t WriteOutput(void *ptr, size_t size, size_t nmemb, void *stream) +{ + fwrite(ptr, size, nmemb, stream); + return nmemb * size; +} + +size_t WriteHeader(void *ptr, size_t size, size_t nmemb, void *stream) +{ + (void)ptr; + (void)stream; + realHeaderSize += size * nmemb; + + return nmemb * size; +} diff --git a/tests/server/sws.c b/tests/server/sws.c index aef55ea96..7e1c44012 100644 --- a/tests/server/sws.c +++ b/tests/server/sws.c @@ -88,6 +88,8 @@ static bool prevbounce=FALSE; /* instructs the server to increase the part struct httprequest { char reqbuf[REQBUFSIZ]; /* buffer area for the incoming request */ + bool connect_request; /* if a CONNECT */ + unsigned short connect_port; /* the port number CONNECT used */ size_t checkindex; /* where to start checking of the request */ size_t offset; /* size of the incoming request */ long testno; /* test number found in the request */ @@ -111,7 +113,6 @@ struct httprequest { int prot_version; /* HTTP version * 10 */ bool pipelining; /* true if request is pipelined */ int callcount; /* times ProcessRequest() gets called */ - unsigned short connect_port; /* the port number CONNECT used */ bool connmon; /* monitor the state of the connection, log disconnects */ int done_processing; }; @@ -166,11 +167,8 @@ const char *serverlogfile = DEFAULT_LOGFILE; #define END_OF_HEADERS "\r\n\r\n" enum { - DOCNUMBER_NOTHING = -7, - DOCNUMBER_QUIT = -6, - DOCNUMBER_BADCONNECT = -5, - DOCNUMBER_INTERNAL= -4, - DOCNUMBER_CONNECT = -3, + DOCNUMBER_NOTHING = -4, + DOCNUMBER_QUIT = -3, DOCNUMBER_WERULEZ = -2, DOCNUMBER_404 = -1 }; @@ -181,14 +179,6 @@ static const char *end_of_headers = END_OF_HEADERS; static const char *docquit = "HTTP/1.1 200 Goodbye" END_OF_HEADERS; -/* sent as reply to a CONNECT */ -static const char *docconnect = -"HTTP/1.1 200 Mighty fine indeed" END_OF_HEADERS; - -/* sent as reply to a "bad" CONNECT */ -static const char *docbadconnect = -"HTTP/1.1 501 Forbidden you fool" END_OF_HEADERS; - /* send back this on 404 file not found */ static const char *doc404 = "HTTP/1.1 404 Not Found\r\n" "Server: " SWSVERSION "\r\n" @@ -342,8 +332,8 @@ static int parse_servercmd(struct httprequest *req) if(!stream) { error = errno; logmsg("fopen() failed with error: %d %s", error, strerror(error)); - logmsg("Error opening file: %s", filename); - logmsg("Couldn't open test file %ld", req->testno); + logmsg(" [1] Error opening file: %s", filename); + logmsg(" Couldn't open test file %ld", req->testno); req->open = FALSE; /* closes connection */ return 1; /* done */ } @@ -533,6 +523,8 @@ static int ProcessRequest(struct httprequest *req) doc, prot_major, prot_minor); logmsg("%s", logbuf); + req->connect_request = TRUE; + if(req->prot_version == 10) req->open = FALSE; /* HTTP 1.0 closes connection by default */ @@ -557,55 +549,45 @@ static int ProcessRequest(struct httprequest *req) else req->connect_port = curlx_ultous(ulnum); } - - if(!strncmp(doc, "bad", 3)) - /* if the host name starts with bad, we fake an error here */ - req->testno = DOCNUMBER_BADCONNECT; - else if(!strncmp(doc, "test", 4)) - /* if the host name starts with test, the port number used in the - CONNECT line will be used as test number! */ - req->testno = req->connect_port?req->connect_port:DOCNUMBER_CONNECT; - else - req->testno = req->connect_port?DOCNUMBER_CONNECT:DOCNUMBER_BADCONNECT; - - /* find and parse <servercmd> for this test */ - parse_servercmd(req); } - else { - /* there was no trailing slash and it wasn't CONNECT, then we get the - the number off the last dot instead, IE we consider the TLD to be - the test number. Test 123 can then be written as - "example.com.123". */ + } - /* find the last dot */ - ptr = strrchr(doc, '.'); + if(req->testno == DOCNUMBER_NOTHING) { + /* Still no test case number. Try to get the the number off the last dot + instead, IE we consider the TLD to be the test number. Test 123 can + then be written as "example.com.123". */ - /* get the number after it */ - if(ptr) { - ptr++; /* skip the dot */ + /* find the last dot */ + ptr = strrchr(doc, '.'); - req->testno = strtol(ptr, &ptr, 10); + /* get the number after it */ + if(ptr) { + ptr++; /* skip the dot */ - if(req->testno > 10000) { - req->partno = req->testno % 10000; - req->testno /= 10000; - } - else - req->partno = 0; + req->testno = strtol(ptr, &ptr, 10); - sprintf(logbuf, "Requested test number %ld part %ld (from host name)", - req->testno, req->partno); - logmsg("%s", logbuf); + if(req->testno > 10000) { + req->partno = req->testno % 10000; + req->testno /= 10000; - } + logmsg("found test %d in requested host name", req->testno); - if(!req->testno) { - logmsg("Did not find test number in PATH"); - req->testno = DOCNUMBER_404; } else - parse_servercmd(req); + req->partno = 0; + + sprintf(logbuf, "Requested test number %ld part %ld (from host name)", + req->testno, req->partno); + logmsg("%s", logbuf); + } + + if(!req->testno) { + logmsg("Did not find test number in PATH"); + req->testno = DOCNUMBER_404; + } + else + parse_servercmd(req); } } else if((req->offset >= 3) && (req->testno == DOCNUMBER_NOTHING)) { @@ -822,7 +804,7 @@ static void storerequest(char *reqbuf, size_t totalsize) dump = fopen(dumpfile, "ab"); } while ((dump == NULL) && ((error = errno) == EINTR)); if (dump == NULL) { - logmsg("Error opening file %s error: %d %s", + logmsg("[2] Error opening file %s error: %d %s", dumpfile, error, strerror(error)); logmsg("Failed to write request input "); return; @@ -868,6 +850,7 @@ static void init_httprequest(struct httprequest *req) } req->testno = DOCNUMBER_NOTHING; req->partno = 0; + req->connect_request = FALSE; req->open = TRUE; req->auth_req = FALSE; req->auth = FALSE; @@ -1007,10 +990,6 @@ static int send_doc(curl_socket_t sock, struct httprequest *req) const char *responsedump = is_proxy?RESPONSE_PROXY_DUMP:RESPONSE_DUMP; static char weare[256]; - char partbuf[80]="data"; - - logmsg("Send response test%ld section <data%ld>", req->testno, req->partno); - switch(req->rcmd) { default: case RCMD_NORMALREQ: @@ -1056,17 +1035,6 @@ static int send_doc(curl_socket_t sock, struct httprequest *req) msglen, msgbuf); buffer = weare; break; - case DOCNUMBER_INTERNAL: - logmsg("Bailing out due to internal error"); - return -1; - case DOCNUMBER_CONNECT: - logmsg("Replying to CONNECT"); - buffer = docconnect; - break; - case DOCNUMBER_BADCONNECT: - logmsg("Replying to a bad CONNECT"); - buffer = docbadconnect; - break; case DOCNUMBER_404: default: logmsg("Replying to with a 404"); @@ -1077,17 +1045,25 @@ static int send_doc(curl_socket_t sock, struct httprequest *req) count = strlen(buffer); } else { + char partbuf[80]; char *filename = test2file(req->testno); - if(0 != req->partno) - sprintf(partbuf, "data%ld", req->partno); + /* select the <data> tag for "normal" requests and the <connect> one + for CONNECT requests (within the <reply> section) */ + const char *section= req->connect_request?"connect":"data"; + + if(req->partno) + sprintf(partbuf, "%s%ld", section, req->partno); + else + sprintf(partbuf, "%s", section); + + logmsg("Send response test%ld section <%s>", req->testno, partbuf); stream=fopen(filename, "rb"); if(!stream) { error = errno; logmsg("fopen() failed with error: %d %s", error, strerror(error)); - logmsg("Error opening file: %s", filename); - logmsg("Couldn't open test file"); + logmsg(" [3] Error opening file: %s", filename); return 0; } else { @@ -1111,8 +1087,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req) if(!stream) { error = errno; logmsg("fopen() failed with error: %d %s", error, strerror(error)); - logmsg("Error opening file: %s", filename); - logmsg("Couldn't open test file"); + logmsg(" [4] Error opening file: %s", filename); if(ptr) free(ptr); return 0; @@ -1156,7 +1131,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req) if(!dump) { error = errno; logmsg("fopen() failed with error: %d %s", error, strerror(error)); - logmsg("Error opening file: %s", responsedump); + logmsg(" [5] Error opening file: %s", responsedump); if(ptr) free(ptr); if(cmd) @@ -1389,8 +1364,8 @@ static curl_socket_t connect_to(const char *ipaddr, unsigned short port) static void http_connect(curl_socket_t *infdp, curl_socket_t rootfd, - struct httprequest *req, - const char *ipaddr) + const char *ipaddr, + unsigned short ipport) { curl_socket_t serverfd[2] = {CURL_SOCKET_BAD, CURL_SOCKET_BAD}; curl_socket_t clientfd[2] = {CURL_SOCKET_BAD, CURL_SOCKET_BAD}; @@ -1422,7 +1397,7 @@ static void http_connect(curl_socket_t *infdp, if(got_exit_signal) goto http_connect_cleanup; - serverfd[CTRL] = connect_to(ipaddr, req->connect_port); + serverfd[CTRL] = connect_to(ipaddr, ipport); if(serverfd[CTRL] == CURL_SOCKET_BAD) goto http_connect_cleanup; @@ -1539,7 +1514,7 @@ static void http_connect(curl_socket_t *infdp, /* skip this and close the socket if err < 0 */ if(err >= 0) { err = send_doc(datafd, &req2); - if(!err && (req2.testno == DOCNUMBER_CONNECT)) { + if(!err && req2.connect_request) { /* sleep to prevent triggering libcurl known bug #39. */ for(loop = 2; (loop > 0) && !got_exit_signal; loop--) wait_ms(250); @@ -1847,7 +1822,8 @@ static curl_socket_t accept_connection(curl_socket_t sock) /* returns 1 if the connection should be serviced again immediately, 0 if there is no data waiting, or < 0 if it should be closed */ static int service_connection(curl_socket_t msgsock, struct httprequest *req, - curl_socket_t listensock, const char *hostport) + curl_socket_t listensock, + const char *connecthost) { if(got_exit_signal) return -1; @@ -1878,17 +1854,7 @@ static int service_connection(curl_socket_t msgsock, struct httprequest *req, if(got_exit_signal) return -1; - if(DOCNUMBER_CONNECT == req->testno) { - /* a CONNECT request, setup and talk the tunnel */ - if(!is_proxy) { - logmsg("received CONNECT but isn't running as proxy! EXIT"); - } - else - http_connect(&msgsock, listensock, req, hostport); - return -1; - } - - if((req->testno < 0) && (req->testno != DOCNUMBER_CONNECT)) { + if(req->testno < 0) { logmsg("special request received, no persistency"); return -1; } @@ -1897,6 +1863,18 @@ static int service_connection(curl_socket_t msgsock, struct httprequest *req, return -1; } + if(req->connect_request) { + /* a CONNECT request, setup and talk the tunnel */ + if(!is_proxy) { + logmsg("received CONNECT but isn't running as proxy!"); + return 1; + } + else { + http_connect(&msgsock, listensock, connecthost, req->connect_port); + return -1; + } + } + /* if we got a CONNECT, loop and get another request as well! */ if(req->open) { @@ -1904,9 +1882,6 @@ static int service_connection(curl_socket_t msgsock, struct httprequest *req, return 1; } - if(req->testno == DOCNUMBER_CONNECT) - return 1; - return -1; } @@ -1923,7 +1898,9 @@ int main(int argc, char *argv[]) int error; int arg=1; long pid; - const char *hostport = "127.0.0.1"; + const char *connecthost = "127.0.0.1"; + + /* a default CONNECT port is basically pointless but still ... */ size_t socket_idx; memset(&req, 0, sizeof(req)); @@ -1993,14 +1970,15 @@ int main(int argc, char *argv[]) } } else if(!strcmp("--connect", argv[arg])) { - /* store the connect host, but also use this as a hint that we - run as a proxy and do a few different internal choices */ + /* The connect host IP number that the proxy will connect to no matter + what the client asks for, but also use this as a hint that we run as + a proxy and do a few different internal choices */ arg++; if(argc>arg) { - hostport = argv[arg]; + connecthost = argv[arg]; arg++; is_proxy = TRUE; - logmsg("Run as proxy, CONNECT to %s", hostport); + logmsg("Run as proxy, CONNECT to host %s", connecthost); } } else { @@ -2184,7 +2162,8 @@ int main(int argc, char *argv[]) /* Service this connection until it has nothing available */ do { - rc = service_connection(all_sockets[socket_idx], &req, sock, hostport); + rc = service_connection(all_sockets[socket_idx], &req, sock, + connecthost); if(got_exit_signal) goto sws_cleanup; |