#! /bin/sh
#
# amavisd	/etc/init.d/ initscript for amavisd-new
# 		$Id: amavisd-new.init 800 2006-01-31 00:07:45Z hmh $
#
#		Copyright (c) 2003 by Brian May <bam@debian.org>
#			and Henrique M. Holschuh <hmh@debian.org>
#		Distributed under the GPL version 2
#
#
# How this thing works:
#   ${START} must be only what is needed for start-stop-daemon, DO NOT
#   ADD ANY PARAMETERS HERE!  we might use it for --test, for example.
#   ${STOP} works just like ${START}, --signal is used with it.
#
#   ${PARAMS} are the parameters to give the daemon when really starting
#   it.
### BEGIN INIT INFO
# Provides:          amavisd-new
# Required-Start:    $syslog $network $local_fs $remote_fs 
# Required-Stop:     $syslog $network $local_fs $remote_fs
# Should-Start:      
# Should-Stop:       
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts amavisd-new mailfilter
# Description:       Launches the amavisd-new mailfilter
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/amavisd-new
DAEMON2=/usr/bin/perl
NAME=amavisd
DAEMONNAME=amavisd-new
DESC=amavisd
PIDFILE=/var/run/amavis/${NAME}.pid

. /lib/lsb/init-functions

test -f ${DAEMON} || exit 0

set -e

START="--start --quiet --pidfile $PIDFILE --startas ${DAEMON} --user amavis"
STOP="--stop --quiet --pidfile $PIDFILE --user amavis"
PARAMS=

check_noncompatible_upgrade() {
	for i in /etc/amavisd.conf /etc/amavis/amavisd.conf ; do
		if [ -e "${i}.disabled" ] ; then
			echo "Found incompatible config file flag!" >&2
			echo "Due to safety concerns, amavisd-new will not be started." >&2
			echo "Refer to /usr/share/doc/amavisd-new/README.Debian for instructions." >&2
			exit 1
		fi
	done
}

createdir() {
# $1 = user
# $2 = group
# $3 = permissions (octal)
# $4 = path to directory
        [ -d "$4" ] || mkdir -p "$4"
        chown -c -h "$1:$2" "$4"
        chmod -c "$3" "$4"
}

fixdirs() {
	dir=$(dpkg-statoverride --list /var/run/amavis) || {
		echo "You are missing a dpkg-statoverride on /var/run/amavis.  Fix it, otherwise you risk silent breakage on upgrades." >&2
		exit 1
	}
	[ -z "$dir" ] || createdir $dir
	:
}

cleanup() {
	[ -d /var/lib/amavis ] && 
	  find /var/lib/amavis -maxdepth 1 -name 'amavis-*' -type d \
	  	-exec rm -rf "{}" \; >/dev/null 2>&1 || true
	[ -d /var/lib/amavis/tmp ] && 
	  find /var/lib/amavis/tmp -maxdepth 1 -name 'amavis-*' -type d \
	  	-exec rm -rf "{}" \; >/dev/null 2>&1 || true
	:
}

case "$1" in
  start)
	echo -n "Starting $DESC: "
	fixdirs
  	check_noncompatible_upgrade
	export LC_ALL; LC_ALL=C
	if start-stop-daemon ${START} -- ${PARAMS} start >/dev/null ; then
		echo "amavisd-new."
	else
		if start-stop-daemon --test ${START} >/dev/null 2>&1; then
			echo "(failed)."
			exit 1
		else
			echo "(already running)."
			exit 0
		fi
	fi
	;;
  stop)
	echo -n "Stopping $DESC: "
	if start-stop-daemon ${STOP} --retry 10 >/dev/null ; then
		cleanup
		echo "amavisd-new."
	else
		if start-stop-daemon --test ${START} >/dev/null 2>&1; then
			echo "(not running)."
			exit 0
		else
			echo "(failed)."
			exit 1
		fi
	fi
	;;
#  reload)
#	echo "Reloading $DESC configuration files."
#	start-stop-daemon ${STOP} --signal 1
# 	;;
  restart|force-reload)
	$0 stop
	exec $0 start
	;;
  debug|debug-sa)
  	mode="$1"
  	echo "Trying to run amavisd-new in ${mode} mode..."
  	fixdirs
  	check_noncompatible_upgrade
	exec ${DAEMON} ${PARAMS} "${mode}"
	;;
  status)
	status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
	;;
  *)
	N=/etc/init.d/amavis
	#echo "Usage: $N {start|stop|restart|reload|force-reload|debug}" >&2
	echo "Usage: $N {start|stop|restart|force-reload|status|debug}" >&2
	exit 1
	;;
esac

exit 0
