#!/bin/sh
#
# kavehost        Startup script for the Kavehost
# chkconfig: 345 81 29
# description: Kaspersky AntiVirus service.
#
# processname: kavehost
# pidfile: /var/run/kav/pid
#
#
### BEGIN INIT INFO
# Provides:       kavehost
# Required-Start: $network $syslog $remote_fs
# X-UnitedLinux-Should-Start:
# Required-Stop:
# Default-Start:  3 5
# Default-Stop:
# Description:    start Kaspersky AntiVirus service
### END INIT INFO

CONFIG="/etc/kavehost.xml"

SDK_HOME=/opt/kav/sdk8l3
KL_PLUGINS_PATH="${SDK_HOME}/ppl"
export KL_PLUGINS_PATH
LD_LIBRARY_PATH=$KL_PLUGINS_PATH:$LD_LIBRARY_PATH
RUNDIR=/var/run/kav

# Check config file
if [ ! -f "${CONFIG}" ] ; then
    echo -n "Config file [${CONFIG}] does not exist .";
    echo
    exit 1;
fi

if [ ! -d $RUNDIR ] ; then
    mkdir $RUNDIR
    [ -e /sbin/restorecon ] && /sbin/restorecon -r $RUNDIR
fi

# Extract pid file 
pidfile=`grep PidPath ${CONFIG} | sed 's/^.*<PidPath>//' | sed 's/<\/PidPath>//'`

PS_PID="ps ax -o pid"

# Source function library.
if [ -f /etc/rc.d/init.d/functions ] ; then
    . /etc/rc.d/init.d/functions;
#elif [ -f /etc/rc.status ]; then
#    . /etc/rc.status;
else
    RES_COL=60
    if [ `uname -s` = "Linux" ];
    then
        MOVE_TO_COL="/bin/echo -en \\033[${RES_COL}G"
    else
        MOVE_TO_COL="echo -n               "
    fi

    echo_success() { $MOVE_TO_COL; echo -n ' [  OK  ] ' ; }
    echo_failure() { $MOVE_TO_COL; echo -n ' [FAILED] ' ; }
    echo_warning() { $MOVE_TO_COL; echo -n ' [WARNING] ' ; }

    killproc()
    {
        if [ `uname -s` = "Linux" ]; then
            PID=`pidof -s -x -o $$ -o $PPID -o %PPID $1`
        else
            PID=`cat $pidfile`
        fi
        [ $PID ] && kill $PID ;
    }
fi

if [ "x$KL_PLUGINS_PATH" = "x" ]; then
    KL_PLUGINS_PATH=$HOME/builds/`uname -s`-x86/bin
    export KL_PLUGINS_PATH
    LD_LIBRARY_PATH=$KL_PLUGINS_PATH:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH
fi


# For SELinux we need to use 'runuser' not 'su'
if [ -x /sbin/runuser ]
then
    SU=runuser
else
    SU=su
fi


# Path to the kavehost binary.
kavehost=${SDK_HOME}/bin/kavehost
prog=kavehost
RETVAL=0

start() {
    echo -n "Starting $prog: "
    if [ -e ${pidfile} ]; then PID=`cat ${pidfile}`; fi
        if [ -e ${pidfile} ] && [ "x`${PS_PID} |grep ${PID}`" != "x" ]; then
            echo -n "kavehost is already running.";
            echo_failure
            echo
            return 1
    fi

    cd ${SDK_HOME}/bin
    $kavehost -c ${CONFIG}
    RETVAL=$?

    if [ $RETVAL -eq 0 ] 
    then
        echo_success
    else
        echo_failure
    fi

    echo 
    return $RETVAL
}

stop() {
    echo -n "Stopping $prog: "
    if [ -e ${pidfile} ]; then PID=`cat ${pidfile}`; fi
    if [ ! -e ${pidfile} ] || [ "x`${PS_PID} |grep ${PID}`" = "x" ]; then
        echo -n "kavehost is not running."
        echo_failure
        echo
        return 1;
    fi

    killproc kavehost
    RETVAL=$?

    PS=`${PS_PID} |grep ${PID}`
    while [ "x$PS" != "x" ]; do
        PS=`${PS_PID} |grep ${PID}`
        sleep 1;
    done

    if [ $RETVAL -eq 0 ] 
    then
        echo_success
    else
        echo_failure
    fi

    echo

    [ $RETVAL -eq 0 ] && rm -f $RUNDIR/com* $RUNDIR/scan* $RUNDIR/evt*
    return $RETVAL
}

reloaddb() {
    echo -n "Reload databases $prog: "

    if [ -e ${pidfile} ]; then PID=`cat ${pidfile}`; fi
    if [ ! -e ${pidfile} ] || [ "x`${PS_PID} |grep ${PID}`" = "x" ]; then
        echo -n "kavehost is not running."
        echo_failure
        echo
        return 1;
    fi

    kill -USR1 `cat ${pidfile}`
    echo_success
    echo
}

status() {
    if [ -e ${pidfile} ]; then
        PID=`cat ${pidfile}`
        PS=`${PS_PID} |grep ${PID}`
        if [ "x$PS" != "x" ]; then
            echo -n "kavehost is already running.";
            echo
            return 0
        fi
    fi
    echo -n "kavehost is not running.";
    echo
    return 1
}

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  reload|reloaddb)
    reloaddb
    ;;
  status)
    status $kavehost
    RETVAL=$?
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $prog {start|stop|restart|reload|reloaddb|status}"
    exit 1
esac

exit $RETVAL
