X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fspf.c;h=3a1912a918573522b9608251056a107205467e87;hb=6a9cf7f890226aa085842cd3d94b13e78ea31637;hp=7671551bca4b8c3af115065e8221acea13ece51a;hpb=53ef3d8498e76615b531f2f61604334e9884ba03;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/spf.c b/src/src/spf.c index 7671551bc..3a1912a91 100644 --- a/src/src/spf.c +++ b/src/src/spf.c @@ -72,6 +72,17 @@ int dns_rc; DEBUG(D_receive) debug_printf("SPF_dns_exim_lookup '%s'\n", domain); +/* Shortcircuit SPF RR lookups by returning NO_DATA. They were obsoleted by +RFC 6686/7208 years ago. see bug #1294 */ + +if (rr_type == T_SPF) + { + HDEBUG(D_host_lookup) debug_printf("faking NO_DATA for SPF RR(99) lookup\n"); + srr.herrno = NO_DATA; + SPF_dns_rr_dup(&spfrr, &srr); + return spfrr; + } + switch (dns_rc = dns_lookup(dnsa, US domain, rr_type, NULL)) { case DNS_SUCCEED: srr.herrno = NETDB_SUCCESS; break; @@ -80,7 +91,7 @@ switch (dns_rc = dns_lookup(dnsa, US domain, rr_type, NULL)) case DNS_NODATA: srr.herrno = NO_DATA; break; case DNS_FAIL: default: srr.herrno = NO_RECOVERY; break; - } + } for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr; rr = dns_next_rr(dnsa, &dnss, RESET_NEXT)) @@ -152,7 +163,12 @@ for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr; srr.rr[found++] = (void *) s; } -srr.num_rr = found; +/* Did we filter out all TXT RRs? Return NO_DATA instead of SUCCESS with +empty ANSWER section. */ + +if (!(srr.num_rr = found)) + srr.herrno = NO_DATA; + /* spfrr->rr must have been malloc()d for this */ SPF_dns_rr_dup(&spfrr, &srr); return spfrr; @@ -202,6 +218,7 @@ spf_init(void) { SPF_dns_server_t * dc; int debug = 0; +const uschar *s; DEBUG(D_receive) debug = 1; @@ -224,11 +241,16 @@ if (!(spf_server = SPF_server_new_dns(dc, debug))) DEBUG(D_receive) debug_printf("spf: SPF_server_new() failed.\n"); return FALSE; } - /* Quick hack to override the outdated explanation URL. - See https://www.mail-archive.com/mailop@mailop.org/msg08019.html */ - SPF_server_set_explanation(spf_server, "Please%_see%_http://www.open-spf.org/Why?id=%{S}&ip=%{C}&receiver=%{R}", &spf_response); - if (SPF_response_errcode(spf_response) != SPF_E_SUCCESS) - log_write(0, LOG_MAIN|LOG_PANIC_DIE, "%s", SPF_strerror(SPF_response_errcode(spf_response))); + /* Override the outdated explanation URL. + See https://www.mail-archive.com/mailop@mailop.org/msg08019.html + Used to work as "Please%_see%_http://www.open-spf.org/Why?id=%{S}&ip=%{C}&receiver=%{R}", + but is broken now (May 18th, 2020) */ +if (!(s = expand_string(spf_smtp_comment_template))) + log_write(0, LOG_MAIN|LOG_PANIC_DIE, "expansion of spf_smtp_comment_template failed"); + +SPF_server_set_explanation(spf_server, CCS s, &spf_response); +if (SPF_response_errcode(spf_response) != SPF_E_SUCCESS) + log_write(0, LOG_MAIN|LOG_PANIC_DIE, "%s", SPF_strerror(SPF_response_errcode(spf_response))); return TRUE; } @@ -380,8 +402,12 @@ if (spf_result_guessed) g = string_cat(g, US" (best guess record for domain)"); s = expand_string(US"$sender_address_domain"); +if (s && *s) + return string_append(g, 2, US" smtp.mailfrom=", s); + +s = sender_helo_name; return s && *s - ? string_append(g, 2, US" smtp.mailfrom=", s) + ? string_append(g, 2, US" smtp.helo=", s) : string_cat(g, US" smtp.mailfrom=<>"); }