$NetBSD: patch-aa,v 1.2 2010/06/16 22:27:04 taca Exp $ --- mailtools/scan-mail.pl.orig 2010-04-12 14:18:39.000000000 +0000 +++ mailtools/scan-mail.pl @@ -81,11 +81,6 @@ use strict; -# scan-mail.pl is in mailtools/scan-mail.pl, add mailtools/Anomy/bin -# to @INC to find Anomy:: -use FindBin '$Bin'; -use lib "$Bin/../perl/lib"; - use Socket; use Anomy::Sanitizer (); use Anomy::Sanitizer::FProt::Client (); @@ -130,7 +125,7 @@ my @CONFIG_HARD = ( my %CONFIG_SOFT = ( # unknown=='check next rule' - SCANMAIL_SCANLIST => ['file_list_1=.*','file_list_1_policy=unknown:unknown:drop:drop', 'file_list_1_scanner = 0:1:2:builtin/fpscand %FILENAME'], + SCANMAIL_SCANLIST => ['file_list_1=.*','file_list_1_policy=unknown:unknown:drop:unknown', 'file_list_1_scanner = 0:1:2:builtin/fpscand %FILENAME'], SCANMAIL_BANLIST => ['file_list_2 =','file_list_2_policy=drop', 'file_list_2_scanner=0'], SCANMAIL_STOPLIST => ['file_list_3 =','file_list_3_policy=save', 'file_list_3_scanner=0'] ); @@ -201,6 +196,7 @@ if (my $val = $conf->{SCANMAIL_LOGLEVEL} # script, this is fugly # +my $datadir = "@VARDIR@"; my $debug = 0; my $verbose = 0; my $quarantine = 0; @@ -210,7 +206,7 @@ my $milter_cf = '/etc/mail/sendmai my $milter_conn = undef; my $milter_name = 'fp-milter'; my $milter_pid = undef; -my $fprot_milter = "$Bin/../mailtools/fp-milter"; +my $fprot_milter = "@FPROTDIR@/fp-milter"; my $postfix = 0; my $postfix_ret = undef; my $server = 0; @@ -219,7 +215,8 @@ my $proxy = 0; my $proxy_addr = '0.0.0.0:25'; my $smtp_addr = '127.0.0.1:26'; my $backup = 0; -my $backup_location = "$Bin/../backup/"; +my $backup_location = "$datadir/backup/"; +my $pid_file = "$datadir/run/scan-mail.pid"; # use this for really complex configuration of # scan-mail. /etc/f-prot.conf should take care of the simple things @@ -441,9 +438,11 @@ if ($daemon) defined(my $pid = fork) or die "Can't fork: $!"; exit if $pid; setsid or die "Can't start a new session: $!"; - open PID_FILE, '>/var/run/scan-mail.pid' or die "Can't open pid file: $!"; + open PID_FILE, ">$pid_file" or die "Can't open pid file: $!"; + print PID_FILE "$$\n"; print PID_FILE $$; close PID_FILE; + $SIG{'TERM'} = $SIG{'HUP'} = \&clean_up; open STDERR, '>&STDOUT' or die "Can't dup stdout: $!"; } @@ -602,6 +601,12 @@ else ##[ Subroutines ]############################################################## +sub clean_up +{ + unlink($pid_file); + exit(0); +} + # proxy address, smtp address sub run_smtp_proxy { @@ -1020,7 +1025,7 @@ sub do_scan my $subdir = "/".$m.$d."/"; unless (-d $backup_location) { - unless (mkdir($backup_location,1777)) + unless (mkdir($backup_location,1777) or $!{'EEXIST'}) { my $err = "Unable to create backup basedir $backup_location: $!"; syslog err => $err; @@ -1032,7 +1037,7 @@ sub do_scan unless(-d $pathto) { - unless (mkdir($pathto,1777)) + unless (mkdir($pathto,1777) or $!{'EEXIST'}) { my $err = "Unable to create backup subdir $pathto: $!"; syslog err => $err; @@ -1080,7 +1085,16 @@ sub do_scan } # Try to delete the directory. Will fail unless it's empty. - rmdir($pathto); + # rmdir($pathto); + # + # But it cause some race, keep the directory and remove it by + # another script using find command or execute same functionality + # in this script. + # + # #!/bin/sh + # cd $backup_location + # find . -type d -name '[0-1]*' -mtime +7 rmdir {} \; >/dev/null 2>&1 + # } else {