Testsuite: 0322 (pipelining errors) avoid triggering SIGPIPE
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 8 Apr 2016 18:37:13 +0000 (19:37 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Fri, 8 Apr 2016 18:37:13 +0000 (19:37 +0100)
This was timing-dependent; if the exim closed the connection before
the script wrote to it _after_ triggerring an error, EPIPE/SIGPIPE.
Unexplained as yet: why runtest (perl) saw this as a 141 server
returncode (NB: 141-128 = 13 = SIGPIPE, the shell behaviour) when
"perldoc -v '$?'" (which runtest is coded to) says that a signum
should be in the top nibble of 16b.

18 files changed:
src/src/transports/smtp.c
test/runtest
test/scripts/0000-Basic/0322
test/src/server.c
test/stderr/0143
test/stderr/0217
test/stderr/0218
test/stderr/0276
test/stderr/0388
test/stderr/0467
test/stderr/0476
test/stderr/0525
test/stderr/2008
test/stderr/2013
test/stderr/2108
test/stderr/2113
test/stderr/3404
test/stdout/0322

index 975fc16..6741c01 100644 (file)
@@ -2958,6 +2958,7 @@ writing RSET might have failed, or there may be other addresses whose hosts are
 specified in the transports, and therefore not visible at top level, in which
 case continue_more won't get set. */
 
+HDEBUG(D_transport|D_acl|D_v) debug_printf("  SMTP(close)>>\n");
 (void)close(inblock.sock);
 
 #ifndef DISABLE_EVENT
index f6e57b4..fa38ca0 100755 (executable)
@@ -1977,6 +1977,7 @@ if (/^(ln|ls|du|mkdir|mkfifo|touch|cp|cat)\s/ ||
 # command, triggered by $server_pid being non-zero. The server sends its output
 # to a different file. The variable $server_opts, if not empty, contains
 # options to disable IPv4 or IPv6 if necessary.
+# This works because "server" swallows its stdin before waiting for a connection.
 
 if (/^server\s+(.*)$/)
   {
index e317eb7..91fabee 100644 (file)
@@ -13,8 +13,7 @@ RCPT TO:
 250 Recipient OK
 DATA
 >
-QUIT
-250 OK
+*eof
 ****
 exim -odi x@test.ex
 ****
@@ -29,9 +28,7 @@ MAIL FROM:
 RCPT TO:
 >
 DATA
-550 Failed DATA
-QUIT
-250 OK
+*eof
 ****
 exim -odi x@test.ex
 ****
@@ -46,9 +43,7 @@ MAIL FROM:
 RCPT TO:
 550 Can't send RCPT
 DATA
-550 Can't send DATA
-QUIT
-250 OK
+*eof
 ****
 exim -odi x@test.ex
 ****
@@ -68,9 +63,7 @@ RCPT TO:
 RCPT TO:
 250 Third RCPT OK
 DATA
-550 Failed DATA
-QUIT
-250 OK
+*eof
 ****
 exim -odi x@test.ex y@test.ex z@test.ex
 ****
@@ -109,8 +102,7 @@ RCPT TO:
 250 Recipient OK
 DATA
 >
-QUIT
-250 OK
+*eof
 ****
 exim -odi x@test.ex
 ****
@@ -123,10 +115,7 @@ MAIL FROM:
 250 Sender OK
 RCPT TO:
 >
-DATA
-550 Failed DATA
-QUIT
-250 OK
+*eof
 ****
 exim -odi x@test.ex
 ****
@@ -137,12 +126,7 @@ EHLO
 250 HELP
 MAIL FROM:
 >
-RCPT TO:
-550 Can't send RCPT
-DATA
-550 Can't send DATA
-QUIT
-250 OK
+*eof
 ****
 exim -odi x@test.ex
 ****
@@ -158,12 +142,7 @@ RCPT TO:
 RCPT TO:
 >
 250 Second RCPT malformed
-RCPT TO:
-250 Third RCPT OK
-DATA
-550 Failed DATA
-QUIT
-250 OK
+*eof
 ****
 exim -odi x@test.ex y@test.ex z@test.ex
 ****
index 3aecf76..4f21723 100644 (file)
@@ -572,6 +572,7 @@ for (count = 0; count < connection_count; count++)
               cr.pid, cr.uid, cr.gid);
     --------------*****************/
     }
+  fflush(stdout);
 
   if (dup_accept_socket < 0)
     {
index 4be0d52..e0fe9dc 100644 (file)
@@ -39,6 +39,7 @@ transport_check_waiting entered
   sequence=1 local_max=500 global_max=-1
 no messages waiting for 127.0.0.1
   SMTP>> QUIT
+  SMTP(close)>>
 Leaving my_smtp transport
 LOG: MAIN
   => userx@domain.com R=my_main_router T=my_smtp H=127.0.0.1 [127.0.0.1] C="250 OK"
index 259df46..9e31fb1 100644 (file)
@@ -413,6 +413,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP<< 550 NO
   SMTP<< 403 Sorry temp data error
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   == yes@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined DATA: 403 Sorry temp data error
 LOG: MAIN
@@ -847,6 +848,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => w@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK"
 LOG: MAIN
index 4c74ff2..c58c830 100644 (file)
@@ -28,6 +28,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP<< 351 Send more
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
+  SMTP(close)>>
 LOG: MAIN
   => a@test.ex F=<CALLER@test.ex> R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK"
 LOG: MAIN
@@ -48,6 +49,7 @@ T: send_to_server  (ACL)
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => b@test.ex F=<CALLER@test.ex> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK"
 LOG: MAIN
@@ -85,6 +87,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP<< 503 Unexpected RCPT
   SMTP<< 503 Unexpected DATA
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   ** a@test.ex F=<CALLER@test.ex> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@test.ex>: 550 NO
 Exim version x.yz ....
@@ -142,6 +145,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP<< 503 Unexpected DATA
   SMTP>> RSET
   SMTP<< 250 OK
+  SMTP(close)>>
 LOG: MAIN
   ** b@test.ex F=<CALLER@test.ex> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<b@test.ex>: 550 Unknown
 Exim version x.yz ....
@@ -169,6 +173,7 @@ T: send_to_server  (ACL)
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => c@test.ex F=<CALLER@test.ex> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* C="250 OK"
 LOG: MAIN
index 2b01713..0308019 100644 (file)
@@ -14,6 +14,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP<< 250 OK
   SMTP<< 500 NO
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   ** userx@test.ex R=r1 T=t1 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined DATA: 500 NO
 LOG: MAIN
@@ -47,6 +48,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP>> DATA
   SMTP<< 500 NO
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   ** userx@test.ex R=r1 T=t1 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after DATA: 500 NO
 LOG: MAIN
index 5f46801..67b47ab 100644 (file)
@@ -95,6 +95,7 @@ LOG: MAIN
   H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<x@y>: 451 Temporary error
 added retry item for R:x@y: errno=-44 more_errno=dd,A flags=0
   SMTP>> QUIT
+  SMTP(close)>>
 set_process_info: pppp delivering 10HmaX-0005vi-00: just tried 127.0.0.1 [127.0.0.1] for x@y: result OK
 address match test: subject=*@127.0.0.1 pattern=*
 127.0.0.1 in "*"? yes (matched "*")
index ec84ba9..8d2018e 100644 (file)
@@ -30,6 +30,7 @@ Connecting to localhost.test.ex [127.0.0.1]:1224 ... connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => x@srv27.test.ex R=r1 T=t1 H=localhost.test.ex [127.0.0.1]:1224 C="250 OK"
 LOG: MAIN
index eaebb34..29b9c3e 100644 (file)
@@ -36,6 +36,7 @@ transport_check_waiting entered
   sequence=1 local_max=500 global_max=-1
   SMTP>> RSET
 H=127.0.0.1 [127.0.0.1] Remote host closed connection in response to RSET
+  SMTP(close)>>
 set_process_info: pppp delivering 10HmaX-0005vi-00: just tried 127.0.0.1 [127.0.0.1] for userx@test.ex: result OK
 Leaving t1 transport
 set_process_info: pppp delivering 10HmaX-0005vi-00 (just run t1 for userx@test.ex in subprocess)
index 553f8c1..a153085 100644 (file)
@@ -14,6 +14,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP>> DATA
   SMTP<< 354 SEND
   SMTP>> writing message and terminating "."
+  SMTP(close)>>
 LOG: MAIN
   H=127.0.0.1 [127.0.0.1]: SMTP timeout after sending data block (ddd bytes written): Connection timed out
 LOG: MAIN
index cfd5105..dd4abbe 100644 (file)
@@ -27,6 +27,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1225 ... connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK id=10HmaZ-0005vi-00
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => CALLER@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:xxxxRSA_AES_256_CBC_SHAnnn:256 CV=no DN="C=UK,O=The Exim Maintainers,OU=Test Suite,CN=Phil Pennock" C="250 OK id=10HmaZ-0005vi-00"
 LOG: MAIN
@@ -60,6 +61,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1225 ... connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK id=10HmbA-0005vi-00
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => CALLER@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:xxxxRSA_AES_256_CBC_SHAnnn:256 CV=no DN="C=UK,O=The Exim Maintainers,OU=Test Suite,CN=Phil Pennock" C="250 OK id=10HmbA-0005vi-00"
 LOG: MAIN
@@ -90,6 +92,7 @@ Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:1225 ... connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK id=10HmbB-0005vi-00
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => abcd@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:xxxxRSA_AES_256_CBC_SHAnnn:256 CV=no DN="C=UK,O=The Exim Maintainers,OU=Test Suite,CN=Phil Pennock" C="250 OK id=10HmbB-0005vi-00"
 LOG: MAIN
index 58d52d2..11e165c 100644 (file)
@@ -34,6 +34,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1225 ... connected
          250-PIPELINING
          250-STARTTLS
          250 HELP
+  SMTP(close)>>
 LOG: MAIN
   => userx@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:xxxxRSA_AES_256_CBC_SHAnnn:256 CV=no DN="C=UK,O=The Exim Maintainers,OU=Test Suite,CN=Phil Pennock" C="250 OK id=10HmaZ-0005vi-00"
 LOG: MAIN
@@ -58,6 +59,7 @@ admin user
   SMTP<< 354 Enter message, ending with "." on a line by itself
   SMTP<< 250 OK id=10HmbA-0005vi-00
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => userx@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:xxxxRSA_AES_256_CBC_SHAnnn:256 CV=no DN="C=UK,O=The Exim Maintainers,OU=Test Suite,CN=Phil Pennock" C="250 OK id=10HmbA-0005vi-00"
 LOG: MAIN
index df110cc..1a9bb89 100644 (file)
@@ -31,6 +31,7 @@ LOG: MAIN
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK id=10HmaZ-0005vi-00
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => CALLER@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLSv1:AES256-SHA:256 CV=no DN="/C=UK/O=The Exim Maintainers/OU=Test Suite/CN=Phil Pennock" C="250 OK id=10HmaZ-0005vi-00"
 LOG: MAIN
@@ -68,6 +69,7 @@ LOG: MAIN
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK id=10HmbA-0005vi-00
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => CALLER@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLSv1:AES256-SHA:256 CV=no DN="/C=UK/O=The Exim Maintainers/OU=Test Suite/CN=Phil Pennock" C="250 OK id=10HmbA-0005vi-00"
 LOG: MAIN
@@ -102,6 +104,7 @@ LOG: MAIN
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK id=10HmbB-0005vi-00
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => abcd@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLSv1:AES256-SHA:256 CV=no DN="/C=UK/O=The Exim Maintainers/OU=Test Suite/CN=Phil Pennock" C="250 OK id=10HmbB-0005vi-00"
 LOG: MAIN
index 3efab7e..ec5e415 100644 (file)
@@ -34,6 +34,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1225 ... connected
          250-PIPELINING
          250-STARTTLS
          250 HELP
+  SMTP(close)>>
 LOG: MAIN
   => userx@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLSv1:AES256-SHA:256 CV=no DN="/C=UK/O=The Exim Maintainers/OU=Test Suite/CN=Phil Pennock" C="250 OK id=10HmaZ-0005vi-00"
 LOG: MAIN
@@ -58,6 +59,7 @@ admin user
   SMTP<< 354 Enter message, ending with "." on a line by itself
   SMTP<< 250 OK id=10HmbA-0005vi-00
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => userx@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLSv1:AES256-SHA:256 CV=no DN="/C=UK/O=The Exim Maintainers/OU=Test Suite/CN=Phil Pennock" C="250 OK id=10HmbA-0005vi-00"
 LOG: MAIN
index 8d35b67..361f9fd 100644 (file)
@@ -18,6 +18,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => userx@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] A=plain C="250 OK"
 LOG: MAIN
@@ -42,6 +43,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => userx@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] A=plain C="250 OK"
 LOG: MAIN
