ph10 2006/03/06 16:05:13 GMT
Modified files:
exim-doc/doc-txt ChangeLog NewStuff
exim-src/src acl.c globals.c globals.h receive.c
smtp_in.c
exim-test/confs 4000
Added files:
exim-test/confs 0532
exim-test/log 0532
exim-test/mail 0532.rcptok
exim-test/rejectlog 0532
exim-test/scripts/0000-Basic 0532
exim-test/stdout 0532
Log:
Add the add_header modifier for use with all ACL verbs.
Revision Changes Path
1.322 +3 -0 exim/exim-doc/doc-txt/ChangeLog
1.95 +48 -0 exim/exim-doc/doc-txt/NewStuff
1.57 +203 -153 exim/exim-src/src/acl.c
1.53 +1 -1 exim/exim-src/src/globals.c
1.37 +1 -1 exim/exim-src/src/globals.h
1.27 +3 -3 exim/exim-src/src/receive.c
1.35 +1 -1 exim/exim-src/src/smtp_in.c
1.1 +80 -0 exim/exim-test/confs/0532 (new)
1.2 +13 -13 exim/exim-test/confs/4000
1.1 +8 -0 exim/exim-test/log/0532 (new)
1.1 +37 -0 exim/exim-test/mail/0532.rcptok (new)
1.1 +2 -0 exim/exim-test/rejectlog/0532 (new)
1.1 +18 -0 exim/exim-test/scripts/0000-Basic/0532 (new)
1.1 +8 -0 exim/exim-test/stdout/0532 (new)
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.321
retrieving revision 1.322
diff -u -r1.321 -r1.322
--- ChangeLog 2 Mar 2006 12:25:48 -0000 1.321
+++ ChangeLog 6 Mar 2006 16:05:12 -0000 1.322
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.321 2006/03/02 12:25:48 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.322 2006/03/06 16:05:12 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
@@ -274,6 +274,9 @@
PH/54 Added control=allow_auth_unadvertised, as it seems there are clients that
do this, and (what is worse) MTAs that accept it.
+
+PH/55 Added the add_header modified to ACLs. The use of "message" with "warn"
+ will now be deprecated.
Exim version 4.60
Index: NewStuff
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/NewStuff,v
retrieving revision 1.94
retrieving revision 1.95
diff -u -r1.94 -r1.95
--- NewStuff 2 Mar 2006 12:25:48 -0000 1.94
+++ NewStuff 6 Mar 2006 16:05:12 -0000 1.95
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.94 2006/03/02 12:25:48 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.95 2006/03/06 16:05:12 ph10 Exp $
New Features in Exim
--------------------
@@ -117,6 +117,54 @@
control = allow_auth_unadvertised
This control is permitted only in the connection and HELO ACLs.
+
+PH/18 There is a new ACL modifier called "add_header" which does what its name
+ implies. It specifies one of more header lines that are to be added to an
+ incoming message, assuming, of course, that the message is ultimately
+ accepted.
+
+ This modifier is permitted in the MAIL, RCPT, PREDATA, DATA, MIME, and
+ non-SMTP ACLs (in other words, those that are concerned with accepting a
+ message). Added header lines are accumulated during the MAIL, RCPT, and
+ PREDATA ACLs, with any duplicates being discarded. They are then added to
+ the message before processing the DATA and MIME ACLs, during which
+ further added header lines are accumulated, again with duplicates
+ discarded. Thus, it is possible to add two identical header lines to an
+ SMTP message, but only if one is added before DATA and one after.
+
+ In the case of non-SMTP messages, new headers are accumulated during the
+ non-SMTP ACL, and added to the message at the end.
+
+ The add_header modifier is available for use with all ACL verbs. In the
+ case of the WARN verb, add_header supersedes the use of "message" for
+ this purpose; for the other verbs, it provides a new facility. If both
+ add_header and "message" are present on a WARN verb, both are processed
+ according to their specifications.
+
+ The add_header modifier acts immediately it is encountered during the
+ processing of an ACL. This is different to the (now-deprecated) use of
+ "message" on a WARN verb, where the action is taken only if all the
+ conditions are true. Notice the difference between these two cases on a
+ RCPT ACL:
+
+ deny add_header = ADDED: some text
+ <some condition>
+
+ deny <some condition>
+ add_header = ADDED: some text
+
+ In the first case, the header is always added, whether or not the current
+ recipient is rejected. In the second case, the header is added only if
+ the recipient is rejected.
+
+ If add_header appears more than once on an ACL statement, multiple
+ headers are added, provided that they have different content. (In the
+ case of WARN with "message", only the last value of "message" is used.)
+
+ The facility for specifying where the new header is to be inserted, as
+ described for WARN with "message" in section 39.19 of the 4.60 manual, is
+ supported.
+
Version 4.60
Index: acl.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/acl.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -r1.56 -r1.57
--- acl.c 2 Mar 2006 12:25:48 -0000 1.56
+++ acl.c 6 Mar 2006 16:05:12 -0000 1.57
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/acl.c,v 1.56 2006/03/02 12:25:48 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/acl.c,v 1.57 2006/03/06 16:05:12 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -32,13 +32,17 @@
static int msgcond[] = { FAIL, OK, OK, FAIL, OK, FAIL, OK };
/* ACL condition and modifier codes - keep in step with the table that
-follows. */
+follows, and the cond_expand_at_top and uschar cond_modifiers tables lower
+down. */
-enum { ACLC_ACL, ACLC_AUTHENTICATED,
+enum { ACLC_ACL,
+ ACLC_ADD_HEADER,
+ ACLC_AUTHENTICATED,
#ifdef EXPERIMENTAL_BRIGHTMAIL
ACLC_BMI_OPTIN,
#endif
-ACLC_CONDITION, ACLC_CONTROL,
+ ACLC_CONDITION,
+ ACLC_CONTROL,
#ifdef WITH_CONTENT_SCAN
ACLC_DECODE,
#endif
@@ -54,8 +58,14 @@
ACLC_DK_SENDERS,
ACLC_DK_STATUS,
#endif
- ACLC_DNSLISTS, ACLC_DOMAINS, ACLC_ENCRYPTED, ACLC_ENDPASS,
- ACLC_HOSTS, ACLC_LOCAL_PARTS, ACLC_LOG_MESSAGE, ACLC_LOGWRITE,
+ ACLC_DNSLISTS,
+ ACLC_DOMAINS,
+ ACLC_ENCRYPTED,
+ ACLC_ENDPASS,
+ ACLC_HOSTS,
+ ACLC_LOCAL_PARTS,
+ ACLC_LOG_MESSAGE,
+ ACLC_LOGWRITE,
#ifdef WITH_CONTENT_SCAN
ACLC_MALWARE,
#endif
@@ -68,7 +78,9 @@
#ifdef WITH_CONTENT_SCAN
ACLC_REGEX,
#endif
- ACLC_SENDER_DOMAINS, ACLC_SENDERS, ACLC_SET,
+ ACLC_SENDER_DOMAINS,
+ ACLC_SENDERS,
+ ACLC_SET,
#ifdef WITH_CONTENT_SCAN
ACLC_SPAM,
#endif
@@ -83,6 +95,7 @@
static uschar *conditions[] = {
US"acl",
+ US"add_header",
US"authenticated",
#ifdef EXPERIMENTAL_BRIGHTMAIL
US"bmi_optin",
@@ -189,6 +202,7 @@
checking functions. */
static uschar cond_expand_at_top[] = {
+ TRUE, /* add_header */
TRUE, /* acl */
FALSE, /* authenticated */
#ifdef EXPERIMENTAL_BRIGHTMAIL
@@ -246,6 +260,7 @@
/* Flags to identify the modifiers */
static uschar cond_modifiers[] = {
+ TRUE, /* add_header */
FALSE, /* acl */
FALSE, /* authenticated */
#ifdef EXPERIMENTAL_BRIGHTMAIL
@@ -307,10 +322,15 @@
static unsigned int cond_forbids[] = {
0, /* acl */
+ (unsigned int)
+ ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)| /* add_header */
+ (1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|
+ (1<<ACL_WHERE_MIME)|(1<<ACL_WHERE_NOTSMTP)),
+
(1<<ACL_WHERE_NOTSMTP)|(1<<ACL_WHERE_CONNECT)| /* authenticated */
(1<<ACL_WHERE_HELO),
-#ifdef EXPERIMENTAL_BRIGHTMAIL
+ #ifdef EXPERIMENTAL_BRIGHTMAIL
(1<<ACL_WHERE_AUTH)| /* bmi_optin */
(1<<ACL_WHERE_CONNECT)|(1<<ACL_WHERE_HELO)|
(1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_MIME)|
@@ -318,7 +338,7 @@
(1<<ACL_WHERE_MAILAUTH)|
(1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_STARTTLS)|
(1<<ACL_WHERE_VRFY)|(1<<ACL_WHERE_PREDATA),
-#endif
+ #endif
0, /* condition */
@@ -327,19 +347,19 @@
0, /* control */
-#ifdef WITH_CONTENT_SCAN
+ #ifdef WITH_CONTENT_SCAN
(unsigned int)
~(1<<ACL_WHERE_MIME), /* decode */
-#endif
+ #endif
0, /* delay */
-#ifdef WITH_OLD_DEMIME
+ #ifdef WITH_OLD_DEMIME
(unsigned int)
~((1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP)), /* demime */
-#endif
+ #endif
-#ifdef EXPERIMENTAL_DOMAINKEYS
+ #ifdef EXPERIMENTAL_DOMAINKEYS
(1<<ACL_WHERE_AUTH)| /* dk_domain_source */
(1<<ACL_WHERE_CONNECT)|(1<<ACL_WHERE_HELO)|
(1<<ACL_WHERE_RCPT)|(1<<ACL_WHERE_PREDATA)|
@@ -387,7 +407,7 @@
(1<<ACL_WHERE_MAILAUTH)|(1<<ACL_WHERE_QUIT)|
(1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_STARTTLS)|
(1<<ACL_WHERE_VRFY),
-#endif
+ #endif
(1<<ACL_WHERE_NOTSMTP), /* dnslists */
@@ -408,28 +428,28 @@
0, /* logwrite */
-#ifdef WITH_CONTENT_SCAN
+ #ifdef WITH_CONTENT_SCAN
(unsigned int)
~((1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP)), /* malware */
-#endif
+ #endif
0, /* message */
-#ifdef WITH_CONTENT_SCAN
+ #ifdef WITH_CONTENT_SCAN
(unsigned int)
~(1<<ACL_WHERE_MIME), /* mime_regex */
-#endif
+ #endif
0, /* ratelimit */
(unsigned int)
~(1<<ACL_WHERE_RCPT), /* recipients */
-#ifdef WITH_CONTENT_SCAN
+ #ifdef WITH_CONTENT_SCAN
(unsigned int)
~((1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP)| /* regex */
(1<<ACL_WHERE_MIME)),
-#endif
+ #endif
(1<<ACL_WHERE_AUTH)|(1<<ACL_WHERE_CONNECT)| /* sender_domains */
(1<<ACL_WHERE_HELO)|
@@ -445,18 +465,18 @@
0, /* set */
-#ifdef WITH_CONTENT_SCAN
+ #ifdef WITH_CONTENT_SCAN
(unsigned int)
~((1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP)), /* spam */
-#endif
+ #endif
-#ifdef EXPERIMENTAL_SPF
+ #ifdef EXPERIMENTAL_SPF
(1<<ACL_WHERE_AUTH)|(1<<ACL_WHERE_CONNECT)| /* spf */
(1<<ACL_WHERE_HELO)|
(1<<ACL_WHERE_MAILAUTH)|
(1<<ACL_WHERE_ETRN)|(1<<ACL_WHERE_EXPN)|
(1<<ACL_WHERE_STARTTLS)|(1<<ACL_WHERE_VRFY),
-#endif
+ #endif
/* Certain types of verify are always allowed, so we let it through
always and check in the verify function itself */
@@ -826,6 +846,115 @@
/*************************************************
+* Set up added header line(s) *
+*************************************************/
+
+/* This function is called by the add_header modifier, and also from acl_warn()
+to implement the now-deprecated way of adding header lines using "message" on a
+"warn" verb. The argument is treated as a sequence of header lines which are
+added to a chain, provided there isn't an identical one already there.
+
+Argument: string of header lines
+Returns: nothing
+*/
+
+static void
+setup_header(uschar *hstring)
+{
+uschar *p, *q;
+int hlen = Ustrlen(hstring);
+
+/* An empty string does nothing; otherwise add a final newline if necessary. */
+
+if (hlen <= 0) return;
+if (hstring[hlen-1] != '\n') hstring = string_sprintf("%s\n", hstring);
+
+/* Loop for multiple header lines, taking care about continuations */
+
+for (p = q = hstring; *p != 0; )
+ {
+ uschar *s;
+ int newtype = htype_add_bot;
+ header_line **hptr = &acl_added_headers;
+
+ /* Find next header line within the string */
+
+ for (;;)
+ {
+ q = Ustrchr(q, '\n');
+ if (*(++q) != ' ' && *q != '\t') break;
+ }
+
+ /* If the line starts with a colon, interpret the instruction for where to
+ add it. This temporarily sets up a new type. */
+
+ if (*p == ':')
+ {
+ if (strncmpic(p, US":after_received:", 16) == 0)
+ {
+ newtype = htype_add_rec;
+ p += 16;
+ }
+ else if (strncmpic(p, US":at_start_rfc:", 14) == 0)
+ {
+ newtype = htype_add_rfc;
+ p += 14;
+ }
+ else if (strncmpic(p, US":at_start:", 10) == 0)
+ {
+ newtype = htype_add_top;
+ p += 10;
+ }
+ else if (strncmpic(p, US":at_end:", 8) == 0)
+ {
+ newtype = htype_add_bot;
+ p += 8;
+ }
+ while (*p == ' ' || *p == '\t') p++;
+ }
+
+ /* See if this line starts with a header name, and if not, add X-ACL-Warn:
+ to the front of it. */
+
+ for (s = p; s < q - 1; s++)
+ {
+ if (*s == ':' || !isgraph(*s)) break;
+ }
+
+ s = string_sprintf("%s%.*s", (*s == ':')? "" : "X-ACL-Warn: ", q - p, p);
+ hlen = Ustrlen(s);
+
+ /* See if this line has already been added */
+
+ while (*hptr != NULL)
+ {
+ if (Ustrncmp((*hptr)->text, s, hlen) == 0) break;
+ hptr = &((*hptr)->next);
+ }
+
+ /* Add if not previously present */
+
+ if (*hptr == NULL)
+ {
+ header_line *h = store_get(sizeof(header_line));
+ h->text = s;
+ h->next = NULL;
+ h->type = newtype;
+ h->slen = hlen;
+ *hptr = h;
+ hptr = &(h->next);
+ }
+
+ /* Advance for next header line within the string */
+
+ p = q;
+ }
+}
+
+
+
+
+/*************************************************
* Handle warnings *
*************************************************/
@@ -833,6 +962,9 @@
the message's headers, and/or writes information to the log. In each case, this
only happens once (per message for headers, per connection for log).
+** NOTE: The header adding action using the "message" setting is historic, and
+its use is now deprecated. The new add_header modifier should be used instead.
+
Arguments:
where ACL_WHERE_xxxx indicating which ACL this is
user_message message for adding to headers
@@ -844,8 +976,6 @@
static void
acl_warn(int where, uschar *user_message, uschar *log_message)
{
-int hlen;
-
if (log_message != NULL && log_message != user_message)
{
uschar *text;
@@ -895,99 +1025,10 @@
return;
}
-/* Treat the user message as a sequence of one or more header lines. */
+/* The code for setting up header lines is now abstracted into a separate
+function so that it can be used for the add_header modifier as well. */
-hlen = Ustrlen(user_message);
-if (hlen > 0)
- {
- uschar *text, *p, *q;
-
- /* Add a final newline if not present */
-
- text = ((user_message)[hlen-1] == '\n')? user_message :
- string_sprintf("%s\n", user_message);
-
- /* Loop for multiple header lines, taking care about continuations */
-
- for (p = q = text; *p != 0; )
- {
- uschar *s;
- int newtype = htype_add_bot;
- header_line **hptr = &acl_warn_headers;
-
- /* Find next header line within the string */
-
- for (;;)
- {
- q = Ustrchr(q, '\n');
- if (*(++q) != ' ' && *q != '\t') break;
- }
-
- /* If the line starts with a colon, interpret the instruction for where to
- add it. This temporarily sets up a new type. */
-
- if (*p == ':')
- {
- if (strncmpic(p, US":after_received:", 16) == 0)
- {
- newtype = htype_add_rec;
- p += 16;
- }
- else if (strncmpic(p, US":at_start_rfc:", 14) == 0)
- {
- newtype = htype_add_rfc;
- p += 14;
- }
- else if (strncmpic(p, US":at_start:", 10) == 0)
- {
- newtype = htype_add_top;
- p += 10;
- }
- else if (strncmpic(p, US":at_end:", 8) == 0)
- {
- newtype = htype_add_bot;
- p += 8;
- }
- while (*p == ' ' || *p == '\t') p++;
- }
-
- /* See if this line starts with a header name, and if not, add X-ACL-Warn:
- to the front of it. */
-
- for (s = p; s < q - 1; s++)
- {
- if (*s == ':' || !isgraph(*s)) break;
- }
-
- s = string_sprintf("%s%.*s", (*s == ':')? "" : "X-ACL-Warn: ", q - p, p);
- hlen = Ustrlen(s);
-
- /* See if this line has already been added */
-
- while (*hptr != NULL)
- {
- if (Ustrncmp((*hptr)->text, s, hlen) == 0) break;
- hptr = &((*hptr)->next);
- }
-
- /* Add if not previously present */
-
- if (*hptr == NULL)
- {
- header_line *h = store_get(sizeof(header_line));
- h->text = s;
- h->next = NULL;
- h->type = newtype;
- h->slen = hlen;
- *hptr = h;
- hptr = &(h->next);
- }
-
- /* Advance for next header line within the string */
-
- p = q;
- }
- }
+setup_header(user_message);
}
@@ -2395,9 +2436,13 @@
switch(cb->type)
{
+ case ACLC_ADD_HEADER:
+ setup_header(arg);
+ break;
+
/* 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)
@@ -2415,7 +2460,7 @@
TRUE, NULL);
break;
-#ifdef EXPERIMENTAL_BRIGHTMAIL
+ #ifdef EXPERIMENTAL_BRIGHTMAIL
case ACLC_BMI_OPTIN:
{
int old_pool = store_pool;
@@ -2424,7 +2469,7 @@
store_pool = old_pool;
}
break;
-#endif
+ #endif
case ACLC_CONDITION:
if (Ustrspn(arg, "0123456789") == Ustrlen(arg)) /* Digits, or empty */
@@ -2577,11 +2622,11 @@
}
break;
-#ifdef WITH_CONTENT_SCAN
+ #ifdef WITH_CONTENT_SCAN
case ACLC_DECODE:
rc = mime_decode(&arg);
break;
-#endif
+ #endif
case ACLC_DELAY:
{
@@ -2625,14 +2670,14 @@
}
break;
-#ifdef WITH_OLD_DEMIME
+ #ifdef WITH_OLD_DEMIME
case ACLC_DEMIME:
rc = demime(&arg);
break;
-#endif
+ #endif
-#ifdef EXPERIMENTAL_DOMAINKEYS
- case ACLC_DK_DOMAIN_SOURCE:
+ #ifdef EXPERIMENTAL_DOMAINKEYS
+ case ACLC_DK_DOMAIN_SOURCE:
if (dk_verify_block == NULL) { rc = FAIL; break; };
/* check header source of domain against given string */
switch (dk_verify_block->address_source) {
@@ -2648,9 +2693,10 @@
rc = match_isinlist(US"none", &arg, 0, NULL,
NULL, MCL_STRING, TRUE, NULL);
break;
- }
- break;
- case ACLC_DK_POLICY:
+ }
+ break;
+
+ case ACLC_DK_POLICY:
if (dk_verify_block == NULL) { rc = FAIL; break; };
/* check policy against given string, default FAIL */
rc = FAIL;
@@ -2660,28 +2706,32 @@
if (dk_verify_block->testing)
rc = match_isinlist(US"testing", &arg, 0, NULL,
NULL, MCL_STRING, TRUE, NULL);
- break;
- case ACLC_DK_SENDER_DOMAINS:
+ break;
+
+ case ACLC_DK_SENDER_DOMAINS:
if (dk_verify_block == NULL) { rc = FAIL; break; };
if (dk_verify_block->domain != NULL)
rc = match_isinlist(dk_verify_block->domain, &arg, 0, &domainlist_anchor,
NULL, MCL_DOMAIN, TRUE, NULL);
else rc = FAIL;
- break;
- case ACLC_DK_SENDER_LOCAL_PARTS:
+ break;
+
+ case ACLC_DK_SENDER_LOCAL_PARTS:
if (dk_verify_block == NULL) { rc = FAIL; break; };
if (dk_verify_block->local_part != NULL)
rc = match_isinlist(dk_verify_block->local_part, &arg, 0, &localpartlist_anchor,
NULL, MCL_LOCALPART, TRUE, NULL);
else rc = FAIL;
- break;
- case ACLC_DK_SENDERS:
+ break;
+
+ case ACLC_DK_SENDERS:
if (dk_verify_block == NULL) { rc = FAIL; break; };
if (dk_verify_block->address != NULL)
rc = match_address_list(dk_verify_block->address, TRUE, TRUE, &arg, NULL, -1, 0, NULL);
else rc = FAIL;
- break;
- case ACLC_DK_STATUS:
+ break;
+
+ case ACLC_DK_STATUS:
if (dk_verify_block == NULL) { rc = FAIL; break; };
if (dk_verify_block->result > 0) {
switch(dk_verify_block->result) {
@@ -2713,10 +2763,10 @@
rc = match_isinlist(US"bad", &arg, 0, NULL,
NULL, MCL_STRING, TRUE, NULL);
break;
+ }
}
- }
- break;
-#endif
+ break;
+ #endif
case ACLC_DNSLISTS:
rc = verify_check_dnsbl(&arg);
@@ -2798,7 +2848,7 @@
}
break;
-#ifdef WITH_CONTENT_SCAN
+ #ifdef WITH_CONTENT_SCAN
case ACLC_MALWARE:
{
/* Seperate the regular expression and any optional parameters. */
@@ -2818,12 +2868,12 @@
break;
case ACLC_MIME_REGEX:
- rc = mime_regex(&arg);
+ rc = mime_regex(&arg);
break;
-#endif
+ #endif
case ACLC_RATELIMIT:
- rc = acl_ratelimit(arg, log_msgptr);
+ rc = acl_ratelimit(arg, log_msgptr);
break;
case ACLC_RECIPIENTS:
@@ -2831,11 +2881,11 @@
&recipient_data);
break;
-#ifdef WITH_CONTENT_SCAN
- case ACLC_REGEX:
- rc = regex(&arg);
+ #ifdef WITH_CONTENT_SCAN
+ case ACLC_REGEX:
+ rc = regex(&arg);
break;
-#endif
+ #endif
case ACLC_SENDER_DOMAINS:
{
@@ -2863,7 +2913,7 @@
}
break;
-#ifdef WITH_CONTENT_SCAN
+ #ifdef WITH_CONTENT_SCAN
case ACLC_SPAM:
{
/* Seperate the regular expression and any optional parameters. */
@@ -2881,13 +2931,13 @@
}
}
break;
-#endif
+ #endif
-#ifdef EXPERIMENTAL_SPF
+ #ifdef EXPERIMENTAL_SPF
case ACLC_SPF:
rc = spf_process(&arg, sender_address);
break;
-#endif
+ #endif
/* If the verb is WARN, discard any user message from verification, because
such messages are SMTP responses, not header additions. The latter come
Index: globals.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/globals.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- globals.c 2 Mar 2006 12:25:48 -0000 1.52
+++ globals.c 6 Mar 2006 16:05:12 -0000 1.53
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/globals.c,v 1.52 2006/03/02 12:25:48 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/globals.c,v 1.53 2006/03/06 16:05:12 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -162,6 +162,7 @@
/* General global variables */
+header_line *acl_added_headers = NULL;
tree_node *acl_anchor = NULL;
uschar *acl_not_smtp = NULL;
#ifdef WITH_CONTENT_SCAN
@@ -186,7 +187,6 @@
BOOL acl_temp_details = FALSE;
uschar *acl_var[ACL_CVARS + ACL_MVARS];
uschar *acl_verify_message = NULL;
-header_line *acl_warn_headers = NULL;
string_item *acl_warn_logged = NULL;
/* Names of SMTP places for use in ACL error messages, and corresponding SMTP
Index: globals.h
===================================================================
RCS file: /home/cvs/exim/exim-src/src/globals.h,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- globals.h 2 Mar 2006 12:25:48 -0000 1.36
+++ globals.h 6 Mar 2006 16:05:12 -0000 1.37
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/globals.h,v 1.36 2006/03/02 12:25:48 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/globals.h,v 1.37 2006/03/06 16:05:12 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -104,6 +104,7 @@
/* General global variables */
extern BOOL accept_8bitmime; /* Allow *BITMIME incoming */
+extern header_line *acl_added_headers; /* Headers added by an ACL */
extern tree_node *acl_anchor; /* Tree of named ACLs */
extern uschar *acl_not_smtp; /* ACL run for non-SMTP messages */
#ifdef WITH_CONTENT_SCAN
@@ -128,7 +129,6 @@
extern BOOL acl_temp_details; /* TRUE to give details for 4xx error */
extern uschar *acl_var[ACL_CVARS+ACL_MVARS]; /* User ACL variables */
extern uschar *acl_verify_message; /* User message for verify failure */
-extern header_line *acl_warn_headers; /* Warning headers added by ACL */
extern string_item *acl_warn_logged; /* Logged lines */
extern int acl_wherecodes[]; /* Response codes for ACL fails */
extern uschar *acl_wherenames[]; /* Names for messages */
Index: receive.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/receive.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- receive.c 14 Feb 2006 15:11:43 -0000 1.26
+++ receive.c 6 Mar 2006 16:05:12 -0000 1.27
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/receive.c,v 1.26 2006/02/14 15:11:43 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/receive.c,v 1.27 2006/03/06 16:05:12 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -899,10 +899,10 @@
header_line *h, *next;
header_line *last_received = NULL;
-if (acl_warn_headers == NULL) return;
+if (acl_added_headers == NULL) return;
DEBUG(D_receive|D_acl) debug_printf(">>Headers added by %s ACL:\n", acl_name);
-for (h = acl_warn_headers; h != NULL; h = next)
+for (h = acl_added_headers; h != NULL; h = next)
{
next = h->next;
@@ -964,7 +964,7 @@
DEBUG(D_receive|D_acl) debug_printf(" %s", header_last->text);
}
-acl_warn_headers = NULL;
+acl_added_headers = NULL;
DEBUG(D_receive|D_acl) debug_printf(">>\n");
}
Index: smtp_in.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/smtp_in.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- smtp_in.c 2 Mar 2006 12:25:48 -0000 1.34
+++ smtp_in.c 6 Mar 2006 16:05:12 -0000 1.35
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/smtp_in.c,v 1.34 2006/03/02 12:25:48 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/smtp_in.c,v 1.35 2006/03/06 16:05:12 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -808,7 +808,7 @@
raw_recipients_count = recipients_count = recipients_list_max = 0;
message_linecount = 0;
message_size = -1;
-acl_warn_headers = NULL;
+acl_added_headers = NULL;
queue_only_policy = FALSE;
deliver_freeze = FALSE; /* Can be set by ACL */
freeze_tell = freeze_tell_config; /* Can be set by ACL */
Index: 0532
====================================================================
# Exim test configuration 0532
CONNECTCOND=
exim_path = EXIM_PATH
host_lookup_order = bydns
primary_hostname = myhost.test.ex
rfc1413_query_timeout = 0s
spool_directory = DIR/spool
log_file_path = DIR/spool/log/%slog
gecos_pattern = ""
gecos_name = CALLER_NAME
# ----- Main settings -----
acl_smtp_connect = connect
acl_smtp_mail = mail
acl_smtp_rcpt = rcpt
acl_smtp_predata = predata
acl_smtp_data = data
acl_not_smtp = notsmtp
qualify_domain = test.ex
trusted_users = CALLER
# ----- ACL -----
begin acl
connect:
accept CONNECTCOND
mail:
accept add_header = MAIL: one
senders = mailok@???
add_header = MAIL: two\nMAIL: three
accept
rcpt:
accept add_header = RCPT: one
add_header = DUP: duplicate
local_parts = rcptok
add_header = RCPT: two\n continued\n
deny add_header = RCPT: denied $local_part
predata:
warn add_header = PREDATA-WARN: added with add_header
message = PREDATA-WARN: added with message
accept add_header = PREDATA: recipients are $recipients
data:
accept add_header = DATA: one
add_header = DUP: duplicate
condition = ${if eq{$h_cond:}{accept}}
notsmtp:
accept add_header = NOTSMTP: $recipients
# ----- Routers -----
begin routers
r1:
driver = accept
transport = t1
# ----- Transports -----
begin transports
t1:
driver = appendfile
file = DIR/test-mail/$local_part
user = CALLER
# End
Index: 4000
===================================================================
RCS file: /home/cvs/exim/exim-test/confs/4000,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- 4000 7 Feb 2006 10:34:26 -0000 1.1
+++ 4000 6 Mar 2006 16:05:12 -0000 1.2
@@ -49,19 +49,19 @@
check_mime:
warn decode = default
- message = X-$mime_part_count-content-type: $mime_content_type\n\
- X-$mime_part_count-filename: $mime_filename\n\
- X-$mime_part_count-charset: $mime_charset\n\
- X-$mime_part_count-boundary: $mime_boundary\n\
- X-$mime_part_count-content-disposition: $mime_content_disposition\n\
- X-$mime_part_count-content-transfer-encoding: $mime_content_transfer_encoding\n\
- X-$mime_part_count-content-id: $mime_content_id\n\
- X-$mime_part_count-content-description: $mime_content_description\n\
- X-$mime_part_count-is-multipart: $mime_is_multipart\n\
- X-$mime_part_count-is-coverletter: $mime_is_coverletter\n\
- X-$mime_part_count-is-rfc822: $mime_is_rfc822\n\
- X-$mime_part_count-decode-filename: $mime_decoded_filename\n\
- X-$mime_part_count-content-size: $mime_content_size
+ add_header = X-$mime_part_count-content-type: $mime_content_type\n\
+ X-$mime_part_count-filename: $mime_filename\n\
+ X-$mime_part_count-charset: $mime_charset\n\
+ X-$mime_part_count-boundary: $mime_boundary\n\
+ X-$mime_part_count-content-disposition: $mime_content_disposition\n\
+ X-$mime_part_count-content-transfer-encoding: $mime_content_transfer_encoding\n\
+ X-$mime_part_count-content-id: $mime_content_id\n\
+ X-$mime_part_count-content-description: $mime_content_description\n\
+ X-$mime_part_count-is-multipart: $mime_is_multipart\n\
+ X-$mime_part_count-is-coverletter: $mime_is_coverletter\n\
+ X-$mime_part_count-is-rfc822: $mime_is_rfc822\n\
+ X-$mime_part_count-decode-filename: $mime_decoded_filename\n\
+ X-$mime_part_count-content-size: $mime_content_size
accept
Index: 0532
====================================================================
1999-03-02 09:44:33 U=CALLER F=<mailok@???> rejected RCPT <notok@???>
1999-03-02 09:44:33 10HmaX-0005vi-00 <= mailok@??? U=CALLER P=local-smtp S=sss
1999-03-02 09:44:33 10HmaX-0005vi-00 => rcptok <rcptok@???> R=r1 T=t1
1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
1999-03-02 09:44:33 10HmaY-0005vi-00 => rcptok <rcptok@???> R=r1 T=t1
1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
1999-03-02 09:44:33 U=CALLER temporarily rejected connection in "connect" ACL: cannot test add_header condition in connection ACL
Index: 0532.rcptok
====================================================================
From mailok@??? Tue Mar 02 09:44:33 1999
Received: from CALLER by myhost.test.ex with local-smtp (Exim x.yz)
(envelope-from <mailok@???>)
id 10HmaX-0005vi-00
for rcptok@???; Tue, 2 Mar 1999 09:44:33 +0000
cond: accept
Message-Id: <E10HmaX-0005vi-00@???>
From: mailok@???
Date: Tue, 2 Mar 1999 09:44:33 +0000
MAIL: one
MAIL: two
MAIL: three
RCPT: one
DUP: duplicate
RCPT: two
continued
RCPT: denied notok
PREDATA-WARN: added with add_header
PREDATA-WARN: added with message
PREDATA: recipients are rcptok@???
DATA: one
DUP: duplicate
Test message
From CALLER@??? Tue Mar 02 09:44:33 1999
Received: from CALLER by myhost.test.ex with local (Exim x.yz)
(envelope-from <CALLER@???>)
id 10HmaY-0005vi-00
for rcptok@???; Tue, 2 Mar 1999 09:44:33 +0000
Message-Id: <E10HmaY-0005vi-00@???>
From: CALLER_NAME <CALLER@???>
Date: Tue, 2 Mar 1999 09:44:33 +0000
NOTSMTP: rcptok@???
Test non-SMTP message.
Index: 0532
====================================================================
1999-03-02 09:44:33 U=CALLER F=<mailok@???> rejected RCPT <notok@???>
1999-03-02 09:44:33 U=CALLER temporarily rejected connection in "connect" ACL: cannot test add_header condition in connection ACL
Index: 0532
====================================================================
# add_header modifier in ACLs
exim -bs -odi
mail from:<mailok@???>
rcpt to:<rcptok@???>
rcpt to:<notok@???>
data
cond: accept
Test message
.
quit
****
exim -odi rcptok@???
Test non-SMTP message.
****
exim -bs -odi -DCONNECTCOND="add_header=CONNECT: won't do this"
****
no_msglog_check
Index: 0532
====================================================================
220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
250 OK
250 Accepted
550 Administrative prohibition
354 Enter message, ending with "." on a line by itself
250 OK id=10HmaX-0005vi-00
221 myhost.test.ex closing connection
451 Temporary local problem - please try later