aboutsummaryrefslogtreecommitdiff
path: root/tests/data/test1233
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2013-08-05 23:49:53 +0200
committerDaniel Stenberg <daniel@haxx.se>2013-08-06 09:57:59 +0200
commit7cc00d9a832c42a330888aa5c11a2abad1bd5ac0 (patch)
tree6a5cd7dd22df9292abd502fed6b5e25c72bcecbd /tests/data/test1233
parent230e16dc033a05ad9b2ed8a499f74b69886e0865 (diff)
FTP: when EPSV gets a 229 but fails to connect, retry with PASV
This is a regression as this logic used to work. It isn't clear when it broke, but I'm assuming in 7.28.0 when we went all-multi internally. This likely never worked with the multi interface. As the failed connection is detected once the multi state has reached DO_MORE, the Curl_do_more() function was now expanded somewhat so that the ftp_do_more() function can request to go "back" to the previous state when it makes another attempt - using PASV. Added test case 1233 to verify this fix. It has the little issue that it assumes no service is listening/accepting connections on port 1... Reported-by: byte_bucket in the #curl IRC channel
Diffstat (limited to 'tests/data/test1233')
-rw-r--r--tests/data/test123346
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/data/test1233 b/tests/data/test1233
new file mode 100644
index 000000000..caf0527f2
--- /dev/null
+++ b/tests/data/test1233
@@ -0,0 +1,46 @@
+<testcase>
+<info>
+<keywords>
+FTP
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<servercmd>
+# Assuming there's nothing listening on port 1
+REPLY EPSV 229 Entering Passiv Mode (|||1|)
+</servercmd>
+<data>
+here are some bytes
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP failing to connect to EPSV port, switching to PASV
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1233
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+PASV
+TYPE I
+SIZE 1233
+RETR 1233
+QUIT
+</protocol>
+</verify>
+</testcase>