From b420f60a06c3910b2f36770f20559c2c4ec1548f Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Wed, 30 May 2012 17:39:14 +0200 Subject: [PATCH] pop3 test server: allow pop3 test server verification to succeed again Introduce SUPPORTCAPA and SUPPORTAUTH config commands to allow further pop3 test server expansion for tests that require CAPA or AUTH support, although this will need some extra work to make it fully functional. --- tests/data/test1319 | 1 + tests/data/test1407 | 1 + tests/data/test800 | 1 + tests/data/test808 | 1 - tests/data/test809 | 1 - tests/data/test810 | 1 - tests/data/test811 | 1 - tests/data/test812 | 1 - tests/data/test813 | 1 - tests/data/test815 | 3 -- tests/ftpserver.pl | 68 ++++++++++++++++++++++++++++++++++++++++++++- 11 files changed, 70 insertions(+), 10 deletions(-) diff --git a/tests/data/test1319 b/tests/data/test1319 index d02ba653b..8ca74cfdc 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 0b40a4732..a8d911e0d 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 8c4850147..eebd27a44 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 57e1382b1..8f2526f25 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 7cd04c891..b16a1470e 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 2e24c295b..e2f447eb1 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 06fa57dcb..26a2906c7 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 9f1ba9296..0e0484d10 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 13cfd7074..780fdf170 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 9779fe690..c4170f0ca 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 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)