diff options
| -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; +} + | 
