diff options
Diffstat (limited to 'src/engine-gpg.c')
-rw-r--r-- | src/engine-gpg.c | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c index fc9c7f90..eba61ac4 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -456,6 +456,22 @@ have_option_proc_all_sigs (engine_gpg_t gpg) } +static int +have_cmd_modify_recipients (engine_gpg_t gpg) +{ + static unsigned int flag; + + if (flag) + ; + else if (have_gpg_version (gpg, "2.5.1")) + flag = 1|2; + else + flag = 1; + + return !!(flag & 2); +} + + static void free_argv (char **argv) { @@ -2403,11 +2419,32 @@ gpg_encrypt (void *engine, gpgme_key_t recp[], const char *recpstring, if (gpg->flags.use_gpgtar && (flags & GPGME_ENCRYPT_WRAP)) return gpg_error (GPG_ERR_INV_VALUE); + if ((flags & (GPGME_ENCRYPT_ADD_RECP|GPGME_ENCRYPT_CHG_RECP)) + && !have_cmd_modify_recipients (gpg)) + return gpg_error (GPG_ERR_NOT_SUPPORTED); + if (recp || recpstring) - err = add_arg (gpg, "--encrypt"); + { + if ((flags & GPGME_ENCRYPT_ADD_RECP)) + err = add_arg (gpg, "--add-recipients"); + else if ((flags & GPGME_ENCRYPT_CHG_RECP)) + err = add_arg (gpg, "--change-recipients"); + else + err = add_arg (gpg, "--encrypt"); + } if (!err && ((flags & GPGME_ENCRYPT_SYMMETRIC) || (!recp && !recpstring))) - err = add_arg (gpg, "--symmetric"); + { + if (!recp && !recpstring) + { + if ((flags & GPGME_ENCRYPT_ADD_RECP)) + err = add_arg (gpg, "--add-recipients"); + else if ((flags & GPGME_ENCRYPT_CHG_RECP)) + err = add_arg (gpg, "--change-recipients"); + } + if (!err) + err = add_arg (gpg, "--symmetric"); + } if (!err && use_armor) err = add_gpg_arg (gpg, "--armor"); |