#! /bin/sh
#
# MailWall - Start/Stop GUARDIANWALL Services
# for V7.0.X 2006/07/18
#
# Copyright (c) 1999-2006 by Canon System Solutions Inc.
# All Rights Reserved.
#
# chkconfig: 2345 99 15
#
# description: GUARDIANWALL

#
# The network and streams should already be built by the time
# this script runs.
#
PATH=/usr/bin:/bin
SENDMAIL=/usr/sbin/sendmail
GRDNDIR=/opt/Guardian
GADMINDIR=${GRDNDIR}/Admin
MGWALLDIR=${GRDNDIR}/WALL
NODAEMON=${MGWALLDIR}/NODAEMON
SSLHTTP=${MGWALLDIR}/SSL
MSSPROG=${MGWALLDIR}/bin/mw_mss
STOREPROG=${MGWALLDIR}/bin/mw_store
TRANSPROG=${MGWALLDIR}/bin/mw_trans
LOGGER=${MGWALLDIR}/bin/mw_logger
MSP=`${MGWALLDIR}/bin/mw_lic -V | head -1`
MSSCONF=/etc/MGWall.conf
INITDIR=/etc/rc.d/init.d
ISSMTPD=/etc/iscan/sendmail
LD_LIBRARY_PATH=${GADMINDIR}/lib:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH


#Check uid
if (id | grep "uid=0(root)" >/dev/null 2>&1); then
	true
else
	echo "You need to login as root." 1>&2
	exit 1
fi

case $1 in
'start')
	$LOGGER 'Starting GUARDIANWALL ...'

	# smtp server
	if [ -f $NODAEMON ]; then
		# with SMTP PROXY;  no daemon mode
		if [ -f $MSSPROG -a -f $MSSCONF ]; then
			$MSSPROG -q
			if [ $? -ne 0 ]; then
				echo "ERROR: cannot start $MSSPROG -q" 1>&2
				exit 1
			fi
		else
			$LOGGER 'STARTUP: smtp server not found'
			echo "ERROR: smtp server not found." 1>&2
			exit 1
		fi
	else
		if [ "X$MSP" = "Xsendmail" ]; then
			# stop ISVW
			WITHISVW=0
                        if (grep "${ISSMTPD}" $INITDIR/sendmail >/dev/null 2>&1); then
                                WITHISVW=1
				$INITDIR/sendmail stop	>/dev/null 2>&1
			fi

			# stop sendmail if running
			pid=`ps axo'pid ppid cmd' | awk '{ if ($2==1 && $3=="sendmail:") print $1 }'`
			if [ "$pid" ]; then
				kill -TERM $pid >/dev/null 2>&1
			else
				pid=`ps axo'pid ppid cmd' | awk '{ if ($2==1 && $3=="'$SENDMAIL'") print $1 }'`
				if [ "$pid" ]; then
					kill -TERM $pid >/dev/null 2>&1
				else
					pid=`ps axo'pid ppid cmd' | awk '{ if ($2==1 && $3=="[sendmail]") print $1 }'`
					if [ "$pid" ]; then
						kill -TERM $pid >/dev/null 2>&1
					fi
				fi
			fi

			# start sendmail queue mode
			if [ -f $SENDMAIL ]; then
				$SENDMAIL -q30m
				if [ $? -ne 0 ]; then
					echo "ERROR: cannot start $SENDMAIL -q30m" 1>&2
					exit 1
				fi
			else
				$LOGGER 'STARTUP: sendmail not found'
				echo "ERROR: sendmail not found." 1>&2
				exit 1
			fi

			# start ISVW
                        if [ $WITHISVW -eq 1 ]; then
				$INITDIR/sendmail start	>/dev/null 2>&1
			fi
		fi
		# start MGWall smtp daemon
		if [ -f $MSSPROG -a -f $MSSCONF ]; then
			$MSSPROG -q -d
			if [ $? -ne 0 ]; then
				echo "ERROR: cannot start $MSSPROG -q -d " 1>&2
				exit 1
			fi
		else
			$LOGGER 'STARTUP: SMTP server not found'
			echo "ERROR: smtp server not found." 1>&2
			exit 1
		fi
	fi
	# start store service
	if [ -f $STOREPROG -a -f $MSSCONF ]; then
		$STOREPROG -d
		if [ $? -ne 0 ]; then
			echo "ERROR: cannot start $STOREPROG -d " 1>&2
			exit 1
		fi
	else
		$LOGGER 'STARTUP: STORE server not found'
		echo "ERROR: store server not found." 1>&2
		exit 1
	fi
	# start transfer service
	if [ -f $TRANSPROG -a -f $MSSCONF ]; then
		CMODE=`$TRANSPROG -a`
		if [ $? -ne 0 ]; then
			echo "ERROR: cannot get a cooperation mode." 1>&2
			exit 1
		fi
		if [ "$CMODE" = "true" ]; then
			$TRANSPROG -d
			if [ $? -ne 0 ]; then
				echo "ERROR: cannot start $TRANSPROG -d " 1>&2
				exit 1
			fi
		fi
	else
		$LOGGER 'STARTUP: TRANSFER server not found'
		echo "ERROR: transfer server not found." 1>&2
		exit 1
	fi
	;;

'stop')
	$LOGGER 'Shutting down GUARDIANWALL ...'

	# stop smtp server if running
	pid=`ps axo'pid ppid cmd' | awk '{ if ($2==1 && $3=="'$MSSPROG'") print $1 }'`
	if [ "$pid" ]; then
		kill $pid >/dev/null 2>&1
	else
		MSSPROG=`basename $MSSPROG`
		pid=`ps acxo'pid ppid cmd' | awk '{ if ($2==1 && $3=="'$MSSPROG'") print $1 }'`
		if [ "$pid" ]; then
			kill $pid >/dev/null 2>&1
		fi
	fi
	# stop store server if running
	pid=`ps axo'pid ppid cmd' | awk '{ if ($2==1 && $3=="'$STOREPROG'") print $1 }'`
	if [ "$pid" ]; then
		kill $pid >/dev/null 2>&1
	else
		STOREPROG=`basename $STOREPROG`
		pid=`ps acxo'pid ppid cmd' | awk '{ if ($2==1 && $3=="'$STOREPROG'") print $1 }'`
		if [ "$pid" ]; then
			kill $pid >/dev/null 2>&1
		fi
	fi
	# stop transfer server if running
	pid=`ps axo'pid ppid cmd' | awk '{ if ($2==1 && $3=="'$TRANSPROG'") print $1 }'`
	if [ "$pid" ]; then
		kill $pid >/dev/null 2>&1
	else
		TRANSPROG=`basename $TRANSPROG`
		pid=`ps acxo'pid ppid cmd' | awk '{ if ($2==1 && $3=="'$TRANSPROG'") print $1 }'`
		if [ "$pid" ]; then
			kill $pid >/dev/null 2>&1
		fi
	fi
	;;

'restart')
	$0 stop
	$0 start
	;;

'allstop')
	$LOGGER 'Shutting down GUARDIANWALL ...'
	if [ "X$MSP" = "Xsendmail" ]; then
		# stop sendmail if running
		pid=`ps axo'pid ppid cmd' | awk '{ if ($2==1 && $3=="sendmail:") print $1 }'`
		if [ "$pid" ]; then
			kill -TERM $pid >/dev/null 2>&1
		else
			pid=`ps axo'pid ppid cmd' | awk '{ if ($2==1 && $3=="'$SENDMAIL'") print $1 }'`
			if [ "$pid" ]; then
				kill -TERM $pid >/dev/null 2>&1
			fi
		fi
	fi
	$0 stop
	;;

'status')
	#
	echo "name                     pid    ppid     size      rss    pri   nice"
	echo "--------------------  ------  ------  -------  -------  -----  -----"
	/bin/ps acwxl | /bin/grep 'mw_'| /bin/grep -v 'grep' |\
	while read flg uid pid ppid pri ni size rss wchan sta tty time com carg
	do
		printf '%-20s  %6s  %6s  %7s  %7s  %5s  %5s\n' $com $pid $ppid $size $rss $pri $ni
	done
	echo "--------------------------------------------------------------------"
	;;

*)
	echo "usage: $0 {start|stop|restart|allstop|status}" 1>&2
	echo " start - restart sendmail process, start mw_mss, mw_store and mw_trans processes" 1>&2
	echo " stop - terminate mw_mss, mw_store and mw_trans processes" 1>&2
	echo " restart - run 'stop' and 'start'" 1>&2
	echo " allstop - terminate sendmail, mw_mss, mw_store and mw_trans processes" 1>&2
	echo " status - report process status" 1>&2
	;;
esac

exit 0
