diff options
-rw-r--r-- | CHANGES | 5 | ||||
-rw-r--r-- | RELEASE-NOTES | 1 | ||||
-rw-r--r-- | lib/ftp.c | 19 | ||||
-rw-r--r-- | tests/data/test227 | 5 |
4 files changed, 27 insertions, 3 deletions
@@ -6,6 +6,11 @@ Changelog +Daniel Stenberg (9 Apr 2010) +- Prefixing the FTP quote commands with an asterisk really only worked for the + postquote actions. This is now fixed and test case 227 has been extended to + verify. + Kamil Dudka (4 Apr 2010) - Eliminated a race condition in Curl_resolv_timeout(). diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 9ecb0f1dd..cac8b06d9 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -45,6 +45,7 @@ This release includes the following bugfixes: o RTSP GET_PARAMETER o timeout after last data chunk was handled o SFTP download hang + o FTP quote commands prefixed with '*' now can fail without aborting This release includes the following known bugs: @@ -1424,6 +1424,12 @@ static CURLcode ftp_state_quote(struct connectdata *conn, break; } + /* + * This state uses: + * 'count1' to iterate over the commands to send + * 'count2' to store wether to allow commands to fail + */ + if(init) ftpc->count1 = 0; else @@ -1438,7 +1444,15 @@ static CURLcode ftp_state_quote(struct connectdata *conn, i++; } if(item) { - PPSENDF(&ftpc->pp, "%s", item->data); + char *cmd = item->data; + if(cmd[0] == '*') { + cmd++; + ftpc->count2 = 1; /* the sent command is allowed to fail */ + } + else + ftpc->count2 = 0; /* failure means cancel operation */ + + PPSENDF(&ftpc->pp, "%s", cmd); state(conn, instate); quote = TRUE; } @@ -2658,7 +2672,8 @@ static CURLcode ftp_statemach_act(struct connectdata *conn) case FTP_POSTQUOTE: case FTP_RETR_PREQUOTE: case FTP_STOR_PREQUOTE: - if(ftpcode >= 400) { + if((ftpcode >= 400) && !ftpc->count2) { + /* failure reponse code, and not allowed to fail */ failf(conn->data, "QUOT command failed with %03d", ftpcode); return CURLE_QUOTE_ERROR; } diff --git a/tests/data/test227 b/tests/data/test227 index 55a24e108..523fa0253 100644 --- a/tests/data/test227 +++ b/tests/data/test227 @@ -19,6 +19,7 @@ works </data> <servercmd> REPLY EPSV 500 no such command +REPLY FAIL 500 this might not be a failure! </servercmd> </reply> @@ -31,7 +32,7 @@ ftp FTP with quote ops </name> <command> -ftp://%HOSTIP:%FTPPORT/227 -Q "NOOP 1" -Q "+NOOP 2" -Q "-NOOP 3" +ftp://%HOSTIP:%FTPPORT/227 -Q "NOOP 1" -Q "+NOOP 2" -Q "-NOOP 3" -Q "*FAIL" -Q "+*FAIL HARD" </command> </client> @@ -42,10 +43,12 @@ USER anonymous PASS ftp@example.com
PWD
NOOP 1
+FAIL
EPSV
PASV
TYPE I
NOOP 2
+FAIL HARD
SIZE 227
RETR 227
NOOP 3
|