From 593cda47a5e8d759fd8908683655652dcd5ef427 Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Thu, 16 Oct 1997 04:13:04 +0000 Subject: [PATCH] implement new interface git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@3626 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/hdb/db.c | 36 +++++++++++++++++++++++++++--------- lib/hdb/ndbm.c | 31 ++++++++++++++++++++++++------- 2 files changed, 51 insertions(+), 16 deletions(-) diff --git a/lib/hdb/db.c b/lib/hdb/db.c index 4098066ba..7ce09a5a3 100644 --- a/lib/hdb/db.c +++ b/lib/hdb/db.c @@ -47,6 +47,12 @@ DB_close(krb5_context context, HDB *db) { DB *d = (DB*)db->db; d->close(d); + return 0; +} + +static krb5_error_code +DB_destroy(krb5_context context, HDB *db) +{ free(db->name); free(db); return 0; @@ -250,20 +256,32 @@ DB__del(krb5_context context, HDB *db, krb5_data key) return 0; } -krb5_error_code -hdb_db_open(krb5_context context, HDB **db, - const char *filename, int flags, mode_t mode) +static krb5_error_code +DB_open(krb5_context context, HDB *db, int flags, mode_t mode) { - DB *d; char *fn; - asprintf(&fn, "%s.db", filename); - d = dbopen(fn, flags, mode, DB_BTREE, NULL); + + asprintf(&fn, "%s.db", db->name); + db->db = dbopen(fn, flags, mode, DB_BTREE, NULL); free(fn); - if(d == NULL) + if(db->db == NULL) return errno; + return 0; +} + +krb5_error_code +hdb_db_create(krb5_context context, HDB **db, + const char *filename) +{ *db = malloc(sizeof(**db)); - (*db)->db = d; + if (*db == NULL) + return ENOMEM; + + (*db)->db = NULL; (*db)->name = strdup(filename); + (*db)->master_key_set = 0; + (*db)->openp = 0; + (*db)->open = DB_open; (*db)->close = DB_close; (*db)->fetch = _hdb_fetch; (*db)->store = _hdb_store; @@ -276,8 +294,8 @@ hdb_db_open(krb5_context context, HDB **db, (*db)->_get = DB__get; (*db)->_put = DB__put; (*db)->_del = DB__del; + (*db)->destroy = DB_destroy; return 0; } - #endif diff --git a/lib/hdb/ndbm.c b/lib/hdb/ndbm.c index e220733c8..da408310d 100644 --- a/lib/hdb/ndbm.c +++ b/lib/hdb/ndbm.c @@ -47,6 +47,12 @@ NDBM_close(krb5_context context, HDB *db) { DBM *d = (DBM*)db->db; dbm_close(d); + return 0; +} + +static krb5_error_code +NDBM_destroy(krb5_context context, HDB *db) +{ free(db->name); free(db); return 0; @@ -209,18 +215,28 @@ NDBM__del(krb5_context context, HDB *db, krb5_data key) return 0; } +static krb5_error_code +NDBM_open(krb5_context context, HDB *db, int flags, mode_t mode) +{ + db->db = dbm_open((char*)db->name, flags, mode); + if(db->db == NULL) + return errno; + return 0; +} krb5_error_code -hdb_ndbm_open(krb5_context context, HDB **db, - const char *filename, int flags, mode_t mode) +hdb_ndbm_create(krb5_context context, HDB **db, + const char *filename) { - DBM *d; - d = dbm_open((char*)filename, flags, mode); - if(d == NULL) - return errno; *db = malloc(sizeof(**db)); - (*db)->db = d; + if (*db == NULL) + return ENOMEM; + + (*db)->db = NULL; (*db)->name = strdup(filename); + (*db)->master_key_set = 0; + (*db)->openp = 0; + (*db)->open = NDBM_open; (*db)->close = NDBM_close; (*db)->fetch = _hdb_fetch; (*db)->store = _hdb_store; @@ -233,6 +249,7 @@ hdb_ndbm_open(krb5_context context, HDB **db, (*db)->_get = NDBM__get; (*db)->_put = NDBM__put; (*db)->_del = NDBM__del; + (*db)->destroy = NDBM_destroy; return 0; }