X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb_db4.c;h=2ffb256c4c350ea4b77e941ba4b162b3e77e9f87;hb=23f086c85c5d2db35e9ce76cf0bbf72200b4dc42;hp=6a21fab73678a811a286eeff35a6d3d7e97f2351;hpb=ba236fc3d763f23987f70f15ba43ac3667f2d08c;p=onak.git diff --git a/keydb_db4.c b/keydb_db4.c index 6a21fab..2ffb256 100644 --- a/keydb_db4.c +++ b/keydb_db4.c @@ -587,7 +587,7 @@ static int db4_delete_key(struct onak_dbctx *dbctx, DBT key, data; DBC *cursor = NULL; uint32_t shortkeyid = 0; - uint64_t *subkeyids = NULL; + struct openpgp_fingerprint *subkeyids = NULL; int ret = 0; int i; char **uids = NULL; @@ -597,6 +597,7 @@ static int db4_delete_key(struct onak_dbctx *dbctx, struct ll *curword = NULL; bool deadlock = false; struct skshash hash; + uint64_t subkeyid; if (!intrans) { db4_starttrans(dbctx); @@ -758,10 +759,11 @@ static int db4_delete_key(struct onak_dbctx *dbctx, subkeyids = keysubkeys(publickey); i = 0; - while (subkeyids != NULL && subkeyids[i] != 0) { + while (subkeyids != NULL && subkeyids[i].length != 0) { + subkeyid = fingerprint2keyid(&subkeyids[i]); memset(&key, 0, sizeof(key)); - key.data = &subkeyids[i]; - key.size = sizeof(subkeyids[i]); + key.data = &subkeyid; + key.size = sizeof(subkeyid); privctx->subkeydb->del(privctx->subkeydb, privctx->txn, &key, 0); if (ret != 0) { @@ -775,7 +777,7 @@ static int db4_delete_key(struct onak_dbctx *dbctx, } } - shortkeyid = subkeyids[i++] & 0xFFFFFFFF; + shortkeyid = subkeyid & 0xFFFFFFFF; memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); @@ -803,6 +805,7 @@ static int db4_delete_key(struct onak_dbctx *dbctx, deadlock = true; } } + i++; } if (subkeyids != NULL) { free(subkeyids); @@ -856,7 +859,7 @@ static int db4_store_key(struct onak_dbctx *dbctx, DBT data; uint64_t keyid = 0; uint32_t shortkeyid = 0; - uint64_t *subkeyids = NULL; + struct openpgp_fingerprint *subkeyids = NULL; char **uids = NULL; char *primary = NULL; unsigned char worddb_data[12]; @@ -864,6 +867,7 @@ static int db4_store_key(struct onak_dbctx *dbctx, struct ll *curword = NULL; bool deadlock = false; struct skshash hash; + uint64_t subkeyid; if (get_keyid(publickey, &keyid) != ONAK_E_OK) { logthing(LOGTHING_ERROR, "Couldn't find key ID for key."); @@ -1030,12 +1034,13 @@ static int db4_store_key(struct onak_dbctx *dbctx, if (!deadlock) { subkeyids = keysubkeys(publickey); i = 0; - while (subkeyids != NULL && subkeyids[i] != 0) { + while (subkeyids != NULL && subkeyids[i].length != 0) { + subkeyid = fingerprint2keyid(&subkeyids[i]); /* Store the subkey ID -> main key ID mapping */ memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); - key.data = &subkeyids[i]; - key.size = sizeof(subkeyids[i]); + key.data = &subkeyid; + key.size = sizeof(subkeyid); data.data = &keyid; data.size = sizeof(keyid); @@ -1054,7 +1059,7 @@ static int db4_store_key(struct onak_dbctx *dbctx, } /* Store the short subkey ID -> main key ID mapping */ - shortkeyid = subkeyids[i++] & 0xFFFFFFFF; + shortkeyid = subkeyid & 0xFFFFFFFF; memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); @@ -1076,6 +1081,7 @@ static int db4_store_key(struct onak_dbctx *dbctx, deadlock = true; } } + i++; } if (subkeyids != NULL) { free(subkeyids);