diff options
author | Ingo Klöcker <[email protected]> | 2020-10-27 14:33:51 +0000 |
---|---|---|
committer | Ingo Klöcker <[email protected]> | 2020-10-29 11:57:10 +0000 |
commit | f3407d0ee4e34ed33be18de5f886a4da2affbf9f (patch) | |
tree | ffdd4777a07af84a034e58b0c9459e37013a61d7 /src/engine-gpg.c | |
parent | python: Handle the when case __doc__ is None. (diff) | |
download | gpgme-f3407d0ee4e34ed33be18de5f886a4da2affbf9f.tar.gz gpgme-f3407d0ee4e34ed33be18de5f886a4da2affbf9f.zip |
core: New function gpgme_op_revsig.
* src/gpgme.h.in (gpgme_op_revsig_start, gpgme_op_revsig): New.
(GPGME_REVSIG_LFSEP): New.
* src/context.h (ctx_op_data_id_t): Add OPDATA_REVSIG.
* src/revsig.c: New.
* src/Makefile.am (main_sources): Add revsig.
* src/libgpgme.vers, src/gpgme.def: Add gpgme_op_revsig and
gpgme_op_revsig_start.
* src/engine.h, src/engine.c: (_gpgme_engine_op_revsig): New.
* src/engine-backend.h (engine_ops): Add 'revsig' and adjust all
engine initializers.
* src/engine-gpg.c (gpg_revsig): New.
(_gpgme_engine_ops_gpg): Set revsig to gpg_revsig.
* doc/gpgme.texi: Document new functions.
* tests/run-keysign.c: Add option --revoke.
--
This extends GPGME to support the --quick-revoke-sig command
added by GnuPG 2.2.24. This allows revoking key signatures.
GnuPG-bug-id: 5094
Diffstat (limited to 'src/engine-gpg.c')
-rw-r--r-- | src/engine-gpg.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c index 8832572a..02a10ecb 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -3211,6 +3211,52 @@ gpg_keysign (void *engine, gpgme_key_t key, const char *userid, static gpgme_error_t +gpg_revsig (void *engine, gpgme_key_t key, gpgme_key_t signing_key, + const char *userid, unsigned int flags) +{ + engine_gpg_t gpg = engine; + gpgme_error_t err; + const char *s; + + if (!key || !key->fpr) + return gpg_error (GPG_ERR_INV_ARG); + + if (!have_gpg_version (gpg, "2.2.24")) + return gpg_error (GPG_ERR_NOT_SUPPORTED); + + err = add_arg (gpg, "--quick-revoke-sig"); + + if (!err) + err = add_arg (gpg, "--"); + + if (!err) + err = add_arg (gpg, key->fpr); + + if (!err) + err = add_arg (gpg, signing_key->fpr); + + if (!err && userid) + { + if ((flags & GPGME_REVSIG_LFSEP)) + { + for (; !err && (s = strchr (userid, '\n')); userid = s + 1) + if ((s - userid)) + err = add_arg_len (gpg, "=", userid, s - userid); + if (!err && *userid) + err = add_arg_pfx (gpg, "=", userid); + } + else + err = add_arg_pfx (gpg, "=", userid); + } + + if (!err) + err = start (gpg); + + return err; +} + + +static gpgme_error_t gpg_tofu_policy (void *engine, gpgme_key_t key, gpgme_tofu_policy_t policy) { engine_gpg_t gpg = engine; @@ -3513,6 +3559,7 @@ struct engine_ops _gpgme_engine_ops_gpg = gpg_keylist_ext, gpg_keylist_data, gpg_keysign, + gpg_revsig, gpg_tofu_policy, /* tofu_policy */ gpg_sign, gpg_verify, |