aboutsummaryrefslogtreecommitdiffstats
path: root/g10/getkey.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2019-12-04 13:39:42 +0000
committerWerner Koch <[email protected]>2019-12-04 13:39:42 +0000
commit1abb39fdaf44c2477719fbea43ef8042d8b9033e (patch)
treef4121e1853952c61ae2db1e644f36f778d7db73d /g10/getkey.c
parentgpg: Change the way v5 fingerprints are printed. (diff)
downloadgnupg-1abb39fdaf44c2477719fbea43ef8042d8b9033e.tar.gz
gnupg-1abb39fdaf44c2477719fbea43ef8042d8b9033e.zip
gpg: Use AKL for angle bracketed mail address with -r.
* g10/getkey.c (get_pubkey_byname): Extend is_mbox checking. (get_best_pubkey_byname): Ditto. -- With this patch it is now possible to use gpg -e -r '<[email protected]>' and auto key locate will find the key. Without that a plain mail address; i.e. gpg -e -r '[email protected]' was required. GnuPG-bug-id: 4726 Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'g10/getkey.c')
-rw-r--r--g10/getkey.c37
1 files changed, 31 insertions, 6 deletions
diff --git a/g10/getkey.c b/g10/getkey.c
index 0267e74ea..ad5dd8e01 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -928,6 +928,17 @@ get_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode,
/* Does NAME appear to be a mailbox (mail address)? */
is_mbox = is_valid_mailbox (name);
+ if (!is_mbox && *name == '<' && name[1] && name[strlen(name)-1]=='>'
+ && name[1] != '>'
+ && is_valid_mailbox_mem (name+1, strlen (name)-2))
+ {
+ /* The mailbox is in the form "<[email protected]>" which is not
+ * detected by is_valid_mailbox. Set the flag but keep name as
+ * it is because the bracketed name is actual the better
+ * specification for a local search and the other methods
+ * extract the mail address anyway. */
+ is_mbox = 1;
+ }
/* The auto-key-locate feature works as follows: there are a number
* of methods to look up keys. By default, the local keyring is
@@ -1359,7 +1370,7 @@ get_best_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode,
{
gpg_error_t err;
struct getkey_ctx_s *ctx = NULL;
- int is_mbox = is_valid_mailbox (name);
+ int is_mbox;
int wkd_tried = 0;
PKT_public_key pk0;
@@ -1371,6 +1382,18 @@ get_best_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode,
memset (&pk0, 0, sizeof pk0);
pk0.req_usage = pk? pk->req_usage : 0;
+ is_mbox = is_valid_mailbox (name);
+ if (!is_mbox && *name == '<' && name[1] && name[strlen(name)-1]=='>'
+ && name[1] != '>'
+ && is_valid_mailbox_mem (name+1, strlen (name)-2))
+ {
+ /* The mailbox is in the form "<[email protected]>" which is not
+ * detected by is_valid_mailbox. Set the flag but keep name as
+ * it is because get_pubkey_byname does an is_valid_mailbox_mem
+ * itself. */
+ is_mbox = 1;
+ }
+
start_over:
if (ctx) /* Clear in case of a start over. */
{
@@ -1384,8 +1407,7 @@ get_best_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode,
NULL, include_unusable);
if (err)
{
- getkey_end (ctrl, ctx);
- return err;
+ goto leave;
}
/* If the keyblock was retrieved from the local database and the key
@@ -1530,10 +1552,13 @@ get_best_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode,
}
if (retctx && ctx)
- *retctx = ctx;
- else
- getkey_end (ctrl, ctx);
+ {
+ *retctx = ctx;
+ ctx = NULL;
+ }
+ leave:
+ getkey_end (ctrl, ctx);
return err;
}