From 22fe23f46d3179cb0a68f58bf6f722b89c0c4d9c Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 26 Apr 2021 15:32:51 +0200 Subject: [PATCH] gpg: Fix mailbox based search via AKL keyserver method. * g10/keyserver.c (keyserver_import_name): Rename to ... (keyserver_import_mbox): this. And use mail search mode. * g10/getkey.c (get_pubkey_byname): Change the two callers. -- In contrast to a search via keyserver_import_ntds the older keyserver_import_name used a full match of the provided name despite that it is only called with an addr-spec (mbox). Due to the mode the pattern send to dirmngr was prefixed with a '=' and thus dirmngr used an exact search;. This did only work for provided user ids like "foo@example.org" but not for "" or "Foo ". The old code dates back to 2010. Signed-off-by: Werner Koch (cherry picked from commit 4fcfac6feb2a6c2b14883ba406afc917e8d4be42) --- g10/getkey.c | 4 ++-- g10/gpgv.c | 2 +- g10/keyserver-internal.h | 4 ++-- g10/keyserver.c | 12 +++++------- g10/test-stubs.c | 2 +- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/g10/getkey.c b/g10/getkey.c index 1e6d7fb9f..4642174e9 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -1342,7 +1342,7 @@ get_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode, } else { - rc = keyserver_import_name (ctrl, name, &fpr, &fpr_len, + rc = keyserver_import_mbox (ctrl, name, &fpr, &fpr_len, opt.keyserver); } glo_ctrl.in_auto_key_retrieve--; @@ -1373,7 +1373,7 @@ get_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode, } else { - rc = keyserver_import_name (ctrl, name, + rc = keyserver_import_mbox (ctrl, name, &fpr, &fpr_len, keyserver); } glo_ctrl.in_auto_key_retrieve--; diff --git a/g10/gpgv.c b/g10/gpgv.c index 3131ba904..c17870c66 100644 --- a/g10/gpgv.c +++ b/g10/gpgv.c @@ -478,7 +478,7 @@ keyserver_import_wkd (ctrl_t ctrl, const char *name, unsigned int flags, } int -keyserver_import_name (const char *name,struct keyserver_spec *spec) +keyserver_import_mbox (const char *name,struct keyserver_spec *spec) { (void)name; (void)spec; diff --git a/g10/keyserver-internal.h b/g10/keyserver-internal.h index d1fb682a2..b6671d72b 100644 --- a/g10/keyserver-internal.h +++ b/g10/keyserver-internal.h @@ -58,8 +58,8 @@ gpg_error_t keyserver_import_wkd (ctrl_t ctrl, const char *name, unsigned char **fpr, size_t *fpr_len); int keyserver_import_ntds (ctrl_t ctrl, const char *name, unsigned char **fpr,size_t *fpr_len); -int keyserver_import_name (ctrl_t ctrl, - const char *name,unsigned char **fpr,size_t *fpr_len, +int keyserver_import_mbox (ctrl_t ctrl, const char *mbox, + unsigned char **fpr,size_t *fpr_len, struct keyserver_spec *keyserver); int keyserver_import_ldap (ctrl_t ctrl, const char *name, unsigned char **fpr,size_t *fpr_len); diff --git a/g10/keyserver.c b/g10/keyserver.c index c5e70601d..808e4c3fd 100644 --- a/g10/keyserver.c +++ b/g10/keyserver.c @@ -1142,18 +1142,16 @@ keyserver_any_configured (ctrl_t ctrl) } -/* Import all keys that exactly match NAME */ +/* Import all keys that exactly match MBOX */ int -keyserver_import_name (ctrl_t ctrl, const char *name, +keyserver_import_mbox (ctrl_t ctrl, const char *mbox, unsigned char **fpr, size_t *fprlen, struct keyserver_spec *keyserver) { - KEYDB_SEARCH_DESC desc; + KEYDB_SEARCH_DESC desc = { 0 }; - memset (&desc, 0, sizeof desc); - - desc.mode = KEYDB_SEARCH_MODE_EXACT; - desc.u.name = name; + desc.mode = KEYDB_SEARCH_MODE_MAIL; + desc.u.name = mbox; return keyserver_get (ctrl, &desc, 1, keyserver, 0, fpr, fprlen); } diff --git a/g10/test-stubs.c b/g10/test-stubs.c index c6fa9c024..09737c4af 100644 --- a/g10/test-stubs.c +++ b/g10/test-stubs.c @@ -236,7 +236,7 @@ keyserver_import_wkd (ctrl_t ctrl, const char *name, unsigned int flags, } int -keyserver_import_name (const char *name,struct keyserver_spec *spec) +keyserver_import_mbox (const char *name,struct keyserver_spec *spec) { (void)name; (void)spec;