mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
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 <wk@gnupg.org>
This commit is contained in:
parent
044e5a3c38
commit
101ba4f18a
3 changed files with 95 additions and 10 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue