rc.d/sendmail: Fix error with some configurations

The sendmail startup script can run 4 daemons: sendmail, sendmail_submit,
sendmail_outbound, and sendmail_msp_queue.  Of the first 3 at most one
can be enabled.  There's a run_rc_command call for each and the ones for
sendmail and sendmail_msp_queue run unconditionally.  For some rc
commands this triggers warnings or errors when sendmail_enable="NO" or
sendmail_msp_queue_enable="NO".  Since d2e7bb630b these errors are
propagated and the whole script fails.

Fix this by first determining which daemons are enabled, setting ${name}
and ${rcvar} accordingly, and then always calling run_rc_command
conditionally.

Also replace ${name}.cf with sendmail.cf because ${name} isn't always
sendmail.

PR:		282585
Reviewed by:	markj
Differential Revision:	https://reviews.freebsd.org/D47757
This commit is contained in:
Tijl Coosemans 2024-12-03 11:45:10 +01:00
parent 057db5b227
commit 6b17d944a1

View File

@ -42,11 +42,28 @@ esac
if checkyesno sendmail_enable; then
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
_sendmail_run=true
fi
# If sendmail_submit_enable=yes, don't need outbound daemon
if checkyesno sendmail_submit_enable; then
name="sendmail_submit"
rcvar="sendmail_submit_enable"
sendmail_outbound_enable="NO"
_sendmail_run=true
fi
if checkyesno sendmail_outbound_enable; then
name="sendmail_outbound"
rcvar="sendmail_outbound_enable"
_sendmail_run=true
fi
if checkyesno sendmail_msp_queue_enable; then
_sendmail_msp_queue_run=true
else
# Make sure run_rc_command is called at least once.
_sendmail_run=true
fi
sendmail_cert_create()
@ -166,8 +183,8 @@ 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
if checkyesno ${rcvar} && [ -f "/etc/sendmail.cf" ]; then
if ! cmp -s "/etc/mail/sendmail.cf" "/etc/sendmail.cf"; then
warn \
"${name} was not started; you have multiple copies of sendmail.cf."
return 1
@ -205,33 +222,19 @@ sendmail_precmd()
fi
}
run_rc_command "$1"
if ${_sendmail_run:-false}; then
run_rc_command "$1"
fi
_ret=$?
required_files=
if checkyesno sendmail_submit_enable; then
name="sendmail_submit"
rcvar="sendmail_submit_enable"
if ${_sendmail_msp_queue_run:-false}; then
name="sendmail_msp_queue"
rcvar="sendmail_msp_queue_enable"
pidfile="${sendmail_msp_queue_pidfile:-/var/spool/clientmqueue/sm-client.pid}"
required_files="/etc/mail/submit.cf"
_rc_restart_done=false
run_rc_command "$1"
_ret=$(( _ret > $? ? _ret : $? ))
fi
if checkyesno sendmail_outbound_enable; then
name="sendmail_outbound"
rcvar="sendmail_outbound_enable"
_rc_restart_done=false
run_rc_command "$1"
_ret=$(( _ret > $? ? _ret : $? ))
fi
name="sendmail_msp_queue"
rcvar="sendmail_msp_queue_enable"
pidfile="${sendmail_msp_queue_pidfile:-/var/spool/clientmqueue/sm-client.pid}"
required_files="/etc/mail/submit.cf"
_rc_restart_done=false
run_rc_command "$1"
_ret=$(( _ret > $? ? _ret : $? ))
(exit "$_ret")