Testing MailScanner
Vernon Webb
vernon at COMP-WIZ.COM
Tue Aug 26 01:22:08 IST 2003
Are you talking about this file?
#!/bin/bash
#
# mailscanner This shell script takes care of starting and stopping
# MailScanner, and its associated copies of sendmail.
#
# chkconfig: 2345 80 30
# description: MailScanner is an open-source E-Mail Gateway Virus Scanner.
# processname: MailScanner
# config: /etc/MailScanner/MailScanner.conf
# pidfile: /var/run/MailScanner.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
#
# If you are using sendmail, Exim or Postfix, please try to avoid editing
# thie file. Edit /etc/sysconfig/MailScanner instead.
#
MTA=sendmail
QUEUETIME=15m
WORKDIR=/var/spool/MailScanner/incoming
INQDIR=/var/spool/mqueue.in
INPID=/var/run/sendmail.in.pid
OUTPID=/var/run/sendmail.out.pid
SENDMAIL=/usr/sbin/sendmail
POSTFIX=/usr/sbin/postfix
POSTFIXINCF=/etc/postfix.in
POSTFIXOUTCF=/etc/postfix
EXIM=/usr/sbin/exim
EXIMINCF=/etc/exim.conf
EXIMSENDCF=/etc/exim_send.conf
ZMAILER=/usr/lib/zmailer/zmailer
ZMAILERCF=/etc/zmailer/zmailer.conf
# Source mailscanner configureation.
if [ -f /etc/sysconfig/MailScanner ] ; then
. /etc/sysconfig/MailScanner
fi
export MTA
export QUEUETIME
export WORKDIR
export INQDIR
export INPID
export OUTPID
export SENDMAIL
export POSTFIX
export POSTFIXINCF
export POSTFIXOUTCF
export EXIM
export EXIMINCF
export EXIMSENDCF
export ZMAILER
export ZMAILERCF
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/sbin/check_MailScanner ] || exit 0
[ -f $SENDMAIL ] || exit 0
if [ $MTA = 'zmailer' ]; then
# Source zmailer configuration.
if [ -f $ZMAILERCF ]; then
. $ZMAILERCF
else
echo "Missing ZMailer configuration file: $ZMAILERCF"
exit 1
fi
if [ ! -f $MAILBIN/zmailer ]; then
echo "Missing main ZMailer script: $MAILBIN/zmailer"
fi
if [ -z $POSTOFFICEIN ]; then
echo "Incoming postoffice not defined in $ZMAILERCF - patch zmailer
configuration"
exit 1
fi
fi
# Start both the sendmail processes
StartInSendmail() {
if [ $MTA = 'postfix' ]; then
if test -x $POSTFIX -a -f $POSTFIXINCF/main.cf ; then
$POSTFIX -c $POSTFIXINCF start 2> /dev/null
success
echo
else
failure
echo
echo "Could not find Postfix installation,
see /etc/sysconfig/MailScanner"
fi
elif [ $MTA = 'exim' ]; then
if test -x $EXIM ; then
$EXIM -C $EXIMINCF -bd 2> /dev/null
success
echo
else
failure
echo
echo "Could not find Exim installation,
see /etc/sysconfig/MailScanner"
fi
elif [ $MTA = 'sendmail' ]; then
/usr/bin/newaliases > /dev/null 2>&1
if test -x /usr/bin/make -a -f /etc/mail/Makefile ; then
make -C /etc/mail -s
else
for i in virtusertable access domaintable mailertable ; do
if [ -f /etc/mail/$i ] ; then
makemap hash /etc/mail/$i < /etc/mail/$i
fi
done
fi
$SENDMAIL -bd -OPrivacyOptions=noetrn \
-ODeliveryMode=queueonly \
-OQueueDirectory=$INQDIR \
-OPidFile=$INPID
touch /var/run/sm-client.pid
chown smmsp:smmsp /var/run/sm-client.pid 2>/dev/null
$SENDMAIL -L sm-msp-queue -Ac -q15m 2>/dev/null
success
echo
elif [ $MTA = 'zmailer' ]; then
$MAILBIN/zmailer smtpserver >/tmp/zmailer_start_output.$$ 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
success
echo
else
failure
echo
cat /tmp/zmailer_start_output.$$
fi
rm -f /tmp/zmailer_start_output.$$
else
failure
echo
echo "Invalid MTA in /etc/sysconfig/MailScanner"
fi
}
StartOutSendmail() {
if [ $MTA = 'postfix' ]; then
if test -x $POSTFIX -a -f $POSTFIXOUTCF/main.cf ; then
$POSTFIX -c $POSTFIXOUTCF start 2> /dev/null
success
echo
else
failure
echo
echo "Could not find Postfix installation,
see /etc/sysconfig/MailScanner"
fi
elif [ $MTA = 'exim' ]; then
if test -x $EXIM ; then
$EXIM -C $EXIMSENDCF -q15m 2> /dev/null
success
echo
else
failure
echo
echo "Could not find Exim installation,
see /etc/sysconfig/MailScanner"
fi
elif [ $MTA = 'sendmail' ]; then
$SENDMAIL $([ -n "$QUEUETIME" ] && echo -q$QUEUETIME) \
-OPidFile=$OUTPID
success
echo
elif [ $MTA = 'zmailer' ]; then
$MAILBIN/zmailer router scheduler >/tmp/zmailer_start_output.$$ 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
success
echo
else
failure
echo
cat /tmp/zmailer_start_output.$$
fi
rm -f /tmp/zmailer_start_output.$$
else
failure
echo
echo "Invalid MTA in /etc/sysconfig/MailScanner"
fi
}
RETVAL=0
# See how we were called.
case "$1" in
startin)
# Start just incoming sendmail
echo "Starting incoming $MTA only:"
echo -n ' incoming' $MTA': '
StartInSendmail
;;
startout)
# Start just outgoing sendmail
echo "Starting outgoing $MTA only:"
echo -n ' outgoing' $MTA': '
StartOutSendmail
;;
start)
# Start daemons.
echo 'Starting MailScanner daemons:'
echo -n ' incoming' $MTA': '
StartInSendmail
echo -n ' outgoing' $MTA': '
StartOutSendmail
echo -n ' MailScanner: '
/usr/sbin/check_MailScanner >/dev/null
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/MailScanner
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/MailScanner.off
success
echo
;;
stop)
# Stop daemons.
echo 'Shutting down MailScanner daemons:'
echo -n ' MailScanner: '
killproc MailScanner -15
echo
echo -n ' incoming' $MTA': '
if [ $MTA = "postfix" ]; then
$POSTFIX -c /etc/postfix.in stop 2>/dev/null
success
elif [ $MTA = "exim" ]; then
killproc exim 2>/dev/null
success
elif [ $MTA = "sendmail" ]; then
#killproc sendmail 2>/dev/null
kill `head -1 $INPID` 2>/dev/null
kill `head -1 /var/run/sm-client.pid` 2>/dev/null
success
elif [ $MTA = "zmailer" ]; then
$MAILBIN/zmailer stop smtpserver >/tmp/zmailer_stop_output.$$ 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
success
else
failure
echo
cat /tmp/zmailer_stop_output.$$
fi
rm -f /tmp/zmailer_stop_output.$$
else
failure
echo
echo "Invalid MTA in /etc/sysconfig/MailScanner"
fi
echo
echo -n ' outgoing' $MTA': '
if [ $MTA = "postfix" ]; then
$POSTFIX -c /etc/postfix stop 2>/dev/null
success
elif [ $MTA = "exim" ]; then
success
elif [ $MTA = "sendmail" ]; then
#killproc /usr/sbin/sendmail 2>/dev/null
kill `head -1 $OUTPID` 2>/dev/null
success
elif [ $MTA = "zmailer" ]; then
$MAILBIN/zmailer stop router scheduler >/tmp/zmailer_stop_output.$$
2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
success
else
failure
echo
cat /tmp/zmailer_stop_output.$$
fi
rm -f /tmp/zmailer_stop_output.$$
else
failure
echo
echo "Invalid MTA in /etc/sysconfig/MailScanner"
fi
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/MailScanner
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/MailScanner.off
# Clear out all the old pid files
rm -f /var/run/MailScanner.pid
# Clear out the old incoming dirs
cd $WORKDIR && ls | egrep '^[0123456789]+$' | xargs /bin/rm -rf 2>/dev/null
;;
status)
# Work out if all of MailScanner is running
echo 'Checking MailScanner daemons:'
echo -n ' MailScanner: '
pid=`pidofproc MailScanner`
if [ -z "$pid" ] ; then failure; else success; fi
echo
if [ $MTA = "sendmail" ]; then
# Now the incoming sendmail
echo -n ' incoming sendmail: '
pid=`head -1 $INPID`
alive=`ps ax | awk '{ print $1 }' | grep '^'$pid'$'`
#pid=`ps ax | egrep '\[sendmail\]|sendmai[l]: accepting
connections'`
if [ -z "$alive" ] ; then failure; else success; fi
echo
# Now the outgoing sendmail
echo -n ' outgoing sendmail: '
pid=`head -1 $OUTPID`
alive=`ps ax | awk '{ print $1 }' | grep '^'$pid'$'`
# More complex regexp to handle other RedHats
#pid=`ps ax | egrep '\[sendmail\]|sendmai[l] -q[0-9]*[mhd]
|sendmail: Queue runner' | grep -v grep`
if [ -z "$alive" ] ; then failure; else success; fi
echo
elif [ $MTA = "zmailer" ]; then
echo -n ' incoming zmailer: '
if ( status smtpserver ) | grep stop > /dev/null ; then
failure
else
success
fi
echo
echo -n ' outgoing zmailer: '
if ( status scheduler || status router ) | grep stop > /dev/null ;
then
failure
else
success
fi
echo
fi
;;
reload)
echo 'Reloading MailScanner workers:'
echo -n ' MailScanner: '
pid=`pidofproc MailScanner`
if [ -z "$pid" ] ; then
failure
else
/bin/kill -HUP -- -$pid
success
fi
echo
if [ $MTA = "postfix" ]; then
echo -n ' Incoming postfix: '
$POSTFIX -c /etc/postfix.in reload >/dev/null
success
echo
echo -n ' Outgoing postfix: '
$POSTFIX -c /etc/postfix reload >/dev/null
success
echo
fi
;;
restart)
$0 stop
sleep 5
$0 start
RETVAL=$?
;;
*)
echo "Usage: service MailScanner
{start|stop|status|restart|reload|startin|startout}"
exit 1
esac
exit $RETVAL
More information about the MailScanner
mailing list