summaryrefslogtreecommitdiffstats
path: root/sm
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2008-09-30 12:30:20 +0200
committerWerner Koch <wk@gnupg.org>2008-09-30 12:30:20 +0200
commit8381a43ca7cb277f70c3c91d66a7cf890b96ffb9 (patch)
treeaef47b3f1a7c1d3f9623afad0e8e0000a2b356dd /sm
parentRemove hacks which are not anymore needed since we now require Libgcrypt 1.4 (diff)
downloadgnupg2-8381a43ca7cb277f70c3c91d66a7cf890b96ffb9.tar.xz
gnupg2-8381a43ca7cb277f70c3c91d66a7cf890b96ffb9.zip
Add gpgsm server command GETINFO agent-check.
Fix tests.
Diffstat (limited to 'sm')
-rw-r--r--sm/ChangeLog5
-rw-r--r--sm/call-agent.c20
-rw-r--r--sm/gpgsm.h1
-rw-r--r--sm/server.c6
4 files changed, 31 insertions, 1 deletions
diff --git a/sm/ChangeLog b/sm/ChangeLog
index 21e204f01..2035c543e 100644
--- a/sm/ChangeLog
+++ b/sm/ChangeLog
@@ -1,3 +1,8 @@
+2008-09-30 Werner Koch <wk@g10code.com>
+
+ * server.c (cmd_getinfo): New subcommand agent-check.
+ * call-agent.c (gpgsm_agent_send_nop): New.
+
2008-09-29 Werner Koch <wk@g10code.com>
* certcheck.c (MY_GCRY_PK_ECDSA): Remove. Change users to
diff --git a/sm/call-agent.c b/sm/call-agent.c
index 625ca9d6e..d1dad6d07 100644
--- a/sm/call-agent.c
+++ b/sm/call-agent.c
@@ -328,7 +328,7 @@ gpgsm_agent_pkdecrypt (ctrl_t ctrl, const char *keygrip, const char *desc,
{
int rc;
char line[ASSUAN_LINELENGTH];
- membuf_t data;
+ membuf_t data;
struct cipher_parm_s cipher_parm;
size_t n, len;
char *p, *buf, *endp;
@@ -802,3 +802,21 @@ gpgsm_agent_get_confirmation (ctrl_t ctrl, const char *desc)
default_inq_cb, ctrl, NULL, NULL);
return rc;
}
+
+
+
+/* Return 0 if the agent is alive. This is useful to make sure that
+ an agent has been started. */
+gpg_error_t
+gpgsm_agent_send_nop (ctrl_t ctrl)
+{
+ int rc;
+
+ rc = start_agent (ctrl);
+ if (!rc)
+ rc = assuan_transact (agent_ctx, "NOP",
+ NULL, NULL, NULL, NULL, NULL, NULL);
+ return rc;
+}
+
+
diff --git a/sm/gpgsm.h b/sm/gpgsm.h
index add1928ec..278c6e5fc 100644
--- a/sm/gpgsm.h
+++ b/sm/gpgsm.h
@@ -393,6 +393,7 @@ int gpgsm_agent_marktrusted (ctrl_t ctrl, ksba_cert_t cert);
int gpgsm_agent_learn (ctrl_t ctrl);
int gpgsm_agent_passwd (ctrl_t ctrl, const char *hexkeygrip, const char *desc);
gpg_error_t gpgsm_agent_get_confirmation (ctrl_t ctrl, const char *desc);
+gpg_error_t gpgsm_agent_send_nop (ctrl_t ctrl);
/*-- call-dirmngr.c --*/
int gpgsm_dirmngr_isvalid (ctrl_t ctrl,
diff --git a/sm/server.c b/sm/server.c
index e38d1764a..cd2b9f69a 100644
--- a/sm/server.c
+++ b/sm/server.c
@@ -1016,6 +1016,7 @@ cmd_getauditlog (assuan_context_t ctx, char *line)
version - Return the version of the program.
pid - Return the process id of the server.
+ agent-check - Return success if the agent is running.
*/
static int
@@ -1035,6 +1036,11 @@ cmd_getinfo (assuan_context_t ctx, char *line)
snprintf (numbuf, sizeof numbuf, "%lu", (unsigned long)getpid ());
rc = assuan_send_data (ctx, numbuf, strlen (numbuf));
}
+ else if (!strcmp (line, "agent-check"))
+ {
+ ctrl_t ctrl = assuan_get_pointer (ctx);
+ rc = gpgsm_agent_send_nop (ctrl);
+ }
else
rc = set_error (GPG_ERR_ASS_PARAMETER, "unknown value for WHAT");
return rc;