#!/bin/sh
# $Id: qmfilter,v 1.1.1.1 2002/06/16 16:53:18 yuuji Exp $

mydir=`dirname $0`
daytoremove=7
checkerdir=$mydir/checkers
reporterdir=$mydir/reporter
RM=/bin/rm

error () {
  echo "$*" | Mail -s "qmfilter error" $owner
}

#
# Set owner's address.
# If not set, exit abnormally
#
rc=$HOME/.qmfilterrc

if [ -s $mydir/.qmfilterrc ]; then
  rc=$mydir/.qmfilterrc
fi
if [ -s $rc ]; then
  owner=`grep '^owner=' $rc`
  [ "$owner" != "" ] && eval "$owner"		# set $owner
fi
if [ "$owner" = "" ]; then
  touch $mydir/"Put owner=YourMailAddress in .qmfilterrc"
  exit 0
fi

if [ "$1" = "" ]; then
	error 'no recipient address specified'
	exit 0
fi

#
# Start scanning
#
stamp=`date +%Y%m%d.%H%M%S`.$$
recipient=$1
savedir=$mydir/save/$recipient
savefile=$savedir/$stamp
PATH=$PATH:/usr/ucb		# for SunOS5

[ -d $savedir ] || mkdir -p $savedir || error "Cannot mkdir $savedir "

docheck () {
  for checker in $checkerdir/*
  do
    echo $checker
    $checker "$1" || return 1
  done
  return 0
}

cat > $savefile
env | sort -u > ENV
#if docheck $savefile ; then
if docheck $savefile > /dev/null 2>&1 ; then
  # do nothing and pass the message to real recipient
  case "$recipient" in
    *@*) ;;
    *)	if [ "$HOST" != "" ]; then
          recipient="$recipient@$HOST"
    	fi
  esac
  qmail-inject -- $recipient < $savefile
  $RM -f $savefile
else
  reporter=`echo $reporterdir/*` 
  case "$reporter" in
    *\*)	# no reporter found
	(echo Troublesome mail has come as follows...
	 echo "(Saved in $savefile)"
	 echo ''
	 head -50 $savefile
	 echo ''
	 echo '[Further message supressed...]')
	;;
    *)
    	for cmd in "$reporter"
	do
	  cmd $savefile
	done
	;;
  esac | Mail -s "qmfilter scanning report" $owner
fi

# Remove ancient files
#
find $savedir -mtime +$daytoremove -exec rm '{}' \;
