#!/bin/sh
#
# Version: 1.1.0
#
# chkconfig: 2345 87 34
# description: Starts and stops qmail SMTP daemon. Author T.Nonogaki. http://www.asahi-net.or.jp/~aa4t-nngk/

MYPROGNAME=qmail-smtpd
MYNICKNAME=qsmtpd
LOGPREFIX=smtpd
SVCPORT=smtp
TESTCHAR=tcpserver
TEST2CHAR=$SVCPORT
MYSVNAME=`cat /var/qmail/control/me`
QMAILDUID=`id -u qmaild`
QMAILDGID=`id -g qmaild`
PIDFILE=/var/run/${MYNICKNAME}.pid
LOCKFILE=/var/lock/subsys/$MYNICKNAME
RETRY=5

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# See how we were called.
status() {
	# Status of daemon.
	local MYPID
	PATH="/usr/local/bin:$PATH"

	MYPID=`detectpid $TESTCHAR $TEST2CHAR`

	if [ -n "$MYPID" ]; then
		echo "$MYNICKNAME (pid $MYPID) is running..."
		return 0
	fi

	if [ -e $PIDFILE ]; then
		echo "$MYNICKNAME dead but pid file exists"
	else
		echo "$MYNICKNAME is stoped"
	fi
	return 0
}

start() {
	# Start daemons.
	local COUNT
	PATH="/var/qmail/bin:/usr/local/bin:$PATH"
	echo -n $"Starting $MYNICKNAME: "

	# See if it is already running.
	if [ -f $LOCKFILE ]; then
		failure
		echo
		return 1
	fi

	tcpserver -H -R -u $QMAILDUID -g $QMAILDGID \
 -x /etc/service/tcp.smtp.cdb 0 $SVCPORT \
 rblsmtpd -r sbl.spamhaus.org -r dnsbl.ahbl.org \
 $MYPROGNAME $MYSVNAME checklocalpwd /bin/true &
	RETVAL=$?
	if [ $RETVAL -ne 0 ] ; then
		failure
		echo
		return 1
	fi

	# Create lock and pid file.
	COUNT=0
	while :; do
		[ -s $PIDFILE ] && break
		if [ $COUNT -gt $RETRY ] ; then
			echo $"$MYPROG started BUT could NOT create PIDFILE" >&2
			return 0
		fi
		{ detectpid $TESTCHAR $TEST2CHAR >$PIDFILE; } 2>/dev/null
		: $((COUNT+=1))
	done
	touch $LOCKFILE
	success
	echo
	return 0
}

stop() {
	# Stop daemons. Killproc always removes pid file.
	echo -n $"Stopping $MYNICKNAME: "
	killproc $MYNICKNAME
	RETVAL=$?
	[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
	echo
	return $RETVAL
}

case "$1" in
  start)
	start
	RETVAL=$?
	;;
  stop)
	stop
	RETVAL=$?
	;;
  restart)
	stop
	start
	RETVAL=$?
	;;
  status)
	status
	RETVAL=$?
	;;
  *)
	echo "Usage: $MYNICKNAME {start|stop|restart|status}"
	exit 1
esac

exit $RETVAL
