Fix bounces for non-SMTP reception errors to recognize
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Mon, 20 Mar 2006 10:55:21 +0000 (10:55 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Mon, 20 Mar 2006 10:55:21 +0000 (10:55 +0000)
bounce_return_xxx.

doc/doc-txt/ChangeLog
src/src/moan.c
src/src/version.c
test/confs/0021
test/log/0021
test/mail/0021.ok
test/mail/0021.userx
test/mail/0021.x
test/rejectlog/0021
test/scripts/0000-Basic/0021
test/stdout/0021

index ce3d142e75c376e84fa0cc6c845501759dd1c043..4509b13e88991eb71222f7b4dfccc156437fb07a 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.334 2006/03/17 16:51:45 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.335 2006/03/20 10:55:21 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -326,6 +326,14 @@ PH/66 Updated OS/Makefile-HP-UX for gcc 4.1.0 with HP-UX 11.
 PH/67 Fixed minor infelicity in the sorting of addresses to ensure that IPv6
       is preferred over IPv4.
 
+PH/68 The bounce_return_message and bounce_return_body options were not being
+      honoured for bounces generated during the reception of non-SMTP messages.
+      In particular, this applied to messages rejected by the ACL. This bug has
+      been fixed. However, if bounce_return_message is true and bounce_return_
+      body is false, the headers that are returned for a non-SMTP message
+      include only those that have been read before the error was detected.
+      (In the case of an ACL rejection, they have all been read.)
+
 
 Exim version 4.60
 -----------------
index 63b3426bf9c7279d03336593d8ea5ffabb75628e..28046c2c5120dd01289306a5a6afcbc613095554 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/moan.c,v 1.5 2006/02/07 11:19:00 ph10 Exp $ */
+/* $Cambridge: exim/src/src/moan.c,v 1.6 2006/03/20 10:55:21 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -185,62 +185,74 @@ switch(ident)
   break;
   }
 
-/* Now copy the message - headers then the rest of the input if
-available, up to the configured limit. */
+/* Now, if configured, copy the message; first the headers and then the rest of
+the input if available, up to the configured limit, if the option for including
+message bodies in bounces is set. */
 
-if (size_limit == 0 || size_limit > thismessage_size_limit)
-  size_limit = thismessage_size_limit;
-
-if (size_limit > 0 && size_limit < message_size)
+if (bounce_return_message)
   {
-  int x = size_limit;
-  uschar *k = US"";
-  if ((x & 1023) == 0)
+  if (bounce_return_body)
     {
-    k = US"K";
-    x >>= 10;
+    fprintf(f, "\n"
+      "------ This is a copy of your message, including all the headers.");
+    if (size_limit == 0 || size_limit > thismessage_size_limit)
+      size_limit = thismessage_size_limit;
+    if (size_limit > 0 && size_limit < message_size)
+      {
+      int x = size_limit;
+      uschar *k = US"";
+      if ((x & 1023) == 0)
+        {
+        k = US"K";
+        x >>= 10;
+        }
+      fprintf(f, "\n"
+        "------ No more than %d%s characters of the body are included.\n\n",
+          x, k);
+      }
+    else fprintf(f, " ------\n\n");
+    }
+  else
+    {
+    fprintf(f, "\n"
+      "------ This is a copy of the headers that were received before the "
+      "error\n       was detected.\n\n");
     }
-  fprintf(f, "\n"
-  "------ This is a copy of your message, including all the headers.\n"
-  "------ No more than %d%s characters of the body are included.\n\n", x, k);
-  }
-else fprintf(f, "\n"
-  "------ This is a copy of your message, including all the headers. ------"
-  "\n\n");
 
-/* If the error occurred before the Received: header was created, its text
-field will still be NULL; just omit such a header line. */
+  /* If the error occurred before the Received: header was created, its text
+  field will still be NULL; just omit such a header line. */
 
-while (headers != NULL)
-  {
-  if (headers->text != NULL) fprintf(f, "%s", CS headers->text);
-  headers = headers->next;
-  }
+  while (headers != NULL)
+    {
+    if (headers->text != NULL) fprintf(f, "%s", CS headers->text);
+    headers = headers->next;
+    }
 
-if (ident != ERRMESS_VLONGHEADER && ident != ERRMESS_VLONGHDRLINE)
-  fputc('\n', f);
+  if (ident != ERRMESS_VLONGHEADER && ident != ERRMESS_VLONGHDRLINE)
+    fputc('\n', f);
 
-/* After early detection of an error, the message file may be STDIN,
-in which case we might have to terminate on a line containing just "."
-as well as on EOF. We may already have the first line in memory. */
+  /* After early detection of an error, the message file may be STDIN,
+  in which case we might have to terminate on a line containing just "."
+  as well as on EOF. We may already have the first line in memory. */
 
-if (message_file != NULL)
-  {
-  int ch;
-  int state = 1;
-  BOOL enddot = dot_ends && message_file == stdin;
-  if (firstline != NULL) fprintf(f, "%s", CS firstline);
-  while ((ch = fgetc(message_file)) != EOF)
+  if (bounce_return_body && message_file != NULL)
     {
-    fputc(ch, f);
-    if (size_limit > 0 && ++written > size_limit) break;
-    if (enddot)
+    int ch;
+    int state = 1;
+    BOOL enddot = dot_ends && message_file == stdin;
+    if (firstline != NULL) fprintf(f, "%s", CS firstline);
+    while ((ch = fgetc(message_file)) != EOF)
       {
-      if (state == 0) { if (ch == '\n') state = 1; }
-      else if (state == 1)
-        { if (ch == '.') state = 2; else if (ch != '\n') state = 0; }
-      else
-        { if (ch == '\n') break; else state = 0; }
+      fputc(ch, f);
+      if (size_limit > 0 && ++written > size_limit) break;
+      if (enddot)
+        {
+        if (state == 0) { if (ch == '\n') state = 1; }
+        else if (state == 1)
+          { if (ch == '.') state = 2; else if (ch != '\n') state = 0; }
+        else
+          { if (ch == '\n') break; else state = 0; }
+        }
       }
     }
   }
index 351f476ea88256d5a7d0b445780157c49e59650b..42b5ae392888655f668585489d46d3eca857298e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/version.c,v 1.13 2006/02/07 11:19:00 ph10 Exp $ */
+/* $Cambridge: exim/src/src/version.c,v 1.14 2006/03/20 10:55:21 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -12,7 +12,7 @@
 #include "exim.h"
 
 
-#define THIS_VERSION  "4.61"
+#define THIS_VERSION  "4.61-RC1"
 
 
 /* The header file cnumber.h contains a single line containing the
index 902d5f36961bc4e28593bcd3634212a96b368164..5ff787e283bb1eaf1b0d7845e5c6e716fccd6720 100644 (file)
@@ -1,6 +1,7 @@
 # Exim test configuration 0021
 
 SERVER=
+BR=
 
 exim_path = EXIM_PATH
 host_lookup_order = bydns
@@ -24,6 +25,8 @@ acl_smtp_helo = helo
 acl_smtp_mail = mail
 acl_smtp_rcpt = rcpt
 
+BR
+
 qualify_domain = test.ex
 trusted_users = CALLER
 
index 5f6faf289eb4893c747019deccf94d7ea1ec04a6..77ae6a64fd2aec24b492c953dbbdf2e1076662df 100644 (file)
@@ -1,21 +1,21 @@
 1999-03-02 09:44:33 10HmaX-0005vi-00 F=<userx@test1> rejected by non-SMTP ACL: don't like sender userx@test1
-1999-03-02 09:44:33 10HmbA-0005vi-00 <= <> R=10HmaX-0005vi-00 U=EXIMUSER P=local S=sss
-1999-03-02 09:44:33 10HmbA-0005vi-00 => userx <userx@test1> R=accept T=appendfile
-1999-03-02 09:44:33 10HmbA-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbB-0005vi-00 <= ok@test1 U=CALLER P=local S=sss
-1999-03-02 09:44:33 10HmbB-0005vi-00 => userx <userx@test.ex> R=accept T=appendfile
-1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
-1999-03-02 09:44:33 10HmaY-0005vi-00 F=<ok@test2> rejected by non-SMTP ACL: cannot test hosts condition in non-SMTP ACL
-1999-03-02 09:44:33 10HmbC-0005vi-00 <= <> R=10HmaY-0005vi-00 U=EXIMUSER P=local S=sss
-1999-03-02 09:44:33 10HmbC-0005vi-00 => ok <ok@test2> R=accept T=appendfile
+1999-03-02 09:44:33 10HmbC-0005vi-00 <= <> R=10HmaX-0005vi-00 U=EXIMUSER P=local S=sss
+1999-03-02 09:44:33 10HmbC-0005vi-00 => userx <userx@test1> R=accept T=appendfile
 1999-03-02 09:44:33 10HmbC-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbD-0005vi-00 <= ok@test3 U=CALLER P=local S=sss
+1999-03-02 09:44:33 10HmbD-0005vi-00 <= ok@test1 U=CALLER P=local S=sss
 1999-03-02 09:44:33 10HmbD-0005vi-00 => userx <userx@test.ex> R=accept T=appendfile
 1999-03-02 09:44:33 10HmbD-0005vi-00 Completed
-1999-03-02 09:44:33 10HmaZ-0005vi-00 F=<ok@test4> rejected by non-SMTP ACL: no verified certificate
-1999-03-02 09:44:33 10HmbE-0005vi-00 <= <> R=10HmaZ-0005vi-00 U=EXIMUSER P=local S=sss
-1999-03-02 09:44:33 10HmbE-0005vi-00 => ok <ok@test4> R=accept T=appendfile
+1999-03-02 09:44:33 10HmaY-0005vi-00 F=<ok@test2> rejected by non-SMTP ACL: cannot test hosts condition in non-SMTP ACL
+1999-03-02 09:44:33 10HmbE-0005vi-00 <= <> R=10HmaY-0005vi-00 U=EXIMUSER P=local S=sss
+1999-03-02 09:44:33 10HmbE-0005vi-00 => ok <ok@test2> R=accept T=appendfile
 1999-03-02 09:44:33 10HmbE-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbF-0005vi-00 <= ok@test3 U=CALLER P=local S=sss
+1999-03-02 09:44:33 10HmbF-0005vi-00 => userx <userx@test.ex> R=accept T=appendfile
+1999-03-02 09:44:33 10HmbF-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaZ-0005vi-00 F=<ok@test4> rejected by non-SMTP ACL: no verified certificate
+1999-03-02 09:44:33 10HmbG-0005vi-00 <= <> R=10HmaZ-0005vi-00 U=EXIMUSER P=local S=sss
+1999-03-02 09:44:33 10HmbG-0005vi-00 => ok <ok@test4> R=accept T=appendfile
+1999-03-02 09:44:33 10HmbG-0005vi-00 Completed
 1999-03-02 09:44:33 H=[10.9.8.7] U=CALLER rejected connection in "connect" ACL
 1999-03-02 09:44:33 10.9.8.8 accepted by connect ACL
 1999-03-02 09:44:33 H=[10.9.8.8] U=CALLER rejected MAIL <bad@test1>
 1999-03-02 09:44:33 H=(x.y.z) [10.9.8.10] U=CALLER rejected EHLO or HELO x.y.z
 1999-03-02 09:44:33 10.9.8.8 accepted by connect ACL
 1999-03-02 09:44:33 mail accepted
-1999-03-02 09:44:33 10HmbF-0005vi-00 <= ok@test3 H=[10.9.8.8] U=CALLER P=smtp S=sss
-1999-03-02 09:44:33 10HmbF-0005vi-00 => x <x@y> R=accept T=appendfile
-1999-03-02 09:44:33 10HmbF-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbH-0005vi-00 <= ok@test3 H=[10.9.8.8] U=CALLER P=smtp S=sss
+1999-03-02 09:44:33 10HmbH-0005vi-00 => x <x@y> R=accept T=appendfile
+1999-03-02 09:44:33 10HmbH-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbA-0005vi-00 F=<userx@test1> rejected by non-SMTP ACL: don't like sender userx@test1
+1999-03-02 09:44:33 10HmbI-0005vi-00 <= <> R=10HmbA-0005vi-00 U=EXIMUSER P=local S=sss
+1999-03-02 09:44:33 10HmbI-0005vi-00 => userx <userx@test1> R=accept T=appendfile
+1999-03-02 09:44:33 10HmbI-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbB-0005vi-00 F=<userx@test1> rejected by non-SMTP ACL: don't like sender userx@test1
+1999-03-02 09:44:33 10HmbJ-0005vi-00 <= <> R=10HmbB-0005vi-00 U=EXIMUSER P=local S=sss
+1999-03-02 09:44:33 10HmbJ-0005vi-00 => userx <userx@test1> R=accept T=appendfile
+1999-03-02 09:44:33 10HmbJ-0005vi-00 Completed
index c4e87e422510de68697fda9fdd83c262bf1a61b8..213d0c60a3db27ff8d52f4c310d93f55817ef393 100644 (file)
@@ -1,12 +1,12 @@
 From MAILER-DAEMON Tue Mar 02 09:44:33 1999
 Received: from EXIMUSER by myhost.test.ex with local (Exim x.yz)
-       id 10HmbC-0005vi-00
+       id 10HmbE-0005vi-00
        for ok@test2; Tue, 2 Mar 1999 09:44:33 +0000
 Auto-Submitted: auto-replied
 From: Mail Delivery System <Mailer-Daemon@test.ex>
 To: ok@test2
 Subject: Mail failure - rejected by local scanning code
-Message-Id: <E10HmbC-0005vi-00@myhost.test.ex>
+Message-Id: <E10HmbE-0005vi-00@myhost.test.ex>
 Date: Tue, 2 Mar 1999 09:44:33 +0000
 
 A message that you sent was rejected by the local scanning code that
@@ -28,13 +28,13 @@ Test message 3.
 
 From MAILER-DAEMON Tue Mar 02 09:44:33 1999
 Received: from EXIMUSER by myhost.test.ex with local (Exim x.yz)
-       id 10HmbE-0005vi-00
+       id 10HmbG-0005vi-00
        for ok@test4; Tue, 2 Mar 1999 09:44:33 +0000
 Auto-Submitted: auto-replied
 From: Mail Delivery System <Mailer-Daemon@test.ex>
 To: ok@test4
 Subject: Mail failure - rejected by local scanning code
-Message-Id: <E10HmbE-0005vi-00@myhost.test.ex>
+Message-Id: <E10HmbG-0005vi-00@myhost.test.ex>
 Date: Tue, 2 Mar 1999 09:44:33 +0000
 
 A message that you sent was rejected by the local scanning code that
index e8f147a4f9dd598704cf9c95126db3a0dd3d72c2..2abd8d3150adc6474e3b389cb3fcfacf84ee8021 100644 (file)
@@ -1,12 +1,12 @@
 From MAILER-DAEMON Tue Mar 02 09:44:33 1999
 Received: from EXIMUSER by myhost.test.ex with local (Exim x.yz)
-       id 10HmbA-0005vi-00
+       id 10HmbC-0005vi-00
        for userx@test1; Tue, 2 Mar 1999 09:44:33 +0000
 Auto-Submitted: auto-replied
 From: Mail Delivery System <Mailer-Daemon@test.ex>
 To: userx@test1
 Subject: Mail failure - rejected by local scanning code
-Message-Id: <E10HmbA-0005vi-00@myhost.test.ex>
+Message-Id: <E10HmbC-0005vi-00@myhost.test.ex>
 Date: Tue, 2 Mar 1999 09:44:33 +0000
 
 A message that you sent was rejected by the local scanning code that
@@ -29,9 +29,9 @@ Test message 1.
 From ok@test1 Tue Mar 02 09:44:33 1999
 Received: from CALLER by myhost.test.ex with local (Exim x.yz)
        (envelope-from <ok@test1>)
-       id 10HmbB-0005vi-00
+       id 10HmbD-0005vi-00
        for userx@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
-Message-Id: <E10HmbB-0005vi-00@myhost.test.ex>
+Message-Id: <E10HmbD-0005vi-00@myhost.test.ex>
 From: ok@test1
 Date: Tue, 2 Mar 1999 09:44:33 +0000
 
@@ -40,11 +40,55 @@ Test message 2.
 From ok@test3 Tue Mar 02 09:44:33 1999
 Received: from CALLER by myhost.test.ex with local (Exim x.yz)
        (envelope-from <ok@test3>)
-       id 10HmbD-0005vi-00
+       id 10HmbF-0005vi-00
        for userx@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
-Message-Id: <E10HmbD-0005vi-00@myhost.test.ex>
+Message-Id: <E10HmbF-0005vi-00@myhost.test.ex>
 From: ok@test3
 Date: Tue, 2 Mar 1999 09:44:33 +0000
 
 Test message 4.
 
+From MAILER-DAEMON Tue Mar 02 09:44:33 1999
+Received: from EXIMUSER by myhost.test.ex with local (Exim x.yz)
+       id 10HmbI-0005vi-00
+       for userx@test1; Tue, 2 Mar 1999 09:44:33 +0000
+Auto-Submitted: auto-replied
+From: Mail Delivery System <Mailer-Daemon@test.ex>
+To: userx@test1
+Subject: Mail failure - rejected by local scanning code
+Message-Id: <E10HmbI-0005vi-00@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+A message that you sent was rejected by the local scanning code that
+checks incoming messages on this system. The following error was given:
+
+  don't like sender userx@test1
+
+From MAILER-DAEMON Tue Mar 02 09:44:33 1999
+Received: from EXIMUSER by myhost.test.ex with local (Exim x.yz)
+       id 10HmbJ-0005vi-00
+       for userx@test1; Tue, 2 Mar 1999 09:44:33 +0000
+Auto-Submitted: auto-replied
+From: Mail Delivery System <Mailer-Daemon@test.ex>
+To: userx@test1
+Subject: Mail failure - rejected by local scanning code
+Message-Id: <E10HmbJ-0005vi-00@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+A message that you sent was rejected by the local scanning code that
+checks incoming messages on this system. The following error was given:
+
+  don't like sender userx@test1
+
+------ This is a copy of the headers that were received before the error
+       was detected.
+
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <userx@test1>)
+       id 10HmbB-0005vi-00
+       for userx@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmbB-0005vi-00@myhost.test.ex>
+From: userx@test1
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+
index 41a8070f9f61c0c6cccf9fc324bf74ae1e71bd98..9dd43af384faae75c89a7d2fa3ebb00a741958d4 100644 (file)
@@ -2,7 +2,7 @@ From ok@test3 Tue Mar 02 09:44:33 1999
 Received: from [10.9.8.8] (ident=CALLER)
        by myhost.test.ex with smtp (Exim x.yz)
        (envelope-from <ok@test3>)
-       id 10HmbF-0005vi-00
+       id 10HmbH-0005vi-00
        for x@y; Tue, 2 Mar 1999 09:44:33 +0000
 X-ACL-Warn: added header line
 
index 90e92c7c3566f5b48bcb490ef40b830abfedaa5e..a2e943557ea507a0a50e6a6de53ba6840c0a4ea7 100644 (file)
@@ -35,3 +35,23 @@ F From: ok@test4
 1999-03-02 09:44:33 U=CALLER rejected connection in "connect" ACL
 1999-03-02 09:44:33 H=(x.y.z) [10.9.8.10] U=CALLER rejected EHLO or HELO x.y.z
 1999-03-02 09:44:33 mail accepted
+1999-03-02 09:44:33 10HmbA-0005vi-00 F=<userx@test1> rejected by non-SMTP ACL: don't like sender userx@test1
+Envelope-from: <userx@test1>
+Envelope-to: <userx@test.ex>
+P Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <userx@test1>)
+       id 10HmbA-0005vi-00
+       for userx@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+I Message-Id: <E10HmbA-0005vi-00@myhost.test.ex>
+F From: userx@test1
+  Date: Tue, 2 Mar 1999 09:44:33 +0000
+1999-03-02 09:44:33 10HmbB-0005vi-00 F=<userx@test1> rejected by non-SMTP ACL: don't like sender userx@test1
+Envelope-from: <userx@test1>
+Envelope-to: <userx@test.ex>
+P Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <userx@test1>)
+       id 10HmbB-0005vi-00
+       for userx@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+I Message-Id: <E10HmbB-0005vi-00@myhost.test.ex>
+F From: userx@test1
+  Date: Tue, 2 Mar 1999 09:44:33 +0000
index 2ec354ffdb945547c858798ba1a24c11825f01ed..71b334130a9a3fbf507f2bc312a5aab3db8a0136 100644 (file)
@@ -48,3 +48,15 @@ Some message
 .
 quit
 ****
+# Test unsetting bounce_return_message for non-SMTP
+1
+exim -DBR=no_bounce_return_message -odi -f userx@test1 userx
+Test message 1.
+.
+****
+# Test unsetting bounce_return_body for non-SMTP
+1
+exim -DBR=no_bounce_return_body -odi -f userx@test1 userx
+Test message 1.
+.
+****
index e09e72f1e656ad74de475820a9439f0edf60aca7..490d13fadd18999b665f46ff79918645da7344f8 100644 (file)
@@ -14,5 +14,5 @@
 250 OK\r
 250 Accepted\r
 354 Enter message, ending with "." on a line by itself\r
-250 OK id=10HmbF-0005vi-00\r
+250 OK id=10HmbH-0005vi-00\r
 221 myhost.test.ex closing connection\r