From 599bf0b3c198ab207e3c7baacafa513fd0d6393d Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Tue, 12 Jun 2018 17:36:52 +0200 Subject: public-inbox-mda: use status codes where applicable Many MTA understand these and map them to sensible SMTP error messages. Inability to find an inbox results in "5.1.1 user unknown". Misformatted messages are rejected with "5.6.0 data format error". Unsupported inbox versions are reported as "5.3.5 local configuration error". All of these are interpreted as permanent failures. --- script/public-inbox-mda | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'script') diff --git a/script/public-inbox-mda b/script/public-inbox-mda index 766d58a6..1f1252a7 100755 --- a/script/public-inbox-mda +++ b/script/public-inbox-mda @@ -38,8 +38,8 @@ my $config = PublicInbox::Config->new; my $recipient = $ENV{ORIGINAL_RECIPIENT}; defined $recipient or die "ORIGINAL_RECIPIENT not defined in ENV\n"; my $dst = $config->lookup($recipient); # first check -defined $dst or do_exit(1); -my $main_repo = $dst->{mainrepo} or do_exit(1); +defined $dst or do_exit(67); # EX_NOUSER 5.1.1 user unknown +my $main_repo = $dst->{mainrepo} or do_exit(67); # pre-check, MDA has stricter rules than an importer might; do_exit(0) unless PublicInbox::MDA->precheck($simple, $dst->{address}); @@ -73,7 +73,7 @@ if (ref($ret) && $ret->isa('Email::MIME')) { # filter altered message } elsif ($ret == PublicInbox::Filter::Base::IGNORE) { do_exit(0); # chuck it to emergency } elsif ($ret == PublicInbox::Filter::Base::REJECT) { - $! = $ret; + $! = 65; # EX_DATAERR 5.6.0 data format error die $filter->err, "\n"; } # else { accept @@ -88,6 +88,7 @@ if ($v == 2) { my $git = $dst->git; $im = PublicInbox::Import->new($git, $dst->{name}, $recipient, $dst); } else { + $! = 78; # EX_CONFIG 5.3.5 local configuration error die "Unsupported inbox version: $v\n"; } if (defined $im->add($mime)) { -- cgit v1.2.3-24-ge0c7