[git] GPGME - branch, master, updated. gpgme-1.6.0-230-gd8d5f5a

by Werner Koch cvs at cvs.gnupg.org
Wed Jul 13 14:51:36 CEST 2016


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  d8d5f5a16712244fe6eff860b6ac5f007b1bf870 (commit)
       via  2095b1573a8196ba3efdf817324d1b3ee05cbb93 (commit)
      from  537cb871fd59f3a20c697a046715e6339ff6633b (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 d8d5f5a16712244fe6eff860b6ac5f007b1bf870
Author: Werner Koch <wk at gnupg.org>
Date:   Wed Jul 13 14:45:02 2016 +0200

    core: New GPGME_DATA_ENCODING_MIME.
    
    * src/gpgme.h.in (GPGME_DATA_ENCODING_MIME): New.
    * src/data.c (gpgme_data_set_encoding): Adjust check.
    * src/engine-gpg.c (have_gpg_version): New.
    (gpg_encrypt, gpg_encrypt_sign): Pass flag '--mimemode'.
    (gpg_sign): Ditto.
    
    * lang/cpp/src/data.h (GpgME): Add MimeEncoding.
    * lang/cpp/src/data.cpp (encoding, setEncoding): Support MimeEncoding.
    
    * src/gpgme-tool.c (server_data_encoding): Add flag --mime.
    --
    
    This feature allows an application to declare that the encrypted or
    signed data is a valid MIME part.
    
    What is missing is a way to return that information to the application
    after decryption/verification.  This can be done by setting the
    encoding of the output data object; however this requires some
    internal additions to our processing model.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/NEWS b/NEWS
index 32f3c84..bb31a50 100644
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,7 @@ Noteworthy changes in version 1.7.0 (unreleased) [C25/A14/R_]
  GPGME_STATUS_NOTATION_FLAGS    NEW.
  GPGME_DATA_TYPE_PGP_ENCRYPTED  NEW.
  GPGME_DATA_TYPE_PGP_SIGNATURE  NEW.
+ GPGME_DATA_ENCODING_MIME       NEW.
 
 
 Noteworthy changes in version 1.6.0 (2015-08-26) [C25/A14/R0]
diff --git a/doc/gpgme.texi b/doc/gpgme.texi
index 87322b0..c514ff8 100644
--- a/doc/gpgme.texi
+++ b/doc/gpgme.texi
@@ -2130,6 +2130,9 @@ scheme as used by @acronym{MIME} and other protocols.
 This specifies that the data is encoded in an armored form as used by
 OpenPGP and PEM.
 
+ at item GPGME_DATA_ENCODING_MIME
+This specifies that the data is encoded as a MIME part.
+
 @item GPGME_DATA_ENCODING_URL
 The data is a list of linefeed delimited URLs.  This is only useful with
 @code{gpgme_op_import}.
diff --git a/lang/cpp/src/data.cpp b/lang/cpp/src/data.cpp
index af1c479..64acb47 100644
--- a/lang/cpp/src/data.cpp
+++ b/lang/cpp/src/data.cpp
@@ -146,6 +146,7 @@ GpgME::Data::Encoding GpgME::Data::encoding() const
     case GPGME_DATA_ENCODING_BINARY: return BinaryEncoding;
     case GPGME_DATA_ENCODING_BASE64: return Base64Encoding;
     case GPGME_DATA_ENCODING_ARMOR:  return ArmorEncoding;
+    case GPGME_DATA_ENCODING_MIME:   return MimeEncoding;
     }
     return AutoEncoding;
 }
@@ -158,6 +159,7 @@ GpgME::Error GpgME::Data::setEncoding(Encoding enc)
     case BinaryEncoding: ge = GPGME_DATA_ENCODING_BINARY; break;
     case Base64Encoding: ge = GPGME_DATA_ENCODING_BASE64; break;
     case ArmorEncoding:  ge = GPGME_DATA_ENCODING_ARMOR;  break;
+    case MimeEncoding:   ge = GPGME_DATA_ENCODING_MIME;  break;
     }
     return Error(gpgme_data_set_encoding(d->data, ge));
 }
diff --git a/lang/cpp/src/data.h b/lang/cpp/src/data.h
index d5e54aa..b2f2173 100644
--- a/lang/cpp/src/data.h
+++ b/lang/cpp/src/data.h
@@ -77,7 +77,8 @@ public:
         AutoEncoding,
         BinaryEncoding,
         Base64Encoding,
-        ArmorEncoding
+        ArmorEncoding,
+        MimeEncoding
     };
     Encoding encoding() const;
     Error setEncoding(Encoding encoding);
