1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00

Fix keygrip computation for TCOS 3 cards.

Emit PROGRESS status lines during --learn-card.
This commit is contained in:
Werner Koch 2009-03-20 19:04:47 +00:00
parent 593c1d5480
commit 36d681d98e
9 changed files with 115 additions and 12 deletions

View file

@ -667,6 +667,25 @@ gpgsm_agent_havekey (ctrl_t ctrl, const char *hexkeygrip)
}
static int
learn_status_cb (void *opaque, const char *line)
{
struct learn_parm_s *parm = opaque;
/* Pass progress data to the caller. */
if (!strncmp (line, "PROGRESS", 8) && (line[8]==' ' || !line[8]))
{
if (parm->ctrl)
{
for (line += 8; *line == ' '; line++)
;
if (gpgsm_status (parm->ctrl, STATUS_PROGRESS, line))
return gpg_error (GPG_ERR_ASS_CANCELED);
}
}
return 0;
}
static int
learn_cb (void *opaque, const void *buffer, size_t length)
{
@ -692,6 +711,8 @@ learn_cb (void *opaque, const void *buffer, size_t length)
return 0;
}
if (gpgsm_status (parm->ctrl, STATUS_PROGRESS, "learncard C 0 0"))
return gpg_error (GPG_ERR_ASS_CANCELED);
/* FIXME: this should go into import.c */
rc = ksba_cert_new (&cert);
@ -755,7 +776,8 @@ gpgsm_agent_learn (ctrl_t ctrl)
learn_parm.data = &data;
rc = assuan_transact (agent_ctx, "LEARN --send",
learn_cb, &learn_parm,
NULL, NULL, NULL, NULL);
NULL, NULL,
learn_status_cb, &learn_parm);
xfree (get_membuf (&data, &len));
if (rc)
return rc;