diff options
author | Werner Koch <[email protected]> | 2011-01-20 13:12:53 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2011-01-20 13:12:53 +0000 |
commit | 7f32d88ed1b81719e0cda11710fc66745deee6e2 (patch) | |
tree | 569ba918414268e5cee2eebaa7de3e23b6bbe277 /g10/export.c | |
parent | Keyserver search and get basically works again. (diff) | |
download | gnupg-7f32d88ed1b81719e0cda11710fc66745deee6e2.tar.gz gnupg-7f32d88ed1b81719e0cda11710fc66745deee6e2.zip |
All standard keyserver commands are now using dirmngr.
Diffstat (limited to 'g10/export.c')
-rw-r--r-- | g10/export.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/g10/export.c b/g10/export.c index 91c6a73d7..43856ffea 100644 --- a/g10/export.c +++ b/g10/export.c @@ -114,6 +114,60 @@ export_pubkeys_stream (ctrl_t ctrl, iobuf_t out, strlist_t users, return rc; } + +/* + * Export a single key into a memory buffer. + */ +gpg_error_t +export_pubkey_buffer (ctrl_t ctrl, const char *keyspec, unsigned int options, + kbnode_t *r_keyblock, void **r_data, size_t *r_datalen) +{ + gpg_error_t err; + iobuf_t iobuf; + int any; + strlist_t helplist; + + *r_keyblock = NULL; + *r_data = NULL; + *r_datalen = 0; + + helplist = NULL; + if (!add_to_strlist_try (&helplist, keyspec)) + return gpg_error_from_syserror (); + + iobuf = iobuf_temp (); + err = do_export_stream (ctrl, iobuf, helplist, 0, r_keyblock, options, &any); + if (!err && !any) + err = gpg_error (GPG_ERR_NOT_FOUND); + if (!err) + { + const void *src; + size_t datalen; + + iobuf_flush_temp (iobuf); + src = iobuf_get_temp_buffer (iobuf); + datalen = iobuf_get_temp_length (iobuf); + if (!datalen) + err = gpg_error (GPG_ERR_NO_PUBKEY); + else if (!(*r_data = xtrymalloc (datalen))) + err = gpg_error_from_syserror (); + else + { + memcpy (*r_data, src, datalen); + *r_datalen = datalen; + } + } + iobuf_close (iobuf); + free_strlist (helplist); + if (err && *r_keyblock) + { + release_kbnode (*r_keyblock); + *r_keyblock = NULL; + } + return err; +} + + int export_seckeys (ctrl_t ctrl, strlist_t users ) { |