@@ -70,6 +72,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP>> QUIT
+  SMTP(close)>>
 LOG: MAIN
   => userx@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] A=login C="250 OK"
 LOG: MAIN
index 7bf7be2..01894f1 100644 (file)
@@ -13,7 +13,8 @@ RCPT TO:<x@test.ex>
 250 Recipient OK
 DATA
 >
-Unexpected EOF read from client
+Expected EOF read from client
+End of script
 Listening on port 1224 ... 
 Connection request from [127.0.0.1]
 220 ESMTP
@@ -26,8 +27,8 @@ MAIL FROM:<CALLER@myhost.test.ex>
 RCPT TO:<x@test.ex>
 >
 DATA
-550 Failed DATA
-Unexpected EOF read from client
+Expected EOF read from client
+End of script
 Listening on port 1224 ... 
 Connection request from [127.0.0.1]
 220 ESMTP
@@ -40,8 +41,8 @@ MAIL FROM:<CALLER@myhost.test.ex>
 RCPT TO:<x@test.ex>
 550 Can't send RCPT
 DATA
-550 Can't send DATA
-Unexpected EOF read from client
+Expected EOF read from client
+End of script
 Listening on port 1224 ... 
 Connection request from [127.0.0.1]
 220 ESMTP
@@ -59,8 +60,8 @@ RCPT TO:<y@test.ex>
 RCPT TO:<z@test.ex>
 250 Third RCPT OK
 DATA
