aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2020-02-19 02:02:55 +0000
committerNIIBE Yutaka <[email protected]>2020-02-19 02:02:55 +0000
commit1cdd9e57f701f0d99d118d32adffe5216a94b0b2 (patch)
tree4391809dde64904f39740badee8fb414fdc9e3be
parentdoc: Correction of typo in documentation of KEY_CONSIDERED (diff)
downloadgnupg-1cdd9e57f701f0d99d118d32adffe5216a94b0b2.tar.gz
gnupg-1cdd9e57f701f0d99d118d32adffe5216a94b0b2.zip
gpg: Fix default-key selection when card is available.
* g10/getkey.c (get_seckey_default_or_card): Handle the case when card key is not suitable for requested usage. -- GnuPG-bug-id: 4850 Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--g10/getkey.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/g10/getkey.c b/g10/getkey.c
index f375bf45b..75ec44c6a 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -3810,7 +3810,15 @@ get_seckey_default_or_card (ctrl_t ctrl, PKT_public_key *pk,
if (def_secret_key)
add_to_strlist (&namelist, def_secret_key);
else if (fpr_card)
- return get_pubkey_byfprint (ctrl, pk, NULL, fpr_card, fpr_len);
+ {
+ int rc = get_pubkey_byfprint (ctrl, pk, NULL, fpr_card, fpr_len);
+
+ /* The key on card can be not suitable for requested usage. */
+ if (rc == GPG_ERR_UNUSABLE_PUBKEY)
+ fpr_card = NULL; /* Fallthrough as no card. */
+ else
+ return rc;
+ }
if (!fpr_card
|| (def_secret_key && def_secret_key[strlen (def_secret_key)-1] == '!'))