aboutsummaryrefslogtreecommitdiffstats
path: root/agent/learncard.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2017-03-16 05:32:51 +0000
committerNIIBE Yutaka <[email protected]>2017-03-16 05:32:51 +0000
commit8c8ce8711d9c938fcb982b0341e6b052742cb887 (patch)
tree93a930b68c6e74a9903e993dcb821991032d707c /agent/learncard.c
parenttests: Fix using tools from the build directory. (diff)
downloadgnupg-8c8ce8711d9c938fcb982b0341e6b052742cb887.tar.gz
gnupg-8c8ce8711d9c938fcb982b0341e6b052742cb887.zip
agent,g10: Remove redundant SERIALNO request.
* agent/learncard.c (agent_handle_learn): Don't call agent_card_serialno. Get the serialno in status response. * g10/call-agent.c (agent_scd_learn): Don't request "SCD SERIALNO". (agent_scd_serialno): New. (card_cardlist_cb, agent_scd_cardlist): New. Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'agent/learncard.c')
-rw-r--r--agent/learncard.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/agent/learncard.c b/agent/learncard.c
index cce9c3a36..e0c882ac5 100644
--- a/agent/learncard.c
+++ b/agent/learncard.c
@@ -302,11 +302,10 @@ int
agent_handle_learn (ctrl_t ctrl, int send, void *assuan_context, int force)
{
int rc;
-
struct kpinfo_cb_parm_s parm;
struct certinfo_cb_parm_s cparm;
struct sinfo_cb_parm_s sparm;
- char *serialno = NULL;
+ const char *serialno = NULL;
KEYPAIR_INFO item;
SINFO sitem;
unsigned char grip[20];
@@ -329,11 +328,6 @@ agent_handle_learn (ctrl_t ctrl, int send, void *assuan_context, int force)
parm.ctrl = ctrl;
cparm.ctrl = ctrl;
- /* Check whether a card is present and get the serial number */
- rc = agent_card_serialno (ctrl, &serialno, NULL);
- if (rc)
- goto leave;
-
/* Now gather all the available info. */
rc = agent_card_learn (ctrl, kpinfo_cb, &parm, certinfo_cb, &cparm,
sinfo_cb, &sparm);
@@ -345,17 +339,25 @@ agent_handle_learn (ctrl_t ctrl, int send, void *assuan_context, int force)
goto leave;
}
- log_info ("card has S/N: %s\n", serialno);
-
/* Pass on all the collected status information. */
if (assuan_context)
{
for (sitem = sparm.info; sitem; sitem = sitem->next)
{
+ if (!strcmp (sitem->keyword, "SERIALNO"))
+ serialno = sitem->data;
assuan_write_status (assuan_context, sitem->keyword, sitem->data);
}
}
+ if (!serialno)
+ {
+ rc = GPG_ERR_NOT_FOUND;
+ goto leave;
+ }
+
+ log_info ("card has S/N: %s\n", serialno);
+
/* Write out the certificates in a standard order. */
for (i=0; certtype_list[i] != -1; i++)
{
@@ -438,7 +440,6 @@ agent_handle_learn (ctrl_t ctrl, int send, void *assuan_context, int force)
leave:
- xfree (serialno);
release_keypair_info (parm.info);
release_certinfo (cparm.info);
release_sinfo (sparm.info);