X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb_dynamic.c;h=cf9d87fa030af270ae48bacfa154e139c6a7577a;hb=3886942162fd8193d8a804a685a3f96a65b9712c;hp=040a045f67cf388038cbad5c4a4c574e836a7016;hpb=2458360e75aa46091f60c16e041c07bffe2edefb;p=onak.git diff --git a/keydb_dynamic.c b/keydb_dynamic.c index 040a045..cf9d87f 100644 --- a/keydb_dynamic.c +++ b/keydb_dynamic.c @@ -13,8 +13,7 @@ * more details. * * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * this program. If not, see . */ #include @@ -109,24 +108,27 @@ static int dynamic_store_key(struct onak_dbctx *dbctx, publickey, intrans, update); } -static int dynamic_delete_key(struct onak_dbctx *dbctx, uint64_t keyid, +static int dynamic_delete_key(struct onak_dbctx *dbctx, + struct openpgp_fingerprint *fp, bool intrans) { struct onak_dynamic_dbctx *privctx = (struct onak_dynamic_dbctx *) dbctx->priv; return privctx->loadeddbctx->delete_key(privctx->loadeddbctx, - keyid, intrans); + fp, intrans); } static int dynamic_update_keys(struct onak_dbctx *dbctx, - struct openpgp_publickey **keys, bool sendsync) + struct openpgp_publickey **keys, + struct keyarray *blacklist, + bool sendsync) { struct onak_dynamic_dbctx *privctx = (struct onak_dynamic_dbctx *) dbctx->priv; return privctx->loadeddbctx->update_keys(privctx->loadeddbctx, - keys, sendsync); + keys, blacklist, sendsync); } static struct ll *dynamic_getkeysigs(struct onak_dbctx *dbctx, @@ -159,15 +161,6 @@ static char *dynamic_keyid2uid(struct onak_dbctx *dbctx, keyid); } -static uint64_t dynamic_getfullkeyid(struct onak_dbctx *dbctx, - uint64_t keyid) -{ - struct onak_dynamic_dbctx *privctx = - (struct onak_dynamic_dbctx *) dbctx->priv; - - return privctx->loadeddbctx->getfullkeyid(privctx->loadeddbctx, keyid); -} - static int dynamic_iterate_keys(struct onak_dbctx *dbctx, void (*iterfunc)(void *ctx, struct openpgp_publickey *key), void *ctx) @@ -214,6 +207,13 @@ struct onak_dbctx *keydb_dynamic_init(struct onak_db_config *dbcfg, char *initname; struct onak_dbctx *(*backend_init)(struct onak_db_config *, bool); struct onak_dynamic_dbctx *privctx; + char *type; + + if (dbcfg == NULL) { + logthing(LOGTHING_CRITICAL, + "No backend database configuration supplied."); + return NULL; + } dbctx = malloc(sizeof(struct onak_dbctx)); @@ -228,9 +228,9 @@ struct onak_dbctx *keydb_dynamic_init(struct onak_db_config *dbcfg, return (NULL); } + type = dbcfg->type; if (config.use_keyd) { - free(config.db_backend); - config.db_backend = strdup("keyd"); + type = "keyd"; } if (!config.db_backend) { @@ -239,21 +239,21 @@ struct onak_dbctx *keydb_dynamic_init(struct onak_db_config *dbcfg, } if (config.backends_dir == NULL) { - soname = malloc(strlen(dbcfg->type) + soname = malloc(strlen(type) + strlen("./libkeydb_") + strlen(".so") + 1); - sprintf(soname, "./libkeydb_%s.so", dbcfg->type); + sprintf(soname, "./libkeydb_%s.so", type); } else { - soname = malloc(strlen(dbcfg->type) + soname = malloc(strlen(type) + strlen("/libkeydb_") + strlen(".so") + strlen(config.backends_dir) + 1); sprintf(soname, "%s/libkeydb_%s.so", config.backends_dir, - dbcfg->type); + type); } logthing(LOGTHING_INFO, "Loading dynamic backend: %s", soname); @@ -272,7 +272,7 @@ struct onak_dbctx *keydb_dynamic_init(struct onak_db_config *dbcfg, + strlen("keydb_") + strlen("_init") + 1); - sprintf(initname, "keydb_%s_init", dbcfg->type); + sprintf(initname, "keydb_%s_init", type); *(void **) (&backend_init) = dlsym(privctx->backend_handle, initname); free(initname); @@ -285,11 +285,20 @@ struct onak_dbctx *keydb_dynamic_init(struct onak_db_config *dbcfg, soname = NULL; exit(EXIT_FAILURE); } - free(soname); - soname = NULL; privctx->loadeddbctx = backend_init(dbcfg, readonly); + if (privctx->loadeddbctx == NULL) { + logthing(LOGTHING_CRITICAL, + "Failed to initialise dynamic backend: %s", + soname); + free(soname); + soname = NULL; + exit(EXIT_FAILURE); + } + free(soname); + soname = NULL; + if (privctx->loadeddbctx != NULL) { dbctx->cleanupdb = dynamic_cleanupdb; dbctx->starttrans = dynamic_starttrans; @@ -304,7 +313,6 @@ struct onak_dbctx *keydb_dynamic_init(struct onak_db_config *dbcfg, dbctx->getkeysigs = dynamic_getkeysigs; dbctx->cached_getkeysigs = dynamic_cached_getkeysigs; dbctx->keyid2uid = dynamic_keyid2uid; - dbctx->getfullkeyid = dynamic_getfullkeyid; dbctx->iterate_keys = dynamic_iterate_keys; }