1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

- Fred Machado posted about a weird FTP problem on the curl-users list and when

researching it, it turned out he got a 550 response back from a SIZE command
  and then I fell over the text in RFC3659 that says:

   The presence of the 550 error response to a SIZE command MUST NOT be taken
   by the client as an indication that the file cannot be transferred in the
   current MODE and TYPE.

  In other words: the change I did on September 30th 2008 and that has been
  included in the last two releases were a regression and a bad idea. We MUST
  NOT take a 550 response from SIZE as a hint that the file doesn't exist.
This commit is contained in:
Daniel Stenberg 2008-12-08 20:20:51 +00:00
parent f36eab2608
commit 18371aaff9
8 changed files with 24 additions and 14 deletions

12
CHANGES
View File

@ -7,6 +7,18 @@
Changelog Changelog
Daniel Stenberg (8 Dec 2008) Daniel Stenberg (8 Dec 2008)
- Fred Machado posted about a weird FTP problem on the curl-users list and when
researching it, it turned out he got a 550 response back from a SIZE command
and then I fell over the text in RFC3659 that says:
The presence of the 550 error response to a SIZE command MUST NOT be taken
by the client as an indication that the file cannot be transferred in the
current MODE and TYPE.
In other words: the change I did on September 30th 2008 and that has been
included in the last two releases were a regression and a bad idea. We MUST
NOT take a 550 response from SIZE as a hint that the file doesn't exist.
- Christian Krause filed bug #2221237 - Christian Krause filed bug #2221237
(http://curl.haxx.se/bug/view.cgi?id=2221237) that identified an infinite (http://curl.haxx.se/bug/view.cgi?id=2221237) that identified an infinite
loop during GSS authentication given some specific conditions. With his loop during GSS authentication given some specific conditions. With his

View File

@ -25,6 +25,7 @@ This release includes the following bugfixes:
o bad fclose() after a fatal error in cookie code o bad fclose() after a fatal error in cookie code
o curl_multi_remove_handle() when the handle was in use in a HTTP pipeline o curl_multi_remove_handle() when the handle was in use in a HTTP pipeline
o GSS authentication infinite loop problem o GSS authentication infinite loop problem
o 550 response from SIZE no longer treated as missing file
This release includes the following known bugs: This release includes the following known bugs:
@ -34,6 +35,7 @@ This release would not have looked like this without help, code, reports and
advice from friends like these: advice from friends like these:
Yang Tse, Daniel Fandrich, Jim Meyering, Christian Krause, Andreas Wurf, Yang Tse, Daniel Fandrich, Jim Meyering, Christian Krause, Andreas Wurf,
Markus Koetter, Josef Wolf, Vlad Grachov, Pawel Kierski, Igor Novoseltsev Markus Koetter, Josef Wolf, Vlad Grachov, Pawel Kierski, Igor Novoseltsev,
Fred Machado
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)

View File

@ -2190,10 +2190,6 @@ static CURLcode ftp_state_size_resp(struct connectdata *conn,
curl_off_t filesize; curl_off_t filesize;
char *buf = data->state.buffer; char *buf = data->state.buffer;
if((instate != FTP_STOR_SIZE) && (ftpcode == 550))
/* the file doesn't exist and we're not about to upload */
return CURLE_REMOTE_FILE_NOT_FOUND;
/* get the size from the ascii string: */ /* get the size from the ascii string: */
filesize = (ftpcode == 213)?curlx_strtoofft(buf+4, NULL, 0):-1; filesize = (ftpcode == 213)?curlx_strtoofft(buf+4, NULL, 0):-1;
@ -3169,7 +3165,6 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
case CURLE_UPLOAD_FAILED: case CURLE_UPLOAD_FAILED:
case CURLE_REMOTE_ACCESS_DENIED: case CURLE_REMOTE_ACCESS_DENIED:
case CURLE_FILESIZE_EXCEEDED: case CURLE_FILESIZE_EXCEEDED:
case CURLE_REMOTE_FILE_NOT_FOUND:
/* the connection stays alive fine even though this happened */ /* the connection stays alive fine even though this happened */
/* fall-through */ /* fall-through */
case CURLE_OK: /* doesn't affect the control connection's status */ case CURLE_OK: /* doesn't affect the control connection's status */

View File

@ -9,9 +9,6 @@ FAILURE
</info> </info>
# Server-side # Server-side
<reply> <reply>
<size>
1
</size>
<servercmd> <servercmd>
REPLY RETR 314 bluah you f00l! REPLY RETR 314 bluah you f00l!
REPLY EPSV 314 bluah you f00l! REPLY EPSV 314 bluah you f00l!

View File

@ -45,8 +45,10 @@ CWD path
EPSV EPSV
TYPE I TYPE I
SIZE 533 SIZE 533
RETR 533
EPSV EPSV
SIZE 533 SIZE 533
RETR 533
QUIT QUIT
</protocol> </protocol>
</verify> </verify>

View File

@ -45,6 +45,7 @@ CWD path
EPSV EPSV
TYPE I TYPE I
SIZE 534 SIZE 534
RETR 534
QUIT QUIT
</protocol> </protocol>
</verify> </verify>

View File

@ -19,6 +19,8 @@ works
</data> </data>
<servercmd> <servercmd>
REPLY RETR 550 the file doesn't exist
COUNT RETR 1
REPLY SIZE 550 Can't check for file existence REPLY SIZE 550 Can't check for file existence
COUNT SIZE 1 COUNT SIZE 1
</servercmd> </servercmd>
@ -50,6 +52,7 @@ CWD path
EPSV EPSV
TYPE I TYPE I
SIZE 546 SIZE 546
RETR 546
EPSV EPSV
SIZE 546 SIZE 546
RETR 546 RETR 546

View File

@ -407,14 +407,12 @@ sub SIZE_command {
my $size = $data[0]; my $size = $data[0];
if($size ne "") { if($size) {
# we check for "" to be able to explictly set the size to 0 and yet have
# that send a 213
if($size > -1) { if($size > -1) {
sendcontrol "213 $size\r\n"; sendcontrol "213 $size\r\n";
} }
else { else {
sendcontrol "350 $testno: SIZE is not supported.\r\n"; sendcontrol "550 $testno: No such file or directory.\r\n";
} }
} }
else { else {
@ -427,7 +425,7 @@ sub SIZE_command {
sendcontrol "213 $size\r\n"; sendcontrol "213 $size\r\n";
} }
else { else {
sendcontrol "350 $testno: SIZE is not supported.\r\n"; sendcontrol "550 $testno: No such file or directory.\r\n";
} }
} }
return 0; return 0;