$Lock_pathname $PeerAddr $Socket_timeout $DB_table $DBI_database $DBI_user $DBI_pwd
$sendmail_orig @addr_addon &FromAddress @h_rcpt @h_from
%audit_profile @sms_squeezes @alternates_host @dnsbl_whitelist
+
+ $Audit $is_pgp $opt_F $procmailFROM_MAILER $store_ignore $store_ignorenewmail
+ $store_profile
);
require Mail::Alias;
-sub headerhas;
-sub store;
-sub headeris;
-sub did;
-sub dnsbl;
-sub store_muttrc_alternates;
+BEGIN {
+ for (qw(headerhas store headeris did dnsbl store_muttrc_alternates Received_for parts_linear mime_type
+ body_first mimehead razor2 header_remap)) {
+ eval 'sub '.$_.' { return ::'.$_.'(@_); }';
+ }
+ }
# perlmail-accept & perlmail-sendmail
our $store_ignore; # imported
sub audit
{
+ $store_profile=undef();
# TODO: <short-m@> storage?
# never spawn new mail if FROM_MAILER
# spam honeypots
return if did sub {
local $_;
- local $store_profile="silent";
+ # Do not local $store_file as it is our-imported
+ $store_profile="silent";
store "=spam" if grep /^\Qshort\@k332.feld.cvut.cz\E/i,Received_for();
# TODO: foreign violation of RFC 822 section 4.4.4, Subject:.*Automatick.+odpov.+v.+nep.+tomnosti
store "=spam" if headeris "From",'<ghandchi@hotmail.com>';
}
store "=spam" if ($_=mimehead(body_first())->mime_attr("Content-Type.charset")) && /^big5/i;
};
+ $store_profile=undef();
# spam detection
return if did sub {
- local $store_profile="silent";
+ # Do not local $store_file as it is our-imported
+ $store_profile="silent";
local $_;
store "=spam".($_ eq 1 ? "" : ";$_") if $_=razor2();
};
+ $store_profile=undef();
return if did sub {
- local $store_profile="silent";
+ # Do not local $store_file as it is our-imported
+ $store_profile="silent";
local $_;
store "=spam" .";$_","log" if $_=dnsbl '.relays.ordb.org.' ,1; # all hosts
store "=spam" .";$_","log" if $_=dnsbl '.blackholes.mail-abuse.org.' ,1; # all hosts
# I don't send viruses but viruses propagate mails of mine
store "=spam" if headeris "X-Mailer",'ravmd/8.3.2';
};
+ $store_profile=undef();
# special delivery
store "=err","bell" and return if headerhas \&Received_for,'<short+err@>';
# nasty public lists with $store_ignore
{
- local $store_profile="log";
+ # Do not local $store_file as it is our-imported
+ $store_profile="log";
local $store_ignore;
$store_ignore="smsmail" if 1==$Audit->body() && length(join "",$Audit->body())<180; # SMS mail
$store_ignore="sms OS" if $Audit->subject()=~/^Email pro: /; # "^Email pro: gsm@sh\.cvut\.cz$";
store "=9kc","log" if headeris "List-Post",'<n9k@pandora.cz>';
store "=9kcd","log" if headeris "List-Post",'<dev9k@pandora.cz>';
}
+ $store_profile=undef();
# lists
store "=mozillabug","log" if headeris "From" ,'<bugzilla-daemon@mozilla.org>';
require WWW::SMS;
-our($Message,$Audit,@AuditStored,$store_ignore,$store_ignorenewmail,$store_profile,$DoBell);
-our(%audit_profile,@sms_squeezes,@alternates_host,@dnsbl_whitelist); # imported
+our($Message,@AuditStored,$DoBell);
my %alternates_host; # from @alternates_host
my %dnsbl_whitelist; # from @dnsbl_whitelist
our $procmailTO_ =qr'^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?'mio;
our $procmailTO =qr'^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^a-zA-Z])?'mio;
our $procmailFROM_DAEMON=qr'^(Mailing-List:|Precedence:.*(junk|bulk|list)|To: Multiple recipients of |(((Resent-)?(From|Sender)|X-Envelope-From):|>?From )([^>]*[^(.%@a-z0-9])?(Post(ma?(st(e?r)?|n)|office)|(send)?Mail(er)?|daemon|m(mdf|ajordomo)|n?uucp|LIST(SERV|proc)|NETSERV|o(wner|ps)|r(e(quest|sponse)|oot)|b(ounce|bs\.smtp)|echo|mirror|s(erv(ices?|er)|mtp(error)?|ystem)|A(dmin(istrator)?|MMGR|utoanswer))(([^).!:a-z0-9][-_a-z0-9]*)?[%@> ][^<)]*(\(.*\).*)?)?$([^>]|$))'mio;
-our $procmailFROM_MAILER=qr'^(((Resent-)?(From|Sender)|X-Envelope-From):|>?From )[^>]*\b(Post(ma(st(er)?|n)|office)|(send)?Mail(er)?|daemon|mmdf|n?uucp|ops|r(esponse|oot)|(bbs\.)?smtp(error)?|s(erv(ices?|er)|ystem)|A(dmin(istrator)?|MMGR))(([^).!:a-z0-9][-_a-z0-9]*)?[%@> ][^<)]*(\(.*\).*)?)?$([^>]|$)'mio;
+$procmailFROM_MAILER=qr'^(((Resent-)?(From|Sender)|X-Envelope-From):|>?From )[^>]*\b(Post(ma(st(er)?|n)|office)|(send)?Mail(er)?|daemon|mmdf|n?uucp|ops|r(esponse|oot)|(bbs\.)?smtp(error)?|s(erv(ices?|er)|ystem)|A(dmin(istrator)?|MMGR))(([^).!:a-z0-9][-_a-z0-9]*)?[%@> ][^<)]*(\(.*\).*)?)?$([^>]|$)'mio;
# perl-5.8.0 does not cope w/original FROM_MAILER on the third '?' character
# Thus we did '([^>]*[^(.%@a-z0-9])?' -> '[^>]*\b', I hope it is somehow similiar
# original FROM_MAILER =qr'^(((Resent-)?(From|Sender)|X-Envelope-From):|>?From )([^>]*[^(.%@a-z0-9])?(Post(ma(st(er)?|n)|office)|(send)?Mail(er)?|daemon|mmdf|n?uucp|ops|r(esponse|oot)|(bbs\.)?smtp(error)?|s(erv(ices?|er)|ystem)|A(dmin(istrator)?|MMGR))(([^).!:a-z0-9][-_a-z0-9]*)?[%@> ][^<)]*(\(.*\).*)?)?$([^>]|$)'mio;
{
my($folder)=@_;
- return if $opt_dry;
+ return 1 if $opt_dry; # simulate OK
local *F;
open F,">>$folder" or do { warn "Append \"$folder\": $!"; return 0; };
{
local $_=$_;
my $save_=$_;
local $Message=$message;
- local $Audit=Mail::Audit->new(
+ # Cannot call 'local' for our-imported variable:
+ my $Audit_save=$Audit;
+ $Audit=Mail::Audit->new(
"emergency"=>"$Mail/emergency",
"data"=>[map("$_\n",split("\n",$message))],
"log"=>"$HOME/.perlmail.log",
write_message("$Mail/input") or die;
PerlMail::Config::audit();
warn 'Corrupted $_, repaired' if defined($save_)!=defined($_) || (defined($_) && $save_ ne $_);
+ # restore:
+ $Audit=$Audit_save;
}
# utility functions:
my $opt_Q;
my $opt_q;
my $opt_t;
-our $opt_f;
-our $opt_F; # from PerlMail::Config;
+our $opt_f; # not exported, just for local()
my $opt_perlmail_dry_run;
my @ARGV_save=@ARGV; # for non-bm mode
die if !Getopt::Long::GetOptions(
}
# to be utilized later by &FromAddress
-our $is_pgp; # from PerlMail::Config;
$is_pgp=(1
&& do { local $_=$head->mime_attr("Content-Type"); $_ && ~m#^multipart/(?:signed|encrypted)$#; }
&& do { local $_=$head->mime_attr("Content-Type.protocol"); $_ && ~m#^application/pgp\b#; }