diff options
-rw-r--r-- | Documentation/public-inbox-mda.txt | 2 | ||||
-rwxr-xr-x | public-inbox-mda | 10 | ||||
-rw-r--r-- | t/cgi.t | 2 | ||||
-rw-r--r-- | t/mda.t | 34 |
4 files changed, 35 insertions, 13 deletions
diff --git a/Documentation/public-inbox-mda.txt b/Documentation/public-inbox-mda.txt index e29b119b..29570939 100644 --- a/Documentation/public-inbox-mda.txt +++ b/Documentation/public-inbox-mda.txt @@ -13,7 +13,7 @@ Each system user may have their own public-inbox instances * RECIPIENT - the recipient email address, from Postfix * PI_CONFIG - config file. default: ~/.public-inbox/config -* PI_FAILBOX - emergency destination. default: ~/public-inbox-fail.mbox +* PI_EMERGENCY - emergency destination. default: ~/.public-inbox/emergency/ # PI_CONFIG FILE diff --git a/public-inbox-mda b/public-inbox-mda index 2335cd3e..1f4d339f 100755 --- a/public-inbox-mda +++ b/public-inbox-mda @@ -16,14 +16,14 @@ use PublicInbox; use PublicInbox::Filter; use PublicInbox::Config; -# n.b: hopefully we can setup the failbox path without bailing due to +# n.b: hopefully we can setup the emergency path without bailing due to # user error, we really want to setup the emergency destination ASAP # in case there's bugs in our code or user error. -my $failbox = $ENV{PI_FAILBOX} || '~/public-inbox-fail.mbox'; -$failbox = expand_filename($failbox); +my $emergency = $ENV{PI_EMERGENCY} || '~/.public-inbox/emergency/'; +$emergency = expand_filename($emergency); # this reads the message from stdin -my $filter = Email::Filter->new(emergency => $failbox); +my $filter = Email::Filter->new(emergency => $emergency); my $config = PublicInbox::Config->new; my $recipient = $ENV{RECIPIENT}; @@ -64,7 +64,7 @@ if (PublicInbox->precheck($filter, $recipient) && } } } -exit 0; # goes to failbox +exit 0; # goes to emergency # we depend on "report_safe 0" in /etc/spamassassin/*.cf with --headers # not using Email::Filter->pipe here since we want the stdout of @@ -40,7 +40,7 @@ my $cfgpfx = "publicinbox.test"; } my $failbox = "$home/fail.mbox"; -local $ENV{PI_FAILBOX} = $failbox; +local $ENV{PI_EMERGENCY} = $failbox; { local $ENV{HOME} = $home; local $ENV{RECIPIENT} = $addr; @@ -45,7 +45,7 @@ my $failbox = "$home/fail.mbox"; { my $good_rev; - local $ENV{PI_FAILBOX} = $failbox; + local $ENV{PI_EMERGENCY} = $failbox; local $ENV{HOME} = $home; local $ENV{RECIPIENT} = $addr; my $simple = Email::Simple->new(<<EOF); @@ -77,13 +77,13 @@ EOF # ensure failures work, fail with bad spamc { - ok(!-e $failbox, "nothing in PI_FAILBOX before"); + ok(!-e $failbox, "nothing in PI_EMERGENCY before"); local $ENV{PATH} = $fail_path; run([$mda], \$in); local $ENV{GIT_DIR} = $maindir; my @revs = `git rev-list HEAD`; is(scalar @revs, 1, "bad revision not committed"); - ok(-s $failbox > 0, "PI_FAILBOX is written to"); + ok(-s $failbox > 0, "PI_EMERGENCY is written to"); } fail_bad_header($good_rev, "bad recipient", <<""); @@ -133,7 +133,7 @@ Date: deadbeef # spam training { - local $ENV{PI_FAILBOX} = $failbox; + local $ENV{PI_EMERGENCY} = $failbox; local $ENV{HOME} = $home; local $ENV{RECIPIENT} = $addr; local $ENV{PATH} = $main_path; @@ -167,7 +167,7 @@ EOF # train ham message { - local $ENV{PI_FAILBOX} = $failbox; + local $ENV{PI_EMERGENCY} = $failbox; local $ENV{HOME} = $home; local $ENV{RECIPIENT} = $addr; local $ENV{PATH} = $main_path; @@ -194,6 +194,28 @@ EOF is($?, 0, "learned ham idempotently "); } +# faildir - emergency destination is maildir +{ + my $faildir= "$home/faildir/"; + local $ENV{PI_EMERGENCY} = $faildir; + local $ENV{HOME} = $home; + local $ENV{RECIPIENT} = $addr; + local $ENV{PATH} = $fail_path; + my $in = <<EOF; +From: Faildir <faildir\@example.com> +To: You <you\@example.com> +Cc: $addr +Message-ID: <faildir\@example.com> +Subject: faildir subject +Date: Thu, 01 Jan 1970 00:00:00 +0000 + +EOF + run([$mda], \$in); + ok(-d $faildir, "emergency exists"); + my @new = glob("$faildir/new/*"); + is(scalar(@new), 1, "message delivered"); +} + done_testing(); sub fail_bad_header { @@ -207,6 +229,6 @@ sub fail_bad_header { my $rev = `git rev-list HEAD`; chomp $rev; is($rev, $good_rev, "bad revision not commited ($msg)"); - ok(-s $failbox > 0, "PI_FAILBOX is written to ($msg)"); + ok(-s $failbox > 0, "PI_EMERGENCY is written to ($msg)"); [ $in, $out, $err ]; } |