#! /bin/sh
# /etc/init.d/exim4
#
# Written by Miquel van Smoorenburg <miquels@drinkel.ow.org>.
# Modified for Debian GNU/Linux by Ian Murdock <imurdock@gnu.ai.mit.edu>.
# Modified for exim by Tim Cutts <timc@chiark.greenend.org.uk>
# Modified for exim4 by Andreas Metzler <ametzler@downhill.at.eu.org>

set -e

if [ -n "$EX4DEBUG" ]; then
  echo "now debugging $0 $@"
  set -x
fi

#read default file
QUEUERUNNER='combined'
QUEUEINTERVAL='30m'
UPEX4OPTS=''
PIDFILE="/var/run/exim4/exim.pid"
QRPIDFILE="/var/run/exim4/eximqr.pid"
[ -f /etc/default/exim4 ] && . /etc/default/exim4

upex4conf() {
  UPEX4CONF="update-exim4.conf"
  OLDIFS="$IFS"
  IFS=:
  for p in $PATH; do
    if [ -x "$p/$UPEX4CONF" ]; then
      IFS="$OLDIFS"
      $p/$UPEX4CONF $UPEX4OPTS
      return 0
    fi
  done
  IFS="$OLDIFS"
}

# Exit if exim runs from /etc/inetd.conf
if [ -f /etc/inetd.conf ] && grep -E -q "^ *([0-9.]+:)?smtp" /etc/inetd.conf
then
  upex4conf
  exit 0
fi


DAEMON=/usr/sbin/exim4
NAME=exim4

##test -x $DAEMON || exit 0
test -x /usr/lib/exim4/exim4 || exit 0

start_exim()
{
  case ${QUEUERUNNER} in
    combined)
      start-stop-daemon --start --pidfile "$PIDFILE" \
        --exec $DAEMON -- -bd -q${QFLAGS}${QUEUEINTERVAL} \
        ${COMMONOPTIONS} ${QUEUERUNNEROPTIONS} ${SMTPLISTENEROPTIONS}
      ;;
    separate)
      start-stop-daemon --start --pidfile "$PIDFILE" \
        --exec $DAEMON -- -bd ${SMTPLISTENEROPTIONS} ${COMMONOPTIONS}
      start-stop-daemon --start --pidfile "$QRPIDFILE" \
        --exec $DAEMON -- -oP "$QRPIDFILE" \
        -q${QFLAGS}${QUEUEINTERVAL} ${QUEUERUNNEROPTIONS} ${COMMONOPTIONS}
      ;;
    queueonly)
      start-stop-daemon --start --pidfile "$QRPIDFILE" \
        --exec $DAEMON -- -oP "$QRPIDFILE" \
        -q${QFLAGS}${QUEUEINTERVAL} ${QUEUERUNNEROPTIONS} ${COMMONOPTIONS}
      ;;
    no|ppp)
      start-stop-daemon --start --pidfile "$PIDFILE" \
        --exec $DAEMON -- -bd ${SMTPLISTENEROPTIONS}
      ;;
    nodaemon)
      ;;    
  esac
}

stop_exim()
{
# we try to kill eximqr and exim SMTP listener, no matter what
# ${QUEUERUNNER} is set to, we could have switched since starting.
  [ -f "$QRPIDFILE" ] && \
    start-stop-daemon --stop --pidfile "$QRPIDFILE" \
      --oknodo --retry 30 --exec $DAEMON
  [ -f "$PIDFILE" ] && \
    start-stop-daemon --stop --pidfile "$PIDFILE" \
      --oknodo --retry 30 --exec $DAEMON
  rm -f "$QRPIDFILE" "$PIDFILE" 
}

reload_exim()
{
  case ${QUEUERUNNER} in
    combined|no|ppp)
      start-stop-daemon --stop --pidfile "$PIDFILE" \
        --signal 1 --exec $DAEMON
      ;;
    separate)
      start-stop-daemon --stop --pidfile "$PIDFILE" \
        --signal 1 --exec $DAEMON
      start-stop-daemon --stop --pidfile "$QRPIDFILE" \
        --signal 1 --exec $DAEMON
      ;;
  esac  
}

kill_all_exims()
{
  SIG="${1:-TERM}"
  for pid in $(pidof $NAME); do
    if [ "$(readlink /proc/$pid/root)" == "/" ]; then
      kill -$SIG $pid
    fi
  done
}

# check for valid configuration file
isconfigvalid()
{
if ! $DAEMON -bV > /dev/null ; then
  echo
  echo "Warning! Invalid configuration file for $NAME. Exiting." 1>&2
  exit 1
fi
}

case "$1" in
  start)
    echo -n "Starting MTA: "
    # regenerate exim4.conf
    upex4conf
    isconfigvalid
    start_exim
    echo "$NAME."
    ;;
  stop)
    echo -n "Stopping MTA: "
    stop_exim
    echo "$NAME."
      ;;
  restart)
    echo -n "Restarting MTA: "
    # regenerate exim4.conf
    upex4conf
    isconfigvalid
    stop_exim
    sleep 2
    start_exim
    echo "$NAME."
    ;;
  reload|force-reload)
    echo "Reloading $NAME configuration files"
    # regenerate exim4.conf
    upex4conf
    isconfigvalid
    reload_exim
    ;;
  status)
    exiwhat
    ;;
  force-stop)
    kill_all_exims $2
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|reload|status}"
    exit 1
    ;;
esac

exit 0
# vim:tabstop=2:expandtab:shiftwidth=2
