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 975fc16aa20984a4a46ed19ec5e48caebf372ae7..6741c01a6063c25c6af63f2173a5d9a20084e4da 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 f6e57b4b502473978b22ab59791f5851ef0daaea..fa38ca019ae202d899d3ff2257399b5ceb3d6235 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 e317eb78428c0f88cdfc9994fdd8758365bfea73..91fabeeb7e75aaae15e8371dec2df811ba17a57e 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 3aecf76f067f58d00a514a48eb1363789910255d..4f217237631d651ec2163dbdf43e54c3e1457cc7 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 4be0d5227614f019733d5d2960387edb2918bde8..e0fe9dc93b2b55b020079f0bb7f9a18ec4d4aff3 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 259df4604216f7717cb6eb8fd9e4754a9d89207f..9e31fb1d0866234ff2af5cdc58663435a2e99b99 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 4c74ff2943913bea1571507f9fe3d0d393cd770f..c58c830113cfea80773d168299a8b6e53300ad1d 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 2b01713f803c58258af9409020c5f4cbde16dd99..030801927bf015403e2fddda03c8ed4975c2c860 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 5f46801303c7a10500fafedcc70c86b6125f96bc..67b47ab066b430dc0aa452c974cb41ffddb46e17 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 ec84ba9c047753bf7c9de6ae5307d3166351f1e1..8d2018ee71589dd9032ab570e5a79ba768763401 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 eaebb34d4cbfff70dc15f9a1adaf780e224b62f6..29b9c3ebb2d5d9905354e911fb5a5792039b7d74 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 553f8c1ce3adff70a58feab901b71b0269406b56..a15308559d41b0fc46928bb1eb3a836d7a9b7263 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 cfd5105573ac15585f3a85f488da47391cb1d743..dd4abbe4032dc1baf1fca5b81bf304aa7791d955 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 58d52d2f5a94942e0ff1c54604a9711200d82f1b..11e165c61e163278339172175667699aa90d353a 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 df110cc5a417f761786ee0f188b57ad06424d9fe..1a9bb89c2c659bc50359a30a8d9477a767ec61ee 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 3efab7e3a1413170aaaf5beb3fba7e2beba4a167..ec5e415c656ea1fc0c87d7a424e8218a52d7dfb0 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 8d35b67302aa37da2aebe75f1c27d5531768b929..361f9fd8287f52e4cded2cf9454bf5782ec91c91 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 7bf7be25596cb7eaf026ad9733c506335e16b77a..01894f12817314fcb07470ee960d96af84805331 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