]> Sergey Matveev's repositories - public-inbox.git/commitdiff
unsubscribe.milter: implement archive blacklist
authorEric Wong <e@80x24.org>
Tue, 7 Jun 2016 13:06:57 +0000 (13:06 +0000)
committerEric Wong <e@80x24.org>
Tue, 7 Jun 2016 13:14:10 +0000 (13:14 +0000)
We don't want people following links from archivers and
breaking archival.

examples/unsubscribe.milter

index eb1717baead92bf852c1f2cba46ebc6bd3a11af4..c245a5b8121db5604cf4163676e17e7deaeeced4 100644 (file)
@@ -72,16 +72,13 @@ $cbs{header} = sub {
        SMFIS_CONTINUE;
 };
 
-# only whitelist a few users for testing:
-my $whitelist = '/etc/unsubscribe-milter.whitelist';
-my %TEST_WHITELIST = map { $_ => 1 } eval {
-               open my $fh, '<', $whitelist or
-                       die "Failed to open $whitelist: $!";
-               local $/ = "\n";
-               chomp(my @lines = (<$fh>));
-               @lines;
-       };
-die "No whitelist at $whitelist\n" unless scalar keys %TEST_WHITELIST;
+# We don't want people unsubscribing archivers:
+sub archive_addr {
+       my ($addr) = @_;
+       return 1 if ($addr =~ /\@m\.gmane\.org\z/);
+       return 1 if ($addr eq 'archive@mail-archive.com');
+       0
+}
 
 $cbs{eom} = sub {
        my ($ctx) = @_;
@@ -92,7 +89,7 @@ $cbs{eom} = sub {
 
                # one recipient, one unique HTTP(S) URL
                return SMFIS_CONTINUE if @rcpt != 1;
-               return SMFIS_CONTINUE unless $TEST_WHITELIST{$rcpt[0]};
+               return SMFIS_CONTINUE if archive_addr(lc($rcpt[0]));
 
                my $unsub = $priv->{header}->{'list-unsubscribe'} || [];
                my $n = 0;