aboutsummaryrefslogtreecommitdiff
path: root/lib/hdb/db.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/hdb/db.c')
-rw-r--r--lib/hdb/db.c43
1 files changed, 27 insertions, 16 deletions
diff --git a/lib/hdb/db.c b/lib/hdb/db.c
index c6cf58813814..4cee8d0097a1 100644
--- a/lib/hdb/db.c
+++ b/lib/hdb/db.c
@@ -44,6 +44,7 @@
typedef struct {
HDB hdb; /* generic members */
int lock_fd; /* DB-specific */
+ int do_sync; /* DB-specific */
} DB1_HDB;
static krb5_error_code
@@ -77,6 +78,25 @@ DB_destroy(krb5_context context, HDB *db)
}
static krb5_error_code
+DB_set_sync(krb5_context context, HDB *db, int on)
+{
+ DB1_HDB *db1 = (DB1_HDB *)db;
+ DB *d = (DB*)db->hdb_db;
+ krb5_error_code ret = 0;
+
+ db1->do_sync = on;
+ if (on) {
+ ret = (*d->sync)(d, 0);
+ if (ret == -1) {
+ ret = errno;
+ krb5_set_error_message(context, ret, "Database %s put sync error: %s",
+ db->hdb_name, strerror(ret));
+ }
+ }
+ return ret;
+}
+
+static krb5_error_code
DB_lock(krb5_context context, HDB *db, int operation)
{
@@ -203,6 +223,7 @@ static krb5_error_code
DB__put(krb5_context context, HDB *db, int replace,
krb5_data key, krb5_data value)
{
+ DB1_HDB *db1 = (DB1_HDB *)db;
DB *d = (DB*)db->hdb_db;
DBT k, v;
int code;
@@ -222,19 +243,14 @@ DB__put(krb5_context context, HDB *db, int replace,
if(code == 1) {
return HDB_ERR_EXISTS;
}
- code = (*d->sync)(d, 0);
- if (code == -1) {
- code = errno;
- krb5_set_error_message(context, code, "Database %s put sync error: %s",
- db->hdb_name, strerror(code));
- return code;
- }
- return 0;
+
+ return db->hdb_set_sync(context, db, db1->do_sync);
}
static krb5_error_code
DB__del(krb5_context context, HDB *db, krb5_data key)
{
+ DB1_HDB *db1 = (DB1_HDB *)db;
DB *d = (DB*)db->hdb_db;
DBT k;
krb5_error_code code;
@@ -250,14 +266,7 @@ DB__del(krb5_context context, HDB *db, krb5_data key)
db->hdb_name, strerror(code));
return code;
}
- code = (*d->sync)(d, 0);
- if (code == -1) {
- code = errno;
- krb5_set_error_message(context, code, "Database %s del sync error: %s",
- db->hdb_name, strerror(code));
- return code;
- }
- return 0;
+ return db->hdb_set_sync(context, db, db1->do_sync);
}
static DB *
@@ -371,8 +380,10 @@ hdb_db1_create(krb5_context context, HDB **db,
(*db)->hdb__put = DB__put;
(*db)->hdb__del = DB__del;
(*db)->hdb_destroy = DB_destroy;
+ (*db)->hdb_set_sync = DB_set_sync;
(*db1)->lock_fd = -1;
+ (*db1)->do_sync = 1;
return 0;
}