diff options
author | Werner Koch <[email protected]> | 2009-03-20 19:04:47 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2009-03-20 19:04:47 +0000 |
commit | 36d681d98ecc224d2241b401278952b10fd8064a (patch) | |
tree | da08eb4babff8e479ee14e441b8592af70ae85bb /agent | |
parent | Add missing file. (diff) | |
download | gnupg-36d681d98ecc224d2241b401278952b10fd8064a.tar.gz gnupg-36d681d98ecc224d2241b401278952b10fd8064a.zip |
Fix keygrip computation for TCOS 3 cards.
Emit PROGRESS status lines during --learn-card.
Diffstat (limited to 'agent')
-rw-r--r-- | agent/ChangeLog | 9 | ||||
-rw-r--r-- | agent/agent.h | 3 | ||||
-rw-r--r-- | agent/learncard.c | 25 |
3 files changed, 31 insertions, 6 deletions
diff --git a/agent/ChangeLog b/agent/ChangeLog index 3a6bab8b6..92b713164 100644 --- a/agent/ChangeLog +++ b/agent/ChangeLog @@ -1,3 +1,12 @@ +2009-03-20 Werner Koch <[email protected]> + + * learncard.c (struct kpinfo_cp_parm_s): Add field CTRL. + (struct certinfo_cb_parm_s): Ditto. + (agent_handle_learn): Set CTRL field. + (kpinfo_cb, certinfo_cb): Send progress status. + + * agent.h (agent_write_status): Flag with GNUPG_GCC_A_SENTINEL. + 2009-03-19 Werner Koch <[email protected]> * trustlist.c (struct trustitem_s): Add field DISABLED. diff --git a/agent/agent.h b/agent/agent.h index e6ec8147f..48b199be0 100644 --- a/agent/agent.h +++ b/agent/agent.h @@ -212,7 +212,8 @@ void agent_sighup_action (void); /*-- command.c --*/ gpg_error_t agent_inq_pinentry_launched (ctrl_t ctrl, unsigned long pid); -gpg_error_t agent_write_status (ctrl_t ctrl, const char *keyword, ...); +gpg_error_t agent_write_status (ctrl_t ctrl, const char *keyword, ...) + GNUPG_GCC_A_SENTINEL(0); void bump_key_eventcounter (void); void bump_card_eventcounter (void); void start_command_handler (ctrl_t, gnupg_fd_t, gnupg_fd_t); diff --git a/agent/learncard.c b/agent/learncard.c index eab5bd47e..3db33ee76 100644 --- a/agent/learncard.c +++ b/agent/learncard.c @@ -1,5 +1,5 @@ /* learncard.c - Handle the LEARN command - * Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + * Copyright (C) 2002, 2003, 2004, 2009 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -32,7 +32,8 @@ /* Structures used by the callback mechanism to convey information pertaining to key pairs. */ -struct keypair_info_s { +struct keypair_info_s +{ struct keypair_info_s *next; int no_cert; char *id; /* points into grip */ @@ -43,13 +44,14 @@ struct keypair_info_s { }; typedef struct keypair_info_s *KEYPAIR_INFO; -struct kpinfo_cb_parm_s { +struct kpinfo_cb_parm_s +{ + ctrl_t ctrl; int error; KEYPAIR_INFO info; }; - /* Structures used by the callback mechanism to convey information pertaining to certificates. */ struct certinfo_s { @@ -60,7 +62,9 @@ struct certinfo_s { }; typedef struct certinfo_s *CERTINFO; -struct certinfo_cb_parm_s { +struct certinfo_cb_parm_s +{ + ctrl_t ctrl; int error; CERTINFO info; }; @@ -130,6 +134,11 @@ kpinfo_cb (void *opaque, const char *line) if (parm->error) return; /* no need to gather data after an error coccured */ + + if ((parm->error = agent_write_status (parm->ctrl, "PROGRESS", + "learncard", "k", "0", "0", NULL))) + return; + item = xtrycalloc (1, sizeof *item + strlen (line)); if (!item) { @@ -183,6 +192,10 @@ certinfo_cb (void *opaque, const char *line) if (parm->error) return; /* no need to gather data after an error coccured */ + if ((parm->error = agent_write_status (parm->ctrl, "PROGRESS", + "learncard", "c", "0", "0", NULL))) + return; + type = strtol (line, &p, 10); while (spacep (p)) p++; @@ -296,6 +309,8 @@ agent_handle_learn (ctrl_t ctrl, void *assuan_context) memset (&parm, 0, sizeof parm); memset (&cparm, 0, sizeof cparm); memset (&sparm, 0, sizeof sparm); + parm.ctrl = ctrl; + cparm.ctrl = ctrl; /* Check whether a card is present and get the serial number */ rc = agent_card_serialno (ctrl, &serialno); |