$NetBSD: patch-aa,v 1.1.1.1 2009/09/22 17:41:07 taca Exp $

--- mailtools/scan-mail.pl.orig	2008-01-19 23:53:47.000000000 +0900
+++ 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/scan-mail.pid";
 
 # use this for really complex configuration of
 # scan-mail. /etc/f-prot.conf should take care of the simple things
@@ -239,7 +236,7 @@ if (my $val = $conf->{SCANMAIL_DROP_MALW
 # The temporary dir to use for files that are scanned and tmp data
 # produced elsewhere (via tmpfile) in the program
 my $TMPDIR = do {
-    my $tmp = '/tmp'; # default
+    my $tmp = '/var/tmp'; # default
 
     if ($ENV{TMPDIR} and $ENV{TMPDIR} ne $tmp) {
         $tmp = $ENV{TMPDIR};
@@ -441,9 +438,10 @@ 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: $!";
-    print PID_FILE $$;
+    open PID_FILE, ">$pid_file" or die "Can't open pid file: $!";
+    print PID_FILE "$$\n";
     close PID_FILE;
+    $SIG{'TERM'} = $SIG{'HUP'} = \&clean_up;
     open STDERR, '>&STDOUT'    or die "Can't dup stdout: $!";
 }
 
@@ -602,6 +600,12 @@ else
 
 ##[ Subroutines ]##############################################################
 
+sub clean_up
+{
+    unlink($pid_file);
+    exit(0);
+}
+
 # proxy address, smtp address
 sub run_smtp_proxy
 {
@@ -1020,7 +1024,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 +1036,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 +1084,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
     {
