aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtests/ftpserver.pl26
1 files changed, 17 insertions, 9 deletions
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl
index 40f51c3d2..b4039b381 100755
--- a/tests/ftpserver.pl
+++ b/tests/ftpserver.pl
@@ -1926,6 +1926,8 @@ while(1) {
}
}
+ my $full = "";
+
while(1) {
my $i;
@@ -1957,34 +1959,38 @@ while(1) {
ftpmsg $input;
+ $full .= $input;
+
+ # Loop until command completion
+ next unless($full =~ /\r\n$/);
+
# Remove trailing CRLF.
- $input =~ s/[\n\r]+$//;
+ $full =~ s/[\n\r]+$//;
my $FTPCMD;
my $FTPARG;
- my $full = $input;
if($proto eq "imap") {
# IMAP is different with its identifier first on the command line
- unless(($input =~ /^([^ ]+) ([^ ]+) (.*)/) ||
- ($input =~ /^([^ ]+) ([^ ]+)/)) {
- sendcontrol "$1 '$input': command not understood.\r\n";
+ unless(($full =~ /^([^ ]+) ([^ ]+) (.*)/) ||
+ ($full =~ /^([^ ]+) ([^ ]+)/)) {
+ sendcontrol "$1 '$full': command not understood.\r\n";
last;
}
$cmdid=$1; # set the global variable
$FTPCMD=$2;
$FTPARG=$3;
}
- elsif($input =~ /^([A-Z]{3,4})(\s(.*))?$/i) {
+ elsif($full =~ /^([A-Z]{3,4})(\s(.*))?$/i) {
$FTPCMD=$1;
$FTPARG=$3;
}
- elsif(($proto eq "smtp") && ($input =~ /^[A-Z0-9+\/]{0,512}={0,2}$/i)) {
+ elsif(($proto eq "smtp") && ($full =~ /^[A-Z0-9+\/]{0,512}={0,2}$/i)) {
# SMTP long "commands" are base64 authentication data.
- $FTPCMD=$input;
+ $FTPCMD=$full;
$FTPARG="";
}
else {
- sendcontrol "500 '$input': command not understood.\r\n";
+ sendcontrol "500 '$full': command not understood.\r\n";
last;
}
@@ -1994,6 +2000,8 @@ while(1) {
print STDERR "IN: $full\n";
}
+ $full = "";
+
my $delay = $delayreply{$FTPCMD};
if($delay) {
# just go sleep this many seconds!