From: Jeremy Harris Date: Sat, 4 Jan 2020 19:49:54 +0000 (+0000) Subject: SPF: additional debug X-Git-Url: https://git.exim.org/users/jgh/exim.git/commitdiff_plain/53ef3d8498e76615b531f2f61604334e9884ba03 SPF: additional debug --- diff --git a/src/src/lookups/spf.c b/src/src/lookups/spf.c index ef0c791cc..c84b6bbce 100644 --- a/src/src/lookups/spf.c +++ b/src/src/lookups/spf.c @@ -2,19 +2,18 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* - * Exim - SPF lookup module using libspf2 - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - * - * Copyright (c) 2005 Chris Webb, Arachsys Internet Services Ltd - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * Copyright (c) The Exim Maintainers 2016 - */ +/* Exim - SPF lookup module using libspf2 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Copyright (c) 2005 Chris Webb, Arachsys Internet Services Ltd + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +Copyright (c) The Exim Maintainers 2020 +*/ #include "../exim.h" @@ -111,6 +110,9 @@ if (SPF_request_set_env_from(spf_request, CS keystring)) SPF_request_query_mailfrom(spf_request, &spf_response); *result = string_copy(US SPF_strresult(SPF_response_result(spf_response))); + +DEBUG(D_lookup) spf_response_debug(spf_response); + SPF_response_free(spf_response); SPF_request_free(spf_request); return OK; diff --git a/src/src/spf.c b/src/src/spf.c index a8318dcda..7671551bc 100644 --- a/src/src/spf.c +++ b/src/src/spf.c @@ -5,7 +5,7 @@ /* SPF support. Copyright (c) Tom Kistner 2004 - 2014 License: GPL - Copyright (c) The Exim Maintainers 2015 - 2019 + Copyright (c) The Exim Maintainers 2015 - 2020 */ /* Code for calling spf checks via libspf-alt. Called from acl.c. */ @@ -122,7 +122,8 @@ for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr; if (strncmpic(rr->data+1, US SPF_VER_STR, 6) != 0) { - HDEBUG(D_host_lookup) debug_printf("not an spf record\n"); + HDEBUG(D_host_lookup) debug_printf("not an spf record: %.*s\n", + (int) s[0], s+1); continue; } @@ -135,6 +136,7 @@ for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr; continue; gstring_release_unused(g); s = string_copy_malloc(string_from_gstring(g)); + DEBUG(D_receive) debug_printf("SPF_dns_exim_lookup '%s'\n", s); break; } @@ -147,7 +149,6 @@ for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr; break; } } - DEBUG(D_receive) debug_printf("SPF_dns_exim_lookup '%s'\n", s); srr.rr[found++] = (void *) s; } @@ -283,6 +284,22 @@ return TRUE; } +void +spf_response_debug(SPF_response_t * spf_response) +{ +if (SPF_response_messages(spf_response) == 0) + debug_printf(" (no errors)\n"); +else for (int i = 0; i < SPF_response_messages(spf_response); i++) + { + SPF_error_t * err = SPF_response_message(spf_response, i); + debug_printf( "%s_msg = (%d) %s\n", + (SPF_error_errorp(err) ? "warn" : "err"), + SPF_error_code(err), + SPF_error_message(err)); + } +} + + /* spf_process adds the envelope sender address to the existing context (if any), retrieves the result, sets up expansion strings and evaluates the condition outcome. @@ -325,6 +342,8 @@ else spf_smtp_comment = US SPF_response_get_smtp_comment(spf_response); rc = SPF_response_result(spf_response); + + DEBUG(D_acl) spf_response_debug(spf_response); } /* We got a result. Now see if we should return OK or FAIL for it */ diff --git a/src/src/spf.h b/src/src/spf.h index 2283277df..93df24b2c 100644 --- a/src/src/spf.h +++ b/src/src/spf.h @@ -29,6 +29,7 @@ void spf_lib_version_report(FILE *); BOOL spf_init(void); BOOL spf_conn_init(uschar *, uschar *); int spf_process(const uschar **, uschar *, int); +void spf_response_debug(SPF_response_t *); #define SPF_PROCESS_NORMAL 0 #define SPF_PROCESS_GUESS 1