aboutsummaryrefslogtreecommitdiffstats
path: root/g10/getkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/getkey.c')
-rw-r--r--g10/getkey.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/g10/getkey.c b/g10/getkey.c
index 7822fd109..a72545a71 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -3696,21 +3696,31 @@ finish_lookup (kbnode_t keyblock, unsigned int req_usage, int want_exact,
log_assert (keyblock->pkt->pkttype == PKT_PUBLIC_KEY);
/* For an exact match mark the primary or subkey that matched the
- low-level search criteria. */
- if (want_exact)
+ * low-level search criteria. Use this loop also to sort our keys
+ * found using an ADSK fingerprint. */
+ for (k = keyblock; k; k = k->next)
{
- for (k = keyblock; k; k = k->next)
- {
- if ((k->flag & 1))
- {
- log_assert (k->pkt->pkttype == PKT_PUBLIC_KEY
- || k->pkt->pkttype == PKT_PUBLIC_SUBKEY);
- foundk = k;
+ if ((k->flag & 1) && (k->pkt->pkttype == PKT_PUBLIC_KEY
+ || k->pkt->pkttype == PKT_PUBLIC_SUBKEY))
+ {
+ if (want_exact)
+ {
+ if (DBG_LOOKUP)
+ log_debug ("finish_lookup: exact search requested and found\n");
+ foundk = k;
pk = k->pkt->pkt.public_key;
pk->flags.exact = 1;
- break;
- }
- }
+ break;
+ }
+ else if ((k->pkt->pkt.public_key->pubkey_usage == PUBKEY_USAGE_RENC))
+ {
+ if (DBG_LOOKUP)
+ log_debug ("finish_lookup: found via ADSK - not selected\n");
+ if (r_flags)
+ *r_flags |= LOOKUP_NOT_SELECTED;
+ return NULL; /* Not found. */
+ }
+ }
}
/* Get the user id that matched that low-level search criteria. */