diff options
Diffstat (limited to '')
| -rw-r--r-- | src/context.h | 3 | ||||
| -rw-r--r-- | src/engine-gpg.c | 34 | ||||
| -rw-r--r-- | src/gpgme.c | 8 | 
3 files changed, 44 insertions, 1 deletions
| diff --git a/src/context.h b/src/context.h index ea80f48f..9cfd8653 100644 --- a/src/context.h +++ b/src/context.h @@ -137,6 +137,9 @@ struct gpgme_context    /* True if the option --no-auto-check-trustdb shall be passed to gpg.  */    unsigned int no_auto_check_trustdb : 1; +  /* True if the option --proc-all-sigs shall be passed to gpg.  */ +  unsigned int proc_all_sigs : 1; +    /* Pass --expert to gpg edit key. */    unsigned int extended_edit : 1; diff --git a/src/engine-gpg.c b/src/engine-gpg.c index b099f566..fc9c7f90 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -153,6 +153,7 @@ struct engine_gpg      unsigned int include_key_block : 1;      unsigned int auto_key_import : 1;      unsigned int no_auto_check_trustdb : 1; +    unsigned int proc_all_sigs : 1;    } flags;    /* NULL or the data object fed to --override_session_key-fd.  */ @@ -435,6 +436,26 @@ have_usable_gpgtar (engine_gpg_t gpg)  } +static int +have_option_proc_all_sigs (engine_gpg_t gpg) +{ +  static unsigned int flag; + +  if (flag) +    ; +  else if (have_gpg_version (gpg, "2.5.1")) +    flag = 1|2; +  else if (have_gpg_version (gpg, "2.4.6") && !have_gpg_version (gpg, "2.5.0")) +    flag = 1|2; +  else if (have_gpg_version (gpg, "2.2.45") && !have_gpg_version (gpg, "2.3.0")) +    flag = 1|2; +  else +    flag = 1; + +  return !!(flag & 2); +} + +  static void  free_argv (char **argv)  { @@ -741,6 +762,7 @@ gpg_set_engine_flags (void *engine, const gpgme_ctx_t ctx)      }    gpg->flags.no_auto_check_trustdb = !!ctx->no_auto_check_trustdb; +  gpg->flags.proc_all_sigs = !!ctx->proc_all_sigs;  } @@ -985,7 +1007,7 @@ build_argv (engine_gpg_t gpg, const char *pgmname)    if (gpg->pinentry_mode)      argc += 1 + !!gpg->flags.use_gpgtar;    if (!gpg->cmd.used) -    argc++; /* --batch */ +    argc += 2; /* --batch and --proc-all-sigs */    argv = calloc (argc + 1, sizeof *argv);    allocated_argc = argc; @@ -1220,6 +1242,16 @@ build_argv (engine_gpg_t gpg, const char *pgmname)            goto leave;          }        argc++; +      if (gpg->flags.proc_all_sigs && have_option_proc_all_sigs (gpg)) +        { +          argv[argc] = strdup ("--proc-all-sigs"); +          if (!argv[argc]) +            { +              err = gpg_error_from_syserror (); +              goto leave; +            } +          argc++; +        }      }    for (a = gpg->arglist; a; a = a->next)      { diff --git a/src/gpgme.c b/src/gpgme.c index f6d7f38d..086e680b 100644 --- a/src/gpgme.c +++ b/src/gpgme.c @@ -619,6 +619,10 @@ gpgme_set_ctx_flag (gpgme_ctx_t ctx, const char *name, const char *value)      {        ctx->no_auto_check_trustdb = abool;      } +  else if (!strcmp (name, "proc-all-sigs")) +    { +      ctx->proc_all_sigs = abool; +    }    else      err = gpg_error (GPG_ERR_UNKNOWN_NAME); @@ -708,6 +712,10 @@ gpgme_get_ctx_flag (gpgme_ctx_t ctx, const char *name)      {        return ctx->no_auto_check_trustdb? "1":"";      } +  else if (!strcmp (name, "proc-all-sigs")) +    { +      return ctx->proc_all_sigs? "1":""; +    }    else      return NULL;  } | 
