ph10 2007/02/14 15:33:40 GMT
Modified files:
exim-doc/doc-txt ChangeLog NewStuff
exim-src/src acl.c
exim-test/confs 0023
exim-test/stderr 0023
Log:
Add "continue" modifier.
Revision Changes Path
1.480 +3 -0 exim/exim-doc/doc-txt/ChangeLog
1.142 +11 -1 exim/exim-doc/doc-txt/NewStuff
1.74 +16 -7 exim/exim-src/src/acl.c
1.4 +1 -0 exim/exim-test/confs/0023
1.3 +7 -0 exim/exim-test/stderr/0023
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.479
retrieving revision 1.480
diff -u -r1.479 -r1.480
--- ChangeLog 14 Feb 2007 14:59:01 -0000 1.479
+++ ChangeLog 14 Feb 2007 15:33:40 -0000 1.480
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.479 2007/02/14 14:59:01 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.480 2007/02/14 15:33:40 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
@@ -105,6 +105,9 @@
${reduce, with only minor "tidies".
SC/02 Applied Daniel Tiefnig's patch to improve the '($parent) =' pattern match.
+
+PH/26 Added a "continue" ACL modifier that does nothing, for the benefit of its
+ expansion side effects.
Exim version 4.66
Index: NewStuff
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/NewStuff,v
retrieving revision 1.141
retrieving revision 1.142
diff -u -r1.141 -r1.142
--- NewStuff 14 Feb 2007 14:59:01 -0000 1.141
+++ NewStuff 14 Feb 2007 15:33:40 -0000 1.142
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.141 2007/02/14 14:59:01 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.142 2007/02/14 15:33:40 ph10 Exp $
New Features in Exim
--------------------
@@ -292,7 +292,7 @@
option; with -I they don't. In both cases it is possible to change the case
sensitivity within the pattern using (?i) or (?-i).
-14. A number of new features have been added to string expansions to make it
+16. A number of new features have been added to string expansions to make it
easier to process lists of items, typically addresses. These are as
follows:
@@ -364,6 +364,16 @@
At the end of a ${reduce expansion, the values of $item and $value is
restored to what they were before.
+
+17. There's a new ACL modifier called "continue". It does nothing of itself,
+ and processing of the ACL always continues with the next condition or
+ modifier. It is provided so that the side effects of expanding its argument
+ can be used. Typically this would be for updating a database. It is really
+ just a syntactic tidiness, because the following two lines have the same
+ effect:
+
+ continue = <some expansion>
+ condition = ${if eq{0}{<some expansion>}{true}{true}}
Version 4.66
Index: acl.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/acl.c,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -r1.73 -r1.74
--- acl.c 7 Feb 2007 11:24:56 -0000 1.73
+++ acl.c 14 Feb 2007 15:33:40 -0000 1.74
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/acl.c,v 1.73 2007/02/07 11:24:56 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/acl.c,v 1.74 2007/02/14 15:33:40 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -53,6 +53,7 @@
ACLC_BMI_OPTIN,
#endif
ACLC_CONDITION,
+ ACLC_CONTINUE,
ACLC_CONTROL,
#ifdef WITH_CONTENT_SCAN
ACLC_DECODE,
@@ -101,10 +102,10 @@
#endif
ACLC_VERIFY };
-/* ACL conditions/modifiers: "delay", "control", "endpass", "message",
-"log_message", "log_reject_target", "logwrite", and "set" are modifiers that
-look like conditions but always return TRUE. They are used for their side
-effects. */
+/* ACL conditions/modifiers: "delay", "control", "continue", "endpass",
+"message", "log_message", "log_reject_target", "logwrite", and "set" are
+modifiers that look like conditions but always return TRUE. They are used for
+their side effects. */
static uschar *conditions[] = {
US"acl",
@@ -114,6 +115,7 @@
US"bmi_optin",
#endif
US"condition",
+ US"continue",
US"control",
#ifdef WITH_CONTENT_SCAN
US"decode",
@@ -237,6 +239,7 @@
TRUE, /* bmi_optin */
#endif
TRUE, /* condition */
+ TRUE, /* continue */
TRUE, /* control */
#ifdef WITH_CONTENT_SCAN
TRUE, /* decode */
@@ -296,6 +299,7 @@
TRUE, /* bmi_optin */
#endif
FALSE, /* condition */
+ TRUE, /* continue */
TRUE, /* control */
#ifdef WITH_CONTENT_SCAN
FALSE, /* decode */
@@ -345,9 +349,9 @@
FALSE /* verify */
};
-/* Bit map vector of which conditions are not allowed at certain times. For
-each condition, there's a bitmap of dis-allowed times. For some, it is easier
-to specify the negation of a small number of allowed times. */
+/* Bit map vector of which conditions and modifiers are not allowed at certain
+times. For each condition, there's a bitmap of dis-allowed times. For some, it
+is easier to specify the negation of a small number of allowed times. */
static unsigned int cond_forbids[] = {
0, /* acl */
@@ -375,6 +379,8 @@
0, /* condition */
+ 0, /* continue */
+
/* Certain types of control are always allowed, so we let it through
always and check in the control processing itself. */
@@ -2552,6 +2558,9 @@
strcmpic(arg, US"true") == 0)? OK : DEFER;
if (rc == DEFER)
*log_msgptr = string_sprintf("invalid \"condition\" value \"%s\"", arg);
+ break;
+
+ case ACLC_CONTINUE: /* Always succeeds */
break;
case ACLC_CONTROL:
Index: 0023
===================================================================
RCS file: /home/cvs/exim/exim-test/confs/0023,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- 0023 14 Nov 2006 16:40:36 -0000 1.3
+++ 0023 14 Feb 2007 15:33:40 -0000 1.4
@@ -51,6 +51,7 @@
deny message = domain explicitly denied
log_message = DOMAIN EXPLICITLY DENIED
+ continue = this value is not used
domains = deny.test.ex
accept domains = +local_domains
Index: 0023
===================================================================
RCS file: /home/cvs/exim/exim-test/stderr/0023,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- 0023 19 Apr 2006 11:11:13 -0000 1.2
+++ 0023 14 Feb 2007 15:33:40 -0000 1.3
@@ -16,6 +16,7 @@
>>> test.ex in "!wontpass"? yes (end of list)
>>> require: condition test succeeded
>>> processing "deny"
+>>> check continue = this value is not used
>>> check domains = deny.test.ex
>>> test.ex in "deny.test.ex"? no (end of list)
>>> deny: condition test failed
@@ -36,6 +37,7 @@
>>> z in "!wontpass"? yes (end of list)
>>> require: condition test succeeded
>>> processing "deny"
+>>> check continue = this value is not used
>>> check domains = deny.test.ex
>>> z in "deny.test.ex"? no (end of list)
>>> deny: condition test failed
@@ -65,6 +67,7 @@
>>> test.ex in "!wontpass"? yes (end of list)
>>> require: condition test succeeded
>>> processing "deny"
+>>> check continue = this value is not used
>>> check domains = deny.test.ex
>>> test.ex in "deny.test.ex"? no (end of list)
>>> deny: condition test failed
@@ -85,6 +88,7 @@
>>> test.ex in "!wontpass"? yes (end of list)
>>> require: condition test succeeded
>>> processing "deny"
+>>> check continue = this value is not used
>>> check domains = deny.test.ex
>>> test.ex in "deny.test.ex"? no (end of list)
>>> deny: condition test failed
@@ -105,6 +109,7 @@
>>> relay.test.ex in "!wontpass"? yes (end of list)
>>> require: condition test succeeded
>>> processing "deny"
+>>> check continue = this value is not used
>>> check domains = deny.test.ex
>>> relay.test.ex in "deny.test.ex"? no (end of list)
>>> deny: condition test failed
@@ -125,6 +130,7 @@
>>> deny.test.ex in "!wontpass"? yes (end of list)
>>> require: condition test succeeded
>>> processing "deny"
+>>> check continue = this value is not used
>>> check domains = deny.test.ex
>>> deny.test.ex in "deny.test.ex"? yes (matched "deny.test.ex")
>>> deny: condition test succeeded
@@ -139,6 +145,7 @@
>>> refuse.test.ex in "!wontpass"? yes (end of list)
>>> require: condition test succeeded
>>> processing "deny"
+>>> check continue = this value is not used
>>> check domains = deny.test.ex
>>> refuse.test.ex in "deny.test.ex"? no (end of list)
>>> deny: condition test failed