diff --git a/src/data.c b/src/data.c
index 7123a82..87b619e 100644
--- a/src/data.c
+++ b/src/data.c
@@ -193,7 +193,7 @@ gpgme_data_set_encoding (gpgme_data_t dh, gpgme_data_encoding_t enc)
 	      "encoding=%i", enc);
   if (!dh)
     return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
-  if (enc < 0 || enc > GPGME_DATA_ENCODING_URL0)
+  if (enc < 0 || enc > GPGME_DATA_ENCODING_MIME)
     return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
   dh->encoding = enc;
   return TRACE_ERR (0);
diff --git a/src/engine-gpg.c b/src/engine-gpg.c
index e279f04..16571a5 100644
--- a/src/engine-gpg.c
+++ b/src/engine-gpg.c
@@ -294,6 +294,15 @@ add_data (engine_gpg_t gpg, gpgme_data_t data, int dup_to, int inbound)
   return 0;
 }
 
+
+/* Return true if the engine's version is at least VERSION.  */
+static int
+have_gpg_version (engine_gpg_t gpg, const char *version)
+{
+  return _gpgme_compare_versions (gpg->version, version);
+}
+
+
 

 static char *
 gpg_get_version (const char *file_name)
@@ -1719,6 +1728,10 @@ gpg_encrypt (void *engine, gpgme_key_t recp[], gpgme_encrypt_flags_t flags,
   if (!err && (flags & GPGME_ENCRYPT_NO_COMPRESS))
     err = add_arg (gpg, "--compress-algo=none");
 
+  if (gpgme_data_get_encoding (plain) == GPGME_DATA_ENCODING_MIME
+      && have_gpg_version (gpg, "2.1.14"))
+    err = add_arg (gpg, "--mimemode");
+
   if (!symmetric)
     {
       /* If we know that all recipients are valid (full or ultimate trust)
@@ -1779,6 +1792,10 @@ gpg_encrypt_sign (void *engine, gpgme_key_t recp[],
   if (!err && (flags & GPGME_ENCRYPT_NO_COMPRESS))
     err = add_arg (gpg, "--compress-algo=none");
 
+  if (gpgme_data_get_encoding (plain) == GPGME_DATA_ENCODING_MIME
+      && have_gpg_version (gpg, "2.1.14"))
+    err = add_arg (gpg, "--mimemode");
+
   if (!symmetric)
     {
       /* If we know that all recipients are valid (full or ultimate trust)
@@ -2381,8 +2398,14 @@ gpg_sign (void *engine, gpgme_data_t in, gpgme_data_t out,
 	err = add_arg (gpg, "--detach");
       if (!err && use_armor)
 	err = add_arg (gpg, "--armor");
-      if (!err && use_textmode)
-	err = add_arg (gpg, "--textmode");
+      if (!err)
+        {
+          if (gpgme_data_get_encoding (in) == GPGME_DATA_ENCODING_MIME
+              && have_gpg_version (gpg, "2.1.14"))
+            err = add_arg (gpg, "--mimemode");
+          else if (use_textmode)
+            err = add_arg (gpg, "--textmode");
+        }
     }
 
   if (!err)
diff --git a/src/gpgme-tool.c b/src/gpgme-tool.c
index ccda973..080b306 100644
--- a/src/gpgme-tool.c
+++ b/src/gpgme-tool.c
@@ -1876,6 +1876,8 @@ server_data_encoding (const char *line)
     return GPGME_DATA_ENCODING_URLESC;
   if (strstr (line, "--url0"))
     return GPGME_DATA_ENCODING_URL0;
+  if (strstr (line, "--mime"))
+    return GPGME_DATA_ENCODING_MIME;
   return GPGME_DATA_ENCODING_NONE;
 }
 
diff --git a/src/gpgme.h.in b/src/gpgme.h.in
index cdb7037..49d56c3 100644
--- a/src/gpgme.h.in
+++ b/src/gpgme.h.in
@@ -228,7 +228,8 @@ typedef enum
     GPGME_DATA_ENCODING_ARMOR  = 3,	/* Either PEM or OpenPGP Armor.  */
     GPGME_DATA_ENCODING_URL    = 4,     /* LF delimited URL list.        */
     GPGME_DATA_ENCODING_URLESC = 5,     /* Ditto, but percent escaped.   */
-    GPGME_DATA_ENCODING_URL0   = 6      /* Nul delimited URL list.       */
+    GPGME_DATA_ENCODING_URL0   = 6,     /* Nul delimited URL list.       */
+    GPGME_DATA_ENCODING_MIME   = 7      /* Data is a MIME part.          */
   }
 gpgme_data_encoding_t;
 

commit 2095b1573a8196ba3efdf817324d1b3ee05cbb93
Author: Werner Koch <wk at gnupg.org>
Date:   Wed Jul 13 13:57:14 2016 +0200

    core: Pass the engine's version string to the engine's new function.
    
    * src/engine-backend.h (engine_ops): Add arg 'version' to NEW.
    * src/engine-assuan.c (llass_new): Add dummy arg 'version'.
    * src/engine-g13.c (g13_new): Ditto.
    * src/engine-gpgconf.c (gpgconf_new): Ditto.
    * src/engine-gpgsm.c (gpgsm_new): Ditto.
    * src/engine-spawn.c (engspawn_new): Ditto.
    * src/engine-uiserver.c (uiserver_new): Ditto.
    * src/engine.c (_gpgme_engine_new): Pass version string to the new
    function.
    * src/engine-gpg.c (struct engine_gpg): Add field 'version'.
    (gpg_new): Add arg 'version'.
    (gpg_release): Free VERSION.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/src/engine-assuan.c b/src/engine-assuan.c
index a396006..6f58e08 100644
--- a/src/engine-assuan.c
+++ b/src/engine-assuan.c
@@ -212,12 +212,15 @@ llass_release (void *engine)
 /* Create a new instance. If HOME_DIR is NULL standard options for use
    with gpg-agent are issued.  */
 static gpgme_error_t
-llass_new (void **engine, const char *file_name, const char *home_dir)
+llass_new (void **engine, const char *file_name, const char *home_dir,
+           const char *version)
 {
   gpgme_error_t err = 0;
   engine_llass_t llass;
   char *optstr;
 
+  (void)version; /* Not yet used.  */
+
   llass = calloc (1, sizeof *llass);
   if (!llass)
     return gpg_error_from_syserror ();
diff --git a/src/engine-backend.h b/src/engine-backend.h
index ea7db14..a15194e 100644
--- a/src/engine-backend.h
+++ b/src/engine-backend.h
@@ -44,7 +44,8 @@ struct engine_ops
   const char *(*get_req_version) (void);
 
   gpgme_error_t (*new) (void **r_engine,
-			const char *file_name, const char *home_dir);
+			const char *file_name, const char *home_dir,
+                        const char *version);
 
   /* Member functions.  */
   void (*release) (void *engine);
diff --git a/src/engine-g13.c b/src/engine-g13.c
index 8f24f4c..afb085d 100644
--- a/src/engine-g13.c
+++ b/src/engine-g13.c
@@ -212,7 +212,8 @@ g13_release (void *engine)
 
 
 static gpgme_error_t
-g13_new (void **engine, const char *file_name, const char *home_dir)
+g13_new (void **engine, const char *file_name, const char *home_dir,
+         const char *version)
 {
   gpgme_error_t err = 0;
   engine_g13_t g13;
@@ -224,6 +225,8 @@ g13_new (void **engine, const char *file_name, const char *home_dir)
   char *dft_ttytype = NULL;
   char *optstr;
 
+  (void)version; /* Not yet used.  */
+
   g13 = calloc (1, sizeof *g13);
   if (!g13)
     return gpg_error_from_syserror ();
diff --git a/src/engine-gpg.c b/src/engine-gpg.c
index e507c68..e279f04 100644
--- a/src/engine-gpg.c
+++ b/src/engine-gpg.c
@@ -78,6 +78,7 @@ typedef gpgme_error_t (*colon_preprocessor_t) (char *line, char **rline);
 struct engine_gpg
 {
   char *file_name;
+  char *version;
 
   char *lc_messages;
   char *lc_ctype;
@@ -388,6 +389,8 @@ gpg_release (void *engine)
 
   if (gpg->file_name)
     free (gpg->file_name);
+  if (gpg->version)
+    free (gpg->version);
 
   if (gpg->lc_messages)
     free (gpg->lc_messages);
@@ -416,7 +419,8 @@ gpg_release (void *engine)
 
 
 static gpgme_error_t
-gpg_new (void **engine, const char *file_name, const char *home_dir)
+gpg_new (void **engine, const char *file_name, const char *home_dir,
+         const char *version)
 {
   engine_gpg_t gpg;
   gpgme_error_t rc = 0;
@@ -438,6 +442,16 @@ gpg_new (void **engine, const char *file_name, const char *home_dir)
 	}
     }
 
+  if (version)
+    {
+      gpg->version = strdup (version);
+      if (!gpg->version)
+	{
+	  rc = gpg_error_from_syserror ();
+	  goto leave;
+	}
+    }
+
   gpg->argtail = &gpg->arglist;
   gpg->status.fd[0] = -1;
   gpg->status.fd[1] = -1;
diff --git a/src/engine-gpgconf.c b/src/engine-gpgconf.c
index bcc9522..2e25d76 100644
--- a/src/engine-gpgconf.c
+++ b/src/engine-gpgconf.c
@@ -90,11 +90,14 @@ gpgconf_release (void *engine)
 
 
 static gpgme_error_t
-gpgconf_new (void **engine, const char *file_name, const char *home_dir)
+gpgconf_new (void **engine, const char *file_name, const char *home_dir,
+             const char *version)
 {
   gpgme_error_t err = 0;
   engine_gpgconf_t gpgconf;
 
+  (void)version; /* Not yet used.  */
+
   gpgconf = calloc (1, sizeof *gpgconf);
   if (!gpgconf)
     return gpg_error_from_syserror ();
diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c
index 3aa9f0b..d4a1cf7 100644
--- a/src/engine-gpgsm.c
+++ b/src/engine-gpgsm.c
@@ -237,7 +237,8 @@ gpgsm_release (void *engine)
 
 
 static gpgme_error_t
-gpgsm_new (void **engine, const char *file_name, const char *home_dir)
+gpgsm_new (void **engine, const char *file_name, const char *home_dir,
+           const char *version)
 {
   gpgme_error_t err = 0;
   engine_gpgsm_t gpgsm;
@@ -253,6 +254,8 @@ gpgsm_new (void **engine, const char *file_name, const char *home_dir)
   char *dft_ttytype = NULL;
   char *optstr;
 
+  (void)version; /* Not yet used.  */
+
   gpgsm = calloc (1, sizeof *gpgsm);
   if (!gpgsm)
     return gpg_error_from_syserror ();
diff --git a/src/engine-spawn.c b/src/engine-spawn.c
index 3674efb..b552388 100644
--- a/src/engine-spawn.c
+++ b/src/engine-spawn.c
@@ -324,12 +324,14 @@ engspawn_get_req_version (void)
 
 
 static gpgme_error_t
-engspawn_new (void **engine, const char *file_name, const char *home_dir)
+engspawn_new (void **engine, const char *file_name, const char *home_dir,
+              const char *version)
 {
   engine_spawn_t esp;
 
   (void)file_name;
   (void)home_dir;
+  (void)version;
 
   esp = calloc (1, sizeof *esp);
   if (!esp)
diff --git a/src/engine-uiserver.c b/src/engine-uiserver.c
index d05ade6..986f1d1 100644
--- a/src/engine-uiserver.c
+++ b/src/engine-uiserver.c
@@ -238,7 +238,8 @@ uiserver_release (void *engine)
 
 
 static gpgme_error_t
-uiserver_new (void **engine, const char *file_name, const char *home_dir)
+uiserver_new (void **engine, const char *file_name, const char *home_dir,
+              const char *version)
 {
   gpgme_error_t err = 0;
   engine_uiserver_t uiserver;
@@ -247,6 +248,8 @@ uiserver_new (void **engine, const char *file_name, const char *home_dir)
   char *dft_ttytype = NULL;
   char *optstr;
 
+  (void)version; /* Not yet used.  */
+
   uiserver = calloc (1, sizeof *uiserver);
   if (!uiserver)
     return gpg_error_from_syserror ();
diff --git a/src/engine.c b/src/engine.c
index c9449db..4e59ada 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -463,7 +463,8 @@ _gpgme_engine_new (gpgme_engine_info_t info, engine_t *r_engine)
     {
       gpgme_error_t err;
       err = (*engine->ops->new) (&engine->engine,
-				 info->file_name, info->home_dir);
+				 info->file_name, info->home_dir,
+                                 info->version);
       if (err)
 	{
 	  free (engine);

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

Summary of changes:
 NEWS                  |  1 +
 doc/gpgme.texi        |  3 +++
 lang/cpp/src/data.cpp |  2 ++
 lang/cpp/src/data.h   |  3 ++-
 src/data.c            |  2 +-
 src/engine-assuan.c   |  5 ++++-
 src/engine-backend.h  |  3 ++-
 src/engine-g13.c      |  5 ++++-
 src/engine-gpg.c      | 43 ++++++++++++++++++++++++++++++++++++++++---
 src/engine-gpgconf.c  |  5 ++++-
 src/engine-gpgsm.c    |  5 ++++-
 src/engine-spawn.c    |  4 +++-
 src/engine-uiserver.c |  5 ++++-
 src/engine.c          |  3 ++-
 src/gpgme-tool.c      |  2 ++
 src/gpgme.h.in        |  3 ++-
 16 files changed, 80 insertions(+), 14 deletions(-)


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




More information about the Gnupg-commits mailing list