X-Git-Url: https://git.jankratochvil.net/?p=PerlMail.git;a=blobdiff_plain;f=My-Audit.pm;h=7b2cba4866b99db1aeafbd9ec64b53acc1f84cc7;hp=20ffb811401ebe7827baba3b87a1cf46bad35f93;hb=d9989f4819d27bdd3dc6988ada534d4adfc9cbd3;hpb=22b1319369e1ab0ce456b4878a461144cc3d931e diff --git a/My-Audit.pm b/My-Audit.pm index 20ffb81..7b2cba4 100644 --- a/My-Audit.pm +++ b/My-Audit.pm @@ -4,7 +4,7 @@ sub audit_init { %audit_profile=( "btw" =>[], - "silent"=>["=btw" ,"did","syslog"], + "silent"=>["=btw" ,"did"], "log" =>["=silent","syslog"], "bell" =>["=log" ,"bell"], "sms" =>["=bell" ,"sms=1"], @@ -19,15 +19,25 @@ sub audit_init { "SqueezeControl"=>"max" ,"SQZ_OPTIMIZE_LEVEL"=>0 }, { "SqueezeControl"=>"max" ,"SQZ_OPTIMIZE_LEVEL"=>1 }, ); + @alternates_host=( + "jabberwock.ucw.cz", # short@ucw.cz + "atrey.karlin.mff.cuni.cz", # short@atrey.karlin.mff.cuni.cz + "k332.feld.cvut.cz", # short@k332.feld.cvut.cz + ); + @dnsbl_whitelist=( + "195.250.128.83", # smtp3.vol.cz; vol.cz.multistage.blackholes.five-ten-sg.com. + "64.49.222.22", # mail.pm.org: rackspace.com.spam-support.blackholes.five-ten-sg.com. + "208.147.243.5", # gambit.liquidcomm.net: cw.net.spam-support.blackholes.five-ten-sg.com. + "213.235.135.70", # smtp.tiscali.cz: tiscali.cz.multistage.blackholes.five-ten-sg.com. + "205.139.198.11", # eniac.disaster.com: cw.net.spam-support.blackholes.five-ten-sg.com. + "127.0.0.2", # 2.0.0.127.relays.ordb.org. + "65.113.40.131", # bozo.vmware.com: qwest.net.spam-support.blackholes.five-ten-sg.com. + "66.218.85.33", # mta2.wss.scd.yahoo.com.: yahoo.com.spam.blackholes.five-ten-sg.com. + ); } sub audit { - { - local $store_ignorenewmail=1; # no reason now, just a paranoia - store "=input","btw"; - } - # TODO: storage? # never spawn new mail if FROM_MAILER @@ -39,45 +49,57 @@ sub audit || headerhas "From",'' ); - # spam detection - return if did sub { - local $store_profile="silent"; - local $_; - store "=spam-rbl" .";$_" if $_=$Audit->rblcheck(); - store "=spam-razor".($_ eq 1 ? "" : ";$_") if $_=razor2(); - # I don't send viruses but viruses propagate mails of mine - store "=spam-av" if headeris "X-Mailer",'ravmd/8.3.2'; - }; - # spam honeypots return if did sub { local $_; local $store_profile="silent"; - store "=spamo-k332" if grep /^\Qshort\@k332.feld.cvut.cz\E/i,Received_for(); + 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 "=spamo" if headeris "From",''; - store "=spamo" if headeris "From",''; - store "=spamo" if headeris "From",''; + store "=spam" if headeris "From",''; + store "=spam" if headeris "From",''; + store "=spam" if headeris "From",''; + store "=spam" if headeris "From",''; + store "=spam" if headeris "From",''; + store "=spam" if headeris "From",''; + store "=spam" if headeris "From",''; { # weak detection: files with text/html w/o text/plain are usually a spam my @types_linear=map({ mime_type($_); } parts_linear()); - store "=spamo-html" if grep({ $_ eq "text/html"; } @types_linear) && !grep({ $_ eq "text/plain"; } @types_linear); + store "=spam" if grep({ $_ eq "text/html"; } @types_linear) && !grep({ $_ eq "text/plain"; } @types_linear); } - store "=spamo-big5" if ($_=mimehead(body_first())->mime_attr("Content-Type.charset")) && /^big5/i; + store "=spam" if ($_=mimehead(body_first())->mime_attr("Content-Type.charset")) && /^big5/i; + }; + + # spam detection + return if did sub { + local $store_profile="silent"; + local $_; + store "=spam".($_ eq 1 ? "" : ";$_") if $_=razor2(); + }; + return if did sub { + local $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 + # we don't check all hosts as they can be "dialup" category, FIXME: check for it + store "=spam" .";$_","log" if $_=dnsbl '.blackholes.five-ten-sg.com.',0; # just first + # I don't send viruses but viruses propagate mails of mine + store "=spam" if headeris "X-Mailer",'ravmd/8.3.2'; }; # special delivery store "=err","bell" and return if headerhas \&Received_for,''; # ppl-wished foreign remapping, Reply-To is left untouched! + # FIXME: modifications are now being dropped by &write_message! header_remap("From",{ - 'kerere@post.cz' =>'kamzik@k332.feld.cvut.cz', - 'profes@mbox.vol.cz' =>'kratochvilova@egp.cz', - 'jkrouzek@mbox.vol.cz' =>'krouzek@mbox.fsv.cuni.cz', - 'jakub.gorner@lidovky.cz' =>'tonda@disnet.cz', - 'jan.kolar@videoprogress.cz'=>'jenda.kolar@volny.cz', - 'daniel.rulicek@cponline.cz'=>'daniel.rulicek@cpress.cz', - 'pavel@suse.cz' =>'pavel@ucw.cz', + 'kerere@post.cz' =>'kamzik@k332.feld.cvut.cz', + 'profes@mbox.vol.cz' =>'kratochvilova@egp.cz', + 'jkrouzek@mbox.vol.cz' =>'krouzek@mbox.fsv.cuni.cz', + 'jakub.gorner@lidovky.cz' =>'tonda@disnet.cz', + 'jan.kolar@videoprogress.cz' =>'jenda.kolar@volny.cz', + 'daniel.rulicek@cponline.cz' =>'daniel.rulicek@cpress.cz', + 'pavel@suse.cz' =>'pavel@ucw.cz', }); # My obsolete e-mail addresses @@ -85,7 +107,7 @@ sub audit # nasty public lists with $store_ignore { - local $store_profile="bell"; + local $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$"; @@ -98,36 +120,44 @@ sub audit + + ); store "=gsm" if headeris "Sender" ,''; store "=gsmpand" if headeris "List-Post",''; + store "=9kc","log" if headeris "List-Post",''; + store "=9kcd","log" if headeris "List-Post",''; } # lists store "=mozillabug","log" if headeris "From" ,''; - store "=9kc","bell" if headeris "List-Post",''; - store "=9kcd","bell" if headeris "List-Post",''; store "=9ku","log" if headeris "List-Id" ,'<9000.listman.net>'; store "=9kd","log" if headeris "Sender" ,''; store "=spong","log" if headeris "List-Id" ,''; - store "=gtkd","log" if headeris "List-Id" ,''; + store "=gtkd","silent" if headeris "List-Id" ,''; + store "=gnomevfs","log" if headeris "List-Id" ,''; store "=mffstatnice","bell" if headeris "List-Post",''; store "=hw","log" if headeris "List-Post",''; - store "=gnokii","bell" if headeris "List-Id" ,''; + store "=gnokii","log" if headeris "List-Id" ,''; store "=winelic","log" if headeris "List-Id" ,''; - store "=wined","log" if headeris "List-Id" ,''; - store "=winepat","log" if headeris "List-Id" ,''; + store "=wined","silent" if headeris "List-Id" ,''; + store "=winepat","silent" if headeris "List-Id" ,''; store "=winecvs","silent" if headeris "List-Id" ,''; + store "=wineann","log" if headeris "List-Id" ,''; store "=ros","log" if headeris "List-Post",''; - store "=roskernel","bell" if headeris "List-Post",''; + store "=roskernel","log" if headeris "List-Post",''; store "=roscvs","silent" if headeris "List-Post",''; - store "=fsd","log" if headeris "X-Mailing-List",''; + store "=rosbug","log" if headeris "Reply-To" ,''; + store "=fsd","silent" if headeris "X-Mailing-List",''; + store "=kerneld","silent" if headeris "X-Mailing-List",''; store "=surprise","sms" if headeris "List-Post",''; store "=surprisesuse","sms" if headeris "Sender" ,''; store "=tacacs","log" if headeris "Sender" ,''; + store "=tacacs","log" if headeris "Sender" ,''; + store "=tacacs","log" if headeris "List-Id" ,''; store "=pm","sms" if headeris "Sender" ,''; - store "=radary","sms" if headeris "Reply-To" ,''; + store "=radary","log" if headeris "Reply-To" ,''; store "=dnet","log" if headeris "Sender" ,'<@lists.distributed.net>'; store "=linux-input","log" if headeris "List-Post",''; store "=strom","bell" if headeris "List-Post",''; @@ -138,42 +168,80 @@ sub audit store "=4c","sms" if headeris "List-Post",'<4cinfo@atrey.karlin.mff.cuni.cz>'; store "=slashdot","bell" if headeris "From" ,''; store "=freshmeat","bell" if headeris "From" ,''; + store "=sourceforge","bell" if headeris "From" ,''; store "=gsmperlcvs","silent" if headeris("From" ,'') && $Audit->subject()=~/^'.*' has been updated!$/; + store "=libtoold","log" if headeris "List-Id" ,''; + store "=libtoolpat","log" if headeris "List-Id" ,''; # own webs store "=energie","bell" if headeris "From" ,qr/^EnergieWeb/; + store "=ats","log" if headeris("From" ,'') + || (headeris("From",'') && headerhas("To",'')); + store "=atscasablanca","log" if headeris "From" ,''; + store "=www-sms","log" if headeris "List-Id" ,''; # Petr Koutecky does not mark his Stuff - store "=koutecky","bell" if headeris "From" ,''; + store "=koutecky","log" if headeris "From" ,''; store "=errm","bell" if $isFROM_MAILER && !did(); store "==","sms" if !did; } +sub audit_sms_address +{ +my($obj)=@_; + + my $address=$obj->address(); + if (my $alternates=muttrc_get("alternates")) { + return "I" if $address=~/$alternates/si; + } + my %aliases=muttrc_aliases(); + if (my $alias=$aliases{lc $address}) { + local $_=$alias; + s/\b(Bus)siness$/$1/i; + s/\.ident$//i; + return $_; + } + local $_=$address; + s/\.cz$//i; + return $_; +} + sub audit_sms { my(%args)=@_; - my $from=(@{$args{"from"}} ? join(",",map({ - s/\.cz$//i; - $_; - } @{$args{"from"}})) : "?"); - local $_=$args{"body"}; - + my $from=(@{$args{"from"}} ? join(",",map({ audit_sms_address($_); } @{$args{"from"}})) : "?"); + local $_; + + $_=$args{"subject"}; + # headers + s/(?:Re|Aw|Odp|Fw|Fwd|OT)(?:\[\d+\])?://ig; + # former subject + s/\bbylo:.*$//i; + s/\[\s*WAS:.*\]\s*$//i; + # trim + s/^\s*//s; + s/\s*$//s; + my $subject=$_; + + $_=$args{"body"}; # max. 9 lines of .sig s/\n-- (?:\n[^\n]*){0,9}$//gs; # "Original Message"/"Puvodni zprava" etc. up to empty line - s/(^|\n)[\s^\n]*-----[\w\s]*-----[\s^\n]*(?:\n[^\n]+)*\n{2,}(?:\s*[^>\s].*$)?/\n/gs; + # "- - - Original message: - - -" is by "Lotus Notes Release 5.0.5 September 22, 2000" + s/(^|\n)[\s^\n]*(?:-----[\w\s]*-----|- - - Original message: - - -)[\s^\n]*(?:\n[^\n]+)*\n{2,}(?:\s*[^>\s].*$)?/\n/gs; # Remove "..." lines (is it used by anyone except me?) s/^\Q...\E$/*/gm; # quoting "> " - s/^\s*[>][>\s]*.*$/*/gm; + s/^(?:\s*[[:upper:]]{0,3}>)+.*$/*/gm; s/(?:^|\n)(?:\*\n+)+/\n*\n/gs; # attributions - s/^On.*\b(?:wrote|writes):\s*$//gm; + s/^.*\b(?:wrote|writes|napsal jste):\s*$//gm; + my $body=$_; - return [$from,"(".$args{"subject"}.")".$_]; + return [$from,"($subject)$body"]; } 1;