diff options
-rw-r--r-- | src/src/dmarc.c | 40 | ||||
-rw-r--r-- | test/stdout/4650 | 4 |
2 files changed, 23 insertions, 21 deletions
diff --git a/src/src/dmarc.c b/src/src/dmarc.c index b2609b4fe..48a72541f 100644 --- a/src/src/dmarc.c +++ b/src/src/dmarc.c @@ -243,7 +243,7 @@ return NULL; static int dmarc_write_history_file() { -int history_file_fd; +int history_file_fd = 0; ssize_t written_len; int tmp_ans; u_char ** rua; /* aggregate report addressees */ @@ -254,14 +254,13 @@ if (!dmarc_history_file) DEBUG(D_receive) debug_printf("DMARC history file not set\n"); return DMARC_HIST_DISABLED; } -history_file_fd = log_open_as_exim(dmarc_history_file); - -if (history_file_fd < 0) - { - log_write(0, LOG_MAIN|LOG_PANIC, "failure to create DMARC history file: %s", - dmarc_history_file); - return DMARC_HIST_FILE_ERR; - } +if (!host_checking) + if ((history_file_fd = log_open_as_exim(dmarc_history_file)) < 0) + { + log_write(0, LOG_MAIN|LOG_PANIC, "failure to create DMARC history file: %s", + dmarc_history_file); + return DMARC_HIST_FILE_ERR; + } /* Generate the contents of the history file */ g = string_fmt_append(NULL, @@ -272,14 +271,17 @@ g = string_fmt_append(NULL, if (spf_response) g = string_fmt_append(g, "spf %d\n", dmarc_spf_ares_result); -g = string_fmt_append(g, "%spdomain %s\npolicy %d\n", - dkim_history_buffer, dmarc_used_domain, dmarc_policy); +if (dkim_history_buffer) + g = string_fmt_append(g, "%s\n", dkim_history_buffer); + +g = string_fmt_append(g, "pdomain %s\npolicy %d\n", + dmarc_used_domain, dmarc_policy); if ((rua = opendmarc_policy_fetch_rua(dmarc_pctx, NULL, 0, 1))) for (tmp_ans = 0; rua[tmp_ans]; tmp_ans++) g = string_fmt_append(g, "rua %s\n", rua[tmp_ans]); else - g = string_fmt_append(g, "rua -\n"); + g = string_catn(g, US"rua -\n", 6); opendmarc_policy_fetch_pct(dmarc_pctx, &tmp_ans); g = string_fmt_append(g, "pct %d\n", tmp_ans); @@ -301,14 +303,16 @@ g = string_fmt_append(g, "align_dkim %d\nalign_spf %d\naction %d\n", /* Write the contents to the history file */ DEBUG(D_receive) - debug_printf("DMARC logging history data for opendmarc reporting%s\n", - (host_checking || f.running_in_test_harness) ? " (not really)" : ""); -if (host_checking || f.running_in_test_harness) { - DEBUG(D_receive) - debug_printf("DMARC history data for debugging:\n%Y", g); + debug_printf("DMARC logging history data for opendmarc reporting%s\n", + host_checking ? " (not really)" : ""); + debug_printf_indent("DMARC history data for debugging:\n"); + expand_level++; + debug_printf_indent("%Y", g); + expand_level--; } -else + +if (!host_checking) { written_len = write_to_fd_buf(history_file_fd, g->s, diff --git a/test/stdout/4650 b/test/stdout/4650 index 436f4bd41..3ee5a7782 100644 --- a/test/stdout/4650 +++ b/test/stdout/4650 @@ -28,7 +28,7 @@ received 1692480217 ipaddr ip4.ip4.ip4.ip4 from test.ex mfrom test.ex -spf 7 +spf 6 pdomain test.ex policy 18 rua - @@ -40,5 +40,3 @@ sp 0 align_dkim 5 align_spf 5 action 2 -arc - -arc_policy - |