mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
gpg,gpgsm: Block signals during keyring/keybox update.
* kbx/keybox-util.c (keybox_file_rename): Add arg BLOCK_SIGNALS. * kbx/keybox-update.c (rename_tmp_file): Block all signals when doing a double rename. * g10/keyring.c (rename_tmp_file): Block all signals during the double rename. -- This might fix Debian-bug-id: 831510 Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
3a2421c940
commit
48a2c93a18
4 changed files with 88 additions and 53 deletions
|
@ -1338,6 +1338,7 @@ static int
|
|||
rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname)
|
||||
{
|
||||
int rc = 0;
|
||||
int block = 0;
|
||||
|
||||
/* Invalidate close caches. */
|
||||
if (iobuf_ioctl (NULL, IOBUF_IOCTL_INVALIDATE_CACHE, 0, (char*)tmpfname ))
|
||||
|
@ -1349,12 +1350,18 @@ rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname)
|
|||
iobuf_ioctl (NULL, IOBUF_IOCTL_INVALIDATE_CACHE, 0, (char*)fname );
|
||||
|
||||
/* First make a backup file. */
|
||||
rc = keybox_file_rename (fname, bakfname);
|
||||
block = 1;
|
||||
rc = keybox_file_rename (fname, bakfname, &block);
|
||||
if (rc)
|
||||
goto fail;
|
||||
|
||||
/* then rename the file */
|
||||
rc = keybox_file_rename (tmpfname, fname);
|
||||
rc = keybox_file_rename (tmpfname, fname, NULL);
|
||||
if (block)
|
||||
{
|
||||
gnupg_unblock_all_signals ();
|
||||
block = 0;
|
||||
}
|
||||
if (rc)
|
||||
{
|
||||
register_secured_file (fname);
|
||||
|
@ -1379,6 +1386,8 @@ rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname)
|
|||
return 0;
|
||||
|
||||
fail:
|
||||
if (block)
|
||||
gnupg_unblock_all_signals ();
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue