summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/doc-txt/ChangeLog4
-rw-r--r--doc/doc-txt/NewStuff6
-rw-r--r--src/src/acl.c28
-rw-r--r--src/src/exim.c7
-rw-r--r--src/src/globals.c6
-rw-r--r--src/src/globals.h6
-rw-r--r--src/src/receive.c24
-rw-r--r--src/src/smtp_in.c8
8 files changed, 59 insertions, 30 deletions
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog
index 01bb9a06a..a6ad9d25d 100644
--- a/doc/doc-txt/ChangeLog
+++ b/doc/doc-txt/ChangeLog
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.9 2004/10/18 11:36:23 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.10 2004/10/19 11:04:26 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
@@ -38,6 +38,8 @@ Exim version 4.44
"control" were broken. There should now be diagnostics for all cases when a
control that does not make sense is encountered.
+ 9. Added the /retain_sender option to "control=submission".
+
Exim version 4.43
-----------------
diff --git a/doc/doc-txt/NewStuff b/doc/doc-txt/NewStuff
index 6d73f198a..1a4d69335 100644
--- a/doc/doc-txt/NewStuff
+++ b/doc/doc-txt/NewStuff
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/NewStuff,v 1.2 2004/10/18 09:16:57 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/NewStuff,v 1.3 2004/10/19 11:04:26 ph10 Exp $
New Features in Exim
--------------------
@@ -16,6 +16,10 @@ Version 4.44
CONFIGURE_OWNER. It specifies one additional group that is permitted for
the runtime configuration file when the group write permission is set.
+ 2. The "control=submission" facility has a new option /retain_sender. This
+ has the effect of setting local_sender_retain true and local_from_check
+ false for the incoming message in which it is encountered.
+
Version 4.43
------------
diff --git a/src/src/acl.c b/src/src/acl.c
index 1f767b65d..31087809b 100644
--- a/src/src/acl.c
+++ b/src/src/acl.c
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/acl.c,v 1.2 2004/10/18 11:36:23 ph10 Exp $ */
+/* $Cambridge: exim/src/src/acl.c,v 1.3 2004/10/19 11:04:26 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -1384,14 +1384,26 @@ for (; cb != NULL; cb = cb->next)
case CONTROL_SUBMISSION:
submission_mode = TRUE;
- if (Ustrncmp(p, "/domain=", 8) == 0)
- {
- submission_domain = string_copy(p+8);
- }
- else if (*p != 0)
+ while (*p == '/')
+ {
+ if (Ustrncmp(p, "/sender_retain", 14) == 0)
+ {
+ p += 14;
+ active_local_sender_retain = TRUE;
+ active_local_from_check = FALSE;
+ }
+ else if (Ustrncmp(p, "/domain=", 8) == 0)
+ {
+ uschar *pp = p + 8;
+ while (*pp != 0 && *pp != '/') pp++;
+ submission_domain = string_copyn(p+8, pp-p);
+ p = pp;
+ }
+ else break;
+ }
+ if (*p != 0)
{
- *log_msgptr = string_sprintf("syntax error in argument for "
- "\"control\" modifier \"%s\"", arg);
+ *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg);
return ERROR;
}
break;
diff --git a/src/src/exim.c b/src/src/exim.c
index dcf261879..c8d1917a4 100644
--- a/src/src/exim.c
+++ b/src/src/exim.c
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/exim.c,v 1.4 2004/10/18 09:26:02 ph10 Exp $ */
+/* $Cambridge: exim/src/src/exim.c,v 1.5 2004/10/19 11:04:26 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -4393,6 +4393,11 @@ while (more)
int rcount = 0;
int count = argc - recipients_arg;
uschar **list = argv + recipients_arg;
+
+ /* These options cannot be changed dynamically for non-SMTP messages */
+
+ active_local_sender_retain = local_sender_retain;
+ active_local_from_check = local_from_check;
/* Save before any rewriting */
diff --git a/src/src/globals.c b/src/src/globals.c
index a206d4232..634fd6c23 100644
--- a/src/src/globals.c
+++ b/src/src/globals.c
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/globals.c,v 1.2 2004/10/18 09:16:57 ph10 Exp $ */
+/* $Cambridge: exim/src/src/globals.c,v 1.3 2004/10/19 11:04:26 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -209,7 +209,9 @@ int acl_wherecodes[] = { 550, /* RCPT */
550, /* STARTTLS */
252 /* VRFY */
};
-
+
+BOOL active_local_from_check = FALSE;
+BOOL active_local_sender_retain = FALSE;
BOOL accept_8bitmime = FALSE;
address_item *addr_duplicate = NULL;
diff --git a/src/src/globals.h b/src/src/globals.h
index 9cd0bf72e..458e6638d 100644
--- a/src/src/globals.h
+++ b/src/src/globals.h
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/globals.h,v 1.2 2004/10/18 09:16:57 ph10 Exp $ */
+/* $Cambridge: exim/src/src/globals.h,v 1.3 2004/10/19 11:04:26 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -118,6 +118,8 @@ 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 */
+extern BOOL active_local_from_check;/* For adding Sender: (switchable) */
+extern BOOL active_local_sender_retain; /* For keeping Sender: (switchable) */
extern address_item *addr_duplicate; /* Duplicate address list */
extern address_item address_defaults; /* Default data for address item */
extern uschar *address_file; /* Name of file when delivering to one */
@@ -324,7 +326,7 @@ extern int keep_malformed; /* Time to keep malformed messages */
extern uschar *eldap_dn; /* Where LDAP DNs are left */
extern int load_average; /* Most recently read load average */
extern BOOL local_error_message; /* True if handling one of these */
-extern BOOL local_from_check; /* For adding Sender: */
+extern BOOL local_from_check; /* For adding Sender: (global value) */
extern uschar *local_from_prefix; /* Permitted prefixes */
extern uschar *local_from_suffix; /* Permitted suffixes */
extern uschar *local_interfaces; /* For forcing specific interfaces */
diff --git a/src/src/receive.c b/src/src/receive.c
index 1057d1122..0483bd5f5 100644
--- a/src/src/receive.c
+++ b/src/src/receive.c
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/receive.c,v 1.2 2004/10/18 11:36:23 ph10 Exp $ */
+/* $Cambridge: exim/src/src/receive.c,v 1.3 2004/10/19 11:04:26 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -971,8 +971,9 @@ The general actions of this function are:
blocks.
. If there is a "sender:" header and the message is locally originated,
- throw it away, unless the caller is trusted, or unless local_sender_retain
- is set - which can only happen if local_from_check is false.
+ throw it away, unless the caller is trusted, or unless
+ active_local_sender_retain is set - which can only happen if
+ active_local_from_check is false.
. If recipients are to be extracted from the message, build the
recipients list from the headers, removing any that were on the
@@ -997,7 +998,7 @@ The general actions of this function are:
. If the sender is local, check that from: is correct, and if not, generate
a Sender: header, unless message comes from a trusted caller, or this
- feature is disabled by no_local_from_check.
+ feature is disabled by active_local_from_check being false.
. If there is no "date" header, generate one, for locally-originated
or submission mode messages only.
@@ -1767,17 +1768,16 @@ for (h = header_list->next; h != NULL; h = h->next)
/* If there is a "Sender:" header and the message is locally originated,
and from an untrusted caller, or if we are in submission mode for a remote
message, mark it "old" so that it will not be transmitted with the message,
- unless local_sender_retain is set. (This can only be true if
- local_from_check is false.) If there are any resent- headers in the
+ unless active_local_sender_retain is set. (This can only be true if
+ active_local_from_check is false.) If there are any resent- headers in the
message, apply this rule to Resent-Sender: instead of Sender:. Messages
with multiple resent- header sets cannot be tidily handled. (For this
reason, at least one MUA - Pine - turns old resent- headers into X-resent-
headers when resending, leaving just one set.) */
case htype_sender:
- h->type = ((
- (sender_local && !trusted_caller && !local_sender_retain) ||
- submission_mode
+ h->type = ((!active_local_sender_retain &&
+ ((sender_local && !trusted_caller) || submission_mode)
) &&
(!resents_exist||is_resent))?
htype_old : htype_sender;
@@ -2194,9 +2194,9 @@ more than one address, then the call to parse_extract_address fails, and a
Sender: header is inserted, as required. */
if (from_header != NULL &&
- (
- (sender_local && local_from_check && !trusted_caller) ||
- (submission_mode && authenticated_id != NULL)
+ (active_local_from_check &&
+ ((sender_local && !trusted_caller) ||
+ (submission_mode && authenticated_id != NULL))
))
{
BOOL make_sender = TRUE;
diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c
index 8bc12debf..ff08cbd56 100644
--- a/src/src/smtp_in.c
+++ b/src/src/smtp_in.c
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/smtp_in.c,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */
+/* $Cambridge: exim/src/src/smtp_in.c,v 1.2 2004/10/19 11:04:26 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -803,8 +803,10 @@ rcpt_count = rcpt_defer_count = rcpt_fail_count =
message_size = -1;
acl_warn_headers = NULL;
queue_only_policy = FALSE;
-deliver_freeze = FALSE; /* Can be set by ACL */
-submission_mode = FALSE; /* Can be set by ACL */
+deliver_freeze = FALSE; /* Can be set by ACL */
+submission_mode = FALSE; /* Can be set by ACL */
+active_local_from_check = local_from_check; /* Can be set by ACL */
+active_local_sender_retain = local_sender_retain; /* Can be set by ACL */
sender_address = NULL;
raw_sender = NULL; /* After SMTP rewrite, before qualifying */
sender_address_unrewritten = NULL; /* Set only after verify rewrite */