X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb_dynamic.c;h=5bc539ce25c0ee539b04d1ec1d0264c7eb80e966;hb=33e8f4970e2a6cfb98820e32b8a125061c2013d9;hp=32695c389f22de5fe3e07f7afdd443e591800bfa;hpb=8e0907be1d73011075a99a0c029c56664e12843e;p=onak.git diff --git a/keydb_dynamic.c b/keydb_dynamic.c index 32695c3..5bc539c 100644 --- a/keydb_dynamic.c +++ b/keydb_dynamic.c @@ -66,14 +66,14 @@ static int dynamic_fetch_key_id(struct onak_dbctx *dbctx, uint64_t keyid, } static int dynamic_fetch_key_fp(struct onak_dbctx *dbctx, - uint8_t *fp, size_t fpsize, + struct openpgp_fingerprint *fingerprint, struct openpgp_publickey **publickey, bool intrans) { struct onak_dynamic_dbctx *privctx = (struct onak_dynamic_dbctx *) dbctx->priv; return privctx->loadeddbctx->fetch_key_fp(privctx->loadeddbctx, - fp, fpsize, publickey, intrans); + fingerprint, publickey, intrans); } static int dynamic_fetch_key_text(struct onak_dbctx *dbctx, @@ -206,20 +206,28 @@ static void dynamic_cleanupdb(struct onak_dbctx *dbctx) } } -struct onak_dbctx *keydb_dynamic_init(bool readonly) +struct onak_dbctx *keydb_dynamic_init(struct onak_db_config *dbcfg, + bool readonly) { struct onak_dbctx *dbctx; char *soname; char *initname; - struct onak_dbctx *(*backend_init)(bool); + struct onak_dbctx *(*backend_init)(struct onak_db_config *, bool); struct onak_dynamic_dbctx *privctx; + if (dbcfg == NULL) { + logthing(LOGTHING_CRITICAL, + "No backend database configuration supplied."); + return NULL; + } + dbctx = malloc(sizeof(struct onak_dbctx)); if (dbctx == NULL) { return NULL; } + dbctx->config = dbcfg; dbctx->priv = privctx = malloc(sizeof(struct onak_dynamic_dbctx)); if (dbctx->priv == NULL) { free(dbctx); @@ -237,21 +245,21 @@ struct onak_dbctx *keydb_dynamic_init(bool readonly) } if (config.backends_dir == NULL) { - soname = malloc(strlen(config.db_backend) + soname = malloc(strlen(dbcfg->type) + strlen("./libkeydb_") + strlen(".so") + 1); - sprintf(soname, "./libkeydb_%s.so", config.db_backend); + sprintf(soname, "./libkeydb_%s.so", dbcfg->type); } else { - soname = malloc(strlen(config.db_backend) + soname = malloc(strlen(dbcfg->type) + strlen("/libkeydb_") + strlen(".so") + strlen(config.backends_dir) + 1); sprintf(soname, "%s/libkeydb_%s.so", config.backends_dir, - config.db_backend); + dbcfg->type); } logthing(LOGTHING_INFO, "Loading dynamic backend: %s", soname); @@ -270,7 +278,7 @@ struct onak_dbctx *keydb_dynamic_init(bool readonly) + strlen("keydb_") + strlen("_init") + 1); - sprintf(initname, "keydb_%s_init", config.db_backend); + sprintf(initname, "keydb_%s_init", dbcfg->type); *(void **) (&backend_init) = dlsym(privctx->backend_handle, initname); free(initname); @@ -286,7 +294,7 @@ struct onak_dbctx *keydb_dynamic_init(bool readonly) free(soname); soname = NULL; - privctx->loadeddbctx = backend_init(readonly); + privctx->loadeddbctx = backend_init(dbcfg, readonly); if (privctx->loadeddbctx != NULL) { dbctx->cleanupdb = dynamic_cleanupdb;