aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2013-09-15 16:53:20 +0100
committerSteve Holme <steve_holme@hotmail.com>2013-09-15 16:53:20 +0100
commit33c1f2876b90294c9a1e96e86bb687687a1bb03e (patch)
treef6f5722d5bd59c81aa69e8d43d8aca762073a139
parent00ee5c5cf19be6a26ca7dffa9086ee106d81f706 (diff)
ftpserver.pl: Added CAPA & AUTH directive support to the SMTP EHLO handler
-rw-r--r--tests/FILEFORMAT5
-rwxr-xr-xtests/ftpserver.pl56
2 files changed, 52 insertions, 9 deletions
diff --git a/tests/FILEFORMAT b/tests/FILEFORMAT
index ba3161496..0815556b1 100644
--- a/tests/FILEFORMAT
+++ b/tests/FILEFORMAT
@@ -127,10 +127,11 @@ PASVBADIP
- makes PASV send back an illegal IP in its 227 response
CAPA [capabilities]
- Enables support for and specifies a list of space separated capabilities to
- return to the client for the IMAP CAPABILITY and POP3 CAPA commands
+ return to the client for the IMAP CAPABILITY, POP3 CAPA and SMTP EHLO
+ commands
AUTH [mechanisms]
- Enables support for SASL authentication and specifies a list of space
- separated mechanisms for IMAP and POP3
+ separated mechanisms for IMAP, POP3 and SMTP
For HTTP/HTTPS:
auth_required if this is set and a POST/PUT is made without auth, the
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl
index ab8d069b2..1e58eee41 100755
--- a/tests/ftpserver.pl
+++ b/tests/ftpserver.pl
@@ -689,6 +689,55 @@ sub close_dataconn {
# what set by "RCPT"
my $smtp_rcpt;
+sub EHLO_smtp {
+ my ($client) = @_;
+ my @data;
+
+ # TODO: Get the IP address of the client connection to use in the EHLO
+ # response when the client doesn't specify one but for now use 127.0.0.1
+ if (!$client) {
+ $client = "[127.0.0.1]";
+ }
+
+ # Calculate the EHLO response
+ push @data, "ESMTP pingpong test server Hello $client";
+
+ if((@capabilities) || (@auth_mechs)) {
+ my $mechs;
+
+ for my $c (@capabilities) {
+ push @data, $c;
+ }
+
+ for my $am (@auth_mechs) {
+ if(!$mechs) {
+ $mechs = "$am";
+ }
+ else {
+ $mechs .= " $am";
+ }
+ }
+
+ if($mechs) {
+ push @data, "AUTH $mechs";
+ }
+ }
+
+ # Send the EHLO response
+ for (my $i = 0; $i < @data; i++) {
+ my $d = $data[$i];
+
+ if($i < @data - 1) {
+ sendcontrol "250-$d\r\n";
+ }
+ else {
+ sendcontrol "250 $d\r\n";
+ }
+ }
+
+ return 0;
+}
+
sub DATA_smtp {
my $testno;
@@ -787,13 +836,6 @@ sub HELO_smtp {
return 0;
}
-sub EHLO_smtp {
- sendcontrol "250-SIZE\r\n";
- sendcontrol "250 Welcome visitor, stay a while staaaaaay forever\r\n";
-
- return 0;
-}
-
sub QUIT_smtp {
sendcontrol "200 byebye\r\n";