X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb_pg.c;h=04c760dfbf9759cca2e60241f1fdaeac1f2f8bb3;hb=cbe819fe064045d7d040e74c66e55f83e716b0ce;hp=8e0543b9f061210c5afda582f889d1d0009156cc;hpb=5e1b22d763640c4d7a09d07920403d8d491b4410;p=onak.git diff --git a/keydb_pg.c b/keydb_pg.c index 8e0543b..04c760d 100644 --- a/keydb_pg.c +++ b/keydb_pg.c @@ -131,7 +131,7 @@ static void pg_endtrans(void) } /** - * fetch_key - Given a keyid fetch the key from storage. + * fetch_key_id - Given a keyid fetch the key from storage. * @keyid: The keyid to fetch. * @publickey: A pointer to a structure to return the key in. * @intrans: If we're already in a transaction. @@ -142,7 +142,8 @@ static void pg_endtrans(void) * in and then parse_keys() to parse the packets into a publickey * structure. */ -static int pg_fetch_key(uint64_t keyid, struct openpgp_publickey **publickey, +static int pg_fetch_key_id(uint64_t keyid, + struct openpgp_publickey **publickey, bool intrans) { struct openpgp_packet_list *packets = NULL; @@ -369,12 +370,18 @@ static int pg_store_key(struct openpgp_publickey *publickey, bool intrans, char *primary = NULL; char *safeuid = NULL; int i; + uint64_t keyid; if (!intrans) { result = PQexec(dbconn, "BEGIN"); PQclear(result); } + if (get_keyid(publickey, &keyid) != ONAK_E_OK) { + logthing(LOGTHING_ERROR, "Couldn't find key ID for key."); + return 0; + } + /* * Delete the key if we already have it. * @@ -384,7 +391,7 @@ static int pg_store_key(struct openpgp_publickey *publickey, bool intrans, * it definitely needs updated. */ if (update) { - pg_delete_key(get_keyid(publickey), true); + pg_delete_key(keyid, true); } next = publickey->next; @@ -406,7 +413,7 @@ static int pg_store_key(struct openpgp_publickey *publickey, bool intrans, snprintf(statement, 1023, "INSERT INTO onak_keys (keyid, keydata) VALUES " "('%" PRIX64 "', '%d')", - get_keyid(publickey), + keyid, key_oid); result = PQexec(dbconn, statement); @@ -429,7 +436,7 @@ static int pg_store_key(struct openpgp_publickey *publickey, bool intrans, "INSERT INTO onak_uids " "(keyid, uid, pri) " "VALUES ('%" PRIX64 "', '%s', '%c')", - get_keyid(publickey), + keyid, safeuid, (uids[i] == primary) ? 't' : 'f'); result = PQexec(dbconn, statement); @@ -464,7 +471,7 @@ static int pg_store_key(struct openpgp_publickey *publickey, bool intrans, "INSERT INTO onak_sigs (signer, signee) " "VALUES ('%" PRIX64 "', '%" PRIX64 "')", sig_keyid(packets->packet), - get_keyid(publickey)); + keyid); result = PQexec(dbconn, statement); PQclear(result); } @@ -649,6 +656,7 @@ static int pg_iterate_keys(void (*iterfunc)(void *ctx, */ #define NEED_GETFULLKEYID 1 #define NEED_UPDATEKEYS 1 +#define NEED_GET_FP 1 #include "keydb.c" struct dbfuncs keydb_pg_funcs = { @@ -656,7 +664,8 @@ struct dbfuncs keydb_pg_funcs = { .cleanupdb = pg_cleanupdb, .starttrans = pg_starttrans, .endtrans = pg_endtrans, - .fetch_key = pg_fetch_key, + .fetch_key_id = pg_fetch_key_id, + .fetch_key_fp = generic_fetch_key_fp, .fetch_key_text = pg_fetch_key_text, .store_key = pg_store_key, .update_keys = generic_update_keys,