diff options
author | NIIBE Yutaka <[email protected]> | 2020-02-19 02:02:55 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2020-02-19 02:02:55 +0000 |
commit | 1cdd9e57f701f0d99d118d32adffe5216a94b0b2 (patch) | |
tree | 4391809dde64904f39740badee8fb414fdc9e3be | |
parent | doc: Correction of typo in documentation of KEY_CONSIDERED (diff) | |
download | gnupg-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.c | 10 |
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] == '!')) |