NetBSD/etc/rc.d/smmsp

88 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: smmsp,v 1.2 2003/04/02 18:00:14 atatat Exp $
#
# REQUIRE: mail
# The only function of the smmsp process is to push locally
# collected mail (which got stuck in the local client queue)
# to a more fully functional smtp relay. It is not a fully
# functional smtp daemon.
#
# It can, however, be used as a completely unprivileged
# replacement for hosts that were previously using a "null
# client" configuration and a smart relay.
. /etc/rc.subr
name="smmsp"
rcvar=$name
command="/usr/sbin/sendmail"
pidfile="/var/spool/clientmqueue/sm-client.pid"
required_files="/etc/mail/submit.cf"
start_precmd="smmsp_precmd"
smmsp_precmd()
{
_suidroot="${sendmail_suidroot:-NO}"
if checkyesno _suidroot; then
_owner_fmt="%p %Su"
_def_owner="104555 root"
_def_cqueuemode=""
else
_owner_fmt="%p %Su %Sg"
_def_owner="102555 root smmsp"
_def_cqueuemode="40770 smmsp smmsp"
fi
_def_version="10"
_cqueuemode="${_def_cqueuemode}" # changed later if needed
# check owner and mode of real sendmail binary
_owner=$(stat -qf"${_owner_fmt}" /usr/libexec/sendmail/sendmail)
if [ "${_owner}" != "${_def_owner}" ]; then
warn "${name} /usr/libexec/sendmail/sendmail has " \
"wrong owner/mode"
fi
# check submit.cf existence
if checkyesno _suidroot; then
if [ -f /etc/mail/submit.cf ]; then
warn "${name} starting; " \
"sendmail is suid root, but submit.cf exists"
else
warn "${name} not started; no need for ${name} " \
"service when sendmail is suid root"
return 1
fi
else
if [ ! -f /etc/mail/submit.cf ]; then
warn "${name} not started; /etc/mail/submit.cf missing"
return 1
else
_cqueue=$(sed -n 's/^O *QueueDirectory=\(.*\)/\1/p' \
/etc/mail/submit.cf)
_cqueuemode=$(stat -qf"%p %Su %Sg" "${_cqueue}")
fi
fi
# check .cf file version
_cfversion=$(sed -n 's/^V *\([0-9]*\).*/\1/p' /etc/mail/submit.cf)
if [ "${_cfversion}" != "${_def_version}" ]; then
warn "${name} not started; " \
"/etc/mail/submit.cf has wrong version " \
"(have ${_cfversion}, should be ${_def_version})"
return 1
fi
# look at clientmqueue's owner, group, and mode
if [ "${_cqueuemode}" != "${_def_cqueuemode}" ]; then
warn "${name} not started;" \
"queue ${_cqueue} has wrong owner/mode"
return 1
fi
}
load_rc_config $name
run_rc_command "$1"