diff options
author | NIIBE Yutaka <[email protected]> | 2017-03-16 05:32:51 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2017-03-16 05:32:51 +0000 |
commit | 8c8ce8711d9c938fcb982b0341e6b052742cb887 (patch) | |
tree | 93a930b68c6e74a9903e993dcb821991032d707c /agent/learncard.c | |
parent | tests: Fix using tools from the build directory. (diff) | |
download | gnupg-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.c | 21 |
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); |