#!/bin/bash
# 
# SACSrv This starts, stops, and reloads the eToken SACSrv
#
# chkconfig: 345 99 99
# description: eToken SACSrv
# processname: SACSrv
# pidfile: /var/run/SACSrv.pid
#
# Chanelog:
# 2007-06-26 - First version of this file Nir Shahaf <nshahaf@swiftouch.com>

PATH=/sbin:/usr/sbin:$PATH
RETVAL=0
prog=SACSrv
PID_F=/var/run/$prog.pid
SIG="-1"


# Check if we're root
if [ ! `id -u` = 0 ]
then
	echo "Are you root?"
	exit
fi

usage ()
{
    echo "Usage: service $prog {start|stop|restart}"
    RETVAL=1
}


start ()
{
    # Check if we're already running
    echo -n $"Starting $prog: "
    running
    if [ $RETVAL == "1" ]
    then
	echo -n $"$prog already running "
	echo
	exit
    else
	killing_clean
	/usr/bin/SACSrv &
	pid=`pidof -o $$ -o $PPID -o %PPID -x $prog`
	if [ -n "$pid" ]
	then
		echo "$pid" > /var/run/$prog.pid
		echo -n $"Done"
		echo
		RETVAL=0
	else
		RETVAL=1
		echo -n $"Failed"
		echo
		exit
	fi
    fi
}

stop ()
{
    RETVAL=0
    echo -n $"Stopping $prog: "
    not_running
    killing
    if [ $RETVAL == "0" ]
    then
	echo -n $"Done"
    else
	echo -n $"Failed to stop $prog "
    fi
    echo
}

restart ()
{
    stop
    start
}

running ()
{
    pid=`pidof -o $$ -o $PPID -o %PPID -x $prog`
    if [ ! -z "$pid" ]
    then
	RETVAL=1
    fi
}

not_running ()
{
    pid=`pidof -o $$ -o $PPID -o %PPID -x $prog`
    if [ -z "$pid" ]
    then
        echo -n $"$prog not running, nothing to do"
	echo
	exit
    fi
}


killing_check ()
{
    # Check if we were started by a user (no pid file because of permissions on /var/run) or root
    if [ -e $PID_F ]
    then
	for prog_id in `cat $PID_F`
	do
		kill $SIG $prog_id 2>&1 > /dev/null
		sleep 2
	done
    else
	prog_id=`pidof -o $$ -o $PPID -o %PPID -x $prog`
	if [ ! -z $prog_id ]
	then
		kill $SIG $prog_id 2>&1 > /dev/null
		sleep 2
	fi
    fi
}

killing_clean ()
{
    if [ $RETVAL == "0" ]
    then
	rm -f /var/run/$prog.pid 2>&1 > /dev/null
	# Hack until the close_socket bug is fixed
	rm -f /tmp/$prog 2>&1 > /dev/null
    fi
}
killing ()
{
    killing_check
    running
    if [ $RETVAL == "1" ]
    then
	SIG="-9"
	killing_check
    fi
    running
    if [ $RETVAL == "0" ]
    then
	killing_clean
	RETVAL=0
    else
	RETVAL=1
    fi
}

case "$1" in
    start) start ;;
    stop) stop ;;
    restart) restart ;;
    *) usage ;;
esac

exit $RETVAL
