[git] GPGME - branch, master, updated. gpgme-1.11.1-83-g7bc5d3c

by Andre Heinecke cvs at cvs.gnupg.org
Mon Jul 9 10:58:08 CEST 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG Made Easy".

The branch, master has been updated
       via  7bc5d3c7e41c6e42a583a61a4c9504058fbb2976 (commit)
      from  cacca62d06c6cf4a291f7ab2571cf52d671d140f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 7bc5d3c7e41c6e42a583a61a4c9504058fbb2976
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Tue Jul 3 17:50:23 2018 +0200

    Add ctx flag for auto-key-locate
    
    * src/context.h (gpgme_context): Add auto_key_locate.
    * src/engine-gpg.c (engine_gpg): Add auto_key_locate.
    (gpg_set_engine_flags, build_argv): Handle auto_key_locate.
    (gpg_release): Free auto_key_locate.
    * src/gpgme.c (gpgme_release): Free auto_key_locate.
    (gpgme_get_ctx_flag, gpgme_set_ctx_flag): Handle auto-key-locate.
    * doc/gpgme.texi: Document auto-key-locate flag.
    * tests/run-keylist.c (show_usage, main): Add --from-wkd option.
    
    --
    This enables users of GPGME to control more fine grained what
    auto-key-locate does.  Especially for WKD lookups / refreshes
    can this be useful.
    
    GnuPG-Bug-Id: T2917
    Differential Revision: https://dev.gnupg.org/D463

diff --git a/NEWS b/NEWS
index 9c64110..ae80642 100644
--- a/NEWS
+++ b/NEWS
@@ -4,12 +4,16 @@ Noteworthy changes in version 1.11.2 (unreleased)
  * Even for old versions of gpg a missing MDC will now lead to a
    decryption failure.
 
+ * Added context flag "auto-key-locate" to control the
+   behavior of GPGME_KEYLIST_MODE_LOCATE.
+
  * Interface changes relative to the 1.11.1 release:
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  gpgme_decrypt_result_t           EXTENDED: New field legacy_cipher_nomdc.
  gpgme_set_ctx_flag               EXTENDED: New flag 'ignore-mdc-error'.
  GPGME_AUDITLOG_DEFAULT                     NEW.
  GPGME_AUDITLOG_DIAG                        NEW.
+ gpgme_set_ctx_flag          EXTENDED: New flag 'auto-key-locate'.
  cpp: DecryptionResult::sessionKey          NEW.
  cpp: DecryptionResult::symkeyAlgo          NEW.
  cpp: DecryptionResult::isLegacyCipherNoMDC New.
diff --git a/doc/gpgme.texi b/doc/gpgme.texi
index 3dac60d..6e328e6 100644
--- a/doc/gpgme.texi
+++ b/doc/gpgme.texi
@@ -3096,6 +3096,16 @@ result of the former try had the decryption result flag
 @code{legacy_cipher_nomdc} set.  For failsafe reasons this flag is
 reset after each operation.
 
+ at item "auto-key-locate"
+The string given in @var{value} is passed to gpg.  This can be used
+to change the behavior of a @code{GPGME_KEYLIST_MODE_LOCATE} keylisting.
+Valid values are documented in the GnuPG manual and the gpg man page under
+the option @option{--auto-key-locate}.
+Requires at least GnuPG 2.1.18.
+
+Note: Keys retrieved through @code{auto-key-locate} are automatically
+imported in the keyring.
+
 @end table
 
 This function returns @code{0} on success.
diff --git a/src/context.h b/src/context.h
index bdab687..1c9379b 100644
--- a/src/context.h
+++ b/src/context.h
@@ -155,6 +155,9 @@ struct gpgme_context
   /* The optional request origin.  */
   char *request_origin;
 
+  /* The optional auto key locate options.  */
+  char *auto_key_locate;
+
   /* The locale for the pinentry.  */
   char *lc_ctype;
   char *lc_messages;
diff --git a/src/engine-gpg.c b/src/engine-gpg.c
index f096bcb..be78957 100644
--- a/src/engine-gpg.c
+++ b/src/engine-gpg.c
@@ -140,6 +140,7 @@ struct engine_gpg
   struct gpgme_io_cbs io_cbs;
   gpgme_pinentry_mode_t pinentry_mode;
   char request_origin[10];
