diff --git a/tests/data/test1319 b/tests/data/test1319 index d02ba653b1..8ca74cfdca 100644 --- a/tests/data/test1319 +++ b/tests/data/test1319 @@ -58,6 +58,7 @@ pop3://%HOSTIP:%POP3PORT/1319 -p -x %HOSTIP:%PROXYPORT -u user:secret ^User-Agent: +AUTH USER user PASS secret RETR 1319 diff --git a/tests/data/test1407 b/tests/data/test1407 index 0b40a4732a..a8d911e0de 100644 --- a/tests/data/test1407 +++ b/tests/data/test1407 @@ -34,6 +34,7 @@ pop3://%HOSTIP:%POP3PORT/1407 -l -u user:secret --libcurl log/test1407.c # Verify data after the test has been "shot" +AUTH USER user PASS secret LIST 1407 diff --git a/tests/data/test800 b/tests/data/test800 index 8c48501476..eebd27a443 100644 --- a/tests/data/test800 +++ b/tests/data/test800 @@ -38,6 +38,7 @@ pop3://%HOSTIP:%POP3PORT/800 -u user:secret # Verify data after the test has been "shot" +AUTH USER user PASS secret RETR 800 diff --git a/tests/data/test808 b/tests/data/test808 index 57e1382b13..8f2526f258 100644 --- a/tests/data/test808 +++ b/tests/data/test808 @@ -10,7 +10,6 @@ LIST # Server-side -REPLY AUTH -ERR unsupported command REPLY LIST +OK 808 100 diff --git a/tests/data/test809 b/tests/data/test809 index 7cd04c891a..b16a1470e4 100644 --- a/tests/data/test809 +++ b/tests/data/test809 @@ -11,7 +11,6 @@ FAILURE # Server-side -REPLY AUTH -ERR unsupported command REPLY LIST -ERR no such message diff --git a/tests/data/test810 b/tests/data/test810 index 2e24c295b6..e2f447eb1d 100644 --- a/tests/data/test810 +++ b/tests/data/test810 @@ -13,7 +13,6 @@ LIST # packets SLOWDOWN -REPLY AUTH -ERR unsupported command # When doing LIST, we get the default list output hard-coded in the test # POP3 server diff --git a/tests/data/test811 b/tests/data/test811 index 06fa57dcb4..26a2906c74 100644 --- a/tests/data/test811 +++ b/tests/data/test811 @@ -10,7 +10,6 @@ LIST # Server-side -REPLY AUTH -ERR unsupported command REPLY LIST +OK but no messages\r\n. diff --git a/tests/data/test812 b/tests/data/test812 index 9f1ba92964..0e0484d10d 100644 --- a/tests/data/test812 +++ b/tests/data/test812 @@ -11,7 +11,6 @@ FAILURE # Server-side -REPLY AUTH -ERR unsupported command REPLY RETR -ERR no such message diff --git a/tests/data/test813 b/tests/data/test813 index 13cfd7074b..780fdf170a 100644 --- a/tests/data/test813 +++ b/tests/data/test813 @@ -10,7 +10,6 @@ FAILURE # Server-side -REPLY AUTH -ERR unsupported command REPLY PASS -ERR invalid login diff --git a/tests/data/test815 b/tests/data/test815 index 9779fe690e..c4170f0ca6 100644 --- a/tests/data/test815 +++ b/tests/data/test815 @@ -9,9 +9,6 @@ RETR # # Server-side - -REPLY AUTH -ERR unsupported command - From: me@somewhere To: fake@nowhere diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl index 034ac710da..c3728ef6c0 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)