From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 643771F4C0 for ; Wed, 16 Oct 2019 00:39:56 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] mda: support --no-precheck option Date: Wed, 16 Oct 2019 00:39:56 +0000 Message-Id: <20191016003956.13269-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Since -mda now supports List-ID to better support mirroring of existing mailing lists, it probably makes sense to support disabling the precheck function to provide more accurate (though potentially spammier) mirrors of lists --- Documentation/public-inbox-mda.pod | 25 +++++++++++++++++++++++++ script/public-inbox-mda | 7 +++++-- t/mda.t | 15 +++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/Documentation/public-inbox-mda.pod b/Documentation/public-inbox-mda.pod index 921b7a15..15bf4d84 100644 --- a/Documentation/public-inbox-mda.pod +++ b/Documentation/public-inbox-mda.pod @@ -16,6 +16,31 @@ By default, it relies on L for filtering mail, but may be disabled via L +=head1 OPTIONS + +=over 8 + +=item --no-precheck + +By default, public-inbox-mda does some simple checks before +invoking L since it is intended to receive mail before +it goes to a mailing list. + +Howeever, some users prefer to use public-inbox-mda to mirror +mailing lists. This option exists to support those users. + +Using this option, the following prechecks are disabled: + + * multiple Message-IDs + * non-existent Message-IDs + * Message-IDs longer than 244 characters long + * From: header shorter than 3 characters + * Subject: header shorter than 2 characters + * unusable Date: headers + * inbox address specified in To: or Cc: header + +=back + =head1 ENVIRONMENT =over 8 diff --git a/script/public-inbox-mda b/script/public-inbox-mda index 2655a6c5..9b8753da 100755 --- a/script/public-inbox-mda +++ b/script/public-inbox-mda @@ -5,7 +5,8 @@ # Mail delivery agent for public-inbox, run from your MTA upon mail delivery use strict; use warnings; -my $usage = 'public-inbox-mda < rfc2822_message'; +my $usage = 'public-inbox-mda [OPTIONS] < rfc2822_message'; +my $precheck = grep(/\A--no-precheck\z/, @ARGV) ? 0 : 1; my ($ems, $emm); sub do_exit { @@ -55,7 +56,9 @@ $dst->{mainrepo} or do_exit(67); $dst = PublicInbox::InboxWritable->new($dst); # pre-check, MDA has stricter rules than an importer might; -do_exit(0) unless PublicInbox::MDA->precheck($simple, $dst->{address}); +if ($precheck && !PublicInbox::MDA->precheck($simple, $dst->{address})) { + do_exit(0); +} $simple = undef; my $spam_ok; if ($spamc) { diff --git a/t/mda.t b/t/mda.t index 3cab590b..92e8ad0d 100644 --- a/t/mda.t +++ b/t/mda.t @@ -293,6 +293,21 @@ EOF my $path = mid2path($mid); my $msg = `git --git-dir=$maindir cat-file blob HEAD:$path`; like($msg, qr/\Q$list_id\E/, 'delivered message w/ List-ID matches'); + + # try a message w/o precheck + $simple = Email::Simple->new(< +List-Id: <$list_id> + +this message would not be accepted without --no-precheck +EOF + $in = $simple->as_string; + my ($out, $err) = ('', ''); + IPC::Run::run([$mda, '--no-precheck'], \$in, \$out, \$err); + is($?, 0, 'mda OK with List-Id match and --no-precheck'); + my $cur = `git --git-dir=$maindir diff HEAD~1..HEAD`; + like($cur, qr/this message would not be accepted without --no-precheck/, + '--no-precheck delivered message anyways'); } done_testing();