X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=public-inbox-mda;h=24feeb81d355a8d4f188a5d7ea4bafa33c66f07a;hb=ac6f7081a484a053ddb60a2f8b6b6487664827ac;hp=630ffcb937f9a5f23a4b54f1e94d940204e94f17;hpb=4f4264f7ac384b02442bdf7c5cc6e838feb86c93;p=public-inbox.git diff --git a/public-inbox-mda b/public-inbox-mda index 630ffcb9..24feeb81 100755 --- a/public-inbox-mda +++ b/public-inbox-mda @@ -1,6 +1,8 @@ #!/usr/bin/perl -w -# Copyright (C) 2013, Eric Wong and all contributors +# Copyright (C) 2013-2015 all contributors # License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt) +# +# Mail delivery agent for public-inbox, run from your MTA upon mail delivery use strict; use warnings; my $usage = 'public-inbox-mda < rfc2822_message'; @@ -38,7 +40,18 @@ if (PublicInbox::MDA->precheck($filter, $dst->{address}) && $filtered = undef; $filter->simple($msg); - if (PublicInbox::Filter->run($msg, $filter)) { + my $filter_arg; + my $fcfg = $dst->{filter}; + if (!defined $fcfg || $filter eq 'reject') { + $filter_arg = $filter; + } elsif ($fcfg eq 'scrub') { + $filter_arg = undef; # the default for legacy versions + } else { + warn "publicinbox.$dst->{listname}.filter=$fcfg invalid\n"; + warn "must be either 'scrub' or 'reject' (the default)\n"; + } + + if (PublicInbox::Filter->run($msg, $filter_arg)) { # run spamc again on the HTML-free message if (do_spamc($msg, \$filtered)) { $msg = Email::MIME->new(\$filtered); @@ -49,7 +62,7 @@ if (PublicInbox::MDA->precheck($filter, $dst->{address}) && PublicInbox::MDA->author_info($msg); END { - search_index_sync($main_repo) if ($? == 0); + index_sync($main_repo) if ($? == 0); }; local $ENV{GIT_AUTHOR_NAME} = $name; @@ -64,7 +77,7 @@ if (PublicInbox::MDA->precheck($filter, $dst->{address}) && } else { # Ensure emergency spam gets spamassassin headers. # This makes it easier to prioritize obvious spam from less obvious - if (defined($filtered) && length($filtered)) { + if (defined($filtered) && $filtered ne '') { my $drop = Email::MIME->new(\$filtered); $filtered = undef; $filter->simple($drop); @@ -82,15 +95,17 @@ sub do_spamc { run([qw/spamc -E --headers/], \$orig, $out); }; - return ($@ || $? || !defined($$out) || length($$out) == 0) ? 0 : 1; + return ($@ || $? || !defined($$out) || $$out eq '') ? 0 : 1; } -sub search_index_sync { +sub index_sync { my ($git_dir) = @_; + + # potentially user-visible, ignore errors: + system('git', "--git-dir=$git_dir", 'update-server-info'); + eval { - require PublicInbox::Search; - umask 0022; # XXX FIXME use git config core.sharedRepository - my $s = PublicInbox::SearchIdx->new($git_dir, 2); - $s->index_sync; + require PublicInbox::SearchIdx; + PublicInbox::SearchIdx->new($git_dir, 2)->index_sync; }; }