diff options
author | Daniel Stenberg <daniel@haxx.se> | 2009-12-30 21:52:27 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2009-12-30 21:52:27 +0000 |
commit | 5e6ffe353ab478d67c2964de5a3eb2fd9fcb0528 (patch) | |
tree | 549b29be4a73756bdf19e8a4f0dbb67be4a965c0 /tests | |
parent | d7cd761047376576d281bbc2dc40c02afa251912 (diff) |
(SMTP) support DATA better in the server and make sure to "escape" CRLF.CRLF
sequences in uploaded data. The test server doesn't "decode" escaped dot-lines
but instead test cases must be written to take them into account. Added test
case 803 to verify dot-escaping.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/data/Makefile.am | 2 | ||||
-rw-r--r-- | tests/data/test802 | 8 | ||||
-rw-r--r-- | tests/data/test803 | 64 | ||||
-rw-r--r-- | tests/ftpserver.pl | 57 |
4 files changed, 128 insertions, 3 deletions
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 3094d642a..b2c4cc9b5 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -63,7 +63,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test1089 test1090 test1091 test1092 test1093 test1094 test1095 test1096 \ test1097 test560 test561 test1098 test1099 test562 test563 test1100 \ test564 test1101 test1102 test1103 test1104 test299 test310 test311 \ - test312 test1105 test565 test800 test1106 test801 test566 test802 + test312 test1105 test565 test800 test1106 test801 test566 test802 test803 filecheck: @mkdir test-place; \ diff --git a/tests/data/test802 b/tests/data/test802 index 9c7013a5c..59d2e8c1f 100644 --- a/tests/data/test802 +++ b/tests/data/test802 @@ -38,11 +38,15 @@ EHLO user MAIL FROM:802@from
RCPT TO:802@foo
DATA
+QUIT
+</protocol> +<upload> From: different To: another body -QUIT
-</protocol> +
+.
+</upload> </verify> </testcase> diff --git a/tests/data/test803 b/tests/data/test803 new file mode 100644 index 000000000..e6e48b5d2 --- /dev/null +++ b/tests/data/test803 @@ -0,0 +1,64 @@ +<testcase> +<info> +<keywords> +SMTP +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP with CRLF-dot-CRLF in data + </name> +<stdin> +From: different +To: another + +
+.
+.
+
+.
+ +body +</stdin> + <command> +smtp://%HOSTIP:%SMTPPORT -u user:secret --mail-rcpt 803@foo --mail-from 803@from -T - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO user
+MAIL FROM:803@from
+RCPT TO:803@foo
+DATA
+QUIT
+</protocol> +<upload> +From: different +To: another + +
+..
+..
+
+..
+ +body +
+.
+</upload> +</verify> +</testcase> diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl index ccdc4cbb4..91f541235 100644 --- a/tests/ftpserver.pl +++ b/tests/ftpserver.pl @@ -473,12 +473,69 @@ sub DATA_smtp { if($testno eq "verifiedserver") { sendcontrol "554 WE ROOLZ: $$\r\n"; + return 0; # don't wait for data now } else { + $testno =~ s/^([0-9]*).*/$1/; sendcontrol "354 Show me the mail\r\n"; } logmsg "===> rcpt $testno was $smtp_rcpt\n"; + + my $filename = "log/upload.$testno"; + + logmsg "Store test number $testno in $filename\n"; + + open(FILE, ">$filename") || + return 0; # failed to open output + + my $line; + my $ulsize=0; + my $disc=0; + my $raw; + while (5 == (sysread \*SFREAD, $line, 5)) { + if($line eq "DATA\n") { + my $i; + my $eob; + sysread \*SFREAD, $i, 5; + + my $size = 0; + if($i =~ /^([0-9a-fA-F]{4})\n/) { + $size = hex($1); + } + + sysread \*SFREAD, $line, $size; + + $ulsize += $size; + print FILE $line if(!$nosave); + + $raw .= $line; + if($raw =~ /\x0d\x0a\x2e\x0d\x0a\z/) { + # end of data marker! + $eob = 1; + } + logmsg "> Appending $size bytes to file\n"; + if($eob) { + logmsg "Found SMTP EOB marker\n"; + last; + } + } + elsif($line eq "DISC\n") { + # disconnect! + $disc=1; + last; + } + else { + logmsg "No support for: $line"; + last; + } + } + if($nosave) { + print FILE "$ulsize bytes would've been stored here\n"; + } + close(FILE); + logmsg "received $ulsize bytes upload\n"; + } sub RCPT_smtp { |