aboutsummaryrefslogtreecommitdiffstats
path: root/tools/call-dirmngr.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2016-12-08 15:57:21 +0000
committerWerner Koch <[email protected]>2016-12-08 15:59:12 +0000
commitd8c5e8ccfdb53cc327f7520fc7badc31d0c9c666 (patch)
treefa8da2622bba3be30349cdfbaa182e9494a537ae /tools/call-dirmngr.c
parenttools: Move a function from gpg-wks-server to wks-util.c. (diff)
downloadgnupg-d8c5e8ccfdb53cc327f7520fc7badc31d0c9c666.tar.gz
gnupg-d8c5e8ccfdb53cc327f7520fc7badc31d0c9c666.zip
wks: New option --check for gpg-wks-client.
* tools/call-dirmngr.c (wkd_get_key): New. * tools/gpg-wks-client.c (aCheck): New constant. (opts): New option "--check". (main): Call command_check. (command_check): New. -- GnuPG-bug-id: 2866 Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'tools/call-dirmngr.c')
-rw-r--r--tools/call-dirmngr.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/tools/call-dirmngr.c b/tools/call-dirmngr.c
index c5ee244f9..51f1fa146 100644
--- a/tools/call-dirmngr.c
+++ b/tools/call-dirmngr.c
@@ -258,3 +258,55 @@ wkd_get_policy_flags (const char *addrspec, estream_t *r_buffer)
assuan_release (ctx);
return err;
}
+
+
+/* Ask the dirmngr for the key for ADDRSPEC. On success a stream with
+ * the key is stored at R_KEY. */
+gpg_error_t
+wkd_get_key (const char *addrspec, estream_t *r_key)
+{
+ gpg_error_t err;
+ assuan_context_t ctx;
+ struct wkd_get_parm_s parm;
+ char *line = NULL;
+
+ memset (&parm, 0, sizeof parm);
+ *r_key = NULL;
+
+ err = connect_dirmngr (&ctx);
+ if (err)
+ return err;
+
+ line = es_bsprintf ("WKD_GET -- %s", addrspec);
+ if (!line)
+ {
+ err = gpg_error_from_syserror ();
+ goto leave;
+ }
+ if (strlen (line) + 2 >= ASSUAN_LINELENGTH)
+ {
+ err = gpg_error (GPG_ERR_TOO_LARGE);
+ goto leave;
+ }
+
+ parm.memfp = es_fopenmem (0, "rwb");
+ if (!parm.memfp)
+ {
+ err = gpg_error_from_syserror ();
+ goto leave;
+ }
+ err = assuan_transact (ctx, line, wkd_get_data_cb, &parm,
+ NULL, NULL, wkd_get_status_cb, &parm);
+ if (err)
+ goto leave;
+
+ es_rewind (parm.memfp);
+ *r_key = parm.memfp;
+ parm.memfp = NULL;
+
+ leave:
+ es_fclose (parm.memfp);
+ xfree (line);
+ assuan_release (ctx);
+ return err;
+}