Skip to content

Commit 68aa5b7

Browse files
authored
Merge pull request #1898 from ikedas/issue-1852 by ikedas
DKIM-Signature header fields should not be removed even if invalid (#1852)
2 parents 5f06293 + 1973e60 commit 68aa5b7

File tree

3 files changed

+32
-17
lines changed

3 files changed

+32
-17
lines changed

Diff for: src/lib/Sympa/Config/Schema.pm

+13
Original file line numberDiff line numberDiff line change
@@ -4888,6 +4888,19 @@ our %pinfo = (
48884888
not_after => '6.2.56',
48894889
},
48904890

4891+
remove_dkim_headers => {
4892+
context => [qw(list domain site)],
4893+
order => 70.08,
4894+
group => 'dkim',
4895+
gettext_id => 'Remove DKIM signatures in incoming messages',
4896+
gettext_comment =>
4897+
'Normally this should be turned off. It can be turned on when DKIM signatures that cannot be verified at the recipient site cause problems.',
4898+
format => ['on', 'off'],
4899+
occurrence => '1',
4900+
default => 'off',
4901+
not_before => '6.2.74',
4902+
},
4903+
48914904
### Optional features
48924905

48934906
### List address verification

Diff for: src/lib/Sympa/Message.pm

+4-14
Original file line numberDiff line numberDiff line change
@@ -852,20 +852,8 @@ sub check_arc_seals {
852852

853853
# Old name: tools::remove_invalid_dkim_signature() which takes a message as
854854
# string and outputs idem without signature if invalid.
855-
sub remove_invalid_dkim_signature {
856-
$log->syslog('debug2', '(%s)', @_);
857-
my $self = shift;
858-
859-
return unless $self->get_header('DKIM-Signature');
860-
861-
my ($dkim_pass, @dummy) = $self->check_dkim_sigs;
862-
unless ($dkim_pass) {
863-
$log->syslog('info',
864-
'DKIM signature of message %s is invalid, removing', $self);
865-
$self->delete_header('DKIM-Signature');
866-
delete $self->{dkim_pass};
867-
}
868-
}
855+
# Deprecated.
856+
#sub remove_invalid_dkim_signature;
869857

870858
sub as_entity {
871859
my $self = shift;
@@ -3848,6 +3836,8 @@ An array of the overall result of checking and authentication result(s).
38483836
38493837
=item remove_invalid_dkim_signature ( )
38503838
3839+
B<Deprecated> on Sympa 6.2.74.
3840+
38513841
I<Instance method>.
38523842
Verifies DKIM signatures included in the message,
38533843
and if any of them are invalid, removes them.

Diff for: src/lib/Sympa/Spindle/ProcessOutgoing.pm

+15-3
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,13 @@ sub __twist_one {
245245
}
246246
}
247247

248-
$message->remove_invalid_dkim_signature
249-
if $rm_sig;
248+
if ($rm_sig) {
249+
# If it is set up, remove header fields related to DKIM signature
250+
# given by upstream MTAs.
251+
# AR should be removed after it is included into AAR: See below.
252+
$message->delete_header('DKIM-Signature');
253+
$message->delete_header('Domainkey-Signature');
254+
}
250255

251256
if ($message->{shelved}{dkim_sign} or %arc) {
252257
# apply DKIM signature AFTER any other message transformation.
@@ -256,6 +261,10 @@ sub __twist_one {
256261
# DKIM signing must be done before ARC sealing. See RFC 8617, 5.1.
257262
$message->arc_seal(%arc) if %arc;
258263

264+
if ($rm_sig) {
265+
$message->delete_header('Authentication-Results');
266+
}
267+
259268
# Determine envelope sender and envelope ID.
260269
my $envid = undef;
261270
if ($tracking) {
@@ -304,24 +313,27 @@ sub _twist {
304313
my $message = shift;
305314

306315
# Get list/robot context.
307-
my ($list, $robot, $arc_enabled, $dkim_enabled);
316+
my ($list, $robot, $arc_enabled, $dkim_enabled, $rm_sig);
308317
if (ref($message->{context}) eq 'Sympa::List') {
309318
$list = $message->{context};
310319
$robot = $message->{context}->{'domain'};
311320

312321
$arc_enabled = 'on' eq $list->{'admin'}{'arc_feature'};
313322
$dkim_enabled =
314323
'on' eq Conf::get_robot_conf($list->{'domain'}, 'dkim_feature');
324+
$rm_sig = 'on' eq $list->{'admin'}{'remove_dkim_headers'};
315325
} elsif ($message->{context} and $message->{context} ne '*') {
316326
$robot = $message->{context};
317327

318328
$arc_enabled = 'on' eq Conf::get_robot_conf($robot, 'arc_feature');
319329
$dkim_enabled = 'on' eq Conf::get_robot_conf($robot, 'dkim_feature');
330+
$rm_sig = 'on' eq Conf::get_robot_conf($robot, 'remove_dkim_headers');
320331
} else {
321332
$robot = '*';
322333

323334
$arc_enabled = 'on' eq $Conf::Conf{'arc_feature'};
324335
$dkim_enabled = 'on' eq $Conf::Conf{'dkim_feature'};
336+
$rm_sig = 'on' eq $Conf::Conf{'remove_dkim_headers'};
325337
}
326338

327339
if ($message->{serial} eq '0' or $message->{serial} eq 's') {

0 commit comments

Comments
 (0)