summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTodd Lyons <tlyons@exim.org>2014-05-28 05:12:00 -0700
committerTodd Lyons <tlyons@exim.org>2014-05-28 05:12:00 -0700
commitd502442ac32f8964f6cf86469869cecb035d12c0 (patch)
tree02c71fa4ec000db2ad83d44306680920ca746cf0 /src
parent27520a688253e1f73c6f59b32312cdf2755aed2c (diff)
parent5b7a7c051c9ab9ee7c924a611f90ef2be03e0ad0 (diff)
Merge tag 'exim-4_82_1'exim-4_83_RC1
Fix Conflicts: src/src/dmarc.c
Diffstat (limited to 'src')
-rw-r--r--src/src/dmarc.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/src/dmarc.c b/src/src/dmarc.c
index b2336b388..ca1c29bbb 100644
--- a/src/src/dmarc.c
+++ b/src/src/dmarc.c
@@ -181,20 +181,24 @@ int dmarc_process() {
dmarc_abort = TRUE;
else
{
- /* I strongly encourage anybody who can make this better to contact me directly!
- * <cannonball> Is this an insane way to extract the email address from the From: header?
- * <jgh_hm> it's sure a horrid layer-crossing....
- * <cannonball> I'm not denying that :-/
- * <jgh_hm> there may well be no better though
- */
- header_from_sender = expand_string(
- string_sprintf("${domain:${extract{1}{:}{${addresses:\\N%s\\N}}}}",
- from_header->text) );
+ uschar * errormsg;
+ int dummy, domain;
+ uschar * p;
+ uschar saveend;
+
+ parse_allow_group = TRUE;
+ p = parse_find_address_end(from_header->text, FALSE);
+ saveend = *p; *p = '\0';
+ if ((header_from_sender = parse_extract_address(from_header->text, &errormsg,
+ &dummy, &dummy, &domain, FALSE)))
+ header_from_sender += domain;
+ *p = saveend;
+
/* The opendmarc library extracts the domain from the email address, but
* only try to store it if it's not empty. Otherwise, skip out of DMARC. */
- if ((header_from_sender == NULL) || (strcmp( CCS header_from_sender, "") == 0))
+ if (!header_from_sender || (strcmp( CCS header_from_sender, "") == 0))
dmarc_abort = TRUE;
- libdm_status = (dmarc_abort == TRUE) ?
+ libdm_status = dmarc_abort ?
DMARC_PARSE_OKAY :
opendmarc_policy_store_from_domain(dmarc_pctx, header_from_sender);
if (libdm_status != DMARC_PARSE_OKAY)