#!/bin/sh
#=================================================================
# Begin sshd
#
# Description : Start clamd daemon
# chkconfig: 2345 95 15
#
#=================================================================

### BEGIN INIT INFO
# Provides:            $clamd
# Required-Start:      $network
# Should-Start:
# Required-Stop:       sendsignals
# Should-Stop:
# Default-Start:       3 4 5
# Default-Stop:        0 1 2 6
# Short-Description:   Starts clamd daemon.
# Description:         Starts clamd daemon.
# X-LFS-Provided-By:   LFS
### END INIT INFO

. /lib/lsb/init-functions

APPNAME=clamav
DAEMON=clamd
DAEMON_PID=/run/${DAEMON}.pid
DAEMON_SOCK=/run/${DAEMON}.socket
FRESH_PARAMS="-d --daemon-notify=/etc/${DAEMON}.conf -c 4"
FRESH=freshclam
FRESH_PID=/run/freshclam.pid
PKGDATADIR=/var/lib/${APPNAME}
PKGLOGDIR=/var/log/${APPNAME}

# Some functions to make the below more readable

#--------------------------------------------------------------
#to start clamav daemon
#--------------------------------------------------------------
mng_daemon ()

{
case "$1" in
  start)
    if [ ! -f ${PKGDATADIR}/main.cvd ] ; then
      log_info_msg "Loading ${APPNAME} database..."
      freshclam --quiet --log=${PKGLOGDIR}/${FRESH}.log
      evaluate_retval
      fi
    log_info_msg "Starting ${DAEMON} Server..."
    start_daemon -f /usr/sbin/${DAEMON}
    evaluate_retval
    ;;

  stop)
    if [ -f ${DAEMON_PID} ] ; then
      pid=`cat ${DAEMON_PID} 2>/dev/null`
      if [ -n "${pid}"  -a -d /proc/$pid ]; then
        log_info_msg "Stopping ${DAEMON} Server..."
        kill -TERM `cat ${DAEMON_PID}`
        evaluate_retval
        log_info_msg "Waiting ${DAEMON} Server full stop..."
	for l in {1..5} 
	  do
          sleep 1
	  if [ ! -S ${DAEMON_SOCK} ] ; then
	    break
	    fi
	  done
        evaluate_retval
        fi
      fi
    if [ -S ${DAEMON_SOCK} ] ; then
      fuser -k -TERM ${DAEMON_SOCK}
      rm -fr ${DAEMON_SOCK}
      fi
    sleep 1
    ;;

 esac
}

#--------------------------------------------------------------
#to start clamav databasee updater
#--------------------------------------------------------------
mng_fresh ()

{
case "$1" in
  start)
    log_info_msg "Starting ${FRESH} Server..."
    start_daemon -f /usr/bin/${FRESH} ${FRESH_PARAMS}
    evaluate_retval
    ;;

  stop)
    if [ -f ${FRESH_PID} ] ; then
      log_info_msg "Stopping ${FRESH} Server..."
      kill -TERM `cat ${FRESH_PID}`
      evaluate_retval
      fi
    rm -fr ${FRESH_PID}
    ;;

 esac
}

case "$1" in
      start	)
	mng_daemon $1
	sleep 1
	mng_fresh $1
        ;;
      stop	)
	mng_fresh $1
	sleep 1
	mng_daemon $1
        ;;

    reload)
        log_info_msg "Reloading ${DAEMON} Server..."
        pid=`cat ${DAEMON_PID} 2>/dev/null`

        if [ -n "${pid}" ]; then
           kill -HUP "${pid}"
        else
           (exit 1)
        fi

        evaluate_retval
        ;;

    restart)
        $0 stop
        sleep 1
        $0 start
        ;;

    condrestart)
       $0 status
         if [ $? = 0 ] ; then
         $0 restart
         fi
       ;;

     status)
         pid=`cat ${DAEMON_PID} 2>/dev/null`
         if [ -n "${pid}"  -a -d /proc/$pid ]; then
           exit 0
           fi
         exit 1
       ;;

    *)
        echo "Usage: $0 {start|stop|reload|restart|status}"
        exit 1
        ;;
esac

