[Pkg-gnupg-commit] [gnupg2] 141/292: agent: Fix saving with FORCE=1.
Daniel Kahn Gillmor
dkg at fifthhorseman.net
Mon Nov 21 06:31:35 UTC 2016
This is an automated email from the git hooks/post-receive script.
dkg pushed a commit to branch master
in repository gnupg2.
commit 1ffd475f99eaff4e40950eda88702f8db9288eb5
Author: NIIBE Yutaka <gniibe at fsij.org>
Date: Fri Oct 21 10:57:29 2016 +0900
agent: Fix saving with FORCE=1.
* agent/findkey.c (agent_write_private_key): Recover from an error of
GPG_ERR_ENOENT when FORCE=1 and it is opened with "rb+".
--
Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>
---
agent/findkey.c | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/agent/findkey.c b/agent/findkey.c
index 23e94f0..162e8c2 100644
--- a/agent/findkey.c
+++ b/agent/findkey.c
@@ -152,17 +152,30 @@ agent_write_private_key (const unsigned char *grip,
if (!fp)
{
gpg_error_t tmperr = gpg_error_from_syserror ();
- log_error ("can't create '%s': %s\n", fname, gpg_strerror (tmperr));
- xfree (fname);
- return tmperr;
- }
- /* See if an existing key is in extended format. */
- if (force)
+ if (force && gpg_err_code (tmperr) == GPG_ERR_ENOENT)
+ {
+ fp = es_fopen (fname, "wbx,mode=-rw");
+ if (!fp)
+ {
+ tmperr = gpg_error_from_syserror ();
+ goto error;
+ }
+ }
+ else
+ {
+ error:
+ log_error ("can't create '%s': %s\n", fname, gpg_strerror (tmperr));
+ xfree (fname);
+ return tmperr;
+ }
+ }
+ else if (force)
{
gpg_error_t rc;
char first;
+ /* See if an existing key is in extended format. */
if (es_fread (&first, 1, 1, fp) != 1)
{
rc = gpg_error_from_syserror ();
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git
More information about the Pkg-gnupg-commit
mailing list