aboutsummaryrefslogtreecommitdiffstats
path: root/agent/call-scd.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2002-08-16 14:24:38 +0000
committerWerner Koch <[email protected]>2002-08-16 14:24:38 +0000
commitca7ed726a7f35a3154ecdb8f6f9e4f848cc963b5 (patch)
tree836406c1c3a75e7a8940a0eab6e95883706f6ea3 /agent/call-scd.c
parent* assuan.h: Renamed Bad_Certificate_Path to Bad_Certificate_Chain. (diff)
downloadgnupg-ca7ed726a7f35a3154ecdb8f6f9e4f848cc963b5.tar.gz
gnupg-ca7ed726a7f35a3154ecdb8f6f9e4f848cc963b5.zip
* call-scd.c (learn_status_cb): Handle CERTINFO status.
(agent_card_learn): Add args for certinfo cb. * learncard.c (release_certinfo,certinfo_cb): New. (send_cert_back): New. With factored out code from .. (agent_handle_learn): here. Return certinfo stuff.
Diffstat (limited to 'agent/call-scd.c')
-rw-r--r--agent/call-scd.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/agent/call-scd.c b/agent/call-scd.c
index af8258a0f..a9123daca 100644
--- a/agent/call-scd.c
+++ b/agent/call-scd.c
@@ -55,6 +55,8 @@ static pth_mutex_t scd_lock = PTH_MUTEX_INIT;
struct learn_parm_s {
void (*kpinfo_cb)(void*, const char *);
void *kpinfo_cb_arg;
+ void (*certinfo_cb)(void*, const char *);
+ void *certinfo_cb_arg;
};
struct inq_needpin_s {
@@ -230,7 +232,11 @@ learn_status_cb (void *opaque, const char *line)
;
while (spacep (line))
line++;
- if (keywordlen == 11 && !memcmp (keyword, "KEYPAIRINFO", keywordlen))
+ if (keywordlen == 8 && !memcmp (keyword, "CERTINFO", keywordlen))
+ {
+ parm->certinfo_cb (parm->certinfo_cb_arg, line);
+ }
+ else if (keywordlen == 11 && !memcmp (keyword, "KEYPAIRINFO", keywordlen))
{
parm->kpinfo_cb (parm->kpinfo_cb_arg, line);
}
@@ -247,7 +253,10 @@ learn_status_cb (void *opaque, const char *line)
/* Perform the learn command and return a list of all private keys
stored on the card. */
int
-agent_card_learn (void (*kpinfo_cb)(void*, const char *), void *kpinfo_cb_arg)
+agent_card_learn (void (*kpinfo_cb)(void*, const char *),
+ void *kpinfo_cb_arg,
+ void (*certinfo_cb)(void*, const char *),
+ void *certinfo_cb_arg)
{
int rc;
struct learn_parm_s parm;
@@ -259,6 +268,8 @@ agent_card_learn (void (*kpinfo_cb)(void*, const char *), void *kpinfo_cb_arg)
memset (&parm, 0, sizeof parm);
parm.kpinfo_cb = kpinfo_cb;
parm.kpinfo_cb_arg = kpinfo_cb_arg;
+ parm.certinfo_cb = certinfo_cb;
+ parm.certinfo_cb_arg = certinfo_cb_arg;
rc = assuan_transact (scd_ctx, "LEARN --force",
NULL, NULL, NULL, NULL,
learn_status_cb, &parm);