aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES7
-rw-r--r--RELEASE-NOTES4
-rw-r--r--lib/ftp.c17
3 files changed, 18 insertions, 10 deletions
diff --git a/CHANGES b/CHANGES
index d10d2b2bd..879f4d9fd 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,13 @@
Changelog
+Daniel (6 December 2004)
+- Richard Atterer fixed libcurl's way of dealing with the EPSV
+ response. Previously, libcurl would re-resolve the host name with the new
+ port number and attempt to connect to that, while it should use the IP from
+ the control channel. This bug made it hard to EPSV from an FTP server with
+ multiple IP addresses!
+
Daniel (3 December 2004)
- Bug report #1078066: when a chunked transfer was pre-maturely closed exactly
at a chunk boundary it was not considered an error and thus went unnoticed.
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 3d1626cd2..dd909bc44 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -23,6 +23,7 @@ This release includes the following changes:
This release includes the following bugfixes:
+ o EPSV on multi-homed servers now works correctly
o chunked-encoded transfers could get closed pre-maturely without error
o proxy CONNECT now default timeouts after 3600 seconds
o --disable-epsv and --disable-eprt are ignored when connecting to an IPv6 ftp
@@ -57,6 +58,7 @@ advice from friends like these:
Peter Wullinger, Guillaume Arluison, Alexander Krasnostavsky, Mohun Biswas,
Tomas Pospisek, Gisle Vanem, Dan Fandrich, Paul Nolan, Andres Garcia,
Tim Sneddon, Ian Gulliver, Jean-Philippe Barrette-LaPierre, Jeff Phillips,
- Wojciech Zwiefka, David Phillips, Reinout van Schouwen, Maurice Barnum
+ Wojciech Zwiefka, David Phillips, Reinout van Schouwen, Maurice Barnum,
+ Richard Atterer
Thanks! (and sorry if I forgot to mention someone)
diff --git a/lib/ftp.c b/lib/ftp.c
index 47cb361aa..cc667acdb 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -1519,8 +1519,8 @@ CURLcode ftp_use_pasv(struct connectdata *conn,
/* newhost must be able to hold a full IP-style address in ASCII, which
in the IPv6 case means 5*8-1 = 39 letters */
- char newhost[48];
- char *newhostp=NULL;
+#define NEWHOST_BUFSIZE 48
+ char newhost[NEWHOST_BUFSIZE];
#ifdef PF_INET6
if(!conn->bits.ftp_use_epsv &&
@@ -1584,7 +1584,6 @@ CURLcode ftp_use_pasv(struct connectdata *conn,
snprintf(newhost, sizeof(newhost),
"%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
- newhostp = newhost;
newport = (port[0]<<8) + port[1];
}
else if (229 == results[modeoff]) {
@@ -1613,8 +1612,8 @@ CURLcode ftp_use_pasv(struct connectdata *conn,
if(ptr) {
newport = num;
- /* we should use the same host we already are connected to */
- newhostp = conn->host.name;
+ /* We must use the same IP we are already connected to */
+ Curl_printable_address(conn->ip_addr, newhost, NEWHOST_BUFSIZE);
}
}
else
@@ -1646,12 +1645,12 @@ CURLcode ftp_use_pasv(struct connectdata *conn,
}
else {
/* normal, direct, ftp connection */
- rc = Curl_resolv(conn, newhostp, newport, &addr);
+ rc = Curl_resolv(conn, newhost, newport, &addr);
if(rc == CURLRESOLV_PENDING)
rc = Curl_wait_for_resolv(conn, &addr);
if(!addr) {
- failf(data, "Can't resolve new host %s:%d", newhostp, newport);
+ failf(data, "Can't resolve new host %s:%d", newhost, newport);
return CURLE_FTP_CANT_GET_HOST;
}
connectport = newport; /* we connect to the remote port */
@@ -1676,13 +1675,13 @@ CURLcode ftp_use_pasv(struct connectdata *conn,
if(data->set.verbose)
/* this just dumps information about this second connection */
- ftp_pasv_verbose(conn, conninfo, newhostp, connectport);
+ ftp_pasv_verbose(conn, conninfo, newhost, connectport);
#ifndef CURL_DISABLE_HTTP
if(conn->bits.tunnel_proxy) {
/* We want "seamless" FTP operations through HTTP proxy tunnel */
result = Curl_ConnectHTTPProxyTunnel(conn, SECONDARYSOCKET,
- newhostp, newport);
+ newhost, newport);
if(CURLE_OK != result)
return result;
}