Add control=fakedefer to go with control=fakereject.
authorTony Finch <dot@dot.at>
Mon, 23 May 2005 15:28:37 +0000 (15:28 +0000)
committerTony Finch <dot@dot.at>
Mon, 23 May 2005 15:28:37 +0000 (15:28 +0000)
doc/doc-txt/ChangeLog
doc/doc-txt/NewStuff
src/exim_monitor/em_globals.c
src/src/acl.c
src/src/globals.c
src/src/globals.h
src/src/receive.c
src/src/smtp_in.c

index 368734a9bb5d1b807e2f5f5dc4a65939803ad540..e2baa6130c1f3082b03289051e5ac6453ef67211 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.139 2005/05/17 15:00:04 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.140 2005/05/23 15:28:37 fanf2 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -33,6 +33,8 @@ PH/04 Installed a modified version of Tony Finch's patch to make submission
       add a /name= option so that you can make the user's friendly name appear
       in the header line.
 
+TF/03 Added the control = fakedefer ACL modifier.
+
 
 Exim version 4.51
 -----------------
index 24993b5ac70473a2058ab2c2d1819066b9bd1665..d7bdff1e1f128a0f6dd21ca2308ae832b7612cf0 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/NewStuff,v 1.42 2005/05/17 15:00:04 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/NewStuff,v 1.43 2005/05/23 15:28:37 fanf2 Exp $
 
 New Features in Exim
 --------------------
@@ -90,6 +90,13 @@ PH/02 There have been two changes concerned with submission mode:
       (b) The envelope sender address is forced to be the same as the
           submission mode sender address.
 
+TF/02 The control = fakereject ACL modifier now has a fakedefer counterpart,
+      which works in exactly the same way except it causes a fake SMTP 450
+      response after the message data instead of a fake SMTP 550 response.
+      You must take care when using fakedefer because it will cause messages
+      to be duplicated when the sender retries. Therefore you should not use
+      fakedefer if the message will be delivered normally.
+
 
 Version 4.51
 ------------
