NetBSD/etc/rc.d/sendmail
atatat 9dc7b7c964 Tweak postinstall to check for (and help out on) the upgrade to
sendmail 8.12.8.  Some of the same machinery (in shorter form) is in
the additions to rc.d/sendmail.  Also, add a smmsp startup script for
the sendmail client queue runner.
2003-03-24 15:19:27 +00:00

112 lines
2.9 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: sendmail,v 1.15 2003/03/24 15:19:28 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 "${name} not started; binary has wrong owner/mode"
return 1
fi
# check .cf file version
if [ "${_cfversion}" != "${_def_version}" ]; then
warn "${name} not started; ${name}.cf has wrong version " \
"(have ${_cfversion}, should be ${_def_version})"
return 1
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"
return 1
fi
else
if [ ! -f "/etc/mail/submit.cf" ]; then
warn "${name} is sgid smmsp, but submit.cf is missing"
return 1
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"
return 1
fi
}
load_rc_config $name
run_rc_command "$1"