mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
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.
This commit is contained in:
parent
c904b6b5bf
commit
63d109f7be
4
CHANGES
4
CHANGES
@ -7,6 +7,10 @@
|
|||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
Daniel (18 April 2005)
|
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,
|
- 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.
|
libcurl didn't properly send an Expect: 100-continue header. It does now.
|
||||||
|
|
||||||
|
47
lib/url.c
47
lib/url.c
@ -2707,8 +2707,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
|
|
||||||
if (strequal(conn->protostr, "HTTP")) {
|
if (strequal(conn->protostr, "HTTP")) {
|
||||||
#ifndef CURL_DISABLE_HTTP
|
#ifndef CURL_DISABLE_HTTP
|
||||||
conn->port = (data->set.use_port && data->state.allow_port)?
|
conn->port = PORT_HTTP;
|
||||||
data->set.use_port:PORT_HTTP;
|
|
||||||
conn->remote_port = PORT_HTTP;
|
conn->remote_port = PORT_HTTP;
|
||||||
conn->protocol |= PROT_HTTP;
|
conn->protocol |= PROT_HTTP;
|
||||||
conn->curl_do = Curl_http;
|
conn->curl_do = Curl_http;
|
||||||
@ -2724,8 +2723,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
else if (strequal(conn->protostr, "HTTPS")) {
|
else if (strequal(conn->protostr, "HTTPS")) {
|
||||||
#if defined(USE_SSL) && !defined(CURL_DISABLE_HTTP)
|
#if defined(USE_SSL) && !defined(CURL_DISABLE_HTTP)
|
||||||
|
|
||||||
conn->port = (data->set.use_port && data->state.allow_port)?
|
conn->port = PORT_HTTPS;
|
||||||
data->set.use_port:PORT_HTTPS;
|
|
||||||
conn->remote_port = PORT_HTTPS;
|
conn->remote_port = PORT_HTTPS;
|
||||||
conn->protocol |= PROT_HTTP|PROT_HTTPS|PROT_SSL;
|
conn->protocol |= PROT_HTTP|PROT_HTTPS|PROT_SSL;
|
||||||
|
|
||||||
@ -2742,8 +2740,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
}
|
}
|
||||||
else if (strequal(conn->protostr, "GOPHER")) {
|
else if (strequal(conn->protostr, "GOPHER")) {
|
||||||
#ifndef CURL_DISABLE_GOPHER
|
#ifndef CURL_DISABLE_GOPHER
|
||||||
conn->port = (data->set.use_port && data->state.allow_port)?
|
conn->port = PORT_GOPHER;
|
||||||
data->set.use_port:PORT_GOPHER;
|
|
||||||
conn->remote_port = PORT_GOPHER;
|
conn->remote_port = PORT_GOPHER;
|
||||||
/* Skip /<item-type>/ in path if present */
|
/* Skip /<item-type>/ in path if present */
|
||||||
if (isdigit((int)conn->path[1])) {
|
if (isdigit((int)conn->path[1])) {
|
||||||
@ -2779,8 +2776,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
#endif /* !USE_SSL */
|
#endif /* !USE_SSL */
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->port = (data->set.use_port && data->state.allow_port)?
|
conn->port = port;
|
||||||
data->set.use_port:port;
|
|
||||||
conn->remote_port = port;
|
conn->remote_port = port;
|
||||||
conn->protocol |= PROT_FTP;
|
conn->protocol |= PROT_FTP;
|
||||||
|
|
||||||
@ -2852,8 +2848,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
/* telnet testing factory */
|
/* telnet testing factory */
|
||||||
conn->protocol |= PROT_TELNET;
|
conn->protocol |= PROT_TELNET;
|
||||||
|
|
||||||
conn->port = (data->set.use_port && data->state.allow_port)?
|
conn->port = PORT_TELNET;
|
||||||
data->set.use_port: PORT_TELNET;
|
|
||||||
conn->remote_port = PORT_TELNET;
|
conn->remote_port = PORT_TELNET;
|
||||||
conn->curl_do = Curl_telnet;
|
conn->curl_do = Curl_telnet;
|
||||||
conn->curl_done = Curl_telnet_done;
|
conn->curl_done = Curl_telnet_done;
|
||||||
@ -2865,8 +2860,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
else if (strequal(conn->protostr, "DICT")) {
|
else if (strequal(conn->protostr, "DICT")) {
|
||||||
#ifndef CURL_DISABLE_DICT
|
#ifndef CURL_DISABLE_DICT
|
||||||
conn->protocol |= PROT_DICT;
|
conn->protocol |= PROT_DICT;
|
||||||
conn->port = (data->set.use_port && data->state.allow_port)?
|
conn->port = PORT_DICT;
|
||||||
data->set.use_port:PORT_DICT;
|
|
||||||
conn->remote_port = PORT_DICT;
|
conn->remote_port = PORT_DICT;
|
||||||
conn->curl_do = Curl_dict;
|
conn->curl_do = Curl_dict;
|
||||||
conn->curl_done = NULL; /* no DICT-specific done */
|
conn->curl_done = NULL; /* no DICT-specific done */
|
||||||
@ -2878,8 +2872,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
else if (strequal(conn->protostr, "LDAP")) {
|
else if (strequal(conn->protostr, "LDAP")) {
|
||||||
#ifndef CURL_DISABLE_LDAP
|
#ifndef CURL_DISABLE_LDAP
|
||||||
conn->protocol |= PROT_LDAP;
|
conn->protocol |= PROT_LDAP;
|
||||||
conn->port = (data->set.use_port && data->state.allow_port)?
|
conn->port = PORT_LDAP;
|
||||||
data->set.use_port:PORT_LDAP;
|
|
||||||
conn->remote_port = PORT_LDAP;
|
conn->remote_port = PORT_LDAP;
|
||||||
conn->curl_do = Curl_ldap;
|
conn->curl_do = Curl_ldap;
|
||||||
conn->curl_done = NULL; /* no LDAP-specific done */
|
conn->curl_done = NULL; /* no LDAP-specific done */
|
||||||
@ -3092,7 +3085,31 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
else
|
else
|
||||||
tmp = strrchr(conn->host.name, ':');
|
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;
|
char *rest;
|
||||||
unsigned long port;
|
unsigned long port;
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
|
|||||||
test199 test225 test226 test227 test230 test231 test232 test228 \
|
test199 test225 test226 test227 test230 test231 test232 test228 \
|
||||||
test229 test233 test234 test235 test236 test520 test237 test238 \
|
test229 test233 test234 test235 test236 test520 test237 test238 \
|
||||||
test239 test243 test245 test246 test247 test248 test249 test250 \
|
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
|
# 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
|
# work. We need to fix the test suite's FTPS server first, then bring them
|
||||||
|
59
tests/data/test521
Normal file
59
tests/data/test521
Normal file
@ -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>
|
59
tests/data/test522
Normal file
59
tests/data/test522
Normal file
@ -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>
|
@ -40,7 +40,7 @@ SUPPORTFILES = first.c test.h
|
|||||||
# These are all libcurl test programs
|
# These are all libcurl test programs
|
||||||
noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \
|
noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \
|
||||||
lib508 lib509 lib510 lib511 lib512 lib513 lib514 lib515 lib516 lib517 \
|
lib508 lib509 lib510 lib511 lib512 lib513 lib514 lib515 lib516 lib517 \
|
||||||
lib518 lib519 lib520
|
lib518 lib519 lib520 lib521 lib523
|
||||||
|
|
||||||
lib500_SOURCES = lib500.c $(SUPPORTFILES)
|
lib500_SOURCES = lib500.c $(SUPPORTFILES)
|
||||||
lib500_LDADD = $(LIBDIR)/libcurl.la
|
lib500_LDADD = $(LIBDIR)/libcurl.la
|
||||||
@ -125,3 +125,11 @@ lib519_DEPENDENCIES = $(LIBDIR)/libcurl.la
|
|||||||
lib520_SOURCES = lib520.c $(SUPPORTFILES)
|
lib520_SOURCES = lib520.c $(SUPPORTFILES)
|
||||||
lib520_LDADD = $(LIBDIR)/libcurl.la
|
lib520_LDADD = $(LIBDIR)/libcurl.la
|
||||||
lib520_DEPENDENCIES = $(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
|
||||||
|
16
tests/libtest/lib521.c
Normal file
16
tests/libtest/lib521.c
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
|
17
tests/libtest/lib523.c
Normal file
17
tests/libtest/lib523.c
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user