Changelog
+Daniel Stenberg (30 Sep 2008)
+- The libcurl FTP code now returns CURLE_REMOTE_FILE_NOT_FOUND error when SIZE
+ gets a 550 response back for the cases where a download (or NOBODY) is
+ wanted. It still allows a 550 as response if the SIZE is used as part of an
+ upload process (like if resuming an upload is requested and the file isn't
+ there before the upload). I also modified the FTP test server and a few test
+ cases accordingly to match this modified behavior.
+
Daniel Stenberg (29 Sep 2008)
- Daniel Egger provided a patch that allows you to disable proxy support in
libcurl to somewhat reduce the size of the binary. Run configure
o HTTP Digest with a blank realm did wrong
o CURLINFO_REDIRECT_URL didn't work with the multi interface
o CURLOPT_RANGE now works for SFTP downloads
+ o FTP SIZE response 550 now causes CURLE_REMOTE_FILE_NOT_FOUND
This release includes the following known bugs:
curl_off_t filesize;
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: */
filesize = (ftpcode == 213)?curlx_strtoofft(buf+4, NULL, 0):-1;
case CURLE_UPLOAD_FAILED:
case CURLE_REMOTE_ACCESS_DENIED:
case CURLE_FILESIZE_EXCEEDED:
+ case CURLE_REMOTE_FILE_NOT_FOUND:
/* the connection stays alive fine even though this happened */
/* fall-through */
case CURLE_OK: /* doesn't affect the control connection's status */
</info>
# Server-side
<reply>
+<size>
+1
+</size>
<servercmd>
REPLY RETR 314 bluah you f00l!
REPLY EPSV 314 bluah you f00l!
EPSV\r
TYPE I\r
SIZE 533\r
-RETR 533\r
EPSV\r
SIZE 533\r
-RETR 533\r
QUIT\r
</protocol>
</verify>
EPSV\r
TYPE I\r
SIZE 534\r
-RETR 534\r
QUIT\r
</protocol>
</verify>
</data>
<servercmd>
-REPLY RETR 550 the file doesn't exist
-COUNT RETR 1
REPLY SIZE 550 Can't check for file existence
COUNT SIZE 1
</servercmd>
EPSV\r
TYPE I\r
SIZE 546\r
-RETR 546\r
EPSV\r
SIZE 546\r
RETR 546\r
my $size = $data[0];
- if($size) {
+ if($size ne "") {
+ # we check for "" to be able to explictly set the size to 0 and yet have
+ # that send a 213
if($size > -1) {
sendcontrol "213 $size\r\n";
}
else {
- sendcontrol "550 $testno: No such file or directory.\r\n";
+ sendcontrol "350 $testno: SIZE is not supported.\r\n";
}
}
else {
sendcontrol "213 $size\r\n";
}
else {
- sendcontrol "550 $testno: No such file or directory.\r\n";
+ sendcontrol "350 $testno: SIZE is not supported.\r\n";
}
}
return 0;