index 969d709b9e7b7eb91ca45caf2659c5ea1fc232d5..761e4759514945c93b9e62df9de16a1b73b5a38a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/exim_monitor/em_globals.c,v 1.6 2005/04/29 11:54:23 tom Exp $ */
+/* $Cambridge: exim/src/exim_monitor/em_globals.c,v 1.7 2005/05/23 15:28:38 fanf2 Exp $ */
 
 /*************************************************
 *                Exim Monitor                    *
@@ -145,7 +145,7 @@ int     dk_do_verify           = 0;
 BOOL    dont_deliver           = FALSE;
 
 #ifdef WITH_CONTENT_SCAN
-BOOL   fake_reject             = FALSE;
+int     fake_response          = OK;
 #endif
 
 header_line *header_last       = NULL;
index 357abfad3490f70236a7c49ec381756e1cde4198..5ea8535219201b6f315c4530b318a825e7b3f44f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/acl.c,v 1.32 2005/05/17 15:00:04 ph10 Exp $ */
+/* $Cambridge: exim/src/src/acl.c,v 1.33 2005/05/23 15:28:38 fanf2 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -421,7 +421,7 @@ enum {
 #ifdef WITH_CONTENT_SCAN
   CONTROL_NO_MBOX_UNSPOOL,
 #endif
-  CONTROL_FAKEREJECT, CONTROL_NO_MULTILINE };
+  CONTROL_FAKEDEFER, CONTROL_FAKEREJECT, CONTROL_NO_MULTILINE };
 
 /* Bit map vector of which controls are not allowed at certain times. For
 each control, there's a bitmap of dis-allowed times. For some, it is easier to
@@ -468,6 +468,11 @@ static unsigned int control_forbids[] = {
     (1<<ACL_WHERE_MIME)),
 #endif
 
+  (unsigned int)
+  ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* fakedefer */
+    (1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|
+    (1<<ACL_WHERE_MIME)),
+
   (unsigned int)
   ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* fakereject */
     (1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|
@@ -501,6 +506,7 @@ static control_def controls_list[] = {
 #ifdef WITH_CONTENT_SCAN
   { US"no_mbox_unspool",        CONTROL_NO_MBOX_UNSPOOL, FALSE},
 #endif
+  { US"fakedefer",              CONTROL_FAKEDEFER, TRUE},
   { US"fakereject",             CONTROL_FAKEREJECT, TRUE},
   { US"submission",             CONTROL_SUBMISSION, TRUE}
   };
@@ -2101,19 +2107,20 @@ for (; cb != NULL; cb = cb->next)
       no_multiline_responses = TRUE;
       break;
 
+      case CONTROL_FAKEDEFER:
       case CONTROL_FAKEREJECT:
-      fake_reject = TRUE;
+      fake_response = (control_type == CONTROL_FAKEDEFER) ? DEFER : FAIL;
       if (*p == '/')
         {
         uschar *pp = p + 1;
         while (*pp != 0) pp++;
-        fake_reject_text = expand_string(string_copyn(p+1, pp-p-1));
+        fake_response_text = expand_string(string_copyn(p+1, pp-p-1));
         p = pp;
         }
        else
         {
         /* Explicitly reset to default string */
-        fake_reject_text = US"Your message has been rejected but is being kept for evaluation.\nIf it was a legitimate message, it may still be delivered to the target recipient(s).";
+        fake_response_text = US"Your message has been rejected but is being kept for evaluation.\nIf it was a legitimate message, it may still be delivered to the target recipient(s).";
         }
       break;
 
index b5b889accc684bf3682dbef543a74747f6633e21..8928e451fa54e34d5a79d0a37d18e0df6ca76a55 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/globals.c,v 1.24 2005/05/10 10:19:11 ph10 Exp $ */
+/* $Cambridge: exim/src/src/globals.c,v 1.25 2005/05/23 15:28:38 fanf2 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -512,8 +512,8 @@ uschar *expand_string_message;
 BOOL    extract_addresses_remove_arguments = TRUE;
 uschar *extra_local_interfaces = NULL;
 
-BOOL    fake_reject            = FALSE;
-uschar *fake_reject_text       = US"Your message has been rejected but is being kept for evaluation.\nIf it was a legitimate message, it may still be delivered to the target recipient(s).";
+int     fake_response          = OK;
+uschar *fake_response_text     = US"Your message has been rejected but is being kept for evaluation.\nIf it was a legitimate message, it may still be delivered to the target recipient(s).";
 int     filter_n[FILTER_VARIABLE_COUNT];
 BOOL    filter_running         = FALSE;
 int     filter_sn[FILTER_VARIABLE_COUNT];
index d052fbe7501ff85969e83f1cb7abfa133c5e0e6b..40785173d4b1dafd282df329befb5c7e29c3810d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/globals.h,v 1.16 2005/05/10 10:19:11 ph10 Exp $ */
+/* $Cambridge: exim/src/src/globals.h,v 1.17 2005/05/23 15:28:38 fanf2 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -309,8 +309,8 @@ extern BOOL    expand_string_forcedfail; /* TRUE if failure was "expected" */
 extern BOOL    extract_addresses_remove_arguments; /* Controls -t behaviour */
 extern uschar *extra_local_interfaces; /* Local, non-listen interfaces */
 
-extern BOOL    fake_reject;            /* TRUE if fake reject is to be given */
-extern uschar *fake_reject_text;       /* Option for the fakereject control statement: can contain user defined message. Default is in globals.c. */
+extern int     fake_response;          /* Fake FAIL or DEFER response to data */
+extern uschar *fake_response_text;     /* User defined message for the above. Default is in globals.c. */
 extern int     filter_n[FILTER_VARIABLE_COUNT]; /* filter variables */
 extern BOOL    filter_running;         /* TRUE while running a filter */
 extern int     filter_sn[FILTER_VARIABLE_COUNT]; /* variables set by system filter */
index 4dc05c60423b308234ccd4992124a6b724f64a74..1092d2b0617fdd11722f93afa9b71e00da2afdcf 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/receive.c,v 1.17 2005/05/17 15:00:04 ph10 Exp $ */
+/* $Cambridge: exim/src/src/receive.c,v 1.18 2005/05/23 15:28:38 fanf2 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -3477,8 +3477,9 @@ if (smtp_input)
     {
     if (smtp_reply == NULL)
       {
-      if (fake_reject)
-        smtp_respond(550,TRUE,fake_reject_text);
+      if (fake_response != OK)
+        smtp_respond(fake_response == DEFER ? 450 : 550,
+                     TRUE, fake_response_text);
       else
         smtp_printf("250 OK id=%s\r\n", message_id);
       if (host_checking)
@@ -3487,8 +3488,9 @@ if (smtp_input)
       }
     else if (smtp_reply[0] != 0)
       {
-      if (fake_reject && (smtp_reply[0] == '2'))
-        smtp_respond(550,TRUE,fake_reject_text);
+      if (fake_response != OK && (smtp_reply[0] == '2'))
+        smtp_respond(fake_response == DEFER ? 450 : 550,
+                     TRUE, fake_response_text);
       else
         smtp_printf("%.1024s\r\n", smtp_reply);
       }
index 6e62b99e0fb1ce237cc6237058ea9e8f69aa768f..dfed7b8f588d7edf6339c26afe51d85ac6608d20 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/smtp_in.c,v 1.17 2005/04/27 13:29:32 ph10 Exp $ */
+/* $Cambridge: exim/src/src/smtp_in.c,v 1.18 2005/05/23 15:28:38 fanf2 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -809,7 +809,7 @@ message_size = -1;
 acl_warn_headers = NULL;
 queue_only_policy = FALSE;
 deliver_freeze = FALSE;                              /* Can be set by ACL */
-fake_reject = FALSE;                                 /* Can be set by ACL */
+fake_response = OK;                                  /* Can be set by ACL */
 #ifdef WITH_CONTENT_SCAN
 no_mbox_unspool = FALSE;                             /* Can be set by ACL */
 #endif