X-Git-Url: http://git.jankratochvil.net/?p=PerlMail.git;a=blobdiff_plain;f=PerlMail%2FConfig.pm;h=49f6a5813a4e49a592ddd960e200bf7b94a58931;hp=08aa57d14546b1fbdb4f773f2d9b642993f8b6d7;hb=1d3d7b9ec29774424d4913e0d4389c2217ce4109;hpb=be8e1bc69e15a29e52d8bbcde5971214a5b8340b diff --git a/PerlMail/Config.pm b/PerlMail/Config.pm index 08aa57d..49f6a58 100644 --- a/PerlMail/Config.pm +++ b/PerlMail/Config.pm @@ -33,55 +33,102 @@ use vars qw(@ISA @EXPORT); $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 +# Various configuration files location is derived from it: our $HOME="/home/lace"; # perlmail-accept +# Mail folder: our $Mail="$HOME/Mail"; +# Users respected for the 'idle' state (see $IdleMax): our @ValidUsers=qw(root lace short kratochvil _local); +# Maximum number of local console idle seconds while still considered as 'active user': our $IdleMax=10; -our $MaxBodySMS=0x1000; # max bytes to pass to Lingua::EN::Squeeze +# Maxium number of bytes to pass to Lingua::EN::Squeeze (performance optimization): +our $MaxBodySMS=0x1000; +# Telephone number to send SMSes by WWW::SMS to: our @SMSwebRcpt=qw(420 602 431329); +# Some WWW::SMS modules require username: our $SMSwebRcpt_username="lace2"; # perlmail-submit +# Global system lock for exclusive $DB_table access: our $Lock_pathname="/tmp/PerlMail.lock"; +# 'workstation' hostname and port. Hostname may be dyndns: our $PeerAddr="exuhome.dyn.jankratochvil.net.:852"; #our $PeerAddr="127.0.0.1:2852"; -our $Socket_timeout=7600; # 15sec is NOT enough! +# 15sec is NOT enough as the remote peer must complete mail store: +our $Socket_timeout=7600; +# MySQL table name: our $DB_table="PerlMail_folder"; +# MySQL database name: our $DBI_database="short"; +# MySQL user name: our $DBI_user="short"; +# MySQL user password: our $DBI_pwd=$ENV{"HOME"}."/priv/mysql.".$DBI_user.".pwd"; # perlmail-sendmail +# Lists where address is generated: +my @lists=qw( + tacplus-l@disaster.com + gsm@sh.cvut.cz + linux-fsdevel@vger.kernel.org + n9k@pandora.cz + dev9k@pandora.cz + gsm@pandora.cz + ros-general@reactos.com + ros-kernel@reactos.com + ros-cvs@reactos.com + 4cinfo@atrey.karlin.mff.cuni.cz + libtool@gnu.org + libtool-patches@gnu.org + wine-license@winehq.com + wine-devel@winehq.com + wine-patches@winehq.com + gtk-devel-list@gnome.org + gnome-vfs-list@gnome.org + captive-announce-list@jankratochvil.net + captive-list@jankratochvil.net + captive-devel-list@jankratochvil.net + ); + +# Pathname of the original sendmail(8) binary: our $sendmail_orig=(-x ($_="/usr/sbin/sendmail-orig") ? $_ : "/usr/sbin/sendmail"); +# List of addresses to locally Bcc all mails to: # Mail-Alias-1.12 defaults to "/etc/mail/aliases" which does not exist on RedHat sendmail-8.12.5-7 # Mail-Alias-1.12 will clutter $_ ! our @addr_addon=(Mail::Alias->new("/etc/aliases")->exists("sentout") ? ("sentout") : ()); our $opt_F; # imported our $is_pgp; # imported +my %lists=map(($_=>1),@lists); +# Generate new From address for the target $rcpt of type Mail::Address. +# $iserror is true for "MAIL FROM" RFC821 address, false for "From:" RFC822 address. +# Returns: Mail::Address instance. sub FromAddress { my($rcpt,$iserror)=@_; @@ -105,10 +152,10 @@ my($rcpt,$iserror)=@_; 'pgp-'.uc($default_key).'@jankratochvil.net', ); } - # !$is_pgp or fallback + return Mail::Address->new($phrase,'lace@jankratochvil.net') if !$lists{$rcpt->address()}; return Mail::Address->new( $phrase, - (!$iserror ? 'rcpt' : 'rcpterr') + 'rcpt' .'-' .(defined($rcpt->user()) ? $rcpt->user() : "NOUSER") .".AT." @@ -135,6 +182,12 @@ our @h_from=( # My-Audit +# Setup profile names. +# First element of /^=/ form copies it referenced profile to be extended. +# 'did' =>did() subroutine will return true for it. +# 'syslog' =>Use syslog(3). +# 'bell' =>Bell sound. +# 'sms=\d+'=>Send SMS by WWW::SMS with specified maximum # of parts our %audit_profile=( "btw" =>[], "silent"=>["=btw" ,"did"], @@ -143,6 +196,7 @@ our %audit_profile=( "sms" =>["=bell" ,"sms=1"], "crit" =>["=sms" ,"sms=3"], ); +# Try the squeezing methods in this order: our @sms_squeezes=( { "SqueezeControl"=>"noconv" }, { "SqueezeControl"=>"conv" ,"SQZ_OPTIMIZE_LEVEL"=>0 }, @@ -152,11 +206,13 @@ our @sms_squeezes=( { "SqueezeControl"=>"max" ,"SQZ_OPTIMIZE_LEVEL"=>0 }, { "SqueezeControl"=>"max" ,"SQZ_OPTIMIZE_LEVEL"=>1 }, ); +# Hostnames where we had alternate e-mail addresses: our @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 ); +# Override DNS blacklists: our @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. @@ -176,6 +232,7 @@ our $store_profile; # imported our $store_ignore; # imported sub audit { + $store_profile=undef(); # TODO: storage? # never spawn new mail if FROM_MAILER @@ -190,7 +247,8 @@ sub audit # 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",''; @@ -207,15 +265,19 @@ sub audit } 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 @@ -224,6 +286,7 @@ sub audit # 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,''; @@ -245,7 +308,8 @@ sub audit # 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$"; @@ -267,6 +331,7 @@ sub audit store "=9kc","log" if headeris "List-Post",''; store "=9kcd","log" if headeris "List-Post",''; } + $store_profile=undef(); # lists store "=mozillabug","log" if headeris "From" ,''; @@ -284,8 +349,8 @@ sub audit store "=winecvs","silent" if headeris "List-Id" ,''; store "=wineann","log" if headeris "List-Id" ,''; store "=ros","log" if headeris "List-Id" ,''; - store "=roskernel","log" if headeris "List-Post",''; - store "=roscvs","silent" if headeris "List-Post",''; + store "=roskernel","log" if headeris "List-Id" ,''; + store "=roscvs","silent" if headeris "List-Id" ,''; store "=rosbug","log" if headeris "Reply-To" ,''; store "=fsd","silent" if headeris "X-Mailing-List",''; store "=kerneld","silent" if headeris "X-Mailing-List",''; @@ -311,6 +376,9 @@ sub audit && $Audit->subject()=~/^'.*' has been updated!$/; store "=libtoold","log" if headeris "List-Id" ,''; store "=libtoolpat","log" if headeris "List-Id" ,''; + store "=cap","bell" if headeris "List-Id" ,''; + store "=capd","bell" if headeris "List-Id" ,''; + store "=capann","bell" if headeris "List-Id" ,''; # own webs store "=energie","bell" if headeris "From" ,qr/^EnergieWeb/; store "=ats","log" if headeris("From" ,'') @@ -346,6 +414,9 @@ my($obj)=@_; return $_; } +# $args{"from"} +# $args{"subject"} +# $args{"body"} sub audit_sms { my(%args)=@_;