aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine-gpg.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2016-07-13 12:45:02 +0000
committerWerner Koch <[email protected]>2016-07-13 12:45:02 +0000
commitd8d5f5a16712244fe6eff860b6ac5f007b1bf870 (patch)
tree08fa3d61daa6b1b02c566df56c1e2926de5ef674 /src/engine-gpg.c
parentcore: Pass the engine's version string to the engine's new function. (diff)
downloadgpgme-d8d5f5a16712244fe6eff860b6ac5f007b1bf870.tar.gz
gpgme-d8d5f5a16712244fe6eff860b6ac5f007b1bf870.zip
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 <[email protected]>
Diffstat (limited to '')
-rw-r--r--src/engine-gpg.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c
index e279f04b..16571a5a 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)