mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
gpg: Improve WKD by importing only the requested UID.
* g10/keyserver.c: Include mbox-util.h. (keyserver_import_wkd): Do not use the global import options but employ an import filter. -- We also make sure that an mbox has been passed to keyserver_import_wkd so it may also be called with a complete user id (which is currently not the case). Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
80393661bd
commit
cbf2ac6669
@ -41,6 +41,7 @@
|
|||||||
#include "keyserver-internal.h"
|
#include "keyserver-internal.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "membuf.h"
|
#include "membuf.h"
|
||||||
|
#include "mbox-util.h"
|
||||||
#include "call-dirmngr.h"
|
#include "call-dirmngr.h"
|
||||||
|
|
||||||
#ifdef HAVE_W32_SYSTEM
|
#ifdef HAVE_W32_SYSTEM
|
||||||
@ -2011,29 +2012,55 @@ keyserver_import_wkd (ctrl_t ctrl, const char *name,
|
|||||||
unsigned char **fpr, size_t *fpr_len)
|
unsigned char **fpr, size_t *fpr_len)
|
||||||
{
|
{
|
||||||
gpg_error_t err;
|
gpg_error_t err;
|
||||||
|
char *mbox;
|
||||||
estream_t key;
|
estream_t key;
|
||||||
|
|
||||||
err = gpg_dirmngr_wkd_get (ctrl, name, &key);
|
/* We want to work on the mbox. That is what dirmngr will do anyway
|
||||||
|
* and we need the mbox for the import filter anyway. */
|
||||||
|
mbox = mailbox_from_userid (name);
|
||||||
|
if (!mbox)
|
||||||
|
{
|
||||||
|
err = gpg_error_from_syserror ();
|
||||||
|
if (gpg_err_code (err) == GPG_ERR_EINVAL)
|
||||||
|
err = gpg_error (GPG_ERR_INV_USER_ID);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = gpg_dirmngr_wkd_get (ctrl, mbox, &key);
|
||||||
if (err)
|
if (err)
|
||||||
;
|
;
|
||||||
else if (key)
|
else if (key)
|
||||||
{
|
{
|
||||||
int armor_status = opt.no_armor;
|
int armor_status = opt.no_armor;
|
||||||
|
import_filter_t save_filt;
|
||||||
|
|
||||||
/* Keys returned via WKD are in binary format. */
|
/* Keys returned via WKD are in binary format. */
|
||||||
opt.no_armor = 1;
|
opt.no_armor = 1;
|
||||||
|
save_filt = save_and_clear_import_filter ();
|
||||||
|
if (!save_filt)
|
||||||
|
err = gpg_error_from_syserror ();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *filtstr = es_bsprintf ("keep-uid=mbox = %s", mbox);
|
||||||
|
err = filtstr? 0 : gpg_error_from_syserror ();
|
||||||
|
if (!err)
|
||||||
|
err = parse_and_set_import_filter (filtstr);
|
||||||
|
xfree (filtstr);
|
||||||
|
if (!err)
|
||||||
|
err = import_keys_es_stream (ctrl, key, NULL, fpr, fpr_len,
|
||||||
|
IMPORT_NO_SECKEY,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
err = import_keys_es_stream (ctrl, key, NULL, fpr, fpr_len,
|
}
|
||||||
(opt.keyserver_options.import_options
|
|
||||||
| IMPORT_NO_SECKEY),
|
|
||||||
NULL, NULL);
|
|
||||||
|
|
||||||
|
restore_import_filter (save_filt);
|
||||||
opt.no_armor = armor_status;
|
opt.no_armor = armor_status;
|
||||||
|
|
||||||
es_fclose (key);
|
es_fclose (key);
|
||||||
key = NULL;
|
key = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xfree (mbox);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user