-550 Failed DATA
-Unexpected EOF read from client
+Expected EOF read from client
+End of script
 Listening on port 1224 ... 
 Connection request from [127.0.0.1]
 220 ESMTP
@@ -91,7 +92,8 @@ RCPT TO:<x@test.ex>
 250 Recipient OK
 DATA
 >
-Unexpected EOF read from client
+Expected EOF read from client
+End of script
 Listening on port 1224 ... 
 Connection request from [127.0.0.1]
 220 ESMTP
@@ -102,7 +104,8 @@ MAIL FROM:<CALLER@myhost.test.ex>
 250 Sender OK
 RCPT TO:<x@test.ex>
 >
-Unexpected EOF read from client
+Expected EOF read from client
+End of script
 Listening on port 1224 ... 
 Connection request from [127.0.0.1]
 220 ESMTP
@@ -111,7 +114,8 @@ EHLO myhost.test.ex
 250 HELP
 MAIL FROM:<CALLER@myhost.test.ex>
 >
-Unexpected EOF read from client
+Expected EOF read from client
+End of script
 Listening on port 1224 ... 
 Connection request from [127.0.0.1]
 220 ESMTP
@@ -125,4 +129,5 @@ RCPT TO:<x@test.ex>
 RCPT TO:<y@test.ex>
 >
 250 Second RCPT malformed
-Unexpected EOF read from client
+Expected EOF read from client
+End of script