[Pkg-gnupg-commit] [gpgme] 28/62: core: Detect unreadable keyrings.

Daniel Kahn Gillmor dkg at fifthhorseman.net
Sat Nov 19 04:03:33 UTC 2016


This is an automated email from the git hooks/post-receive script.

dkg pushed a commit to branch experimental
in repository gpgme.

commit 2a39bd6c30d21c43c86645a7908ce6c57dad5e20
Author: Werner Koch <wk at gnupg.org>
Date:   Thu Nov 10 17:13:02 2016 +0100

    core: Detect unreadable keyrings.
    
    * src/keylist.c (op_data_t): Add field keydb_search_err.
    (keylist_status_handler): Parse STATUS_ERROR into that var.
    (gpgme_op_keylist_next): Use that err instead of GPG_ERR_EOF.
    --
    
    With a recent GnuPG version this allows to detect a keyring with wrong
    permissions (i.e. no read access).  GPG_ERR_OPEN_KEYRING will be
    returned instead of GPG_ERR_EOF.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>
---
 src/keylist.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/keylist.c b/src/keylist.c
index 8a0c5a3..6e22e16 100644
--- a/src/keylist.c
+++ b/src/keylist.c
@@ -54,6 +54,9 @@ typedef struct
 {
   struct _gpgme_op_keylist_result result;
 
+  /* The error code from ERROR keydb_search. */
+  gpgme_error_t keydb_search_err;
+
   gpgme_key_t tmp_key;
 
   /* This points to the last uid in tmp_key.  */
@@ -135,10 +138,17 @@ keylist_status_handler (void *priv, gpgme_status_code_t code, char *args)
       opd->result.truncated = 1;
       break;
 
+    case GPGME_STATUS_ERROR:
+      err = _gpgme_parse_failure (args);
+      if (!opd->keydb_search_err && !strcmp (args, "keydb_search"))
+        opd->keydb_search_err = err;
+      err = 0;
+      break;
+
     default:
       break;
     }
-  return 0;
+  return err;
 }
 
 

@@ -1138,7 +1148,8 @@ gpgme_op_keylist_next (gpgme_ctx_t ctx, gpgme_key_t *r_key)
 	return TRACE_ERR (err);
 
       if (!opd->key_cond)
-	return TRACE_ERR (gpg_error (GPG_ERR_EOF));
+	return TRACE_ERR (opd->keydb_search_err? opd->keydb_search_err
+                          /**/                 : gpg_error (GPG_ERR_EOF));
 
       opd->key_cond = 0;
       assert (opd->key_queue);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gpgme.git



More information about the Pkg-gnupg-commit mailing list