X-Git-Url: http://git.jankratochvil.net/?a=blobdiff_plain;ds=sidebyside;f=perlmail-accept;h=e0b6dcaa988b48a95dd15c85dcc5dda746037f8d;hb=64c177cdda789cf1acfb4095abc067bf781d60e6;hp=aca0ad97c2d5f55ef5eade6b73ae5af24fb207e8;hpb=991fa5bfbdc7a0aecf47d1d13be2ce97547c7f94;p=PerlMail.git diff --git a/perlmail-accept b/perlmail-accept index aca0ad9..e0b6dca 100755 --- a/perlmail-accept +++ b/perlmail-accept @@ -533,10 +533,7 @@ my($folder,$profile,%args)=@_; $DoBell++ if $do{"bell"}; $folder=~s/;.*$//s; $folder="$Mail/".$' if $folder=~/^=/; - if (!$store_ignore) { - $Audit->noexit(1); - $Audit->accept($folder); - } + write_message($folder) if !$store_ignore; smssend_tryall $store_ignorenewmail,$do{"sms"},%args if $do{"sms"}; push @AuditStored,$folder if $do{"did"}; } @@ -555,20 +552,26 @@ my($funcref,@funcargs)=@_; return @AuditStored!=$did_last; } +# Never use Mail::Audit->store() as it will reformat MIME bodies and possibly corrupt OpenPGP! sub write_message { my($folder)=@_; - local $_; local *F; open F,">>$folder" or do { warn "Append \"$folder\": $!"; return 0; }; - do { warn "Lock \"$folder\": $!"; return 0; } if $_=Mail::Audit::audit_get_lock(\*F,$folder); - seek F,0,IO::Handle::SEEK_END or warn "Seek-end \"$folder\" (ignoring): $!"; - # No 'need_from' here although it is a bit risky to rely on our network peer - print F $Message or warn "Write to \"$folder\": $!"; - do { print F "\n"; warn "Missing trailing newline, fixed"; } if $Message!~/\n$/s; - close F or warn "Close \"$folder\""; - return 1; # some attempt was made, FIXME: proper error detection + { + local $_; + ($_=Mail::Audit::audit_get_lock(\*F,$folder)) and do { warn "Lock \"$folder\": $!"; last; }; + seek F,0,IO::Handle::SEEK_END or do { warn "Seek-end \"$folder\": $!"; last; }; + # FIXME: Check for '^From ' to not to rely on our network peer + print F $Message or do { warn "Write to \"$folder\": $!"; last; }; + do { print F "\n"; warn "Missing trailing newline, fixed"; } if $Message!~/\n$/s; + close F or do { warn "Close \"$folder\""; last; }; + return 1; # OK + } + warn "MAIL DROPPED for folder: $folder"; + close F; + return 0; # failed } sub process