diff --git a/lib/hdb/hdb.c b/lib/hdb/hdb.c index 80b69e33e..b2304c56f 100644 --- a/lib/hdb/hdb.c +++ b/lib/hdb/hdb.c @@ -174,9 +174,14 @@ hdb_check_db_format(krb5_context context, HDB *db) unsigned ver; int foo; + ret = db->hdb_lock(context, db, HDB_RLOCK); + if (ret) + return ret; + tag.data = HDB_DB_FORMAT_ENTRY; tag.length = strlen(tag.data); ret = (*db->hdb__get)(context, db, tag, &version); + db->hdb_unlock(context, db); if(ret) return ret; foo = sscanf(version.data, "%u", &ver); @@ -200,12 +205,19 @@ hdb_init_db(krb5_context context, HDB *db) if(ret != HDB_ERR_NOENTRY) return ret; + ret = db->hdb_lock(context, db, HDB_WLOCK); + if (ret) + return ret; + tag.data = HDB_DB_FORMAT_ENTRY; tag.length = strlen(tag.data); snprintf(ver, sizeof(ver), "%u", HDB_DB_FORMAT); version.data = ver; version.length = strlen(version.data) + 1; /* zero terminated */ ret = (*db->hdb__put)(context, db, 0, tag, version); + ret = db->hdb_unlock(context, db); + if (ret) + return ret; return ret; }