mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-17 15:44:34 +02:00
gpg: Support KEYGRIP search with traditional keyring.
* g10/keyring.c (keyring_search): Handle KEYDB_SEARCH_MODE_KEYGRIP. -- GnuPG-bug-id: 5469 Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
c17dac5ac3
commit
9668ee097a
@ -968,7 +968,7 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
|
|||||||
int save_mode;
|
int save_mode;
|
||||||
off_t offset, main_offset;
|
off_t offset, main_offset;
|
||||||
size_t n;
|
size_t n;
|
||||||
int need_uid, need_words, need_keyid, need_fpr, any_skip;
|
int need_uid, need_words, need_keyid, need_fpr, any_skip, need_grip;
|
||||||
int pk_no, uid_no;
|
int pk_no, uid_no;
|
||||||
int initial_skip;
|
int initial_skip;
|
||||||
int scanned_from_start;
|
int scanned_from_start;
|
||||||
@ -976,9 +976,10 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
|
|||||||
PKT_user_id *uid = NULL;
|
PKT_user_id *uid = NULL;
|
||||||
PKT_public_key *pk = NULL;
|
PKT_public_key *pk = NULL;
|
||||||
u32 aki[2];
|
u32 aki[2];
|
||||||
|
unsigned char grip[KEYGRIP_LEN];
|
||||||
|
|
||||||
/* figure out what information we need */
|
/* figure out what information we need */
|
||||||
need_uid = need_words = need_keyid = need_fpr = any_skip = 0;
|
need_uid = need_words = need_keyid = need_fpr = any_skip = need_grip = 0;
|
||||||
for (n=0; n < ndesc; n++)
|
for (n=0; n < ndesc; n++)
|
||||||
{
|
{
|
||||||
switch (desc[n].mode)
|
switch (desc[n].mode)
|
||||||
@ -1005,8 +1006,11 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
|
|||||||
/* always restart the search in this mode */
|
/* always restart the search in this mode */
|
||||||
keyring_search_reset (hd);
|
keyring_search_reset (hd);
|
||||||
break;
|
break;
|
||||||
|
case KEYDB_SEARCH_MODE_KEYGRIP:
|
||||||
|
need_grip = 1;
|
||||||
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
if (desc[n].skipfnc)
|
if (desc[n].skipfnc)
|
||||||
{
|
{
|
||||||
any_skip = 1;
|
any_skip = 1;
|
||||||
@ -1143,6 +1147,8 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
|
|||||||
}
|
}
|
||||||
if (need_keyid)
|
if (need_keyid)
|
||||||
keyid_from_pk (pk, aki);
|
keyid_from_pk (pk, aki);
|
||||||
|
if (need_grip)
|
||||||
|
keygrip_from_pk (pk, grip);
|
||||||
|
|
||||||
if (use_key_present_hash
|
if (use_key_present_hash
|
||||||
&& !key_present_hash_ready
|
&& !key_present_hash_ready
|
||||||
@ -1197,6 +1203,10 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
|
|||||||
if (pk)
|
if (pk)
|
||||||
goto found;
|
goto found;
|
||||||
break;
|
break;
|
||||||
|
case KEYDB_SEARCH_MODE_KEYGRIP:
|
||||||
|
if (pk && !memcmp (desc[n].u.grip, grip, KEYGRIP_LEN))
|
||||||
|
goto found;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
rc = GPG_ERR_INV_ARG;
|
rc = GPG_ERR_INV_ARG;
|
||||||
goto found;
|
goto found;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user