Loading tests/ftpserver.pl +51 −17 Original line number Diff line number Diff line Loading @@ -60,18 +60,22 @@ sub REAPER { # USER is ok in fresh state my %commandok = ( "USER" => "fresh", "PASS" => "passwd", "PASV" => "loggedin|twosock", "PORT" => "loggedin|twosock", "TYPE" => "loggedin|twosock", "LIST" => "twosock", "NLST" => "twosock", "RETR" => "twosock", "STOR" => "twosock", "CWD" => "loggedin", "SIZE" => "loggedin|twosock", "QUIT" => "loggedin|twosock", 'USER' => 'fresh', 'PASS' => 'passwd', 'PASV' => 'loggedin|twosock', 'PORT' => 'loggedin|twosock', 'TYPE' => 'loggedin|twosock', 'LIST' => 'twosock', 'NLST' => 'twosock', 'RETR' => 'twosock', 'STOR' => 'twosock', 'APPE' => 'twosock', 'REST' => 'twosock', 'CWD' => 'loggedin|twosock', 'SYST' => 'loggedin', 'SIZE' => 'loggedin|twosock', 'PWD' => 'loggedin|twosock', 'QUIT' => 'loggedin|twosock', ); # initially, we're in 'fresh' state Loading @@ -82,24 +86,29 @@ my %statechange = ( 'USER' => 'passwd', # USER goes to passwd state ); # this text is shown before the function specified below is run my %displaytext = ('USER' => '331 We are happy you popped in!', # output FTP line my %displaytext = ('USER' => '331 We are happy you popped in!', 'PASS' => '230 Welcome you silly person', 'PORT' => '200 You said PORT - I say FINE', 'TYPE' => '200 I modify TYPE as you wanted', 'LIST' => '150 here comes a directory', 'NLST' => '150 here comes a directory', 'CWD' => '250 CWD command successful.', 'QUIT' => '221 bye bye baby', 'SYST' => '215 UNIX Type: L8', # just fake something 'QUIT' => '221 bye bye baby', # just reply something 'PWD' => '257 "/nowhere/anywhere" is current directory', 'REST' => '350 Yeah yeah we set it there for you', ); # callback functions for certain commands my %commandfunc = ( 'PORT' => \&PORT_command, 'LIST' => \&LIST_command, 'NLST' => \&LIST_command, # use LIST for now 'NLST' => \&NLST_command, 'PASV' => \&PASV_command, 'RETR' => \&RETR_command, 'SIZE' => \&SIZE_command, 'REST' => \&REST_command, 'STOR' => \&STOR_command, 'APPE' => \&STOR_command, # append looks like upload ); # this is a built-in fake-dir ;-) Loading @@ -115,6 +124,11 @@ my @ftpdir=("total 20\r\n", "drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub\r\n", "dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr\r\n"); my $rest=0; sub REST_command { $rest = $_[0]; } sub LIST_command { # print "150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 bytes)\r\n"; Loading @@ -129,6 +143,16 @@ sub LIST_command { return 0; } sub NLST_command { my @ftpdir=("file", "with space", "fake", "..", " ..", "funny", "README"); for(@ftpdir) { print SOCK "$_\r\n"; } close(SOCK); print "226 ASCII transfer complete\r\n"; return 0; } sub SIZE_command { my $testno = $_[0]; Loading Loading @@ -172,9 +196,15 @@ sub RETR_command { if($size) { open(FILE, "<$filename"); if($rest) { # move read pointer forward seek(FILE, $rest, 1); $size -= $rest; } print "150 Binary data connection for $testno () ($size bytes).\r\n"; $rest=0; # reset rest again open(FILE, "<$filename"); while(<FILE>) { print SOCK $_; } Loading @@ -194,7 +224,7 @@ sub STOR_command { logmsg "STOR test number $testno\n"; my $filename = "log/ftpout.$testno"; my $filename = "log/upload.$testno"; print "125 Gimme gimme gimme!\r\n"; Loading Loading @@ -319,6 +349,10 @@ for ( $waitedpid = 0; logmsg "GOT: ($1) $_\n"; if($verbose) { print STDERR "IN: $full\n"; } my $ok = $commandok{$FTPCMD}; if($ok !~ /$state/) { print "500 $FTPCMD not OK in state: $state!\r\n"; Loading Loading
tests/ftpserver.pl +51 −17 Original line number Diff line number Diff line Loading @@ -60,18 +60,22 @@ sub REAPER { # USER is ok in fresh state my %commandok = ( "USER" => "fresh", "PASS" => "passwd", "PASV" => "loggedin|twosock", "PORT" => "loggedin|twosock", "TYPE" => "loggedin|twosock", "LIST" => "twosock", "NLST" => "twosock", "RETR" => "twosock", "STOR" => "twosock", "CWD" => "loggedin", "SIZE" => "loggedin|twosock", "QUIT" => "loggedin|twosock", 'USER' => 'fresh', 'PASS' => 'passwd', 'PASV' => 'loggedin|twosock', 'PORT' => 'loggedin|twosock', 'TYPE' => 'loggedin|twosock', 'LIST' => 'twosock', 'NLST' => 'twosock', 'RETR' => 'twosock', 'STOR' => 'twosock', 'APPE' => 'twosock', 'REST' => 'twosock', 'CWD' => 'loggedin|twosock', 'SYST' => 'loggedin', 'SIZE' => 'loggedin|twosock', 'PWD' => 'loggedin|twosock', 'QUIT' => 'loggedin|twosock', ); # initially, we're in 'fresh' state Loading @@ -82,24 +86,29 @@ my %statechange = ( 'USER' => 'passwd', # USER goes to passwd state ); # this text is shown before the function specified below is run my %displaytext = ('USER' => '331 We are happy you popped in!', # output FTP line my %displaytext = ('USER' => '331 We are happy you popped in!', 'PASS' => '230 Welcome you silly person', 'PORT' => '200 You said PORT - I say FINE', 'TYPE' => '200 I modify TYPE as you wanted', 'LIST' => '150 here comes a directory', 'NLST' => '150 here comes a directory', 'CWD' => '250 CWD command successful.', 'QUIT' => '221 bye bye baby', 'SYST' => '215 UNIX Type: L8', # just fake something 'QUIT' => '221 bye bye baby', # just reply something 'PWD' => '257 "/nowhere/anywhere" is current directory', 'REST' => '350 Yeah yeah we set it there for you', ); # callback functions for certain commands my %commandfunc = ( 'PORT' => \&PORT_command, 'LIST' => \&LIST_command, 'NLST' => \&LIST_command, # use LIST for now 'NLST' => \&NLST_command, 'PASV' => \&PASV_command, 'RETR' => \&RETR_command, 'SIZE' => \&SIZE_command, 'REST' => \&REST_command, 'STOR' => \&STOR_command, 'APPE' => \&STOR_command, # append looks like upload ); # this is a built-in fake-dir ;-) Loading @@ -115,6 +124,11 @@ my @ftpdir=("total 20\r\n", "drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub\r\n", "dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr\r\n"); my $rest=0; sub REST_command { $rest = $_[0]; } sub LIST_command { # print "150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 bytes)\r\n"; Loading @@ -129,6 +143,16 @@ sub LIST_command { return 0; } sub NLST_command { my @ftpdir=("file", "with space", "fake", "..", " ..", "funny", "README"); for(@ftpdir) { print SOCK "$_\r\n"; } close(SOCK); print "226 ASCII transfer complete\r\n"; return 0; } sub SIZE_command { my $testno = $_[0]; Loading Loading @@ -172,9 +196,15 @@ sub RETR_command { if($size) { open(FILE, "<$filename"); if($rest) { # move read pointer forward seek(FILE, $rest, 1); $size -= $rest; } print "150 Binary data connection for $testno () ($size bytes).\r\n"; $rest=0; # reset rest again open(FILE, "<$filename"); while(<FILE>) { print SOCK $_; } Loading @@ -194,7 +224,7 @@ sub STOR_command { logmsg "STOR test number $testno\n"; my $filename = "log/ftpout.$testno"; my $filename = "log/upload.$testno"; print "125 Gimme gimme gimme!\r\n"; Loading Loading @@ -319,6 +349,10 @@ for ( $waitedpid = 0; logmsg "GOT: ($1) $_\n"; if($verbose) { print STDERR "IN: $full\n"; } my $ok = $commandok{$FTPCMD}; if($ok !~ /$state/) { print "500 $FTPCMD not OK in state: $state!\r\n"; Loading