* 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 <https://www.gnu.org/licenses/>.
*/
#include <dlfcn.h>
}
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,
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 updateonly,
+ bool sendsync)
{
struct onak_dynamic_dbctx *privctx =
(struct onak_dynamic_dbctx *) dbctx->priv;
return privctx->loadeddbctx->update_keys(privctx->loadeddbctx,
- keys, sendsync);
+ keys, blacklist, updateonly, sendsync);
}
static struct ll *dynamic_getkeysigs(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)
}
}
-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;
+ char *type;
+
+ if (dbcfg == NULL) {
+ logthing(LOGTHING_CRITICAL,
+ "No backend database configuration supplied.");
+ return NULL;
+ }
dbctx = malloc(sizeof(struct onak_dbctx));
return NULL;
}
+ dbctx->config = dbcfg;
dbctx->priv = privctx = malloc(sizeof(struct onak_dynamic_dbctx));
if (dbctx->priv == NULL) {
free(dbctx);
return (NULL);
}
+ type = dbcfg->type;
if (config.use_keyd) {
- free(config.db_backend);
- config.db_backend = strdup("keyd");
+ type = "keyd";
}
if (!config.db_backend) {
}
if (config.backends_dir == NULL) {
- soname = malloc(strlen(config.db_backend)
+ soname = malloc(strlen(type)
+ strlen("./libkeydb_")
+ strlen(".so")
+ 1);
- sprintf(soname, "./libkeydb_%s.so", config.db_backend);
+ sprintf(soname, "./libkeydb_%s.so", type);
} else {
- soname = malloc(strlen(config.db_backend)
+ soname = malloc(strlen(type)
+ strlen("/libkeydb_")
+ strlen(".so")
+ strlen(config.backends_dir)
+ 1);
sprintf(soname, "%s/libkeydb_%s.so", config.backends_dir,
- config.db_backend);
+ type);
}
logthing(LOGTHING_INFO, "Loading dynamic backend: %s", soname);
+ strlen("keydb_")
+ strlen("_init")
+ 1);
- sprintf(initname, "keydb_%s_init", config.db_backend);
+ sprintf(initname, "keydb_%s_init", type);
*(void **) (&backend_init) = dlsym(privctx->backend_handle, initname);
free(initname);
soname = NULL;
exit(EXIT_FAILURE);
}
+
+ 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;
- privctx->loadeddbctx = backend_init(readonly);
-
if (privctx->loadeddbctx != NULL) {
dbctx->cleanupdb = dynamic_cleanupdb;
dbctx->starttrans = dynamic_starttrans;
dbctx->getkeysigs = dynamic_getkeysigs;
dbctx->cached_getkeysigs = dynamic_cached_getkeysigs;
dbctx->keyid2uid = dynamic_keyid2uid;
- dbctx->getfullkeyid = dynamic_getfullkeyid;
dbctx->iterate_keys = dynamic_iterate_keys;
}