ftpserver.pl: Added unwanted argument check to SMTP DATA command handler

This commit is contained in:
Steve Holme 2013-09-29 09:25:23 +01:00
parent 4d7bf73fc3
commit ab7e6afd44

View File

@ -871,68 +871,81 @@ sub RCPT_smtp {
} }
sub DATA_smtp { sub DATA_smtp {
my ($args) = @_;
my $testno = $smtp_rcpt; my $testno = $smtp_rcpt;
$testno =~ s/^([^0-9]*)([0-9]+).*/$2/; if ($args) {
sendcontrol "354 Show me the mail\r\n"; sendcontrol "501 Unrecognized parameter\r\n";
}
else {
$testno =~ s/^([^0-9]*)([0-9]+).*/$2/;
sendcontrol "354 Show me the mail\r\n";
logmsg "===> rcpt $testno was $smtp_rcpt\n"; logmsg "===> rcpt $testno was $smtp_rcpt\n";
my $filename = "log/upload.$testno"; my $filename = "log/upload.$testno";
logmsg "Store test number $testno in $filename\n"; logmsg "Store test number $testno in $filename\n";
open(FILE, ">$filename") || open(FILE, ">$filename") ||
return 0; # failed to open output return 0; # failed to open output
my $line; my $line;
my $ulsize=0; my $ulsize=0;
my $disc=0; my $disc=0;
my $raw; my $raw;
while (5 == (sysread \*SFREAD, $line, 5)) { while (5 == (sysread \*SFREAD, $line, 5)) {
if($line eq "DATA\n") { if($line eq "DATA\n") {
my $i; my $i;
my $eob; my $eob;
sysread \*SFREAD, $i, 5; sysread \*SFREAD, $i, 5;
my $size = 0; my $size = 0;
if($i =~ /^([0-9a-fA-F]{4})\n/) { if($i =~ /^([0-9a-fA-F]{4})\n/) {
$size = hex($1); $size = hex($1);
}
read_mainsockf(\$line, $size);
$ulsize += $size;
print FILE $line if(!$nosave);
$raw .= $line;
if($raw =~ /\x0d\x0a\x2e\x0d\x0a/) {
# end of data marker!
$eob = 1;
}
logmsg "> Appending $size bytes to file\n";
if($eob) {
logmsg "Found SMTP EOB marker\n";
last;
}
} }
elsif($line eq "DISC\n") {
read_mainsockf(\$line, $size); # disconnect!
$disc=1;
$ulsize += $size; last;
print FILE $line if(!$nosave);
$raw .= $line;
if($raw =~ /\x0d\x0a\x2e\x0d\x0a/) {
# end of data marker!
$eob = 1;
} }
logmsg "> Appending $size bytes to file\n"; else {
if($eob) { logmsg "No support for: $line";
logmsg "Found SMTP EOB marker\n";
last; last;
} }
} }
elsif($line eq "DISC\n") {
# disconnect!
$disc=1;
last;
}
else {
logmsg "No support for: $line";
last;
}
}
if($nosave) {
print FILE "$ulsize bytes would've been stored here\n";
}
close(FILE);
sendcontrol "250 OK, data received!\r\n";
logmsg "received $ulsize bytes upload\n";
if($nosave) {
print FILE "$ulsize bytes would've been stored here\n";
}
close(FILE);
logmsg "received $ulsize bytes upload\n";
sendcontrol "250 OK, data received!\r\n";
}
return 0;
} }
sub QUIT_smtp { sub QUIT_smtp {
@ -1163,6 +1176,7 @@ sub APPEND_imap {
if($nosave) { if($nosave) {
print FILE "$size bytes would've been stored here\n"; print FILE "$size bytes would've been stored here\n";
} }
close(FILE); close(FILE);
logmsg "received $size bytes upload\n"; logmsg "received $size bytes upload\n";