#!/bin/sh
# /etc/init.d/opensmtpd
#
# Written by Daniel Walrond <debian@djw.org.uk>
#        and Ryan Kavanagh <rak@debian.org>

### BEGIN INIT INFO
# Provides:          opensmtpd mail-transport-agent
# Required-Start:    $local_fs $remote_fs $syslog $network
# Required-Stop:     $local_fs $remote_fs $syslog $network
# Should-Start:      postgresql mysql dovecot
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: opensmtpd Mail Transport Agent
# Description:       OpenSMTPD
### END INIT INFO

# Do not "set -e"; /lib/lsb/init-functions included below may fail if "set -e"
# is in effect and echoing status messages to the console fails.
set -u

BASE="smtpd"
DAEMON="/usr/sbin/smtpd"
CONTROL="/usr/sbin/smtpctl"
PIDFILE="/run/${BASE}.pid"
DESC="opensmtpd"

test -x /usr/sbin/smtpd || exit 0

. /lib/lsb/init-functions

smtpd_start()
{
#if status_of_proc -p "${PIDFILE}" "${DAEMON}" "${DESC}" > /dev/null;
if status_of_proc "${DAEMON}" "${DESC}" > /dev/null;
then
  log_progress_msg "opensmtpd already running ..."
  return 1
else
  if start-stop-daemon \
      --start \
      --exec "${DAEMON}"; then
    log_progress_msg "opensmtpd"
    return 0
  else
    log_progress_msg "opensmtpd"
    return 1
  fi
fi
}

smtpd_stop()
{
status="0"
# pidofproc constructs PIDFILE from BASE
pidofproc "${BASE}" >/dev/null || status="$?"
# pidofproc returns 0 if daemon is running
#                   1 if daemon isn't running
#                   2 never
#                   3 if the pidfile doesn't exist
#                   4 if it can't read pidfile
case "${status}" in
  0|4)
    if killproc "${DAEMON}"; then
      log_progress_msg "opensmtpd"
      return 0
    else
      log_progress_msg "opensmtpd"
      return 1
    fi
    ;;
  *)
    log_progress_msg "opensmtpd is not running ..."
    return 1
    ;;
esac
}

smtpd_config_check()
{
# ${DAEMON} -n checks the config file's validity
if "${DAEMON}" -n >/dev/null 2>&1; then
  return 0
else
  log_end_msg 1
  "${DAEMON}" -n
  return 1
fi
}

case "$1" in
start)
  log_daemon_msg "Starting MTA"
  # Although smtpd checks the config automatically on startup,
  # check it manually ourselves so that error messages are
  # printed after our "failed!" instead of between it and
  # "Starting MTA"
  if smtpd_config_check; then
    smtpd_start
    log_end_msg $?
  fi
  ;;
stop)
  log_daemon_msg "Stopping MTA"
  smtpd_stop
  log_end_msg $?
  ;;
restart)
  log_daemon_msg "Stopping MTA for restart"
  # If the check fails, the log_end_msg in smtpd_config_check
  # will output "failed!" for us.
  if smtpd_config_check; then
    smtpd_stop
    log_end_msg $?
    log_daemon_msg "Restarting MTA"
    smtpd_start
    log_end_msg $?
  fi
  ;;
force-reload)
  log_daemon_msg "Stopping MTA for reload"
  smtpd_stop
  log_end_msg $?
  log_daemon_msg "Restarting MTA"
  smtpd_start
  log_end_msg $?
  ;;
check)
  log_daemon_msg "Checking MTA configuration"
  if smtpd_config_check; then
    log_progress_msg "success"
    log_end_msg $?
  fi
  ;;
status)
  status_of_proc "${DAEMON}" "MTA ${DESC}"
  ;;
*)
  echo "Usage: $0 {start|stop|restart|force-reload|status|check}"
  exit 1
  ;;
esac

exit 0

# vim:set sw=2:
