#! /bin/sh
# Copyright (c) 1996-2002 SuSE Gmbh Nuernberg, Germany.
# Copyright (c) 2006-2007 SuSE LINUX Products GmbH, Germany.
#
# Author: Florian La Roche, 1996, 1997
#	  Werner Fink, 1996, 1999-2007
# Please send feedback to http://www.suse.de/feedback/
#
### BEGIN INIT INFO
# Provides:       sendmail
# Required-Start: $named $network $remote_fs $syslog $time
# Required-Stop:
# Should-Start:   amavis cyrus ldap nscd ypbind
# Should-Stop:
# Default-Start:  3 5
# Default-Stop:
# Description:    Start the Sendmail MTA
### END INIT INFO

test -s /etc/sysconfig/mail && \
      . /etc/sysconfig/mail

test -s /etc/sysconfig/sendmail && \
      . /etc/sysconfig/sendmail

PortOpts=""
if test -f /etc/sendmail.cf ; then
    PortOpts=$(sed -rn 's/^O[[:space:]]+DaemonPortOptions=(.*)/\1/p' /etc/sendmail.cf)
elif test -f /etc/mail/sendmail.cf ; then
    PortOpts=$(sed -rn 's/^O[[:space:]]+DaemonPortOptions=(.*)/\1/p' /etc/mail/sendmail.cf)
fi
if test -z "$SENDMAIL_ARGS" ; then
    SENDMAIL_ARGS="-L sendmail -Am -bd -q30m -om"
fi
if test -z "$SENDMAIL_CLIENT_ARGS" ; then
    SENDMAIL_CLIENT_ARGS="-L sendmail-client -Ac -qp30m"
fi
if test "$SMTPD_LISTEN_REMOTE" != "yes" ; then
    PortOpts="${PortOpts:+${PortOpts},}Addr=127.0.0.1"
    SENDMAIL_ARGS="-O DaemonPortOptions=${PortOpts} $SENDMAIL_ARGS"
fi
msppid=/var/spool/clientmqueue/sm-client.pid
srvpid=/var/run/sendmail.pid

#
# This function polls ten seconds on port 25 of localhost
#
poll25 ()
{
    local IFS="${IFS},"
    local timeout=1000
    local port=25

    set -- $PortOpts
    for opt; do
	case "$opt" in
	Port=*) port=${opt#*=}
	esac
    done

    while ! fuser -sn tcp $port > /dev/null 2>&1 ; do
	test $timeout -eq 0 && return 1
	usleep 10000
	: $((timeout--))
    done
    return 0
}

. /etc/rc.status
rc_reset
case "$1" in
    start)
	echo -n "Initializing SMTP port (sendmail)"
	startproc -p $srvpid -i $msppid /usr/sbin/sendmail $SENDMAIL_ARGS
	rc_status
	poll25
	rc_status
	startproc -p $msppid -i $srvpid /usr/sbin/sendmail $SENDMAIL_CLIENT_ARGS
	rc_status -v
	;;
    stop)
	echo -n "Shutting down SMTP port"
	killproc  -p $msppid -i $srvpid -TERM /usr/sbin/sendmail
	rc_status
	killproc  -p $srvpid -i $msppid -TERM /usr/sbin/sendmail
	rc_status -v
	;;
    try-restart)
	$0 stop && $0 start
	rc_status
	;;
    restart)
	$0 stop
	$0 start
	rc_status
	;;
    reload|force-reload)
	echo -n "Reload service sendmail"
	killproc  -p $msppid -i $srvpid -TERM /usr/sbin/sendmail
	rc_status
	startproc -p $msppid -i $srvpid /usr/sbin/sendmail $SENDMAIL_CLIENT_ARGS
	rc_status
	killproc  -p $srvpid -i $msppid -HUP  /usr/sbin/sendmail
	rc_status -v
	;;
    status)
	echo -n "Checking for service sendmail: "
	checkproc -p $srvpid -i $msppid /usr/sbin/sendmail
	rc_status
	checkproc -p $msppid -i $srvpid /usr/sbin/sendmail
	rc_status -v
	;;
    probe)
	todo=""
	test /etc/sendmail.cf    -nt $srvpid && todo=reload
	test /etc/mail/submit.cf -nt $msppid && todo=reload
	checkproc -p $srvpid -i $msppid /usr/sbin/sendmail || todo=restart
	checkproc -p $msppid -i $srvpid /usr/sbin/sendmail || todo=restart
	test -z "$todo" || echo "$todo"
	;;
    *)
	echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
	exit 1
esac
rc_exit
