#!/bin/sh
#
# This is for ctmilter
#
# chkconfig: 345 80 30
# description: Commtouch ctmilter service
# processname: ctmilter
#
#
# start/stop/reload the daemon
# Updated by GlowTouch for init.d
#
###############################
# start/stop/reload the daemon
#
#
###############################

# Defaults

NAME=ctmilter
BINDIR=/opt/ctch/ct-milter
RUNDIR=/var/run/$NAME

DAEMON=$BINDIR/$NAME
DAEMON_PIDFILE=$RUNDIR/ctmilter
DAEMON_STOP_TIMEOUT=5
SOCKETDIR=/var/spool/postfix/ctmilter
SOCKETFILE=$SOCKETDIR/ctmilter.sock
DAEMON_OPTS_EXT=`/bin/cat $BINDIR/ct-milter.args 2>/dev/null`
DAEMON_OPTS="-u postfix -G -d MISC -s -I -p $SOCKETFILE -O --ctasd-outbound-port 8088 -f"

cd $BINDIR

# Reads config file (will override defaults above)
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

start()
{
	if ensure_stop; then
		echo "Sleeping for 3 seconds"
		sleep 3s
	fi

	do_start
}

stop()
{
	if ! ensure_stop; then
		echo "$NAME is not running"
	fi
}

restart()
{
	start
}

reload()
{
	echo "Not implemented"
}

do_start()
{
	echo "Starting $NAME deamon"
	if [ ! -d $RUNDIR ] ;then
	    rm -f $RUNDIR 2>/dev/null
	    mkdir $RUNDIR
	    chown postfix $RUNDIR
	fi
	
	if [ ! -d $SOCKETDIR ]; then
	    mkdir $SOCKETDIR
	    chown postfix $SOCKETDIR
	fi
	    
        $DAEMON -f -P $DAEMON_PIDFILE $DAEMON_OPTS $DAEMON_OPTS_EXT
        sleep 5
        chown postfix.postfix $SOCKETFILE
}

do_stop()
{
	echo "Stopping $NAME deamon"
	stop_process $NAME $DAEMON_PIDFILE $DAEMON_STOP_TIMEOUT
}


ensure_stop()
{
	local rc=1
	if is_process_running $DAEMON_PIDFILE; then
		do_stop
		rc=0
	fi
	return $rc
}

is_process_running()
{
	local PIDFILE=$1
	if [ -f $PIDFILE ]; then
		local PID=`cat $PIDFILE`
		if [ `ps --pid $PID --no-headers | wc -l` != 0 ]; then
			return 0
		fi
	fi
	return 1
}

wait_process()
{
	local PIDFILE=$1
	local TIMEOUT=$2
	while [ $TIMEOUT -gt 0 ]; do
		if ! is_process_running $PIDFILE; then
			return 0
		fi
		sleep 1s
		TIMEOUT=$(($TIMEOUT-1))
	done

	if is_process_running $PIDFILE; then
		return 1
	fi
	return 0
}

stop_process()
{
	local TYPE=$1
	local PIDFILE=$2
	local TIMEOUT=$3

	if is_process_running $PIDFILE; then
		local PID=`cat $PIDFILE`
		kill $PID

		if ! wait_process $PIDFILE $TIMEOUT; then
			echo "terminating $TYPE..."
			kill -s 9 $PID
		fi
		rm -f $PIDFILE
	fi
}

case "$1" in
    	start)
		start
		;;

	stop)
		stop
		;;

	restart)
		restart
		;;

	reload)
		reload
		;;
				
	*)
		echo "Usage : $0 (start|stop|restart|reload)"
		;;

esac

exit 0


