git: d36998a6cc68 - stable/13 - rc.d/sendmail: Return non-zero if the daemon fails to start or is not running

From: Mateusz Piotrowski <0mp_at_FreeBSD.org>
Date: Mon, 04 Nov 2024 14:56:01 UTC
The branch stable/13 has been updated by 0mp:

URL: https://cgit.FreeBSD.org/src/commit/?id=d36998a6cc6853e54066d476d146e1b510976418

commit d36998a6cc6853e54066d476d146e1b510976418
Author:     Mateusz Piotrowski <0mp@FreeBSD.org>
AuthorDate: 2024-10-21 10:10:52 +0000
Commit:     Mateusz Piotrowski <0mp@FreeBSD.org>
CommitDate: 2024-11-04 14:55:55 +0000

    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>
    
    (cherry picked from commit d2e7bb630b83848a774d8213014a9e0747775019)
---
 libexec/rc/rc.d/sendmail | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/libexec/rc/rc.d/sendmail b/libexec/rc/rc.d/sendmail
index ea97503890f9..28d6818eabac 100755
--- a/libexec/rc/rc.d/sendmail
+++ b/libexec/rc/rc.d/sendmail
@@ -204,6 +204,7 @@ sendmail_precmd()
 }
 
 run_rc_command "$1"
+_ret=$?
 
 required_files=
 
@@ -212,6 +213,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
@@ -219,6 +221,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"
@@ -227,3 +230,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")