#! /bin/sh --posix
#
# dbmail init script for debian
#
# written by Paul J Stevens, 2004-2006
#
#
### BEGIN INIT INFO
# Provides: dbmail
# Required-Start: $syslog $network
# Required-Stop: $syslog $network
# Should-Start: $local_fs $remote_fs
# Should-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start dbmail services
# Description: Run network services provided by dbmail such as
# imap-server, pop3-server, lmtp-server, timsieve-server
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
IMAPD=/usr/sbin/dbmail-imapd
POP3D=/usr/sbin/dbmail-pop3d
LMTPD=/usr/sbin/dbmail-lmtpd
SIEVE=/usr/sbin/dbmail-timsieved
IMAPD_NAME=dbmail-imapd
POP3D_NAME=dbmail-pop3d
LMTPD_NAME=dbmail-lmtpd
SIEVE_NAME=dbmail-timsieved
NAME="dbmail"
PID_DIR="/var/run/$NAME/"
DESC="dbmail servers"
test -x $IMAPD || exit 0
test -x $POP3D || exit 0
test -x $LMTPD || exit 0
set -e
. /lib/lsb/init-functions
[ -e /etc/default/dbmail ] && . /etc/default/dbmail
ssl_wrapper() {
# this needs more work. Use stunnel at your own risk,
# or wait for native support for ssl in dbmail-2 :-(
# note: stunnel4 in inetd mode will scale better.
cd /etc/ssl/certs || return 0
[ -e "$PEMFILE" ] || return 0
[ -x /usr/sbin/stunnel ] || return 0
# assuming stunnel runs on the same host as dbmail, even though
# it aint necessarily so.
STUNNLOPT="-D 7 -p $PEMFILE -S 0 -a /etc/ssl/certs -t 300 -s dbmail -g dbmail -P $PID_DIR"
log_progress_msg "SSL wrapper"
case "$1" in
start)
[ "$START_IMAPD" ] && \
/usr/sbin/stunnel $STUNNLOPT -r localhost:imap -d imaps
[ "$START_POP3D" ] && \
/usr/sbin/stunnel $STUNNLOPT -r localhost:pop3 -d pop3s
;;
stop)
if [ "$START_IMAPD" ]; then
pidfile="$PID_DIR/stunnel.localhost.imap.pid"
if [ -f "$pidfile" ]; then
kill `cat $pidfile` >/dev/null 2>&1 || true
fi
fi
if [ "$START_POP3D" ]; then
pidfile="$PID_DIR/stunnel.localhost.pop3.pid"
if [ -f "$pidfile" ]; then
kill `cat $pidfile` >/dev/null 2>&1 || true
fi
fi
;;
esac
return 0
}
service_start() {
eval '_daemon=$'$1
eval '_name=$'$1'_NAME'
[ -e $_daemon ] || return 0
log_progress_msg "$_name"
start-stop-daemon --start --exec $_daemon
r=$?
if [ $r -gt 0 ]; then
log_failure_msg "failed"
return $r
fi
return 0
}
service_stop() {
eval '_daemon=$'$1
eval '_name=$'$1'_NAME'
log_progress_msg "$_name"
start-stop-daemon --stop --retry 10 \
--pidfile ${PID_DIR}/${_name}.pid >/dev/null 2>&1 || true
pids=`pidof ${_name}`
if [ -n "$pids" ]; then
echo "=[$pids]="
log_failure_msg "failed"
return 1
fi
return 0
}
service_reload() {
eval '_daemon=$'$1
eval '_name=$'$1'_NAME'
log_progress_msg "$_name"
start-stop-daemon --stop --signal HUP --quiet \
--pidfile ${PID_DIR}/${_name}.pid --name ${_name}
r=$?
if [ $r -gt 0 ]; then
log_failure_msg "failed"
return $r
fi
return 0
}
case "$1" in
start)
log_daemon_msg "Starting $DESC"
gr=0
if [ "$START_IMAPD" ]; then service_start "IMAPD" || let gr=$gr+$?; fi
if [ "$START_POP3D" ]; then service_start "POP3D" || let gr=$gr+$?; fi
if [ "$START_LMTPD" ]; then service_start "LMTPD" || let gr=$gr+$?; fi
if [ "$START_SIEVE" ]; then service_start "SIEVE" || let gr=$gr+$?; fi
if [ "$START_SSL" ]; then ssl_wrapper start || let gr=$gr+$?; fi
log_end_msg $r
;;
stop)
log_daemon_msg "Stopping $DESC"
gr=0
if [ "$START_SSL" ]; then ssl_wrapper stop || let gr=$gr+$?; fi
if [ "$START_IMAPD" ]; then service_stop "IMAPD" || let gr=$gr+$?; fi
if [ "$START_POP3D" ]; then service_stop "POP3D" || let gr=$gr+$?; fi
if [ "$START_LMTPD" ]; then service_stop "LMTPD" || let gr=$gr+$?; fi
if [ "$START_SIEVE" ]; then service_stop "SIEVE" || let gr=$gr+$?; fi
log_end_msg $gr
;;
reload)
log_daemon_msg "Reloading $DESC"
if [ "$START_IMAPD" ]; then service_reload "IMAPD" || let r=$r+$?; fi
if [ "$START_POP3D" ]; then service_reload "POP3D" || let r=$r+$?; fi
if [ "$START_LMTPD" ]; then service_reload "LMTPD" || let r=$r+$?; fi
if [ "$START_SIEVE" ]; then service_reload "SIEVE" || let r=$r+$?; fi
log_end_msg $r
;;
restart|force-reload)
$0 stop || true
$0 start
;;
*)
N="$NAME"
echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
exit 0