From: Greg Hudson Date: Mon, 12 Dec 2022 19:36:47 +0000 (-0500) Subject: Fix policy DB fallback error handling X-Git-Tag: krb5-1.21-beta1~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=650fe8423a47c52b4b347b47cb41259e04e90092;p=thirdparty%2Fkrb5.git Fix policy DB fallback error handling In osa_adb_open_and_lock(), if the btree dbopen() call returns EINVAL or EFTYPE and the fallback hash dbopen() call also returns an error, release the lock and return an error instead of returning success with a null database. ticket: 9082 (new) --- diff --git a/src/plugins/kdb/db2/adb_openclose.c b/src/plugins/kdb/db2/adb_openclose.c index 7db30a33b0..9a506e9d44 100644 --- a/src/plugins/kdb/db2/adb_openclose.c +++ b/src/plugins/kdb/db2/adb_openclose.c @@ -327,18 +327,13 @@ osa_adb_open_and_lock(osa_adb_princ_t db, int locktype) goto open_ok; db->db = dbopen(db->filename, O_RDWR, 0600, DB_BTREE, &db->btinfo); - if (db->db != NULL) - goto open_ok; - if (IS_EFTYPE(errno)) { + if (db->db == NULL && IS_EFTYPE(errno)) db->db = dbopen(db->filename, O_RDWR, 0600, DB_HASH, &db->info); - if (db->db != NULL) - goto open_ok; - } else { - (void) osa_adb_release_lock(db); - if (errno == EINVAL) - return OSA_ADB_BAD_DB; - return errno; + if (db->db == NULL) { + (void)osa_adb_release_lock(db); + return (errno == EINVAL) ? OSA_ADB_BAD_DB : errno; } + open_ok: db->opencnt++; return OSA_ADB_OK;