NetBSD/etc/rc.d/sendmail
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

107 lines
2.9 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: sendmail,v 1.16 2003/04/02 18:00:13 atatat Exp $
#
# PROVIDE: mail
# REQUIRE: LOGIN
# we make mail start late, so that things like .forward's are not
# processed until the system is fully operational
. /etc/rc.subr
name="sendmail"
rcvar=$name
command="/usr/sbin/${name}"
pidfile="/var/run/${name}.pid"
required_files="/etc/mail/sendmail.cf"
start_precmd="sendmail_precmd"
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 sendmail && [ -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 access 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
if checkyesno sendmail_suidroot; then
_owner_fmt="%p %Su"
_def_owner="104555 root"
_sm_root="true"
else
_owner_fmt="%p %Su %Sg"
_def_owner="102555 root smmsp"
_sm_root="false"
fi
_def_version="10"
_def_cqueuemode="40770 smmsp smmsp"
_owner=$(stat -qf"${_owner_fmt}" /usr/libexec/sendmail/sendmail)
_cfversion=$(sed -n 's/^V *\([0-9]*\).*/\1/p' /etc/mail/sendmail.cf)
_cqueuemode="${_def_cqueuemode}" # changed later, if needed
# check owner and mode of real sendmail binary
if [ "${_owner}" != "${_def_owner}" ]; then
warn "/usr/libexec/sendmail/sendmail has wrong owner/mode"
fi
# check .cf file version
if [ "${_cfversion}" != "${_def_version}" ]; then
warn "${name}.cf has wrong version " \
"(have ${_cfversion}, should be ${_def_version})"
fi
# check submit.cf existence
if ${_sm_root}; then
if [ -f "/etc/mail/submit.cf" ]; then
warn "${name} is suid root, but submit.cf exists"
fi
else
if [ ! -f "/etc/mail/submit.cf" ]; then
warn "${name} is sgid smmsp, but submit.cf is missing"
else
_cqueue=$(awk 'match($0,"^O *QueueDirectory=") {
print(substr($0, RSTART+RLENGTH))
}' "/etc/mail/submit.cf")
_cqueuemode=$(stat -qf"%p %Su %Sg" "${_cqueue}")
fi
fi
# look at clientmqueue's owner, group, and mode
if [ "${_cqueuemode}" != "${_def_cqueuemode}" ]; then
warn "sendmail client queue ${_cqueue} has wrong owner/mode"
fi
}
load_rc_config $name
run_rc_command "$1"