diff options
author | Werner Koch <[email protected]> | 2016-12-08 15:57:21 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2016-12-08 15:59:12 +0000 |
commit | d8c5e8ccfdb53cc327f7520fc7badc31d0c9c666 (patch) | |
tree | fa8da2622bba3be30349cdfbaa182e9494a537ae /tools/call-dirmngr.c | |
parent | tools: Move a function from gpg-wks-server to wks-util.c. (diff) | |
download | gnupg-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 '')
-rw-r--r-- | tools/call-dirmngr.c | 52 |
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; +} |