PRDR server should shortcut full response processing for 1-recipient mails.
authorJeremy Harris <jgh146exb@wizmail.org>
Mon, 14 Jan 2013 20:29:54 +0000 (20:29 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Mon, 14 Jan 2013 21:42:38 +0000 (21:42 +0000)
src/src/receive.c
test/log/5500
test/mail/5500.user1 [new file with mode: 0644]
test/scripts/5500-PRDR/5500
test/stdout/5500

index 7145ec24a15c1cf7891b2df139a7660ab050d586..e6ebda8024ff3ffb93f795f2d1ffbcb7583be7d8 100644 (file)
@@ -3228,7 +3228,7 @@ else
 #endif /* WITH_CONTENT_SCAN */
 
 #ifdef EXPERIMENTAL_PRDR
-    if (prdr_requested && recipients_count > 0 && acl_smtp_data_prdr != NULL )
+    if (prdr_requested && recipients_count > 1 && acl_smtp_data_prdr != NULL )
       {
       unsigned int c;
       int all_pass = OK;
@@ -3277,8 +3277,7 @@ else
        else if (user_msg) log_write(0, LOG_MAIN, "PRDR %s %s", addr, user_msg);
        else               log_write(0, LOG_MAIN, msg);
 
-       if (rc != OK)
-         receive_remove_recipient(recipients_list[c--].address);
+       if (rc != OK) { receive_remove_recipient(addr); c--; }
         }
         /* Set up final message, used if data acl gives OK */
         smtp_reply = string_sprintf("%s id=%s message %s",
@@ -3290,6 +3289,8 @@ else
                           ? US"accepted"
                           : US"accepted for some recipients");
       }
+    else
+      prdr_requested = FALSE;
 #endif /* EXPERIMENTAL_PRDR */
 
     /* Check the recipients count again, as the MIME ACL might have changed
index f96a1ccc465546aa97d8f08af260b659956bbad8..e9e06a5309f9213e21d43cd0767e7f537084835e 100644 (file)
@@ -7,3 +7,6 @@
 1999-03-02 09:44:33 10HmaX-0005vi-00 PRDR R=<userp@test.ex> acceptance
 1999-03-02 09:44:33 10HmaX-0005vi-00 PRDR R=<userq@test.ex> acceptance
 1999-03-02 09:44:33 10HmaX-0005vi-00 H=(rhu.barb) [127.0.0.1] F=<> rejected after DATA
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= <> H=(rhu.barb) [127.0.0.1] P=esmtp S=sss
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => user1 <user1@test.ex> R=r0 T=t1
+1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
diff --git a/test/mail/5500.user1 b/test/mail/5500.user1
new file mode 100644 (file)
index 0000000..a485c7c
--- /dev/null
@@ -0,0 +1,8 @@
+From MAILER-DAEMON Tue Mar 02 09:44:33 1999
+Received: from [127.0.0.1] (helo=rhu.barb)
+       by myhost.test.ex with esmtp (Exim x.yz)
+       id 10HmaZ-0005vi-00
+       for user1@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Sender: sender@some.where
+
+
index 57d4290e1e79e3c4f97d5488ccf43ca46784634d..3090fa5edbccbcd72ffc9c30ad3ccc5741083f40 100644 (file)
@@ -66,5 +66,32 @@ quit
 ??? 221
 ****
 sleep 1
+#
+#
+# 3: PRDR should be avoided for a single-recipient message
+# even though the client showed support.
+client 127.0.0.1 PORT_D
+??? 220
+ehlo rhu.barb
+??? 250-
+??? 250-
+??? 250-
+??? 250-
+??? 250-PRDR
+??? 250
+mail from:<> PRDR
+??? 250
+rcpt to:<user1@test.ex>
+??? 250
+data
+??? 354
+Sender: sender@some.where
+.
+??? 250
+quit
+??? 221
+****
+sleep 1
+#
 killdaemon
 #
index debe3499b0f571167953bb59a6cdb1cc67042aea..7732787ef3970593b9229bd5f0f7fd4b81117057 100644 (file)
@@ -87,3 +87,36 @@ Connecting to 127.0.0.1 port 1225 ... connected
 ??? 221
 <<< 221 myhost.test.ex closing connection
 End of script
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> ehlo rhu.barb
+??? 250-
+<<< 250-myhost.test.ex Hello rhu.barb [127.0.0.1]
+??? 250-
+<<< 250-SIZE 52428800
+??? 250-
+<<< 250-8BITMIME
+??? 250-
+<<< 250-PIPELINING
+??? 250-PRDR
+<<< 250-PRDR
+??? 250
+<<< 250 HELP
+>>> mail from:<> PRDR
+??? 250
+<<< 250 OK, PRDR Requested
+>>> rcpt to:<user1@test.ex>
+??? 250
+<<< 250 Accepted
+>>> data
+??? 354
+<<< 354 Enter message, ending with "." on a line by itself
+>>> Sender: sender@some.where
+>>> .
+??? 250
+<<< 250 OK id=10HmaZ-0005vi-00
+>>> quit
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script