#!@RCD_SCRIPTS_SHELL@
#
# $NetBSD$
#
# The 'spamd' daemon checks emails provided by the 'spamc' client for signs
# of spam
#
# PLEASE read the file
#   @PREFIX@/share/doc/spamassassin/spamd/README.spamd
# especially the section about security.

## only for NetBSD
# PROVIDE: spamd
# REQUIRE: LOGIN
# BEFORE: mail
# KEYWORD: shutdown
##

PATH=/sbin:/bin:/usr/sbin:/usr/bin:@PREFIX@/bin
export PATH

if [ -f /etc/rc.subr ]
then
	. /etc/rc.subr
fi

name="spamd"
rcvar=$name
command_interpreter="@PERL5@"
command="@PREFIX@/bin/spamd"
pidfile="/var/run/${name}.pid"
sig_stop="TERM"
command_args="-d -r ${pidfile}"
extra_commands="reload"
sig_reload="HUP"

# default values, may be overridden on NetBSD by setting them in /etc/rc.conf
spamd_flags=${spamd_flags-"-H -c"}
spamd=${spamd:-NO}
spamd_fdlimit=${spamd_fdlimit-"128"}

OPSYS=@OPSYS@ # set during package build
INTERPRETER_SUPPORT=@INTERPRETER_SUPPORT@ # set during package build

# A default limit of 64 (at least on NetBSD) may be too low for many
# people (eg with addional RBL rules)
SOFT_FDLIMIT=`ulimit -S -n`
HARD_FDLIMIT=`ulimit -H -n`

if [ ${spamd_fdlimit} -gt ${SOFT_FDLIMIT} ]; then
  if [ ${spamd_fdlimit} -le ${HARD_FDLIMIT} ]; then 
    ulimit -S -n ${spamd_fdlimit}
  else
    ulimit -S -n ${HARD_FDLIMIT}
  fi
fi

spamd_start()
{
	if [ -n "${the_spamd_pid}" ]; then
		echo "${command} already running as pid ${the_spamd_pid}."
		return 1
	fi
	echo "Starting spamd"
	${command} ${spamd_flags} ${command_args}
}

spamd_stop()
{
	if [ -z "${the_spamd_pid}" ]; then
		echo "${command} not running? (check ${pidfile})."
		return 1
	fi
	echo "Stopping spamd"
	kill -${sig_stop} ${the_spamd_pid}
}

spamd_status()
{
	if [ -z "${the_spamd_pid}" ]; then
		echo "${command} is not running? (check ${pidfile})."
	else
		echo "${command} is running as pid ${the_spamd_pid}."
		
	fi
	
}

spamd_reload()
{
	if [ -z "${the_spamd_pid}" ]; then
		echo "${command} not running? (check ${pidfile})."
		return 1
	fi
	echo "Reloading spamd"
	kill -${sig_reload} ${the_spamd_pid}
}

if [ "${OPSYS}" = "NetBSD" ]; then
	if checkyesno INTERPRETER_SUPPORT; then
	  : # support for 'command_interpreter' was added in NetBSD 1.6
	else
	  start_cmd="spamd_start"
	  stop_cmd="spamd_stop"
	  status_cmd="spamd_status"
	  reload_cmd="spamd_reload"
	  the_spamd_pid=`check_pidfile ${pidfile} ${command_interpreter}`
	fi

	load_rc_config $name
	run_rc_command "$1"

else # not NetBSD

	if [ -f ${pidfile} ];  then
		the_spamd_pid=`head -1 ${pidfile}`
	else
		the_spamd_pid=
	fi

	case ${1+"$@"} in
	start)
		spamd_start
		;;
	stop)
		spamd_stop
		;;
	restart)
		spamd_stop
		sleep 1
		spamd_start
		;;
	status)
		spamd_status
		;;
	reload)
		spamd_reload
		;;
	*) 
		echo "Usage: ${0} (start|stop|restart|status|reload)"
		;;

	esac
fi
