Lines Matching full:db

14 #include        <db.h>
25 DB *db; in osa_adb_create_db() local
36 db = dbopen(filename, O_RDWR | O_CREAT | O_EXCL, 0600, DB_BTREE, &btinfo); in osa_adb_create_db()
37 if (db == NULL) in osa_adb_create_db()
39 if (db->close(db) < 0) in osa_adb_create_db()
42 /* only create the lock file if we successfully created the db */ in osa_adb_create_db()
65 osa_adb_db_t db; in osa_adb_init_db() local
73 db = (osa_adb_princ_t) malloc(sizeof(osa_adb_db_ent)); in osa_adb_init_db()
74 if (db == NULL) in osa_adb_init_db()
77 memset(db, 0, sizeof(*db)); in osa_adb_init_db()
78 db->info.hash = NULL; in osa_adb_init_db()
79 db->info.bsize = 256; in osa_adb_init_db()
80 db->info.ffactor = 8; in osa_adb_init_db()
81 db->info.nelem = 25000; in osa_adb_init_db()
82 db->info.lorder = 0; in osa_adb_init_db()
84 db->btinfo.flags = 0; in osa_adb_init_db()
85 db->btinfo.cachesize = 0; in osa_adb_init_db()
86 db->btinfo.psize = 4096; in osa_adb_init_db()
87 db->btinfo.lorder = 0; in osa_adb_init_db()
88 db->btinfo.minkeypage = 0; in osa_adb_init_db()
89 db->btinfo.compare = NULL; in osa_adb_init_db()
90 db->btinfo.prefix = NULL; in osa_adb_init_db()
130 free(db); in osa_adb_init_db()
137 free(db); in osa_adb_init_db()
147 free(db); in osa_adb_init_db()
162 free(db); in osa_adb_init_db()
171 db->lock = &lockp->lockinfo; in osa_adb_init_db()
172 db->lock->refcnt++; in osa_adb_init_db()
174 db->opencnt = 0; in osa_adb_init_db()
175 db->filename = strdup(filename); in osa_adb_init_db()
176 db->magic = magic; in osa_adb_init_db()
178 *dbp = db; in osa_adb_init_db()
184 osa_adb_fini_db(osa_adb_db_t db, int magic) in osa_adb_fini_db() argument
186 if (db->magic != magic) in osa_adb_fini_db()
188 if (db->lock->refcnt == 0) { in osa_adb_fini_db()
192 db->lock->refcnt--; in osa_adb_fini_db()
195 if (db->lock->refcnt == 0) { in osa_adb_fini_db()
197 * Don't free db->lock->filename, it is used as a key to in osa_adb_fini_db()
203 if (db->lock->lockmode != KRB5_DB_LOCKMODE_PERMANENT) in osa_adb_fini_db()
204 (void) fclose(db->lock->lockfile); in osa_adb_fini_db()
205 db->lock->lockfile = NULL; in osa_adb_fini_db()
206 krb5_free_context(db->lock->context); in osa_adb_fini_db()
209 db->magic = 0; in osa_adb_fini_db()
210 free(db->filename); in osa_adb_fini_db()
211 free(db); in osa_adb_fini_db()
216 osa_adb_get_lock(osa_adb_db_t db, int mode) in osa_adb_get_lock() argument
220 if (db->lock->lockmode >= mode) { in osa_adb_get_lock()
222 db->lock->lockcnt++; in osa_adb_get_lock()
240 ret = krb5_lock_file(db->lock->context, fileno(db->lock->lockfile), in osa_adb_get_lock()
256 if (access(db->lock->filename, F_OK) < 0) { in osa_adb_get_lock()
257 (void) krb5_lock_file(db->lock->context, in osa_adb_get_lock()
258 fileno(db->lock->lockfile), in osa_adb_get_lock()
266 if (unlink(db->lock->filename) < 0) { in osa_adb_get_lock()
271 (void) krb5_lock_file(db->lock->context, in osa_adb_get_lock()
272 fileno(db->lock->lockfile), in osa_adb_get_lock()
276 /* look just like the db was already locked */ in osa_adb_get_lock()
282 (void) fclose(db->lock->lockfile); in osa_adb_get_lock()
285 db->lock->lockmode = mode; in osa_adb_get_lock()
286 db->lock->lockcnt++; in osa_adb_get_lock()
291 osa_adb_release_lock(osa_adb_db_t db) in osa_adb_release_lock() argument
295 if (!db->lock->lockcnt) /* lock already unlocked */ in osa_adb_release_lock()
298 if (--db->lock->lockcnt == 0) { in osa_adb_release_lock()
299 if (db->lock->lockmode == KRB5_DB_LOCKMODE_PERMANENT) { in osa_adb_release_lock()
301 fd = THREEPARAMOPEN(db->lock->filename,O_RDWR | O_CREAT | O_EXCL, in osa_adb_release_lock()
306 if ((db->lock->lockfile = fdopen(fd, "w+")) == NULL) in osa_adb_release_lock()
308 } else if ((ret = krb5_lock_file(db->lock->context, in osa_adb_release_lock()
309 fileno(db->lock->lockfile), in osa_adb_release_lock()
313 db->lock->lockmode = 0; in osa_adb_release_lock()
319 osa_adb_open_and_lock(osa_adb_princ_t db, int locktype) in osa_adb_open_and_lock() argument
323 ret = osa_adb_get_lock(db, locktype); in osa_adb_open_and_lock()
326 if (db->opencnt) in osa_adb_open_and_lock()
329 db->db = dbopen(db->filename, O_RDWR, 0600, DB_BTREE, &db->btinfo); in osa_adb_open_and_lock()
330 if (db->db == NULL && IS_EFTYPE(errno)) in osa_adb_open_and_lock()
331 db->db = dbopen(db->filename, O_RDWR, 0600, DB_HASH, &db->info); in osa_adb_open_and_lock()
332 if (db->db == NULL) { in osa_adb_open_and_lock()
333 (void)osa_adb_release_lock(db); in osa_adb_open_and_lock()
338 db->opencnt++; in osa_adb_open_and_lock()
343 osa_adb_close_and_unlock(osa_adb_princ_t db) in osa_adb_close_and_unlock() argument
345 if (--db->opencnt) in osa_adb_close_and_unlock()
346 return osa_adb_release_lock(db); in osa_adb_close_and_unlock()
347 if(db->db != NULL && db->db->close(db->db) == -1) { in osa_adb_close_and_unlock()
348 (void) osa_adb_release_lock(db); in osa_adb_close_and_unlock()
352 db->db = NULL; in osa_adb_close_and_unlock()
354 return(osa_adb_release_lock(db)); in osa_adb_close_and_unlock()