#!/bin/sh -e
#
# spampd	SpamPD is a spamdetection proxy daemon for SMTP and LMTP
#
#		This script was written for debian
#		by Sven Mueller <debian@incase.de>
#
# Version:	1.0  13-Sep-2004  debian@incase.de

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
DESC='spam checking proxy daemon'
NAME='spampd'
PROGRAM=/usr/sbin/spampd
#EXECUTABLE=`head -n 1 $PROGRAM | sed -e 's,^#![ 	]*/,/,;s,[ 	].*$,,'`
EXECUTABLE=/usr/bin/perl
PIDFILE=/var/run/spampd.pid

# set some important defaults (overridable via /etc/default/spampd)
USERID=spampd
GRPID=spampd

if [[ -f /etc/default/$NAME ]]; then
	. /etc/default/$NAME
fi
	
function istrue () {
    ANS=$(echo $1 | tr A-Z a-z)
    [[ "$ANS" = 'yes' || "$ANS" = 'true' || "$ANS" = 'enable' || "$ANS" = '1' ]]
}

#
# find out wether to start spampd or not
#
istrue ${STARTSPAMPD} && STARTSPAMPD='true'

#
# Check wether the program is actually there
#
[[  -x $PROGRAM ]] || exit 0

# 
# Calculate final commandline
#
S_TAGALL=''
S_AWL=''
S_LOCALONLY=''

istrue "$TAGALL" \
&& S_TAGALL='--tagall'

istrue "$AUTOWHITELIST" \
&& S_AWL='--auto-whitelist'

istrue "$LOCALONLY" \
&& S_LOCALONLY='--L'

istrue "$LOGINET" \
&& LOGTARGET="inet" \
|| LOGTARGET="unix"

ARGS="${S_LOCALONLY} ${S_AWL} ${S_TAGALL} "

[[ -n "${LISTENPORT}" ]] && ARGS="${ARGS} --port=${LISTENPORT}"

[[ -n "${LISTENHOST}" ]] && ARGS="${ARGS} --host=${LISTENHOST}"

[[ -n "${DESTPORT}" ]] && ARGS="${ARGS} --relayport=${DESTPORT}"

[[ -n "${DESTHOST}" ]] && ARGS="${ARGS} --relayhost=${DESTHOST}"

[[ -n "${PIDFILE}" ]] && ARGS="${ARGS} --pid=${PIDFILE}"

[[ -n "${CHILDREN}" ]] && ARGS="${ARGS} --children=${CHILDREN}"

[[ -n "${USERID}" ]] && ARGS="${ARGS} --user=${USERID}"

[[ -n "${GRPID}" ]] && ARGS="${ARGS} --group=${GRPID}"

[[ -n "${LOGTARGET}" ]] && ARGS="${ARGS} --logsock=${LOGTARGET}"

[[ -n "${ADDOPTS}" ]] && ARGS="${ARGS} ${ADDOPTS}"

function check_pid () {
	[[ "$3" == "verbose" ]] && VERBOSE=1
	if [[ -f $2 ]]; then
		kill -0 `cat $2` >& /dev/null
		RETVAL=$?
		if [[ "$RETVAL" = "0" ]]; then
			[[ "$VERBOSE" ]] && echo "$1 is running as `cat $2`"
			return 0
		else
			[[ "$VERBOSE" ]] && echo "PIDFILE $2 for $1 exists, but $1 is not running."
			rm $2
			return 1
		fi
	else
		[[ "$VERBOSE" ]] && echo "PIDFILE $2 for $1 doesn't exists."
		return 4
	fi
}

case "$1" in
	start)
		if ! istrue "${STARTSPAMPD}"; then
			echo "Starting $DESC: $NAME (disabled in /etc/default/$NAME)."
			exit 0
		fi
		echo -n "Starting $DESC: $NAME"
		# if pidfile exists, but no matching process, remove PIDFILE
		check_pid spampd $PIDFILE || /bin/true
		# start daemon
		start-stop-daemon --start --exec $EXECUTABLE \
			--startas $PROGRAM --pidfile $PIDFILE \
			--user $USERID --group $GRPID -- $ARGS
		if [[ "$?" == '0' ]]; then
			echo '.'
			exit 0
		else
			echo ''
			exit 1
		fi
		;;
	stop)
		echo -n "Stopping $DESC: $NAME "
		set +e
		if istrue "$STARTSPAMPD" ; then
			start-stop-daemon --stop --exec $EXECUTABLE \
				--pidfile $PIDFILE
		else
			start-stop-daemon --stop --exec $EXECUTABLE \
				--pidfile $PIDFILE >& /dev/null
		fi
		if [[ "$?" = "0" ]]; then
			echo '.'
			rm $PIDFILE
			exit 0
		else
			echo ''
			exit 4
		fi
		;;
	status)
		check_pid $PROGRAM $PIDFILE verbose
		exit $?
		;;
	force-reload|try-restart)
		check_pid $PROGRAM $PIDFILE && exec $0 restart \
		|| echo "$DESC is not running. Try '$0 start' to start it."
		;;
	restart)
		check_pid $PROGRAM $PIDFILE && $0 stop
		exec $0 start
		;;
	*)
		echo "Usage: $0 (start|stop|restart|try-restart|force-reload|status)"
		;;

esac

exit 0
