#!/bin/sh

# description: start/stop Clam AntiVirus daemon
#
# default: S/K41 0/K41 1/K41 2/S86

# CDDL (http://hub.opensolaris.org/bin/view/Main/licensing) terms apply.
# Copyright (c) 2006-2011 Jens Elkner. All rights reserved.

# $Id: clamd.method 445 2011-08-25 23:08:01Z elkner $

# account, under which clamd should run
# Default: clamav
ACCOUNT=clamav

# clamd configuration file
CONF=/etc/clamav/clamd.conf

# default file descriptor limit. If unset or < 16 it gets silently ignored
FDLIMIT=""

#
# no further changes should be required 
#

if [ `uname -s` = "SunOS" -a -x /usr/bin/svcprop ]; then
	. /lib/svc/share/smf_include.sh
	if [ -n "$SMF_FMRI" ]; then
		val=`svcprop -p start/user $SMF_FMRI`
		[ -n "$val" ] && [ "$val" != "\"\"" ] && ACCOUNT="$val"
		val=`svcprop -p config-file/entities $SMF_FMRI | cut -f4- -d/`
		[ -n "$val" ] && [ "$val" != "\"\"" ] && CONF="/$val"
		val=`svcprop -p limit/descriptors $SMF_FMRI | cut -f4- -d/`
		[ -n "$val" ] && [ "$val" != "\"\"" ] && [ $val -gt 0 ] && FDLIMIT="$val"
	fi
	ID=/usr/xpg4/bin/id
	ZN=`/sbin/zonename`
	if [ "$ZN" = "global" ]; then
		ZPPID=1
	else
		ZPPID=`pgrep -x zsched 2>/dev/null`
	fi
else
	SMF_EXIT_OK=0
	SMF_EXIT_ERR_FATAL=95
	SMF_EXIT_ERR_CONFIG=96
	SMF_EXIT_ERR_PERM=100
	ZPPID=1
	ID=/usr/bin/id
fi

NAME="Clam AntiVirus scan engine"
SPATH=@CLIENT_BASEDIR@/sbin
DAEMON="clamd"

case "$1" in
'start')
	if [ ! -f ${CONF} ]; then
		echo "Missing config file $CONF"
		exit $SMF_EXIT_ERR_CONFIG
	fi
	if [ ! -x $SPATH/$DAEMON ]; then	
		echo "failed (unable to execute $SPATH/$DAEMON)."
		exit $SMF_EXIT_ERR_FATAL
	fi

	PIDS=`pgrep -x -u clamav -P $ZPPID $DAEMON`
	if [ -n "$PIDS" ]; then
		echo "is already running."
		exit $SMF_EXIT_OK;
	fi

	# in case FixStaleSocket is not enabled, not doing this would
	# prevent it to work on the next start
	SOCK=`egrep '^[[:space:]]*LocalSocket[[:space:]]' $CONF | \
		awk '{ print $2 }' | cut -f2 -d:`
	if [ -n "$SOCK" -a -r "$SOCK" ]; then
		rm -f "$SOCK"
		if [ $? -ne 0 ]; then
			echo "Unable to remove $SOCK - as long as it exist, $DAEMON would not start. So remove it manually, please."
			exit $SMF_EXIT_ERR_PERM
		fi
	fi
	[ -n "$FDLIMIT" -a $FDLIMIT -gt 15 ] && ulimit -n $FDLIMIT

	echo "Starting $NAME ..."
	if [ `$ID -un` != "$ACCOUNT" ]; then
		/usr/bin/su - $ACCOUNT -c "$SPATH/$DAEMON -c $CONF"
	else
		$SPATH/$DAEMON -c $CONF
	fi
	if [ $? -ne 0 ]; then
		echo "Failed starting $SPATH/$DAEMON"
		exit $SMF_EXIT_ERR_FATAL
	fi
	echo "done."
	;;
'stop')
	echo "Stopping $NAME ..."
	pkill -TERM -x -u $ACCOUNT -P $ZPPID $DAEMON
	echo "done."
	;;
*)
	echo "Usage: $0 { start | stop }"
	exit $SMF_EXIT_ERR_FATAL
	;;
esac
exit $SMF_EXIT_OK