+  char *auto_key_locate;
 
   struct {
     unsigned int no_symkey_cache : 1;
@@ -453,6 +454,7 @@ gpg_release (void *engine)
     free_argv (gpg->argv);
   if (gpg->cmd.keyword)
     free (gpg->cmd.keyword);
+  free (gpg->auto_key_locate);
 
   gpgme_data_release (gpg->override_session_key);
   gpgme_data_release (gpg->diagnostics);
@@ -659,6 +661,14 @@ gpg_set_engine_flags (void *engine, const gpgme_ctx_t ctx)
   else
     *gpg->request_origin = 0;
 
+  if (ctx->auto_key_locate && have_gpg_version (gpg, "2.1.18"))
+    {
+      if (gpg->auto_key_locate)
+        free (gpg->auto_key_locate);
+      gpg->auto_key_locate = _gpgme_strconcat ("--auto-key-locate=",
+                                               ctx->auto_key_locate, NULL);
+    }
+
   gpg->flags.no_symkey_cache = (ctx->no_symkey_cache
                                 && have_gpg_version (gpg, "2.2.7"));
   gpg->flags.offline = (ctx->offline && have_gpg_version (gpg, "2.1.23"));
@@ -958,6 +968,19 @@ build_argv (engine_gpg_t gpg, const char *pgmname)
       argc++;
     }
 
+  if (gpg->auto_key_locate)
+    {
+      argv[argc] = strdup (gpg->auto_key_locate);
+      if (!argv[argc])
+        {
+          int saved_err = gpg_error_from_syserror ();
+          free (fd_data_map);
+          free_argv (argv);
+          return saved_err;
+        }
+      argc++;
+    }
+
   if (gpg->flags.no_symkey_cache)
     {
       argv[argc] = strdup ("--no-symkey-cache");
diff --git a/src/gpgme.c b/src/gpgme.c
index b03c7b8..2d829d9 100644
--- a/src/gpgme.c
+++ b/src/gpgme.c
@@ -249,6 +249,7 @@ gpgme_release (gpgme_ctx_t ctx)
   free (ctx->lc_messages);
   free (ctx->override_session_key);
   free (ctx->request_origin);
+  free (ctx->auto_key_locate);
   _gpgme_engine_info_release (ctx->engine_info);
   ctx->engine_info = NULL;
   DESTROY_LOCK (ctx->lock);
@@ -546,6 +547,13 @@ gpgme_set_ctx_flag (gpgme_ctx_t ctx, const char *name, const char *value)
     {
       ctx->ignore_mdc_error = abool;
     }
+  else if (!strcmp (name, "auto-key-locate"))
+    {
+      free (ctx->auto_key_locate);
+      ctx->auto_key_locate = strdup (value);
+      if (!ctx->auto_key_locate)
+        err = gpg_error_from_syserror ();
+    }
   else
     err = gpg_error (GPG_ERR_UNKNOWN_NAME);
 
@@ -599,6 +607,10 @@ gpgme_get_ctx_flag (gpgme_ctx_t ctx, const char *name)
     {
       return ctx->ignore_mdc_error? "1":"";
     }
+  else if (!strcmp (name, "auto-key-locate"))
+    {
+      return ctx->auto_key_locate? ctx->auto_key_locate : "";
+    }
   else
     return NULL;
 }
diff --git a/tests/run-keylist.c b/tests/run-keylist.c
index 295251a..9725fa3 100644
--- a/tests/run-keylist.c
+++ b/tests/run-keylist.c
@@ -57,6 +57,7 @@ show_usage (int ex)
          "  --import         import all keys\n"
          "  --offline        use offline mode\n"
          "  --from-file      list all keys in the given file\n"
+         "  --from-wkd       list key from a web key directory\n"
          "  --require-gnupg  required at least the given GnuPG version\n"
          , stderr);
   exit (ex);
@@ -100,6 +101,7 @@ main (int argc, char **argv)
   int only_secret = 0;
   int offline = 0;
   int from_file = 0;
+  int from_wkd = 0;
   gpgme_data_t data = NULL;
 
 
@@ -194,6 +196,12 @@ main (int argc, char **argv)
           gpgme_set_global_flag ("require-gnupg", *argv);
           argc--; argv++;
         }
+      else if (!strcmp (*argv, "--from-wkd"))
+        {
+          argc--; argv++;
+          mode |= GPGME_KEYLIST_MODE_LOCATE;
+          from_wkd = 1;
+        }
       else if (!strncmp (*argv, "--", 2))
         show_usage (1);
     }
@@ -213,6 +221,13 @@ main (int argc, char **argv)
 
   gpgme_set_offline (ctx, offline);
 
+  if (from_wkd)
+    {
+      err = gpgme_set_ctx_flag (ctx, "auto-key-locate",
+                                "clear,nodefault,wkd");
+      fail_if_err (err);
+    }
+
   if (from_file)
     {
       err = gpgme_data_new_from_file (&data, *argv, 1);

-----------------------------------------------------------------------

Summary of changes:
 NEWS                |  4 ++++
 doc/gpgme.texi      | 10 ++++++++++
 src/context.h       |  3 +++
 src/engine-gpg.c    | 23 +++++++++++++++++++++++
 src/gpgme.c         | 12 ++++++++++++
 tests/run-keylist.c | 15 +++++++++++++++
 6 files changed, 67 insertions(+)


hooks/post-receive
-- 
GnuPG Made Easy
http://git.gnupg.org




More information about the Gnupg-commits mailing list