mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
gpg: Add an exact search flag to the PK struct.
* g10/getkey.c (merge_selfsigs_subkey): Clear exact flag. (finish_lookup): Set exact flag. * g10/packet.h (PKT_public_key): Add field flags.exact. -- Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
2aa42baaf3
commit
34bca9cd4b
10
g10/getkey.c
10
g10/getkey.c
@ -2510,6 +2510,7 @@ merge_selfsigs_subkey (KBNODE keyblock, KBNODE subnode)
|
||||
keytimestamp = subpk->timestamp;
|
||||
|
||||
subpk->flags.valid = 0;
|
||||
subpk->flags.exact = 0;
|
||||
subpk->main_keyid[0] = mainpk->main_keyid[0];
|
||||
subpk->main_keyid[1] = mainpk->main_keyid[1];
|
||||
|
||||
@ -2836,6 +2837,8 @@ finish_lookup (GETKEY_CTX ctx, KBNODE keyblock)
|
||||
|
||||
u32 latest_date;
|
||||
KBNODE latest_key;
|
||||
PKT_public_key *pk;
|
||||
|
||||
|
||||
assert (keyblock->pkt->pkttype == PKT_PUBLIC_KEY);
|
||||
|
||||
@ -2850,6 +2853,8 @@ finish_lookup (GETKEY_CTX ctx, KBNODE keyblock)
|
||||
assert (k->pkt->pkttype == PKT_PUBLIC_KEY
|
||||
|| k->pkt->pkttype == PKT_PUBLIC_SUBKEY);
|
||||
foundk = k;
|
||||
pk = k->pkt->pkt.public_key;
|
||||
pk->flags.exact = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -2893,8 +2898,6 @@ finish_lookup (GETKEY_CTX ctx, KBNODE keyblock)
|
||||
/* Either start a loop or check just this one subkey. */
|
||||
for (k = foundk ? foundk : keyblock; k; k = nextk)
|
||||
{
|
||||
PKT_public_key *pk;
|
||||
|
||||
if (foundk)
|
||||
/* If FOUNDK is not NULL, then only consider that exact
|
||||
key, i.e., don't iterate. */
|
||||
@ -2968,7 +2971,6 @@ finish_lookup (GETKEY_CTX ctx, KBNODE keyblock)
|
||||
- we're just considering the primary key. */
|
||||
if ((!latest_key && !ctx->exact) || foundk == keyblock || req_prim)
|
||||
{
|
||||
PKT_public_key *pk;
|
||||
if (DBG_LOOKUP && !foundk && !req_prim)
|
||||
log_debug ("\tno suitable subkeys found - trying primary\n");
|
||||
pk = keyblock->pkt->pkt.public_key;
|
||||
@ -3015,7 +3017,7 @@ found:
|
||||
|
||||
if (latest_key)
|
||||
{
|
||||
PKT_public_key *pk = latest_key->pkt->pkt.public_key;
|
||||
pk = latest_key->pkt->pkt.public_key;
|
||||
if (pk->user_id)
|
||||
free_user_id (pk->user_id);
|
||||
pk->user_id = scopy_user_id (foundu);
|
||||
|
@ -298,6 +298,7 @@ typedef struct
|
||||
unsigned int dont_cache:1; /* Do not cache this key. */
|
||||
unsigned int backsig:2; /* 0=none, 1=bad, 2=good. */
|
||||
unsigned int serialno_valid:1;/* SERIALNO below is valid. */
|
||||
unsigned int exact:1; /* Found via exact (!) search. */
|
||||
} flags;
|
||||
PKT_user_id *user_id; /* If != NULL: found by that uid. */
|
||||
struct revocation_key *revkey;
|
||||
|
Loading…
x
Reference in New Issue
Block a user