diff options
author | Werner Koch <[email protected]> | 2021-07-08 11:55:18 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2021-07-08 11:57:13 +0000 |
commit | 101ba4f18aceb39c4d5f0e0a7e16e66827f8e612 (patch) | |
tree | 7cdc6b3f168b8f62e6e7dcf3fbab3ec165b33f7c /common/userids.c | |
parent | scd: Detect external interference when PCSC_SHARED. (diff) | |
download | gnupg-101ba4f18aceb39c4d5f0e0a7e16e66827f8e612.tar.gz gnupg-101ba4f18aceb39c4d5f0e0a7e16e66827f8e612.zip |
kbx: Fix keyboxd searching with multiple patterns.
* kbx/keybox-search-desc.h (struct keydb_search_desc): New flag
name_used.
* common/userids.c (classify_user_id): Set flag.
* kbx/kbxserver.c (struct search_backing_store_s): New.
(cmd_search): use a backing store for the const pointers.
(kbxd_start_command_handler): Release the backing store.
--
Well, the search object partly uses buffers but also const
pointers (for strings and the serial number). This when assigning
such objects to an another one we should really take a deep copy and
not just copy the pointer. The more clean solution would have been to
provide a storage option the search object but that needs checking the
code at too many places so that I decided to use a separate backing
store array here.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'common/userids.c')
-rw-r--r-- | common/userids.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/common/userids.c b/common/userids.c index 0f03896ee..9d866d583 100644 --- a/common/userids.c +++ b/common/userids.c @@ -115,6 +115,7 @@ classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc, int openpgp_hack) mode = KEYDB_SEARCH_MODE_MAILEND; s++; desc->u.name = s; + desc->name_used = 1; break; case '<': /* An email address. */ @@ -126,24 +127,28 @@ classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc, int openpgp_hack) if (!openpgp_hack) s++; desc->u.name = s; + desc->name_used = 1; break; case '@': /* Part of an email address. */ mode = KEYDB_SEARCH_MODE_MAILSUB; s++; desc->u.name = s; + desc->name_used = 1; break; case '=': /* Exact compare. */ mode = KEYDB_SEARCH_MODE_EXACT; s++; desc->u.name = s; + desc->name_used = 1; break; case '*': /* Case insensitive substring search. */ mode = KEYDB_SEARCH_MODE_SUBSTR; s++; desc->u.name = s; + desc->name_used = 1; break; case '+': /* Compare individual words. Note that this has not @@ -151,6 +156,7 @@ classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc, int openpgp_hack) mode = KEYDB_SEARCH_MODE_WORDS; s++; desc->u.name = s; + desc->name_used = 1; break; case '/': /* Subject's DN. */ @@ -161,6 +167,7 @@ classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc, int openpgp_hack) goto out; } desc->u.name = s; + desc->name_used = 1; mode = KEYDB_SEARCH_MODE_SUBJECT; break; @@ -178,6 +185,7 @@ classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc, int openpgp_hack) goto out; } desc->u.name = s; + desc->name_used = 1; mode = KEYDB_SEARCH_MODE_ISSUER; } else @@ -205,6 +213,7 @@ classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc, int openpgp_hack) goto out; } desc->u.name = s; + desc->name_used = 1; mode = KEYDB_SEARCH_MODE_ISSUER_SN; } } @@ -472,6 +481,7 @@ classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc, int openpgp_hack) if (!mode) /* Default to substring search. */ { desc->u.name = s; + desc->name_used = 1; mode = KEYDB_SEARCH_MODE_SUBSTR; } } |