aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Piotrowski <0mp@FreeBSD.org>2024-10-21 10:10:52 +0000
committerMateusz Piotrowski <0mp@FreeBSD.org>2024-10-21 19:20:36 +0000
commitd2e7bb630b83848a774d8213014a9e0747775019 (patch)
tree95ebef00409cc2af56cca8d43658cb8edbc762d3
parent0e3a211961014e0991a54f583b2866ac19ed0e76 (diff)
downloadsrc-d2e7bb630b83848a774d8213014a9e0747775019.tar.gz
src-d2e7bb630b83848a774d8213014a9e0747775019.zip
rc.d/sendmail: Return non-zero if the daemon fails to start or is not running
If you have a mail server that is running sendmail daemon (sendmail_enable=YES) and sendmail queue runner (sendmail_msp_queue=YES) and the sendmail daemon dies, /etc/rc.d/sendmail status does see the daemon is not running but returns 0 as the exit code. This prevents other programs (like puppet) from restarting sendmail to fix the issue. Make sure that the exit code is propagated towards the end of the script if any of the sendmail services fail. This patch does not call exit directly but instead just sets the exit status code by calling exit in a subshell. This way we do not exit the current shell in case the service script is sourced (e.g., when rc_fast_and_loose is active). PR: 223132 MFC after: 2 weeks Reported by: pirzyk Discussed with: jilles, eugen Reviewed by: christos, gshapiro (previous version), markj Approved by: christos (mentor), markj (mentor) Differential Revision: https://reviews.freebsd.org/D46862 Co-authored-by: Jim Pirzyk <pirzyk@FreeBSD.org>
-rwxr-xr-xlibexec/rc/rc.d/sendmail6
1 files changed, 6 insertions, 0 deletions
diff --git a/libexec/rc/rc.d/sendmail b/libexec/rc/rc.d/sendmail
index af84c6d6b548..5a780e5b15a1 100755
--- a/libexec/rc/rc.d/sendmail
+++ b/libexec/rc/rc.d/sendmail
@@ -206,6 +206,7 @@ sendmail_precmd()
}
run_rc_command "$1"
+_ret=$?
required_files=
@@ -214,6 +215,7 @@ if checkyesno sendmail_submit_enable; then
rcvar="sendmail_submit_enable"
_rc_restart_done=false
run_rc_command "$1"
+ _ret=$(( _ret > $? ? _ret : $? ))
fi
if checkyesno sendmail_outbound_enable; then
@@ -221,6 +223,7 @@ if checkyesno sendmail_outbound_enable; then
rcvar="sendmail_outbound_enable"
_rc_restart_done=false
run_rc_command "$1"
+ _ret=$(( _ret > $? ? _ret : $? ))
fi
name="sendmail_msp_queue"
@@ -229,3 +232,6 @@ 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")