[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