diff options
| author | Cy Schubert <cy@FreeBSD.org> | 2022-03-28 17:02:13 +0000 |
|---|---|---|
| committer | Cy Schubert <cy@FreeBSD.org> | 2022-03-28 17:02:13 +0000 |
| commit | 49af073ed77202a54dfdd773cbcbbf7835c75baf (patch) | |
| tree | b180dbeab238a3d30b8d99d05c9cf0e30fbadd5a /lib/hdb/db3.c | |
| parent | d684f11da759490a8d98d7b790796106285f4084 (diff) | |
heimdal: Vendor import 7.7.0vendor/heimdal/7.7.0
Diffstat (limited to 'lib/hdb/db3.c')
| -rw-r--r-- | lib/hdb/db3.c | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/lib/hdb/db3.c b/lib/hdb/db3.c index cd2e33f067ad..0d41369d7101 100644 --- a/lib/hdb/db3.c +++ b/lib/hdb/db3.c @@ -54,6 +54,7 @@ typedef struct { HDB hdb; /* generic members */ int lock_fd; /* DB3-specific */ + int do_sync; /* DB3-specific */ } DB3_HDB; @@ -92,6 +93,32 @@ DB_destroy(krb5_context context, HDB *db) } static krb5_error_code +DB_set_sync(krb5_context context, HDB *db, int on) +{ + DB3_HDB *db3 = (DB3_HDB *)db; + DB *d = (DB*)db->hdb_db; + krb5_error_code ret = 0; + + db3->do_sync = on; + if (on) { + ret = (*d->sync)(d, 0); + if (ret) { + if (ret == EACCES || ret == ENOSPC || ret == EINVAL) { + krb5_set_error_message(context, ret, + "Database %s put sync error: %s", + db->hdb_name, strerror(ret)); + } else { + ret = HDB_ERR_UK_SERROR; + krb5_set_error_message(context, ret, + "Database %s put sync error: unknown (%d)", + db->hdb_name, ret); + } + } + } + return ret; +} + +static krb5_error_code DB_lock(krb5_context context, HDB *db, int operation) { @@ -220,6 +247,7 @@ static krb5_error_code DB__put(krb5_context context, HDB *db, int replace, krb5_data key, krb5_data value) { + DB3_HDB *db3 = (DB3_HDB *)db; DB *d = (DB*)db->hdb_db; DBT k, v; int code; @@ -261,26 +289,13 @@ DB__put(krb5_context context, HDB *db, int replace, } return code; } - code = (*d->sync)(d, 0); - if (code) { - if (code == EACCES || code == ENOSPC || code == EINVAL) { - krb5_set_error_message(context, code, - "Database %s put sync error: %s", - db->hdb_name, strerror(code)); - } else { - code = HDB_ERR_UK_SERROR; - krb5_set_error_message(context, code, - "Database %s put sync error: unknown (%d)", - db->hdb_name, code); - } - return code; - } - return 0; + return db->hdb_set_sync(context, db, db3->do_sync); } static krb5_error_code DB__del(krb5_context context, HDB *db, krb5_data key) { + DB3_HDB *db3 = (DB3_HDB *)db; DB *d = (DB*)db->hdb_db; DBT k; krb5_error_code code; @@ -304,21 +319,7 @@ DB__del(krb5_context context, HDB *db, krb5_data key) } return code; } - code = (*d->sync)(d, 0); - if (code) { - if (code == EACCES || code == ENOSPC || code == EINVAL) { - krb5_set_error_message(context, code, - "Database %s del sync error: %s", - db->hdb_name, strerror(code)); - } else { - code = HDB_ERR_UK_SERROR; - krb5_set_error_message(context, code, - "Database %s del sync error: unknown (%d)", - db->hdb_name, code); - } - return code; - } - return 0; + return db->hdb_set_sync(context, db, db3->do_sync); } #define RD_CACHE_SZ 0x8000 /* Minimal read cache size */ @@ -485,6 +486,7 @@ hdb_db3_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; (*db3)->lock_fd = -1; return 0; |
