From 98de1f61deec26170589d33f82bfc3465bfef9cc Mon Sep 17 00:00:00 2001 From: Stoiko Ivanov Date: Tue, 25 Feb 2025 16:02:01 +0100 Subject: [PATCH] dkim: signer: log info instead of die'ing when missing domain for mail locally generated by PMG the signing sources (envelope-sender, From header) can contain only a local-part (postmaster) or even be empty (envelope-sender). While such mail cannot be sensibly signed, it should be treated as if the domain is not listed in DKIM-domains - by an log message on 'info' level instead of a `die`. the sub with the changed behavior is only used in this module, and sign_entity as external entry-point is only called in eval context, resulting in a log message on level 'warn'. so effectively this change should only reduce log-levels for DKIM failures in these cases from 'warning' to 'info' Signed-off-by: Stoiko Ivanov --- src/PMG/DKIMSign.pm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/PMG/DKIMSign.pm b/src/PMG/DKIMSign.pm index 6f309c8..72f4809 100644 --- a/src/PMG/DKIMSign.pm +++ b/src/PMG/DKIMSign.pm @@ -59,9 +59,16 @@ sub signing_domain { my $input_domain; if ($use_domain eq 'header') { $input_domain = parse_headers_for_signing($entity); + if (!defined($input_domain)) { + syslog('info', "DKIM signing: no domain found in the headers from '$sender_email'"); + return 0; + } } else { my @parts = split('@', $sender_email); - die "no domain in sender e-mail\n" if scalar(@parts) < 2; + if (scalar(@parts) < 2) { + syslog('info', "DKIM signing: no domain found in '$sender_email'"); + return 0; + } $input_domain = $parts[-1]; } @@ -107,7 +114,6 @@ sub parse_headers_for_signing { $domain = $addresses[0]->host(); } - die "there is no sender in the header\n" if !defined($domain); return $domain; }