From: Daniel Stenberg Date: Tue, 24 Jan 2006 14:40:43 +0000 (+0000) Subject: Michal Marek provided a patch for FTP that makes libcurl continue to try PASV X-Git-Tag: upstream/7.37.1~10543 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=67bf4f28ffcd7102602a83343da8df8058f9af4f;p=platform%2Fupstream%2Fcurl.git Michal Marek provided a patch for FTP that makes libcurl continue to try PASV even after EPSV returned a positive response code, if libcurl failed to connect to the port number the EPSV response said. Obviously some people are going through protocol-sensitive firewalls (or similar) that don't understand EPSV and then they don't allow the second connection unless PASV was used. This also called for a minor fix of test case 238. --- diff --git a/CHANGES b/CHANGES index 16de2cb..d262cfb 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,14 @@ Changelog +Daniel (24 January 2006) +- Michal Marek provided a patch for FTP that makes libcurl continue to try + PASV even after EPSV returned a positive response code, if libcurl failed to + connect to the port number the EPSV response said. Obviously some people are + going through protocol-sensitive firewalls (or similar) that don't + understand EPSV and then they don't allow the second connection unless PASV + was used. This also called for a minor fix of test case 238. + Daniel (20 January 2006) - Duane Cathey was one of our friends who reported that curl -P [IP] (CURLOPT_FTPPORT) didn't work for ipv6-enabed curls if the IP wasn't a diff --git a/RELEASE-NOTES b/RELEASE-NOTES index b1c5bd4..a06d5bc 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -18,6 +18,7 @@ This release includes the following changes: This release includes the following bugfixes: + o Try PASV after failing to connect to the port the EPSV response contained o -P [IP] with ipv6-enabled curl o -P [hostname] with ipv6-disabled curl o libcurl.m4 was updated @@ -45,6 +46,6 @@ advice from friends like these: Dov Murik, Jean Jacques Drouin, Andres Garcia, Yang Tse, Gisle Vanem, Dan Fandrich, Alexander Lazic, Michael Jahn, Andrew Benham, Bryan Henderson, - David Shaw, Jon Turner, Duane Cathey + David Shaw, Jon Turner, Duane Cathey, Michal Marek Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/ftp.c b/lib/ftp.c index 3cdcc32..ecb7176 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -1661,6 +1661,18 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn, Curl_resolv_unlock(data, addr); /* we're done using this address */ + if (result && ftp->count1 == 0 && ftpcode == 229) { + infof(data, "got positive EPSV response, but can't connect. " + "Disabling EPSV\n"); + /* disable it for next transfer */ + conn->bits.ftp_use_epsv = FALSE; + data->state.errorbuf = FALSE; /* allow error message to get rewritten */ + NBFTPSENDF(conn, "PASV", NULL); + ftp->count1++; + /* remain in the FTP_PASV state */ + return result; + } + if(result) return result; diff --git a/tests/data/test238 b/tests/data/test238 index c314f6b..8e23b4f 100644 --- a/tests/data/test238 +++ b/tests/data/test238 @@ -8,26 +8,32 @@ ftp -FTP getting bad port in 229-response to EPSV +FTP getting bad port in response to EPSV and in response to PASV ftp://%HOSTIP:%FTPPORT/238 REPLY EPSV 229 Entering Passiv Mode (|||1000000|) +REPLY PASV 227 Entering Passiv Mode (1216,256,2,127,127,127) # Verify data after the test has been "shot" -# 7 => CURLE_COULDNT_CONNECT +# curl: (15) Can't resolve new host 1216.256.2.127:32639 +# 15 => CURLE_FTP_CANT_GET_HOST +# some systems just don't fail on the illegal host name/address but instead +# moves on and attempt to connect to... yes, to what? +# 7= CURLE_COULDNT_CONNECT -7 +7, 15 USER anonymous PASS curl_by_daniel@haxx.se PWD EPSV +PASV