[31622] in CVS-changelog-for-Kerberos-V5

home help back first fref pref prev next nref lref last post

krb5 commit [krb5-1.22]: Shut down kpropd gracefully when in iprop

daemon@ATHENA.MIT.EDU (ghudson@mit.edu)
Tue Nov 3 19:20:48 2026

From: ghudson@mit.edu
To: cvs-krb5@mit.edu
Message-Id: <20261104001839.1D265105851@krbdev.mit.edu>
Date: Tue,  3 Nov 2026 19:18:39 -0500 (EST)
MIME-Version: 1.0
Reply-To: krbdev@mit.edu
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: cvs-krb5-bounces@mit.edu

https://github.com/krb5/krb5/commit/962060e4b8a2df48aa6bbc84aaf90c529c3a8ce0
commit 962060e4b8a2df48aa6bbc84aaf90c529c3a8ce0
Author: Zoltan Borbely <Zoltan.Borbely@morganstanley.com>
Date:   Tue Feb 10 19:22:36 2026 +0100

    Shut down kpropd gracefully when in iprop mode
    
    When kpropd receives a termination signal in iprop mode, defer exit
    until the next iteration of the iprop loop, to help avoid corruption
    or desynchronized state.
    
    [ghudson@mit.edu: rewrote commit message; integrated with existing
    signal handler]
    
    (cherry picked from commit 5d9782753e2e675a98d1ac139cc085dd760a77d5)
    
    ticket: 9281
    version_fixed: 1.22.3

 src/kprop/kpropd.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/kprop/kpropd.c b/src/kprop/kpropd.c
index 4b3675264..213613b9e 100644
--- a/src/kprop/kpropd.c
+++ b/src/kprop/kpropd.c
@@ -142,6 +142,8 @@ static const char *port = KPROP_SERVICE;
 static char **db_args = NULL;
 static size_t db_args_size = 0;
 
+static volatile sig_atomic_t signal_requests_exit = 0;
+
 static void parse_args(int argc, char **argv);
 static void do_standalone(void);
 static void doit(int fd);
@@ -233,6 +235,12 @@ kill_do_standalone(int sig)
                     (int)fullprop_child);
         }
         kill(fullprop_child, sig);
+        if (sig == SIGINT || sig == SIGTERM) {
+            /* Defer termination to avoid exiting in the middle of a critical
+             * DB or ulog section. */
+            signal_requests_exit = 1;
+            return;
+        }
     }
     /* Make sure our exit status code reflects our having been signaled */
     signal_wrapper(sig, SIG_DFL);
@@ -757,6 +765,9 @@ reinit:
         incr_ret = NULL;
         full_ret = NULL;
 
+        if (signal_requests_exit)
+            goto done;
+
         /*
          * Get the most recent ulog entry sno + ts, which
          * we package in the request to the primary KDC
@@ -999,7 +1010,7 @@ done:
     ulog_fini(kpropd_context);
     krb5_free_context(kpropd_context);
 
-    return (runonce == 1) ? 0 : 1;
+    return (runonce || signal_requests_exit) ? 0 : 1;
 }
 
 
_______________________________________________
cvs-krb5 mailing list
cvs-krb5@mit.edu
https://mailman.mit.edu/mailman/listinfo/cvs-krb5

home help back first fref pref prev next nref lref last post