Commit 63d109f7 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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.
parent c904b6b5
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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.

+32 −15
Original line number Diff line number Diff line
@@ -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;

+1 −1
Original line number Diff line number Diff line
@@ -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

tests/data/test521

0 → 100644
+59 −0
Original line number Diff line number Diff line
<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>

tests/data/test522

0 → 100644
+59 −0
Original line number Diff line number Diff line
<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>
Loading