#!/bin/sh
#
# $NetBSD: sendmail,v 1.14 2002/02/12 01:26:36 lukem Exp $
# $FreeBSD: src/etc/rc.d/sendmail,v 1.7 2002/10/12 10:31:31 schweikh Exp $
#

# PROVIDE: mail
# REQUIRE: LOGIN
# KEYWORD: DragonFly FreeBSD NetBSD
#	we make mail start late, so that things like .forward's are not
#	processed until the system is fully operational

# XXX - Get together with sendmail mantainer to figure out how to
#	better handle SENDMAIL_ENABLE and 3rd party MTAs.
#
. /etc/rc.subr

name="sendmail"
rcvar=`set_rcvar`
required_files="/etc/mail/${name}.cf"

case ${OSTYPE} in
DragonFly)
	command=${sendmail_program:-/usr/sbin/sendmail}
        pidfile=${sendmail_pidfile:-/var/run/sendmail.pid}
        load_rc_config $name
        case ${sendmail_enable} in
        [Nn][Oo][Nn][Ee])
                sendmail_enable="NO"
                sendmail_submit_enable="NO"
                sendmail_outbound_enable="NO"
                sendmail_msp_queue_enable="NO"
                ;;
        esac
        ;;

FreeBSD)
	command=${sendmail_program:-/usr/sbin/sendmail}
	pidfile=${sendmail_pidfile:-/var/run/sendmail.pid}

	load_rc_config $name

	case ${sendmail_enable} in
	[Nn][Oo][Nn][Ee])
		sendmail_enable="NO"
		sendmail_submit_enable="NO"
		sendmail_outbound_enable="NO"
		sendmail_msp_queue_enable="NO"
		;;
	esac
	;;
NetBSD)
	command="/usr/sbin/${name}"
	pidfile="/var/run/${name}.pid"
	start_precmd="sendmail_precmd"

	load_rc_config $name
	;;
esac

sendmail_precmd()
{
	# Die if there's pre-8.10 custom configuration file.  This check is
	# mandatory for smooth upgrade.  See NetBSD PR 10100 for details.
	#
	if checkyesno ${rcvar} && [ -f "/etc/${name}.cf" ]; then
		if ! cmp -s "/etc/mail/${name}.cf" "/etc/${name}.cf"; then
			warn \
    "${name} was not started; you have multiple copies of sendmail.cf."
			return 1
		fi
	fi

	# check modifications on /etc/mail/aliases
	if [ -f "/etc/mail/aliases.db" ]; then
		if [ "/etc/mail/aliases" -nt "/etc/mail/aliases.db" ]; then
			echo \
	    "${name}: /etc/mail/aliases newer than /etc/mail/aliases.db, regenerating"
			/usr/bin/newaliases
		fi
	else
		echo \
	    "${name}: /etc/mail/aliases.db not present, generating"
			/usr/bin/newaliases
	fi

	# check couple of common db files, too
	for f in genericstable virtusertable domaintable mailertable; do
		if [ -r "/etc/mail/$f" -a \
		    "/etc/mail/$f" -nt "/etc/mail/$f.db" ]; then
			echo \
    "${name}: /etc/mail/$f newer than /etc/mail/$f.db, regenerating"
			/usr/sbin/makemap hash /etc/mail/$f < /etc/mail/$f
		fi
	done
}

run_rc_command "$1"

case ${OSTYPE} in
DragonFly)
	required_files=
        if ! checkyesno sendmail_enable; then
                name="sendmail_submit"
                rcvar=`set_rcvar`
                start_cmd="${command} ${sendmail_submit_flags}"
                run_rc_command "$1"
        fi
        if ! checkyesno sendmail_outbound_enable; then
                name="sendmail_outbound"
                rcvar=`set_rcvar`
                start_cmd="${command} ${sendmail_outbound_flags}"
                run_rc_command "$1"
        fi
        name="sendmail_clientmqueue"
        rcvar="sendmail_msp_queue_enable"
        start_cmd="${command} ${sendmail_msp_queue_flags}"
        pidfile="${sendmail_mspq_pidfile:-/var/spool/clientmqueue/sm-client.pid}"
        required_files="/etc/mail/submit.cf"
        run_rc_command "$1"
	;;
FreeBSD)
	required_files=

	if ! checkyesno sendmail_enable; then
		name="sendmail_submit"
		rcvar=`set_rcvar`
		start_cmd="${command} ${sendmail_submit_flags}"
		run_rc_command "$1"
	fi

	if ! checkyesno sendmail_outbound_enable; then
		name="sendmail_outbound"
		rcvar=`set_rcvar`
		start_cmd="${command} ${sendmail_outbound_flags}"
		run_rc_command "$1"
	fi

	name="sendmail_clientmqueue"
	rcvar="sendmail_msp_queue_enable"
	start_cmd="${command} ${sendmail_msp_queue_flags}"
	pidfile="${sendmail_mspq_pidfile:-/var/spool/clientmqueue/sm-client.pid}"
	required_files="/etc/mail/submit.cf"
	run_rc_command "$1"
	;;
esac
