Add control=freeze/no_tell feature.
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Mon, 13 Feb 2006 12:02:59 +0000 (12:02 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Mon, 13 Feb 2006 12:02:59 +0000 (12:02 +0000)
15 files changed:
doc/doc-txt/ChangeLog
doc/doc-txt/NewStuff
src/ACKNOWLEDGMENTS
src/src/acl.c
src/src/globals.c
src/src/globals.h
src/src/readconf.c
src/src/smtp_in.c
test/confs/0233
test/log/0233
test/mail/0233.me
test/msglog/0233.10HmbB-0005vi-00 [new file with mode: 0644]
test/msglog/0233.10HmbD-0005vi-00 [new file with mode: 0644]
test/scripts/0000-Basic/0233
test/stdout/0233

index 427f0b2a39e883089d7e435b0e79e389de0f099a..4aeffb78d76b7d47f4ff8e4d9d806a3f851a2b8e 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.293 2006/02/13 11:28:56 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.294 2006/02/13 12:02:59 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -141,6 +141,8 @@ PH/25 Do not write to syslog when running in the test harness. The only
       occasion when this arises is a failure to open the main or panic logs
       (for which there is an explicit test).
 
+PH/26 Added the /no_tell option to "control=freeze".
+
 
 
 Exim version 4.60
index 6dfb76ea81cba2548bd3af514379824575b7343b..0cc752e5272aa290e5bb02bdd8c6d65cc7376006 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/NewStuff,v 1.82 2006/02/10 14:25:43 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/NewStuff,v 1.83 2006/02/13 12:02:59 ph10 Exp $
 
 New Features in Exim
 --------------------
@@ -40,6 +40,12 @@ PH/04 The variables $auth1, $auth2, $auth3 are now available in authenticators,
       the use of the numerical ones being deprecated, though the support will
       not be removed, at least, not for a long time.
 
+PH/05 The "control=freeze" ACL modifier can now be followed by /no_tell. If
+      the global option freeze_tell is set, it is ignored for the current
+      message (that is, nobody is told about the freezing), provided all the
+      "control=freeze" modifiers that are obeyed in the current message have
+      the /no_tell option.
+
 
 Version 4.60
 ------------
index 54b7da04476bd88c3b00d9738650b83c4d250ccf..455b39fe56bd5c8b38fe60c458659d40c3606aa9 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/src/ACKNOWLEDGMENTS,v 1.39 2005/12/12 15:58:53 ph10 Exp $
+$Cambridge: exim/src/ACKNOWLEDGMENTS,v 1.40 2006/02/13 12:02:59 ph10 Exp $
 
 EXIM ACKNOWLEDGEMENTS
 
@@ -20,7 +20,7 @@ relatively small patches.
 Philip Hazel
 
 Lists created: 20 November 2002
-Last updated:  12 December 2005
+Last updated:  13 February 2006
 
 
 THE OLD LIST
@@ -243,5 +243,6 @@ Joachim Wieland           Patches for PostgreSQL socket support and other
                           Patch for hosts_avoid_esmtp
 Stephen Wilcox            Patch for ignore_enotdir problem
 David Woodhouse           SQLite support proof of concept code
+                          control=freeze/no_tell basic code
 
 ****
index f5949f04f296c7b5b19a9394f37fdd82b405d9a3..6efc313d1ba5681c5d23f44145cd239b0a89ec2a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/acl.c,v 1.54 2006/02/07 11:19:00 ph10 Exp $ */
+/* $Cambridge: exim/src/src/acl.c,v 1.55 2006/02/13 12:02:59 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -528,7 +528,7 @@ static control_def controls_list[] = {
   { US"caseful_local_part",     CONTROL_CASEFUL_LOCAL_PART, FALSE },
   { US"caselower_local_part",   CONTROL_CASELOWER_LOCAL_PART, FALSE },
   { US"enforce_sync",           CONTROL_ENFORCE_SYNC, FALSE },
-  { US"freeze",                 CONTROL_FREEZE, FALSE },
+  { US"freeze",                 CONTROL_FREEZE, TRUE },
   { US"no_enforce_sync",        CONTROL_NO_ENFORCE_SYNC, FALSE },
   { US"no_multiline_responses", CONTROL_NO_MULTILINE, FALSE },
   { US"queue_only",             CONTROL_QUEUE_ONLY, FALSE },
@@ -2375,7 +2375,7 @@ for (; cb != NULL; cb = cb->next)
     {
     /* A nested ACL that returns "discard" makes sense only for an "accept" or
     "discard" verb. */
-
+\
     case ACLC_ACL:
     rc = acl_check_internal(where, addr, arg, level+1, user_msgptr, log_msgptr);
     if (rc == DISCARD && verb != ACL_ACCEPT && verb != ACL_DISCARD)
@@ -2489,6 +2489,17 @@ for (; cb != NULL; cb = cb->next)
       case CONTROL_FREEZE:
       deliver_freeze = TRUE;
       deliver_frozen_at = time(NULL);
+      freeze_tell = freeze_tell_config;       /* Reset to configured value */
+      if (Ustrncmp(p, "/no_tell", 8) == 0)
+        {
+        p += 8;
+        freeze_tell = NULL;
+        }
+      if (*p != 0)
+        {
+        *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg);
+        return ERROR;
+        }
       break;
 
       case CONTROL_QUEUE_ONLY:
index 275b7c8f0df6f155ceac30f201e31ab394e3b9ed..11470fbe49abc4d35520e14a768d3d99a3082937 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/globals.c,v 1.47 2006/02/10 16:29:20 ph10 Exp $ */
+/* $Cambridge: exim/src/src/globals.c,v 1.48 2006/02/13 12:02:59 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -545,6 +545,7 @@ uschar *found_extension        = NULL;
 #endif
 uid_t   fixed_never_users[]    = { FIXED_NEVER_USERS };
 uschar *freeze_tell            = NULL;
+uschar *freeze_tell_config     = NULL;
 uschar *fudged_queue_times     = US"";
 
 uschar *gecos_name             = NULL;
index e3628167fcec74b37938f5be040a3a587f22af58..c884dfaf2a46029a84b4334974dd6a8326680186 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/globals.h,v 1.34 2006/02/10 14:25:43 ph10 Exp $ */
+/* $Cambridge: exim/src/src/globals.h,v 1.35 2006/02/13 12:02:59 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -333,6 +333,7 @@ extern uid_t   fixed_never_users[];    /* Can't be overridden */
 extern uschar *found_extension;        /* demime acl condition: file extension found */
 #endif
 extern uschar *freeze_tell;            /* Message on (some) freezings */
+extern uschar *freeze_tell_config;     /* The configured setting */
 extern uschar *fudged_queue_times;     /* For use in test harness */
 
 extern uschar *gecos_name;             /* To be expanded when pattern matches */
index 5623b87f4422f1b9b66c9d7bad35afcdb375956b..62b6d5b8572a4848a9074b93b76a7dc54290e8be 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/readconf.c,v 1.18 2006/02/08 14:28:51 ph10 Exp $ */
+/* $Cambridge: exim/src/src/readconf.c,v 1.19 2006/02/13 12:02:59 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -2819,6 +2819,11 @@ if (timezone_string != NULL && *timezone_string == 0) timezone_string = NULL;
 
 if (remote_max_parallel <= 0) remote_max_parallel = 1;
 
+/* Save the configured setting of freeze_tell, so we can re-instate it at the
+start of a new SMTP message. */
+
+freeze_tell_config = freeze_tell;
+
 /* The primary host name may be required for expansion of spool_directory
 and log_file_path, so make sure it is set asap. It is obtained from uname(),
 but if that yields an unqualified value, make a FQDN by using gethostbyname to
index 04bffd017e345ab103ab31e97cee711b5e166569..cc6486a401d8905ee308979dcf821be323ebf808 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/smtp_in.c,v 1.30 2006/02/10 14:25:43 ph10 Exp $ */
+/* $Cambridge: exim/src/src/smtp_in.c,v 1.31 2006/02/13 12:02:59 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -806,6 +806,7 @@ message_size = -1;
 acl_warn_headers = NULL;
 queue_only_policy = FALSE;
 deliver_freeze = FALSE;                              /* Can be set by ACL */
+freeze_tell = freeze_tell_config;                    /* 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 */
index cbd87c4b75a995b4bc940fd13981a541e21a9854..15c605c240298406dd979c3b55603aca2bf16f91 100644 (file)
@@ -23,7 +23,9 @@ system_filter_reply_transport = address_reply
 begin acl
 
 rcpt:
-  accept control = freeze
+  accept local_parts = usery
+         control = freeze
+  accept control = freeze/no_tell
 
 
 # ----- Routers -----
index ac592afeee7a4d41e5ed5b94615050c5f189cd06..dd3861f85d04bdd464f0c46c82d5768f75e49378 100644 (file)
@@ -9,6 +9,13 @@
 1999-03-02 09:44:33 10HmaX-0005vi-00 Frozen by the system filter: system filter freezes
 1999-03-02 09:44:33 10HmbA-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-smtp S=sss
 1999-03-02 09:44:33 10HmbA-0005vi-00 frozen by ACL
