+&writeto
[PerlMail.git] / perlmail-accept
index 20b5b20..2f7df60 100755 (executable)
@@ -129,8 +129,9 @@ sub inetd
 
        while (1) {
                local $/="\n";
+               $!=undef();
                my $length=<STDIN>;
-               confess "Unexpected EOF" if !defined $length;
+               confess "Unexpected EOF: $!" if !defined $length;
                confess "Missing EOL" if $length!~s/\n$//s;
                exit 0 if $length eq "BYE";
                confess "Unrecognized length: $length" if $length!~/^\d+$/;
@@ -456,6 +457,17 @@ my($funcref,@funcargs)=@_;
        return @AuditStored!=$did_last;
 }
 
+sub writeto
+{
+my($filename)=@_;
+
+       local *F;
+       open F,$filename or confess "open $filename: $!";
+       print F $Message or confess "write $filename: $!";
+       close F or confess "close $filename: $!";
+       return 1;
+}
+
 # Never use Mail::Audit->store() as it will reformat MIME bodies and possibly corrupt OpenPGP!
 sub write_message
 {
@@ -534,7 +546,11 @@ my($cmd)=@_;
        # prevent Razor2's: Can't call method "log" on unblessed reference at Razor2/Client/Agent.pm line 212.
        local $ENV{"HOME"}=$HOME;
        # 2>/dev/null to prevent error messages to corrupt inetd() output of perlmail-accept(1)
-       open CHILD,"|$cmd >/dev/null 2>/dev/null"
+       open CHILD,"|$cmd &>/dev/null"
+                                       # Workaround: spamassassin-3.1.3-1.fc5
+                                       #.q{|awk '/^X-Spam-Flag: YES$/{if (!body) exit 1;}/^$/{body=1;}'}
+                                       # Original:
+                                       #." >/dev/null 2>/dev/null"
                        or return 0;
        print CHILD $Message;
        close CHILD;