diff options
author | Greg Hudson <ghudson@mit.edu> | 2022-12-12 14:36:47 -0500 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2023-01-04 13:52:02 -0500 |
commit | 650fe8423a47c52b4b347b47cb41259e04e90092 (patch) | |
tree | 91fb27034b70394ed620549b91e89763ab8a25d5 | |
parent | d0ea8de883a2487dfde8bfa377b64df1194ed5cb (diff) | |
download | krb5-650fe8423a47c52b4b347b47cb41259e04e90092.zip krb5-650fe8423a47c52b4b347b47cb41259e04e90092.tar.gz krb5-650fe8423a47c52b4b347b47cb41259e04e90092.tar.bz2 |
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)
-rw-r--r-- | src/plugins/kdb/db2/adb_openclose.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/src/plugins/kdb/db2/adb_openclose.c b/src/plugins/kdb/db2/adb_openclose.c index 7db30a3..9a506e9 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; |