X-Git-Url: http://git.jankratochvil.net/?p=PerlMail.git;a=blobdiff_plain;f=perlmail-accept;h=ae9da06e2c76550b621adc8dbb3036dc46946f63;hp=eeb104be09924a43a85c44e9c2f58639b610125d;hb=cf13558ac1b01fd521a7bb727cd8ab3acecb1211;hpb=e1e02809bf973873ac6c2d77bc169c4b5b0b0a17 diff --git a/perlmail-accept b/perlmail-accept index eeb104b..ae9da06 100755 --- a/perlmail-accept +++ b/perlmail-accept @@ -10,7 +10,7 @@ use warnings; INIT { require Sys::Syslog; - Sys::Syslog::openlog("lacemail","pid","mail"); + Sys::Syslog::openlog("perlmail","pid","mail"); my @syslogging_stack; sub syslogging_on_save { @@ -27,13 +27,19 @@ INIT { } +use File::Basename; +BEGIN { + use lib $ENV{"PERLMAIL_BASEDIR"} || File::Basename::dirname($0); + use PerlMail::Config; + use PerlMail::Lib; + } + use Mail::Audit qw(MAPS); require IO::Handle; use Carp qw(cluck confess); use POSIX qw(WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG WIFSTOPPED WSTOPSIG); require POSIX; # for ceil use User::Utmp; -require File::Basename; use Getopt::Long; require Mail::Address; require MIME::Words; @@ -49,16 +55,6 @@ use URI::Escape 'uri_escape'; require WWW::SMS; -my $HOME="/home/lace"; -my $Mail="$HOME/Mail"; -my @ValidUsers=qw(root lace short kratochvil _local); -my $IdleMax=10; -my $MaxBodySMS=0x1000; # max bytes to pass to Lingua::EN::Squeeze -my $SMSmailError='short+err@ucw.cz'; -my @SMSwebRcpt=qw(420 602 431329); -my $SMSwebRcpt_username="lace2"; -my $SMScontact=''; - our($Message,$Audit,@AuditStored,$store_ignore,$store_ignorenewmail,$store_profile,$DoBell); our(%audit_profile,@sms_squeezes,@alternates_host,@dnsbl_whitelist); # imported my %alternates_host; # from @alternates_host @@ -100,7 +96,7 @@ sub stdin exit 0; } -# FIXME: separate 'lacemail'-transfer together with lacemail-submit away +# FIXME: separate 'perlmail'-transfer together with perlmail-submit away sub inetd { die "Excessive arguments" if @ARGV; @@ -255,7 +251,7 @@ my($ignorenewmail,$smscount,%args)=@_; return map({ my $l=160; if (!$ignorenewmail) { # send by mail - $l-=length("Z emailu $SMSmailError: "); + $l-=length("Z emailu FIXME SMSmailError: "); $l-=length(smsbuild($_,$smscount)); } else { # send by web @@ -458,7 +454,7 @@ my($message)=@_; local $Audit=Mail::Audit->new( "emergency"=>"$Mail/emergency", "data"=>[map("$_\n",split("\n",$message))], - "log"=>"$HOME/.lacemail.log", + "log"=>"$HOME/.perlmail.log", "loglevel"=>99, ); local @AuditStored=(); @@ -481,7 +477,7 @@ sub razor2 open CHILD,'|' .'('.'(razor-check 2>&1;echo >&3 $?)' .'|sed "s/^/razor-check: /"' - .'|logger -t "lacemail['.$$.']" -p mail.crit' + .'|logger -t "perlmail['.$$.']" -p mail.crit' .') 3>&1' .'|exit `cat`' or return 0; @@ -540,75 +536,6 @@ my($domain,$full,$timeout)=@_; return Mail::Audit::rblcheck($self_faked,$timeout); } -our %muttrc_pending=(); -sub muttrc -{ -my($muttrc)=@_; - - $muttrc||="$HOME/.muttrc"; - $muttrc=~s/^\~/$HOME/; - do { warn "Looping muttrc, ignoring: $muttrc"; return (); } if $muttrc_pending{$muttrc}; - local $muttrc_pending{$muttrc}=1; - local *MUTTRC; - open MUTTRC,$muttrc or do { warn "open \"$muttrc\": $!"; return (); }; - local $/="\n"; - local $_; - my @r=(); - # far emulation mutt/init.c/mutt_parse_rc_line() - while () { - s/^[\s;]*//s; - s/[#;].*$//s; - s/\s*$//s; - next if !/^(\S+)\s*/s; - if ($1 eq "source") { - $_=$'; - do { warn "Wrong 'source' parameters at $muttrc:$.: $_"; next; } if !/^\S+$/; - push @r,muttrc($_); - next; - } - push @r,$_; - } - close MUTTRC or warn "close \"$muttrc\": $!"; - return wantarray() ? @r : join("",map("$_\n",@r)); -} - -my %mutteval_charmap=( # WARNING: Don't use "" or "0" here, see below for "|| warn"! - '\\'=>"\\", - 'r'=>"\r", - 'n'=>"\n", - 't'=>"\t", - 'f'=>"\f", - 'e'=>"\e", - ); -# mutt/init.c/mutt_extract_token() -sub mutteval -{ - local $_=$_[0]; - return $_ if !s/^"//; - do { warn "Missing trailing quote in: $_"; return $_; } if !s/"$//; - s/\\(.)/$mutteval_charmap{$1} || warn "Undefined '\\$1' sequence in: $_";/ges; - return $_; -} - -sub muttrc_get -{ -my(@headers)=@_; - - my @r=map({ (ref $_ ? $_ : qr/^\s*set\s+\Q$_\E\s*=\s*(.*?)\s*$/si); } @headers); - my %r=map(($_=>undef()),@r); - for (muttrc()) { - for my $ritem (@r) { - /$ritem/si or next; - $r{$ritem}=mutteval $1; - } - } - for my $var (grep { !defined($r{$_}) } @r) { - warn "Variable '$var' not found in muttrc"; - return undef(); - } - return wantarray() ? %r : $r{$r[0]}; -} - sub muttrc_aliases { my %r=(); @@ -623,20 +550,6 @@ sub muttrc_aliases return %r; } -# FIXME: Unify -# BEGIN lacemail-sendmail -# return: Mail::Address instance or undef() -sub parseone -{ -my($line)=@_; - - return undef() if !defined $line; - my @r=Mail::Address->parse($line); - warn "Got ".scalar(@r)." addresses while wanting just one; when parsing: $line" if 1!=@r; - return $r[0]; -} -# END lacemail-sendmail - # FIXME: host may get multiple recipients and thus not showing "for <...>" # FIXME: muttrc_get("from") is too strict sub store_muttrc_alternates @@ -729,14 +642,13 @@ my($header,$map)=@_; $text=~s/\b\Q$from\E\b/$to/gsi; } return if $text eq $orig; - $Audit->put_header("X-LaceMail-header_remap-$header",$orig); + $Audit->put_header("X-PerlMail-header_remap-$header",$orig); $Audit->replace_header($header,$text); } # MAIN -my $basedir=File::Basename::dirname($0); $Getopt::Long::ignorecase=0; die "GetOptions error" if !Getopt::Long::GetOptions( "inetd" ,sub { $opt_mode=\&inetd; }, @@ -746,21 +658,13 @@ die "GetOptions error" if !Getopt::Long::GetOptions( "idle!" ,\$opt_idle, "idletest" ,sub { syslogging_restore(); print((defined($_=useridle()) ? $_ : "")."\n"); exit 0; }, "muttrc" ,sub { syslogging_restore(); print scalar muttrc(); exit 0; }, - "d|basedir=s",\&basedir, ); # "Excessive arguments" checked in &inetd die "Missing mode" if !$opt_mode; -my $filenameMyAudit="$basedir/My-Audit.pm"; -open AUDIT,$filenameMyAudit or die "open \"$filenameMyAudit\": $!"; -{ - local $/=undef(); - eval or die "eval \"$filenameMyAudit\": $@"; - audit_init(); - %alternates_host=map((lc($_)=>1),@alternates_host); - %dnsbl_whitelist=map(( $_ =>1),@dnsbl_whitelist); - } -close AUDIT or warn "close \"$filenameMyAudit\": $!"; +PerlMail::Config::audit_init(); +%alternates_host=map((lc($_)=>1),@alternates_host); +%dnsbl_whitelist=map(( $_ =>1),@dnsbl_whitelist); &$opt_mode(); die "NOTREACHED";