NetBSD/etc/rc.d/smmsp
atatat a7627e5f06 Reorganize/clarify the configuration checks (and subsequent messages)
that might block startup, and be more permissive in general about
allowing the daemons to start.

Add some descriptive comments to the top of the smmsp script that
describe the purpose of the process.
2003-04-02 18:00:13 +00:00

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"