mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
agent: Update the key file only if not changed.
* common/name-value.c (struct name_value_container): Add flag "modified". (nvc_modified): New. (nvc_new): Set flag. (_nvc_add): Set flag. (nvc_delete): Set flag. (nvc_set): Set flag unless value did not change. (nve_set): Add arg PK. Change the caller. * agent/findkey.c (agent_write_private_key): Update only if modified. -- This helps software which uses a file system watcher to track changes to private keys. In particular smartcard triggered changes are a problem for such software because this may at worst trigger another smartcard read. GnuPG-bug-id: 6829
This commit is contained in:
parent
e43bd2a7a7
commit
cf2d3f7ba0
3 changed files with 56 additions and 9 deletions
|
@ -146,6 +146,8 @@ agent_write_private_key (const unsigned char *grip,
|
|||
}
|
||||
}
|
||||
|
||||
nvc_modified (pk, 1); /* Clear that flag after a read. */
|
||||
|
||||
if (!pk)
|
||||
{
|
||||
/* Key is still in the old format or does not exist - create a
|
||||
|
@ -242,7 +244,7 @@ agent_write_private_key (const unsigned char *grip,
|
|||
; /* No need to update Token entry. */
|
||||
else
|
||||
{
|
||||
err = nve_set (item, token);
|
||||
err = nve_set (pk, item, token);
|
||||
if (err)
|
||||
goto leave;
|
||||
}
|
||||
|
@ -263,6 +265,13 @@ agent_write_private_key (const unsigned char *grip,
|
|||
goto leave;
|
||||
}
|
||||
|
||||
/* Check whether we need to write the file at all. */
|
||||
if (!nvc_modified (pk, 0))
|
||||
{
|
||||
err = 0;
|
||||
goto leave;
|
||||
}
|
||||
|
||||
/* Create a temporary file for writing. */
|
||||
tmpfname = fname_from_keygrip (grip, 1);
|
||||
fp = tmpfname ? es_fopen (tmpfname, "wbx,mode=-rw") : NULL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue