From: Todd Lyons Date: Wed, 28 May 2014 12:12:00 +0000 (-0700) Subject: Merge tag 'exim-4_82_1' X-Git-Tag: exim-4_83_RC1^0 X-Git-Url: https://git.exim.org/users/jgh/exim.git/commitdiff_plain/d502442ac32f8964f6cf86469869cecb035d12c0 Merge tag 'exim-4_82_1' Fix Conflicts: src/src/dmarc.c --- d502442ac32f8964f6cf86469869cecb035d12c0 diff --cc src/src/dmarc.c index b2336b388,c6190613e..ca1c29bbb --- a/src/src/dmarc.c +++ b/src/src/dmarc.c @@@ -181,23 -168,27 +181,27 @@@ int dmarc_process() dmarc_abort = TRUE; else { - /* I strongly encourage anybody who can make this better to contact me directly! - * Is this an insane way to extract the email address from the From: header? - * it's sure a horrid layer-crossing.... - * I'm not denying that :-/ - * 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 || (strcmp( CCS header_from_sender, "") == 0)) - 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) ++ 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) { log_write(0, LOG_MAIN|LOG_PANIC, "failure to store header From: in DMARC: %s, header was '%s'",