X-Git-Url: http://git.jankratochvil.net/?p=PerlMail.git;a=blobdiff_plain;f=perlmail-accept;h=e704077bce8d6a163b0e5cf34e23e6578c0d1fea;hp=20b5b2068d2cf7ca3219d203676180e94cfa09be;hb=0dd6e159920b9402e163cd35bdc8465dcfee65c9;hpb=bdb57ec197e5b173fc0a0331964ccf0c50cabf5b;ds=sidebyside diff --git a/perlmail-accept b/perlmail-accept index 20b5b20..e704077 100755 --- a/perlmail-accept +++ b/perlmail-accept @@ -48,8 +48,9 @@ BEGIN { use lib $ENV{"PERLMAIL_BASEDIR"} || File::Basename::dirname($0); # FIXME: - use lib "/home/lace/lib/perl5/site_perl/5.10.0"; - use lib "/home/lace/lib64/perl5/site_perl/5.10.0/x86_64-linux-thread-multi"; + use lib $ENV{"HOME"}."/lib64/perl5"; + use lib $ENV{"HOME"}."/lib/perl5"; + use lib $ENV{"HOME"}."/share/perl5"; use PerlMail::Config; use PerlMail::Lib; @@ -129,8 +130,9 @@ sub inetd while (1) { local $/="\n"; + $!=undef(); my $length=; - 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 +458,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 +547,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; @@ -736,64 +753,6 @@ my($header,$map)=@_; $Audit->replace_header($header,$text); } -# LMTP engine: -use Net::Cmd qw(CMD_OK CMD_MORE); -{ - package My::Net::SMTP::LMTP; - require Net::SMTP; - our @ISA=qw(Net::SMTP); - use Net::SMTP; - use Net::Cmd qw(CMD_OK); - use Carp qw(confess cluck); - - # Do not: sub _HELO - # as it would not set {'net_smtp_esmtp'} - sub _EHLO { shift->command("LHLO", @_)->response() == CMD_OK } - - sub clucked - { - my($self,$func,@args)=@_; - - do { return $_ if defined $_; } for $self->$func(@args); - cluck $func; - return; - } -} - - -sub lmtp_deliver -{ -my($admin_user,$admin_pwd,$user_from,$user_to)=@_; - - my $lmtp=My::Net::SMTP::LMTP->clucked("new","localhost","Port"=>"lmtp", -# "Debug"=>1, - ) or return; - bless $lmtp,"My::Net::SMTP::LMTP"; -# Prevent: -# due to: -# $lmtp->auth(Authen::SASL->new( -# "mechanism"=>"PLAIN", -# "callback"=>{ -# "user"=>$admin_user, -# "pass"=>$admin_pwd, -# # Prevent: "authname"=>$admin_user -# # as it causes: DIE: Unknown callback: 'authname'. (user|auth|language|pass) -# })); - # FIXME: Authentication hack: - $lmtp->command("AUTH PLAIN")->response()==CMD_MORE - or do { cluck "auth announce"; return; }; - $lmtp->clucked("command",encode_base64($user_from."\x00".$admin_user."\x00".$admin_pwd)) or return; - $lmtp->clucked("mail",$user_from) or return; - $lmtp->clucked("to",$user_to) or return; - $lmtp->clucked("data"); # Do not: or return; - # Prevent: 554 5.6.0 Message contains invalid header - (my $data=$Message)=~s/\AFrom .*\r?\n//; - $lmtp->clucked("datasend",$data) or return; - $lmtp->clucked("dataend") or return; - $lmtp->clucked("quit") or return; -} - - # MAIN $Getopt::Long::ignorecase=0;