Cutthrough: for an onward finaldot timeout, generate an initator 450 in defer=pass...
authorJeremy Harris <jgh146exb@wizmail.org>
Mon, 26 Mar 2018 15:59:29 +0000 (16:59 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Mon, 26 Mar 2018 16:34:17 +0000 (17:34 +0100)
doc/doc-txt/ChangeLog
src/src/receive.c
test/log/5405
test/scripts/5400-cutthrough/5405
test/stdout/5405

index cbc7f2baa5da087d3e1ecec72c997a31dcbca570..201e21207b8a4af6409a5ffb0b0474bb7b9378f4 100644 (file)
@@ -183,6 +183,10 @@ JH/34 Re-introduce enforcement of no cutthrough delivery on transports having
       consolidation of verify-callout and delivery SMTP handling.
       Extend the restriction to also cover ARC-signing.
 
+JH/35 Cutthrough: for a final-dot response timeout (and nonunderstood responses)
+      in defer=pass mode supply a 450 to the initiator.  Previously the message
+      would be spooled.
+
 
 Exim version 4.90
 -----------------
index 4cc43eb3aaad2ca582e1835bfddc183ab9ad41bb..4e1dca5c57034b9e14e63a7ec173cb299d21522a 100644 (file)
@@ -4157,9 +4157,11 @@ if(cutthrough.fd >= 0 && cutthrough.delivery)
     case '4':  /* Temp-reject. Keep spoolfiles and accept, unless defer-pass mode.
                ... for which, pass back the exact error */
       if (cutthrough.defer_pass) smtp_reply = string_copy_malloc(msg);
-      /*FALLTRHOUGH*/
+      cutthrough_done = TMP_REJ;               /* Avoid the usual immediate delivery attempt */
+      break;                                   /* message_id needed for SMTP accept below */
 
     default:   /* Unknown response, or error.  Treat as temp-reject.         */
+      if (cutthrough.defer_pass) smtp_reply = US"450 Onward transmission not accepted";
       cutthrough_done = TMP_REJ;               /* Avoid the usual immediate delivery attempt */
       break;                                   /* message_id needed for SMTP accept below */
 
index 901add1c39e1b3ea2a6e6a28d01e16b8760013a0..feb4052f4f34438eda004f53ae9e2f4912e0d889 100644 (file)
@@ -16,6 +16,7 @@
 1999-03-02 09:44:33 10HmbB-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss for userf@domain.com
 1999-03-02 09:44:33 rcpt for userg@domain.com
 1999-03-02 09:44:33 10HmbC-0005vi-00 U=CALLER userg@domain.com F=<CALLER@myhost.test.ex> tmp-reject from cutthrough after DATA: R=all T=smtp H=127.0.0.1 [127.0.0.1] C="459 content reject"
+1999-03-02 09:44:33 rcpt for userj@domain.com
 1999-03-02 09:44:33 rcpt for userh@domain.com
 1999-03-02 09:44:33 10HmbD-0005vi-00 >> userh@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] C="250 OK"
 1999-03-02 09:44:33 10HmbD-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss for userh@domain.com
index 2e7a33388652ab63fade7f6f32ec717680a372aa..2de0f5c5872d2f3ce4ffa12c99f9460a8e142e6a 100644 (file)
@@ -170,6 +170,30 @@ MAIL FROM:<CALLER@myhost.test.ex>
 RCPT TO:<userg@domain.com>
 DATA
 
+.
+QUIT
+****
+#
+# conn-drop (at DATA-dot), option "pass".  Should tmp-rej source, at DATA.
+server PORT_S
+220 ESMTP
+EHLO
+250 OK
+MAIL FROM:
+250 Sender OK
+RCPT TO:
+250 good rcpt
+DATA
+354 Send data
+.
+>*eof
+****
+exim -DCONTROL=/defer=pass -bs
+EHLO myhost.test.ex
+MAIL FROM:<CALLER@myhost.test.ex>
+RCPT TO:<userj@domain.com>
+DATA
+
 .
 QUIT
 ****
index 14bfdabdd45481cf4eb9570ac2a2f072f9b47da2..ef39477d52707399e776b16454972b69d6ad4937 100644 (file)
 250 OK\r
 250 Accepted\r
 354 Enter message, ending with "." on a line by itself\r
+450 Onward transmission not accepted\r
+221 myhost.test.ex closing connection\r
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250-myhost.test.ex Hello CALLER at myhost.test.ex\r
+250-SIZE 52428800\r
+250-8BITMIME\r
+250-PIPELINING\r
+250 HELP\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
 250 OK id=10HmbD-0005vi-00\r
 221 myhost.test.ex closing connection\r
 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
@@ -247,6 +258,30 @@ EHLO myhost.test.ex
 250 OK
 MAIL FROM:<CALLER@myhost.test.ex>
 250 Sender OK
+RCPT TO:<userj@domain.com>
+250 good rcpt
+DATA
+354 Send data
+Received: from CALLER (helo=myhost.test.ex)
+       by myhost.test.ex with local-esmtp (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmbE-0005vi-00
+       for userj@domain.com; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmbE-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+X-hdr-rtr-new: +++
+
+.
+>*eof
+End of script
+Listening on port 1224 ... 
+Connection request from [ip4.ip4.ip4.ip4]
+220 ESMTP
+EHLO myhost.test.ex
+250 OK
+MAIL FROM:<CALLER@myhost.test.ex>
+250 Sender OK
 RCPT TO:<userh@domain.com>
 250 Recipient OK
 DATA