lib/PublicInbox/SaPlugin/ListMirror.pm | 10 ++++++++--
lib/PublicInbox/SaPlugin/ListMirror.pod | 27 +++++++++++++++++++--------
diff --git a/lib/PublicInbox/SaPlugin/ListMirror.pm b/lib/PublicInbox/SaPlugin/ListMirror.pm
index 9acf86c0f399100a058106166c131931d72fdaf8..06903cad6327732b397adff0237a0b66f7189f4d 100644
--- a/lib/PublicInbox/SaPlugin/ListMirror.pm
+++ b/lib/PublicInbox/SaPlugin/ListMirror.pm
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2021 all contributors
+# Copyright (C) all contributors
# License: AGPL-3.0+
# SpamAssassin rules useful for running a mailing list mirror. We want to:
@@ -39,7 +39,11 @@ my ($hdr, $hval, $host_re, $addr_re) = @$cfg;
my $v = $pms->get($hdr) or next;
local $/ = "\n";
chomp $v;
- next if $v ne $hval;
+ if (ref($hval)) {
+ next if $v !~ $hval;
+ } else {
+ next if $v ne $hval;
+ }
return 1 if $recvd !~ $host_re;
}
@@ -91,6 +95,8 @@ my %patmap = ('*' => '\S+', '?' => '.', '[' => '[', ']' => ']');
$host_glob =~ s!(.)!$patmap{$1} || "\Q$1"!ge;
my $host_re = qr/\A\s*from\s+$host_glob(?:\s|$)/si;
+ (lc($hdr) eq 'list-id' && $hval =~ /<([^>]+)>/) and
+ $hval = qr/\A<\Q$1\E>\z/;
push @{$self->{list_mirror_check}}, [ $hdr, $hval, $host_re, $addr ];
}
diff --git a/lib/PublicInbox/SaPlugin/ListMirror.pod b/lib/PublicInbox/SaPlugin/ListMirror.pod
index d931d762df3ec972227e60886f6768f64ec1f33d..e6a6c2add857a5376f42100586d936b3192873f0 100644
--- a/lib/PublicInbox/SaPlugin/ListMirror.pod
+++ b/lib/PublicInbox/SaPlugin/ListMirror.pod
@@ -6,11 +6,11 @@ =head1 SYNOPSIS
loadplugin PublicInbox::SaPlugin::ListMirror
-Declare some mailing lists based on the expected List-Id value,
+Declare some mailing lists based on the expected List-ID value,
expected servers, and mailing list address:
- list_mirror List-Id *.example.com foo@example.com
- list_mirror List-Id *.example.com bar@example.com
+ list_mirror List-ID *.example.com foo@example.com
+ list_mirror List-ID *.example.com bar@example.com
Bump the score for messages which come from unexpected servers:
@@ -43,14 +43,25 @@ =over 4
=item list_mirror HEADER HEADER_VALUE HOSTNAME_GLOB [LIST_ADDRESS]
-Declare a list based on an expected C matching C
-exactly coming from C. C is optional,
+Declare a list based on an expected C matching C
+coming from C. C is optional,
but may specify the address of the mailing list being mirrored.
-C or C are common values of C
+C is the recommended value of C as most
+mailing lists support it.
An example of C is Cfoo.example.orgE>
-if C is C.
+if C is C.
+
+As of public-inbox 2.0, using C as the C and a
+C contained by angle brackets (Elist-idE),
+matching is done in accordance with
+L. That is,
+C will be a case-insensitive substring match
+and ignore the optional description C as documented
+in RFC 2919.
+
+All other C values use exact matches for backwards-compatibility.
C may be a wildcard match for machines where mail can
come from or an exact match.
@@ -105,7 +116,7 @@ and L
=head1 COPYRIGHT
-Copyright (C) 2016-2021 all contributors L
+Copyright (C) all contributors L
License: AGPL-3.0+ L