summaryrefslogtreecommitdiffstats
path: root/g10/keyring.c
diff options
context:
space:
mode:
authorJustus Winter <justus@g10code.com>2017-01-25 16:33:20 +0100
committerJustus Winter <justus@g10code.com>2017-01-25 16:58:46 +0100
commit3f4f20ee6eff052c88647b820d9ecfdbd8df0f40 (patch)
tree6c5339a6aefc879d5d387aa70c584922037c7647 /g10/keyring.c
parenttests,w32: Fix GPGME tests requiring a pinentry. (diff)
downloadgnupg2-3f4f20ee6eff052c88647b820d9ecfdbd8df0f40.tar.xz
gnupg2-3f4f20ee6eff052c88647b820d9ecfdbd8df0f40.zip
gpg: Fix searching for mail addresses in keyrings.
* g10/keyring.c (compare_name): Fix KEYDB_SEARCH_MODE_MAIL* searches in keyrings when the UID is a plain addr-spec. -- Previously, 'gpg --list-key "<foo@example.org>"' failed if 1/ the keyring format is used and 2/ the key's UID is a plain addr-spec (cf. RFC2822 section 4.3), e.g. 'foo@example.org'. GnuPG-bug-id: 2930 Signed-off-by: Justus Winter <justus@g10code.com>
Diffstat (limited to 'g10/keyring.c')
-rw-r--r--g10/keyring.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/g10/keyring.c b/g10/keyring.c
index f1281e98e..328290ed8 100644
--- a/g10/keyring.c
+++ b/g10/keyring.c
@@ -928,13 +928,27 @@ compare_name (int mode, const char *name, const char *uid, size_t uidlen)
else if ( mode == KEYDB_SEARCH_MODE_MAIL
|| mode == KEYDB_SEARCH_MODE_MAILSUB
|| mode == KEYDB_SEARCH_MODE_MAILEND) {
+ int have_angles = 1;
for (i=0, s= uid; i < uidlen && *s != '<'; s++, i++)
;
+ if (i == uidlen)
+ {
+ /* The UID is a plain addr-spec (cf. RFC2822 section 4.3). */
+ have_angles = 0;
+ s = uid;
+ i = 0;
+ }
if (i < uidlen) {
- /* skip opening delim and one char and look for the closing one*/
- s++; i++;
- for (se=s+1, i++; i < uidlen && *se != '>'; se++, i++)
- ;
+ if (have_angles)
+ {
+ /* skip opening delim and one char and look for the closing one*/
+ s++; i++;
+ for (se=s+1, i++; i < uidlen && *se != '>'; se++, i++)
+ ;
+ }
+ else
+ se = s + uidlen;
+
if (i < uidlen) {
i = se - s;
if (mode == KEYDB_SEARCH_MODE_MAIL) {