diff options
author | Daniel Stenberg <daniel@haxx.se> | 2005-04-18 19:41:04 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2005-04-18 19:41:04 +0000 |
commit | 63d109f7be8ddd027c86355dd09d02189b731a46 (patch) | |
tree | 42ee3aeb062c4a2de48fa534b6e2ff19aeea902a | |
parent | c904b6b5bf6c6e980480e63cd066dc2ae2aace23 (diff) |
Olivier reported that even though he used CURLOPT_PORT, libcurl clearly still
used the default port. He was right. I fixed the problem and added the test
cases 521, 522 and 523 to verify the fix.
-rw-r--r-- | CHANGES | 4 | ||||
-rw-r--r-- | lib/url.c | 47 | ||||
-rw-r--r-- | tests/data/Makefile.am | 2 | ||||
-rw-r--r-- | tests/data/test521 | 59 | ||||
-rw-r--r-- | tests/data/test522 | 59 | ||||
-rw-r--r-- | tests/libtest/Makefile.am | 10 | ||||
-rw-r--r-- | tests/libtest/lib521.c | 16 | ||||
-rw-r--r-- | tests/libtest/lib523.c | 17 |
8 files changed, 197 insertions, 17 deletions
@@ -7,6 +7,10 @@ Changelog Daniel (18 April 2005) +- Olivier reported that even though he used CURLOPT_PORT, libcurl clearly + still used the default port. He was right. I fixed the problem and added the + test cases 521, 522 and 523 to verify the fix. + - Toshiyuki Maezawa reported that when doing a POST with a read callback, libcurl didn't properly send an Expect: 100-continue header. It does now. @@ -2707,8 +2707,7 @@ static CURLcode CreateConnection(struct SessionHandle *data, if (strequal(conn->protostr, "HTTP")) { #ifndef CURL_DISABLE_HTTP - conn->port = (data->set.use_port && data->state.allow_port)? - data->set.use_port:PORT_HTTP; + conn->port = PORT_HTTP; conn->remote_port = PORT_HTTP; conn->protocol |= PROT_HTTP; conn->curl_do = Curl_http; @@ -2724,8 +2723,7 @@ static CURLcode CreateConnection(struct SessionHandle *data, else if (strequal(conn->protostr, "HTTPS")) { #if defined(USE_SSL) && !defined(CURL_DISABLE_HTTP) - conn->port = (data->set.use_port && data->state.allow_port)? - data->set.use_port:PORT_HTTPS; + conn->port = PORT_HTTPS; conn->remote_port = PORT_HTTPS; conn->protocol |= PROT_HTTP|PROT_HTTPS|PROT_SSL; @@ -2742,8 +2740,7 @@ static CURLcode CreateConnection(struct SessionHandle *data, } else if (strequal(conn->protostr, "GOPHER")) { #ifndef CURL_DISABLE_GOPHER - conn->port = (data->set.use_port && data->state.allow_port)? - data->set.use_port:PORT_GOPHER; + conn->port = PORT_GOPHER; conn->remote_port = PORT_GOPHER; /* Skip /<item-type>/ in path if present */ if (isdigit((int)conn->path[1])) { @@ -2779,8 +2776,7 @@ static CURLcode CreateConnection(struct SessionHandle *data, #endif /* !USE_SSL */ } - conn->port = (data->set.use_port && data->state.allow_port)? - data->set.use_port:port; + conn->port = port; conn->remote_port = port; conn->protocol |= PROT_FTP; @@ -2852,8 +2848,7 @@ static CURLcode CreateConnection(struct SessionHandle *data, /* telnet testing factory */ conn->protocol |= PROT_TELNET; - conn->port = (data->set.use_port && data->state.allow_port)? - data->set.use_port: PORT_TELNET; + conn->port = PORT_TELNET; conn->remote_port = PORT_TELNET; conn->curl_do = Curl_telnet; conn->curl_done = Curl_telnet_done; @@ -2865,8 +2860,7 @@ static CURLcode CreateConnection(struct SessionHandle *data, else if (strequal(conn->protostr, "DICT")) { #ifndef CURL_DISABLE_DICT conn->protocol |= PROT_DICT; - conn->port = (data->set.use_port && data->state.allow_port)? - data->set.use_port:PORT_DICT; + conn->port = PORT_DICT; conn->remote_port = PORT_DICT; conn->curl_do = Curl_dict; conn->curl_done = NULL; /* no DICT-specific done */ @@ -2878,8 +2872,7 @@ static CURLcode CreateConnection(struct SessionHandle *data, else if (strequal(conn->protostr, "LDAP")) { #ifndef CURL_DISABLE_LDAP conn->protocol |= PROT_LDAP; - conn->port = (data->set.use_port && data->state.allow_port)? - data->set.use_port:PORT_LDAP; + conn->port = PORT_LDAP; conn->remote_port = PORT_LDAP; conn->curl_do = Curl_ldap; conn->curl_done = NULL; /* no LDAP-specific done */ @@ -3092,7 +3085,31 @@ static CURLcode CreateConnection(struct SessionHandle *data, else tmp = strrchr(conn->host.name, ':'); - if (tmp) { + if(data->set.use_port && data->state.allow_port) { + /* if set, we use this and ignore the port possibly given in the URL */ + conn->remote_port = data->set.use_port; + if(tmp) + *tmp = '\0'; /* cut off the name there anyway - if there was a port + number - since the port number is to be ignored! */ + if(conn->bits.httpproxy) { + /* we need to create new URL with the new port number */ + char *url; + + url = aprintf("http://%s:%d%s", conn->host.name, conn->remote_port, + conn->path); + if(!url) + return CURLE_OUT_OF_MEMORY; + + if(data->change.url_alloc) + free(data->change.url); + + data->change.url = url; + data->change.url_alloc = TRUE; + } + } + else if (tmp) { + /* no CURLOPT_PORT given, extract the one from the URL */ + char *rest; unsigned long port; diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index a1e455efa..0826e2894 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -34,7 +34,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test199 test225 test226 test227 test230 test231 test232 test228 \ test229 test233 test234 test235 test236 test520 test237 test238 \ test239 test243 test245 test246 test247 test248 test249 test250 \ - test251 test252 test253 test254 test255 + test251 test252 test253 test254 test255 test521 test522 test523 # The following tests have been removed from the dist since they no longer # work. We need to fix the test suite's FTPS server first, then bring them diff --git a/tests/data/test521 b/tests/data/test521 new file mode 100644 index 000000000..b3aad9646 --- /dev/null +++ b/tests/data/test521 @@ -0,0 +1,59 @@ +<info> +<keywords> +FTP +PASV +CURLOPT_PORT +</keywords> +</info> +# +# Server-side +<reply> +<data> +total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</data> +</reply> + +# +# Client-side +<client> +<server> +ftp +</server> +<tool> +lib521 +</tool> + <name> +FTP dir list PASV with CURLOPT_PORT + </name> + <command> +ftp://%HOSTIP/520/ %FTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +filter off really nothing +</strip> +<protocol> +USER xxx
+PASS yyy
+PWD
+CWD 520
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol> +</verify> diff --git a/tests/data/test522 b/tests/data/test522 new file mode 100644 index 000000000..ceff5ecb8 --- /dev/null +++ b/tests/data/test522 @@ -0,0 +1,59 @@ +<info> +<keywords> +HTTP +HTTP GET +CURLOPT_PORT +</keywords> +</info> + +# +# Server-side +<reply> +<data nocheck=1> +HTTP/1.1 200 OK +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" +Accept-Ranges: bytes +Content-Length: 6 + +hello +</data> +</reply> + +# +# Client-side +<client> +<server> +http +</server> +<tool> +lib521 +</tool> + <name> +HTTP GET with CURLOPT_PORT + </name> + <command> +http://%HOSTIP/522 %HTTPPORT +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /522 HTTP/1.1
+Authorization: Basic eHh4Onl5eQ==
+Host: 127.0.0.1:%HTTPPORT
+Pragma: no-cache
+Accept: */*
+
+</protocol> +<stdout> +hello +</stdout> +</verify> diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am index acdeb5501..ccbe2aa16 100644 --- a/tests/libtest/Makefile.am +++ b/tests/libtest/Makefile.am @@ -40,7 +40,7 @@ SUPPORTFILES = first.c test.h # These are all libcurl test programs noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \ lib508 lib509 lib510 lib511 lib512 lib513 lib514 lib515 lib516 lib517 \ - lib518 lib519 lib520 + lib518 lib519 lib520 lib521 lib523 lib500_SOURCES = lib500.c $(SUPPORTFILES) lib500_LDADD = $(LIBDIR)/libcurl.la @@ -125,3 +125,11 @@ lib519_DEPENDENCIES = $(LIBDIR)/libcurl.la lib520_SOURCES = lib520.c $(SUPPORTFILES) lib520_LDADD = $(LIBDIR)/libcurl.la lib520_DEPENDENCIES = $(LIBDIR)/libcurl.la + +lib521_SOURCES = lib521.c $(SUPPORTFILES) +lib521_LDADD = $(LIBDIR)/libcurl.la +lib521_DEPENDENCIES = $(LIBDIR)/libcurl.la + +lib523_SOURCES = lib523.c $(SUPPORTFILES) +lib523_LDADD = $(LIBDIR)/libcurl.la +lib523_DEPENDENCIES = $(LIBDIR)/libcurl.la diff --git a/tests/libtest/lib521.c b/tests/libtest/lib521.c new file mode 100644 index 000000000..96630f303 --- /dev/null +++ b/tests/libtest/lib521.c @@ -0,0 +1,16 @@ +#include "test.h" + +int test(char *URL) +{ + CURLcode res; + CURL *curl = curl_easy_init(); + curl_easy_setopt(curl, CURLOPT_URL, URL); + curl_easy_setopt(curl, CURLOPT_PORT, atoi(arg2)); + curl_easy_setopt(curl, CURLOPT_USERPWD, "xxx:yyy"); + curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE); + + res = curl_easy_perform(curl); + curl_easy_cleanup(curl); + return (int)res; +} + diff --git a/tests/libtest/lib523.c b/tests/libtest/lib523.c new file mode 100644 index 000000000..d0a41c5f5 --- /dev/null +++ b/tests/libtest/lib523.c @@ -0,0 +1,17 @@ +#include "test.h" + +int test(char *URL) +{ + CURLcode res; + CURL *curl = curl_easy_init(); + curl_easy_setopt(curl, CURLOPT_PROXY, arg2); + curl_easy_setopt(curl, CURLOPT_URL, URL); + curl_easy_setopt(curl, CURLOPT_PORT, 19999); + curl_easy_setopt(curl, CURLOPT_USERPWD, "xxx:yyy"); + curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE); + + res = curl_easy_perform(curl); + curl_easy_cleanup(curl); + return (int)res; +} + |