mirror of
https://github.com/moparisthebest/curl
synced 2024-08-13 17:03:50 -04:00
ftp: make a 552 response return CURLE_REMOTE_DISK_FULL
Added test 348 to verify. Added a 'STOR' command to the test FTP server to enable test 348. Documented the command in FILEFORMAT.md Reported-by: Duncan Wilcox Fixes #6016 Closes #6017
This commit is contained in:
parent
7772344e17
commit
4a4c724599
11
lib/ftp.c
11
lib/ftp.c
@ -3292,9 +3292,18 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
|
||||
|
||||
if(!ftpc->dont_check) {
|
||||
/* 226 Transfer complete, 250 Requested file action okay, completed. */
|
||||
if((ftpcode != 226) && (ftpcode != 250)) {
|
||||
switch(ftpcode) {
|
||||
case 226:
|
||||
case 250:
|
||||
break;
|
||||
case 552:
|
||||
failf(data, "Exceeded storage allocation");
|
||||
result = CURLE_REMOTE_DISK_FULL;
|
||||
break;
|
||||
default:
|
||||
failf(data, "server did not report OK, got %d", ftpcode);
|
||||
result = CURLE_PARTIAL_FILE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -237,6 +237,7 @@ about to issue.
|
||||
POP3 `CAPA` and SMTP `EHLO` commands
|
||||
- `AUTH [mechanisms]` - Enables support for SASL authentication and specifies
|
||||
a list of space separated mechanisms for IMAP, POP3 and SMTP
|
||||
- `STOR [msg]` respond with this instead of default after `STOR`
|
||||
|
||||
#### For HTTP/HTTPS
|
||||
|
||||
|
@ -58,7 +58,7 @@ test307 test308 test309 test310 test311 test312 test313 test314 test315 \
|
||||
test316 test317 test318 test319 test320 test321 test322 test323 test324 \
|
||||
test325 test326 test327 test328 test329 test330 test331 test332 test333 \
|
||||
test334 test335 test336 test337 test338 test339 test340 test341 test342 \
|
||||
test343 test344 test345 test346 test347 \
|
||||
test343 test344 test345 test346 test347 test348 \
|
||||
test350 test351 test352 test353 test354 test355 test356 test357 test358 \
|
||||
test359 \
|
||||
test393 test394 test395 test396 test397 \
|
||||
|
61
tests/data/test348
Normal file
61
tests/data/test348
Normal file
@ -0,0 +1,61 @@
|
||||
<testcase>
|
||||
<info>
|
||||
<keywords>
|
||||
FTP
|
||||
EPSV
|
||||
STOR
|
||||
</keywords>
|
||||
</info>
|
||||
|
||||
<reply>
|
||||
<servercmd>
|
||||
STOR 552 disk full
|
||||
</servercmd>
|
||||
</reply>
|
||||
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
ftp
|
||||
</server>
|
||||
<name>
|
||||
FTP upload file with 552 disk full response
|
||||
</name>
|
||||
<file name="log/test348.txt">
|
||||
data
|
||||
to
|
||||
see
|
||||
that FTP
|
||||
works
|
||||
so does it?
|
||||
</file>
|
||||
<command>
|
||||
ftp://%HOSTIP:%FTPPORT/348 -T log/test348.txt
|
||||
</command>
|
||||
</client>
|
||||
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<upload>
|
||||
data
|
||||
to
|
||||
see
|
||||
that FTP
|
||||
works
|
||||
so does it?
|
||||
</upload>
|
||||
<protocol>
|
||||
USER anonymous
|
||||
PASS ftp@example.com
|
||||
PWD
|
||||
EPSV
|
||||
TYPE I
|
||||
STOR 348
|
||||
QUIT
|
||||
</protocol>
|
||||
# 70 - CURLE_REMOTE_DISK_FULL
|
||||
<errorcode>
|
||||
70
|
||||
</errorcode>
|
||||
</verify>
|
||||
</testcase>
|
@ -145,6 +145,7 @@ my $nodataconn; # set if ftp srvr doesn't establish or accepts data channel
|
||||
my $nodataconn425; # set if ftp srvr doesn't establish data ch and replies 425
|
||||
my $nodataconn421; # set if ftp srvr doesn't establish data ch and replies 421
|
||||
my $nodataconn150; # set if ftp srvr doesn't establish data ch and replies 150
|
||||
my $storeresp;
|
||||
my @capabilities; # set if server supports capability commands
|
||||
my @auth_mechs; # set if server supports authentication commands
|
||||
my %fulltextreply; #
|
||||
@ -2413,6 +2414,10 @@ sub STOR_ftp {
|
||||
logmsg "No support for: $line";
|
||||
last;
|
||||
}
|
||||
if($storeresp) {
|
||||
# abort early
|
||||
last;
|
||||
}
|
||||
}
|
||||
if($nosave) {
|
||||
print FILE "$ulsize bytes would've been stored here\n";
|
||||
@ -2420,7 +2425,12 @@ sub STOR_ftp {
|
||||
close(FILE);
|
||||
close_dataconn($disc);
|
||||
logmsg "received $ulsize bytes upload\n";
|
||||
sendcontrol "226 File transfer complete\r\n";
|
||||
if($storeresp) {
|
||||
sendcontrol "$storeresp\r\n";
|
||||
}
|
||||
else {
|
||||
sendcontrol "226 File transfer complete\r\n";
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2784,6 +2794,7 @@ sub customize {
|
||||
$nodataconn425 = 0; # default is to not send 425 without data channel
|
||||
$nodataconn421 = 0; # default is to not send 421 without data channel
|
||||
$nodataconn150 = 0; # default is to not send 150 without data channel
|
||||
$storeresp = ""; # send as ultimate STOR response
|
||||
@capabilities = (); # default is to not support capability commands
|
||||
@auth_mechs = (); # default is to not support authentication commands
|
||||
%fulltextreply = ();#
|
||||
@ -2866,6 +2877,10 @@ sub customize {
|
||||
logmsg "FTPD: instructed to use NODATACONN\n";
|
||||
$nodataconn=1;
|
||||
}
|
||||
elsif($_ =~ /^STOR (.*)/) {
|
||||
$storeresp=$1;
|
||||
logmsg "FTPD: instructed to use respond to STOR with '$storeresp'\n";
|
||||
}
|
||||
elsif($_ =~ /CAPA (.*)/) {
|
||||
logmsg "FTPD: instructed to support CAPABILITY command\n";
|
||||
@capabilities = split(/ (?!(?:[^" ]|[^"] [^"])+")/, $1);
|
||||
|
Loading…
Reference in New Issue
Block a user