/*
* 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"
}
}
-static int dynamic_fetch_key(uint64_t keyid,
+static int dynamic_fetch_key_id(uint64_t keyid,
struct openpgp_publickey **publickey, bool intrans)
{
if (loaded_backend == NULL) {
load_backend();
}
-
+
if (loaded_backend != NULL) {
- if (loaded_backend->fetch_key != NULL) {
- return loaded_backend->fetch_key(keyid,publickey,intrans);
+ if (loaded_backend->fetch_key_id != NULL) {
+ return loaded_backend->fetch_key_id(keyid,
+ publickey, intrans);
}
}
return -1;
}
+static int dynamic_fetch_key_fp(uint8_t *fp, size_t fpsize,
+ struct openpgp_publickey **publickey, bool intrans)
+{
+ if (loaded_backend == NULL) {
+ load_backend();
+ }
+
+ if (loaded_backend != NULL) {
+ if (loaded_backend->fetch_key_id != NULL) {
+ return loaded_backend->fetch_key_fp(fp, fpsize,
+ publickey, intrans);
+ }
+ }
+
+ return -1;
+}
+
+
+
static int dynamic_store_key(struct openpgp_publickey *publickey, bool intrans,
bool update)
{
}
buf[0]=0;
- if (dynamic_fetch_key(keyid, &publickey, false) && publickey != NULL) {
+ if (dynamic_fetch_key_id(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);
}
}
- dynamic_fetch_key(keyid, &publickey, false);
+ dynamic_fetch_key_id(keyid, &publickey, false);
if (publickey != NULL) {
for (uids = publickey->uids; uids != NULL; uids = uids->next) {
}
if (keyid < 0x100000000LL) {
- dynamic_fetch_key(keyid, &publickey, false);
+ dynamic_fetch_key_id(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_id(keyid, &oldkey, intrans));
/*
* If we already have the key stored in the DB then merge it
.cleanupdb = dynamic_cleanupdb,
.starttrans = dynamic_starttrans,
.endtrans = dynamic_endtrans,
- .fetch_key = dynamic_fetch_key,
+ .fetch_key_id = dynamic_fetch_key_id,
+ .fetch_key_fp = dynamic_fetch_key_fp,
.fetch_key_text = dynamic_fetch_key_text,
.fetch_key_skshash = dynamic_fetch_key_skshash,
.store_key = dynamic_store_key,