aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2022-08-16 11:23:50 +0000
committerWerner Koch <[email protected]>2022-08-16 12:07:38 +0000
commit914ee7247562dc8f1e4b8503b3b574a5d2749bde (patch)
treeaa63af841a0fda1122464197018100eebd60d044
parentgpg: Update shadow-keys with --card-status also for non-openpgp cards. (diff)
downloadgnupg-914ee7247562dc8f1e4b8503b3b574a5d2749bde.tar.gz
gnupg-914ee7247562dc8f1e4b8503b3b574a5d2749bde.zip
gpg: Fix "generate" command in --card-edit.
* g10/card-util.c (get_info_for_key_operation): Get the APPTYPE before testing for it. * g10/card-util.c (current_card_status): Always try to update the shadow keys. * g10/call-agent.c (agent_scd_getattr): Handle $AUTHKEYID. -- The first part fixed a regression introduced today. GnuPG-bug-id: 5100 The second part is usually not required because our ssh-agent code anyway looks for the OpenPGP.3 key. However, this helps to put the Display S/N into the shadow key so that we get a better prompt to insert the card.
-rw-r--r--g10/call-agent.c3
-rw-r--r--g10/card-util.c8
2 files changed, 10 insertions, 1 deletions
diff --git a/g10/call-agent.c b/g10/call-agent.c
index d416a72f8..7e60542ef 100644
--- a/g10/call-agent.c
+++ b/g10/call-agent.c
@@ -1104,6 +1104,9 @@ agent_scd_getattr (const char *name, struct agent_card_info_s *info)
if (info->fpr2valid)
assuan_transact (agent_ctx, "READKEY --card --no-data -- $ENCRKEYID",
NULL, NULL, NULL, NULL, NULL, NULL);
+ if (info->fpr3valid)
+ assuan_transact (agent_ctx, "READKEY --card --no-data -- $AUTHKEYID",
+ NULL, NULL, NULL, NULL, NULL, NULL);
}
return rc;
diff --git a/g10/card-util.c b/g10/card-util.c
index f54e5e1c4..25c284e85 100644
--- a/g10/card-util.c
+++ b/g10/card-util.c
@@ -378,6 +378,7 @@ current_card_status (ctrl_t ctrl, estream_t fp,
else
tty_fprintf (fp, "Application ID ...: %s\n",
info.serialno? info.serialno : "[none]");
+
if (!info.serialno || strncmp (info.serialno, "D27600012401", 12)
|| strlen (info.serialno) != 32 )
{
@@ -427,6 +428,7 @@ current_card_status (ctrl_t ctrl, estream_t fp,
xfree (pk);
return;
}
+
openpgp:
if (!serialno)
;
@@ -440,6 +442,8 @@ current_card_status (ctrl_t ctrl, estream_t fp,
else
tty_fprintf (fp, "Application type .: %s\n", "OpenPGP");
+ /* Try to update/create the shadow key here for OpenPGP cards. */
+ agent_update_shadow_keys ();
if (opt.with_colons)
{
@@ -1241,7 +1245,9 @@ get_info_for_key_operation (struct agent_card_info_s *info)
memset (info, 0, sizeof *info);
rc = agent_scd_getattr ("SERIALNO", info);
- if (rc || !info->apptype || strcmp (info->apptype, "openpgp"))
+ if (!rc)
+ rc = agent_scd_getattr ("APPTYPE", info);
+ if (rc || !info->apptype || ascii_strcasecmp (info->apptype, "openpgp"))
{
log_error (_("key operation not possible: %s\n"),
rc ? gpg_strerror (rc) : _("not an OpenPGP card"));