aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2020-11-26 09:35:35 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2020-11-26 09:35:35 +0900
commit920154370834ad8d947aed19c9d914a27dde6baa (patch)
tree3c6930ef59d792edebb926497ed92d60b315b207
parent00037f499db830c75fee2111dfbef72fa11bd98a (diff)
downloadgnupg-920154370834ad8d947aed19c9d914a27dde6baa.tar.gz
scd,nks: Fix caching keygrip.
* scd/app-nks.c (keygripstr_from_pk_file): Identify by cfid if available. -- GnuPG-bug-id: 5150 Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
-rw-r--r--scd/app-nks.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/scd/app-nks.c b/scd/app-nks.c
index caf686316..7ed3be75f 100644
--- a/scd/app-nks.c
+++ b/scd/app-nks.c
@@ -292,7 +292,7 @@ keygripstr_from_pk_file (app_t app, int pkfid, int cfid, char *r_gripstr,
struct fid_cache_s *ci;
for (ci = app->app_local->fid_cache; ci; ci = ci->next)
- if (ci->fid && ci->fid == pkfid)
+ if (ci->fid && ((cfid && ci->fid == cfid) || (!cfid && ci->fid == pkfid)))
{
if (!ci->got_keygrip)
return gpg_error (GPG_ERR_NOT_FOUND);
@@ -455,7 +455,8 @@ keygripstr_from_pk_file (app_t app, int pkfid, int cfid, char *r_gripstr,
/* FIXME: We need to implement not_found caching. */
for (ci = app->app_local->fid_cache; ci; ci = ci->next)
- if (ci->fid && ci->fid == pkfid)
+ if (ci->fid
+ && ((cfid && ci->fid == cfid) || (!cfid && ci->fid == pkfid)))
{
/* Update the keygrip. */
memcpy (ci->keygripstr, r_gripstr, 2*KEYGRIP_LEN+1);
@@ -476,7 +477,7 @@ keygripstr_from_pk_file (app_t app, int pkfid, int cfid, char *r_gripstr,
; /* Out of memory - it is a cache, so we ignore it. */
else
{
- ci->fid = pkfid;
+ ci->fid = cfid? cfid : pkfid;
memcpy (ci->keygripstr, r_gripstr, 2*KEYGRIP_LEN+1);
ci->algo = algo;
ci->got_keygrip = 1;