update for multi-database code
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@7335 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
21
kdc/main.c
21
kdc/main.c
@@ -59,9 +59,24 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
configure(argc, argv);
|
configure(argc, argv);
|
||||||
|
|
||||||
ret = hdb_create(context, &db, database);
|
if(databases == NULL) {
|
||||||
if(ret)
|
db = malloc(sizeof(*db));
|
||||||
krb5_err(context, 1, ret, "hdb_create %s", database);
|
num_db = 1;
|
||||||
|
ret = hdb_create(context, &db[0], NULL);
|
||||||
|
if(ret)
|
||||||
|
krb5_err(context, 1, ret, "hdb_create %s", HDB_DEFAULT_DB);
|
||||||
|
} else {
|
||||||
|
char **d;
|
||||||
|
int i;
|
||||||
|
/* count databases */
|
||||||
|
for(d = databases, i = 0; *d; d++, i++);
|
||||||
|
db = malloc(i * sizeof(*db));
|
||||||
|
for(d = databases, num_db = 0; *d; d++) {
|
||||||
|
ret = hdb_create(context, &db[num_db++], *d);
|
||||||
|
if(ret)
|
||||||
|
krb5_err(context, 1, ret, "hdb_create %s", *d);
|
||||||
|
}
|
||||||
|
}
|
||||||
ret = hdb_set_master_keyfile(context, db, keyfile);
|
ret = hdb_set_master_keyfile(context, db, keyfile);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err(context, 1, ret, "hdb_set_master_keyfile");
|
krb5_err(context, 1, ret, "hdb_set_master_keyfile");
|
||||||
|
28
kdc/misc.c
28
kdc/misc.c
@@ -47,20 +47,22 @@ db_fetch(krb5_principal principal)
|
|||||||
{
|
{
|
||||||
hdb_entry *ent;
|
hdb_entry *ent;
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
|
int i;
|
||||||
ret = db->open(context, db, O_RDONLY, 0);
|
|
||||||
if (ret) {
|
|
||||||
kdc_log(0, "Failed to open database: %s",
|
|
||||||
krb5_get_err_text(context, ret));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
ALLOC(ent);
|
ALLOC(ent);
|
||||||
ent->principal = principal;
|
ent->principal = principal;
|
||||||
ret = db->fetch(context, db, HDB_F_DECRYPT, ent);
|
|
||||||
db->close(context, db);
|
for(i = 0; i < num_db; i++) {
|
||||||
if(ret){
|
ret = db[i]->open(context, db[i], O_RDONLY, 0);
|
||||||
free(ent);
|
if (ret) {
|
||||||
return NULL;
|
kdc_log(0, "Failed to open database: %s",
|
||||||
|
krb5_get_err_text(context, ret));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ret = db[i]->fetch(context, db[i], HDB_F_DECRYPT, ent);
|
||||||
|
db[i]->close(context, db[i]);
|
||||||
|
if(ret == 0)
|
||||||
|
return ent;
|
||||||
}
|
}
|
||||||
return ent;
|
free(ent);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user