diff options
author | Werner Koch <[email protected]> | 2019-12-04 13:39:42 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2019-12-04 13:39:42 +0000 |
commit | 1abb39fdaf44c2477719fbea43ef8042d8b9033e (patch) | |
tree | f4121e1853952c61ae2db1e644f36f778d7db73d /g10/getkey.c | |
parent | gpg: Change the way v5 fingerprints are printed. (diff) | |
download | gnupg-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.c | 37 |
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; } |