krb5 commit [krb5-1.12]: Check for unstable ulog in ulog_get_entries

Tom Yu tlyu at MIT.EDU
Thu Jun 26 16:06:35 EDT 2014


https://github.com/krb5/krb5/commit/ac93fc8f231f4dc152dcd24e7277dde12d595efe
commit ac93fc8f231f4dc152dcd24e7277dde12d595efe
Author: Greg Hudson <ghudson at mit.edu>
Date:   Sun Jan 26 17:23:53 2014 -0500

    Check for unstable ulog in ulog_get_entries
    
    If a process terminates in the middle of a logged database update, it
    will release its lock and leave the ulog in the KDB_UNSTABLE state.
    kadmind should notice this when it calls ulog_get_entries, but right
    now it only checks for the KDB_CORRUPT state (which is never set any
    more) and does not recover.  Check for any state other than KDB_STABLE
    and recover by resetting the ulog and forcing full resyncs to slaves.
    
    (cherry picked from commit 91ef7d4c3f892b99630422a71780788f2d1c04d7)
    
    ticket: 7853
    version_fixed: 1.12.2
    status: resolved

 src/lib/kdb/kdb_log.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/lib/kdb/kdb_log.c b/src/lib/kdb/kdb_log.c
index 21cb09d..71f0a33 100644
--- a/src/lib/kdb/kdb_log.c
+++ b/src/lib/kdb/kdb_log.c
@@ -561,12 +561,10 @@ ulog_get_entries(krb5_context context, kdb_last_t last,
     if (retval)
         return retval;
 
-    /* Check to make sure we don't have a corrupt ulog first. */
-    if (ulog->kdb_state == KDB_CORRUPT) {
-        ulog_handle->ret = UPDATE_ERROR;
-        (void)ulog_lock(context, KRB5_LOCKMODE_UNLOCK);
-        return KRB5_LOG_CORRUPT;
-    }
+    /* If another process terminated mid-update, reset the ulog and force full
+     * resyncs. */
+    if (ulog->kdb_state != KDB_STABLE)
+        ulog_reset(ulog);
 
     /*
      * We need to lock out other processes here, such as kadmin.local, since we


More information about the cvs-krb5 mailing list