-1999-03-02 09:44:33 10HmbB-0005vi-00 <= <> R=10HmbA-0005vi-00 U=EXIMUSER P=local S=sss
-1999-03-02 09:44:33 10HmbB-0005vi-00 => me <me@myhost.test.ex> R=all T=local_delivery
-1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbB-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbB-0005vi-00 frozen by ACL
+1999-03-02 09:44:33 10HmbC-0005vi-00 <= <> R=10HmbB-0005vi-00 U=EXIMUSER P=local S=sss
+1999-03-02 09:44:33 10HmbC-0005vi-00 => me <me@myhost.test.ex> R=all T=local_delivery
+1999-03-02 09:44:33 10HmbC-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbD-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmbD-0005vi-00 frozen by ACL
+1999-03-02 09:44:33 10HmbE-0005vi-00 <= <> R=10HmbD-0005vi-00 U=EXIMUSER P=local S=sss
+1999-03-02 09:44:33 10HmbE-0005vi-00 => me <me@myhost.test.ex> R=all T=local_delivery
+1999-03-02 09:44:33 10HmbE-0005vi-00 Completed
index e8e8c8f3314b7077999ad1dc8be3947c56a9c5a9..1e9b1086cbf7983ff901806d67ef4cc826adebb4 100644 (file)
@@ -18,15 +18,29 @@ The following address(es) have yet to be delivered:
 
 From MAILER-DAEMON Tue Mar 02 09:44:33 1999
 Received: from EXIMUSER by myhost.test.ex with local (Exim x.yz)
-       id 10HmbB-0005vi-00
+       id 10HmbC-0005vi-00
        for me@myhost.test.ex; Tue, 2 Mar 1999 09:44:33 +0000
 Auto-Submitted: auto-replied
 From: Mail Delivery System <Mailer-Daemon@myhost.test.ex>
 To: me@myhost.test.ex
 Subject: Message frozen on arrival
-Message-Id: <E10HmbB-0005vi-00@myhost.test.ex>
+Message-Id: <E10HmbC-0005vi-00@myhost.test.ex>
 Date: Tue, 2 Mar 1999 09:44:33 +0000
 
-Message 10HmbA-0005vi-00 was frozen on arrival by ACL.
+Message 10HmbB-0005vi-00 was frozen on arrival by ACL.
+The sender is <CALLER@myhost.test.ex>.
+
+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
+       for me@myhost.test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Auto-Submitted: auto-replied
+From: Mail Delivery System <Mailer-Daemon@myhost.test.ex>
+To: me@myhost.test.ex
+Subject: Message frozen on arrival
+Message-Id: <E10HmbE-0005vi-00@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+Message 10HmbD-0005vi-00 was frozen on arrival by ACL.
 The sender is <CALLER@myhost.test.ex>.
 
diff --git a/test/msglog/0233.10HmbB-0005vi-00 b/test/msglog/0233.10HmbB-0005vi-00
new file mode 100644 (file)
index 0000000..0840c1d
--- /dev/null
@@ -0,0 +1,2 @@
+1999-03-02 09:44:33 Received from CALLER@myhost.test.ex U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 frozen by ACL
diff --git a/test/msglog/0233.10HmbD-0005vi-00 b/test/msglog/0233.10HmbD-0005vi-00
new file mode 100644 (file)
index 0000000..0840c1d
--- /dev/null
@@ -0,0 +1,2 @@
+1999-03-02 09:44:33 Received from CALLER@myhost.test.ex U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 frozen by ACL
index 0acb13fca3dc4d1ccb1bb013fe9db671979f8721..13726815c6a8724ef6f741c0b21862ec06abe572 100644 (file)
@@ -1,12 +1,25 @@
 # freeze_tell & system filter & ACL
+# System filter freezes this one
 exim -odi userx
 Rhubarb
 ****
+# ACL freezes these two, tell for the second, and third, not for the first
 exim -odi -bs
 mail from:<a@test.ex>
+rcpt to:<userz@test.ex>
+data
+Should be frozen (no tell)
+.
+mail from:<a@test.ex>
+rcpt to:<usery@test.ex>
+data
+Should be frozen (with tell)
+.
+mail from:<a@test.ex>
+rcpt to:<userz@test.ex>
 rcpt to:<usery@test.ex>
 data
-Should be frozen
+Should be frozen (with tell because not both no_tell)
 .
 quit
 ****
index 773412dc59d14e2b7835bfad70693d2959ddace3..0644977a24b4e6da615b09e360267b55ed9d0d50 100644 (file)
@@ -3,4 +3,13 @@
 250 Accepted\r
 354 Enter message, ending with "." on a line by itself\r
 250 OK id=10HmbA-0005vi-00\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmbB-0005vi-00\r
+250 OK\r
+250 Accepted\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