aboutsummaryrefslogtreecommitdiffstats
path: root/common/userids.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2021-07-08 11:55:18 +0000
committerWerner Koch <[email protected]>2021-07-08 11:57:13 +0000
commit101ba4f18aceb39c4d5f0e0a7e16e66827f8e612 (patch)
tree7cdc6b3f168b8f62e6e7dcf3fbab3ec165b33f7c /common/userids.c
parentscd: Detect external interference when PCSC_SHARED. (diff)
downloadgnupg-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.c10
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;
}
}