diff options
Diffstat (limited to 'tests/ftpserver.pl')
-rwxr-xr-x | tests/ftpserver.pl | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl index 034ac710d..c3728ef6c 100755 --- a/tests/ftpserver.pl +++ b/tests/ftpserver.pl @@ -138,6 +138,8 @@ 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 $support_capa; # set if server supports capability command +my $support_auth; # set if server supports authentication command my %customreply; # my %customcount; # my %delayreply; # @@ -555,6 +557,8 @@ sub protocolsetup { } elsif($proto eq 'pop3') { %commandfunc = ( + 'CAPA' => \&CAPA_pop3, + 'AUTH' => \&AUTH_pop3, 'RETR' => \&RETR_pop3, 'LIST' => \&LIST_pop3, ); @@ -821,6 +825,50 @@ sub FETCH_imap { ################ POP3 commands ################ +sub CAPA_pop3 { + my ($testno) = @_; + my @data = (); + + if(!$support_capa) { + push @data, "-ERR Unsupported command: 'CAPA'\r\n"; + } + else { + push @data, "+OK List of capabilities follows\r\n"; + push @data, "USER\r\n"; + if($support_auth) { + push @data, "SASL UNKNOWN\r\n"; + } + push @data, "IMPLEMENTATION POP3 pingpong test server\r\n"; + push @data, ".\r\n"; + } + + for my $d (@data) { + sendcontrol $d; + } + + return 0; +} + +sub AUTH_pop3 { + my ($testno) = @_; + my @data = (); + + if(!$support_auth) { + push @data, "-ERR Unsupported command: 'AUTH'\r\n"; + } + else { + push @data, "+OK List of supported mechanisms follows\r\n"; + push @data, "UNKNOWN\r\n"; + push @data, ".\r\n"; + } + + for my $d (@data) { + sendcontrol $d; + } + + return 0; +} + sub RETR_pop3 { my ($testno) = @_; my @data; @@ -1667,6 +1715,8 @@ 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 + $support_capa = 0; # default is to not support capability command + $support_auth = 0; # default is to not support authentication command %customreply = (); # %customcount = (); # %delayreply = (); # @@ -1731,6 +1781,14 @@ sub customize { logmsg "FTPD: instructed to use NODATACONN\n"; $nodataconn=1; } + elsif($_ =~ /SUPPORTCAPA/) { + logmsg "FTPD: instructed to support CAPABILITY command\n"; + $support_capa=1; + } + elsif($_ =~ /SUPPORTAUTH/) { + logmsg "FTPD: instructed to support AUTHENTICATION command\n"; + $support_auth=1; + } elsif($_ =~ /NOSAVE/) { # don't actually store the file we upload - to be used when # uploading insanely huge amounts @@ -2050,7 +2108,15 @@ while(1) { if($check) { logmsg "$FTPCMD wasn't handled!\n"; - sendcontrol "500 $FTPCMD is not dealt with!\r\n"; + if($proto eq 'pop3') { + sendcontrol "-ERR $FTPCMD is not dealt with!\r\n"; + } + elsif($proto eq 'imap') { + sendcontrol "$cmdid BAD $FTPCMD is not dealt with!\r\n"; + } + else { + sendcontrol "500 $FTPCMD is not dealt with!\r\n"; + } } } # while(1) |