/*
* keydb_dynamic.c - backend that can load the other backends
*
- * Brett Parker <iDunno@sommitrealweird.co.uk>
+ * Copyright 2005 Brett Parker <iDunno@sommitrealweird.co.uk>
*
- * Copyright 2005 Project Purple
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * 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.
*/
#include <dlfcn.h>
#include "mem.h"
#include "merge.h"
#include "onak-conf.h"
+#include "openpgp.h"
#include "parsekey.h"
#include "sendsync.h"
return -1;
}
+static int dynamic_fetch_key_skshash(const struct skshash *hash,
+ struct openpgp_publickey **publickey)
+{
+ if (loaded_backend == NULL) {
+ load_backend();
+ }
+
+ if (loaded_backend != NULL) {
+ if (loaded_backend->fetch_key_skshash != NULL) {
+ return loaded_backend->fetch_key_skshash(hash,
+ publickey);
+ }
+ }
+
+ return -1;
+}
+
static int dynamic_iterate_keys(void (*iterfunc)(void *ctx,
struct openpgp_publickey *key), void *ctx)
{
if (dynamic_fetch_key(keyid, &publickey, false) && publickey != NULL) {
curuid = publickey->uids;
while (curuid != NULL && buf[0] == 0) {
- if (curuid->packet->tag == 13) {
+ if (curuid->packet->tag == OPENPGP_PACKET_UID) {
snprintf(buf, 1023, "%.*s",
(int) curuid->packet->length,
curuid->packet->data);
if (keyid < 0x100000000LL) {
dynamic_fetch_key(keyid, &publickey, false);
if (publickey != NULL) {
- keyid = get_keyid(publickey);
+ get_keyid(publickey, &keyid);
free_publickey(publickey);
publickey = NULL;
} else {
struct openpgp_publickey *prev = NULL;
int newkeys = 0;
bool intrans;
+ uint64_t keyid;
if (loaded_backend == NULL) {
load_backend();
for (curkey = *keys; curkey != NULL; curkey = curkey->next) {
intrans = dynamic_starttrans();
+ get_keyid(curkey, &keyid);
logthing(LOGTHING_INFO,
"Fetching key 0x%" PRIX64 ", result: %d",
- get_keyid(curkey),
- dynamic_fetch_key(get_keyid(curkey), &oldkey, intrans));
+ keyid,
+ dynamic_fetch_key(keyid, &oldkey, intrans));
/*
* If we already have the key stored in the DB then merge it
.endtrans = dynamic_endtrans,
.fetch_key = dynamic_fetch_key,
.fetch_key_text = dynamic_fetch_key_text,
+ .fetch_key_skshash = dynamic_fetch_key_skshash,
.store_key = dynamic_store_key,
.update_keys = dynamic_update_keys,
.delete_key = dynamic_delete_key,