#!/bin/sh
#
# amavisd-milter    /etc/init.d/ initscript for amavisd-milter
#		Derived from /etc/init.d/amavisd-new-milter by
#			Brian May <bam@debian.org> and
#			Henrique M. Holschuh <hmh@debian.org>
#		Ideas from /etc/init.d/rsyslog by Michael Biebl
#			<biebl@debian.org>
#		and /etc/init.d/ssh
#		Copyright (c) 2009 by Harald Jenny
#			<harald@a-little-linux-box.at>
#		Distributed under the GPL version 2
#
### BEGIN INIT INFO
# Provides:          amavisd-milter
# Required-Start:    $remote_fs $syslog 
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts the amavisd-milter daemon
# Description:       milter daemon for sendmail/postfix and amavisd-new
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/amavisd-milter
NAME=amavisd-milter
DESC="amavisd-milter Daemon"
OPTIONS=""

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r "/etc/default/$NAME" ] && . "/etc/default/$NAME"

[ -n "$SYSTEMUSER" ] || SYSTEMUSER=amavis

if [ -z "$PIDFILE" ]; then
  PIDFILE="/var/run/amavis/$NAME.pid"
else 
  OPTIONS="$OPTIONS -p $PIDFILE"
fi
PIDDIR="$(dirname "$PIDFILE")"
if [ ! -e "$PIDDIR" ]; then
  mkdir "$PIDDIR"
fi
chown "$SYSTEMUSER":"$(id "$SYSTEMUSER" -g -n)" "$PIDDIR"

if [ -z "$MILTERSOCKET" ]; then
  MILTERSOCKETTYPE=pipe
  MILTERSOCKET="/var/lib/amavis/amavisd-milter.sock"
else
  OPTIONS="$OPTIONS -s $MILTERSOCKET"
  if [ "$(echo $MILTERSOCKET | grep ^inet)" ]; then
    MILTERSOCKETTYPE=tcp
  else
    MILTERSOCKETTYPE=pipe
    MILTERDIR="$(dirname "$MILTERSOCKET")"
    if [ ! -e "$MILTERDIR" ]; then
      mkdir "$MILTERDIR"
    fi
    chown "$SYSTEMUSER" "$MILTERDIR"
  fi
fi
   
[ -z "$AMAVISSOCKET" ] || OPTIONS="$OPTIONS -S $AMAVISSOCKET"
[ -z "$WORKINGDIR" ] || OPTIONS="$OPTIONS -w $WORKINGDIR"
[ -z "$EXTRAPARAMS" ] || OPTIONS="$OPTIONS $EXTRAPARAMS"

START="--start --quiet --chuid $SYSTEMUSER --pidfile $PIDFILE --startas $DAEMON --name $NAME -- $OPTIONS"
STOP="--stop --quiet --retry 10 --pidfile $PIDFILE --startas $DAEMON --name $NAME"

# Define LSB functions.
. /lib/lsb/init-functions

case "$1" in
  start)
	log_daemon_msg "Starting $DESC" "$NAME"
	start-stop-daemon $START

	case "$?" in
		0)
		   log_end_msg 0
		   if [ "$MILTERSOCKETTYPE" = "pipe" ]; then
		     if [ "$MILTERSOCKETOWNER" ]; then
		       chown "$MILTERSOCKETOWNER" "$MILTERSOCKET"
		     fi
		     if [ "$MILTERSOCKETMODE" ]; then
		       chmod "$MILTERSOCKETMODE" "$MILTERSOCKET"
		     fi
		   fi
		   ;;

		1)
		   log_progress_msg "already started"
		   log_end_msg 0
		   ;;

		*)
		   log_end_msg $?
		   ;;

	esac
	;;

  stop)
	log_daemon_msg "Stopping $DESC" "$NAME"
	start-stop-daemon $STOP

	case "$?" in
		0)
		   log_end_msg 0
		   ;;

		1)
		   log_progress_msg "already stopped"
		   log_end_msg 0
		   ;;

		*) log_end_msg $?
		   ;;

	esac
	;;

  restart|force-reload)
	$0 stop
	$0 start
	;;

  status)
	status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
	;;

  *)
	log_failure_msg "Usage: $0 {start|stop|restart|force-reload|status}"
	exit 1
	;;

esac

exit 0
