diff options
author | Werner Koch <[email protected]> | 2024-10-29 10:59:51 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-10-29 11:00:11 +0000 |
commit | a304ec0ede937e21df5b4a311cbaf8d89f13ef59 (patch) | |
tree | 846889cf9b17748eef4977269a36e060d7e9d1fd /src/engine-gpg.c | |
parent | core: Add new helper _gpgme_strtokenize. (diff) | |
download | gpgme-a304ec0ede937e21df5b4a311cbaf8d89f13ef59.tar.gz gpgme-a304ec0ede937e21df5b4a311cbaf8d89f13ef59.zip |
core: New context flags "known-notations".
* src/gpgme.c (gpgme_set_ctx_flag): Add "known-notations".
(gpgme_get_ctx_flag): Ditto.
(gpgme_release): Free variable.
* src/context.h (struct gpgme_context): Add "known_notations".
* src/engine-gpg.c (struct engine_gpg): Add "known_notations".
(gpg_release): Free variable.
(gpg_set_engine_flags): Set variable.
(add_known_notations): New.
(gpg_decrypt, gpg_verify): Call function.
* tests/run-decrypt.c (main): Add option --known-notations.
* tests/run-verify.c (main): Ditto.
--
GnuPG-bug-id: 4060
Diffstat (limited to 'src/engine-gpg.c')
-rw-r--r-- | src/engine-gpg.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c index 318c0e35..0768ea74 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -144,6 +144,7 @@ struct engine_gpg char request_origin[10]; char *auto_key_locate; char *trust_model; + char **known_notations; struct { unsigned int use_gpgtar : 1; @@ -577,6 +578,7 @@ gpg_release (void *engine) free (gpg->cmd.keyword); free (gpg->auto_key_locate); free (gpg->trust_model); + free (gpg->known_notations); gpgme_data_release (gpg->override_session_key); gpgme_data_release (gpg->diagnostics); @@ -763,6 +765,18 @@ gpg_set_engine_flags (void *engine, const gpgme_ctx_t ctx) ctx->trust_model, NULL); } + if (ctx->known_notations) + { + free (gpg->known_notations); + gpg->known_notations = _gpgme_strtokenize (ctx->known_notations, + " \t,", 1); + /* Fixme: We have no way to return an error. However in this + * case one would just get the usual verification error as if + * that option has not been used. I think this is acceptable + * for now. */ + } + + gpg->flags.no_symkey_cache = (ctx->no_symkey_cache && have_gpg_version (gpg, "2.2.7")); gpg->flags.offline = (ctx->offline && have_gpg_version (gpg, "2.1.23")); @@ -1892,6 +1906,24 @@ add_input_size_hint (engine_gpg_t gpg, gpgme_data_t data) } +/* Add the --known_notations option if requested. */ +static gpgme_error_t +add_known_notations (engine_gpg_t gpg) +{ + gpg_error_t err = 0; + int i; + const char *s; + + if (gpg->known_notations) + { + for (i=0; !err && (s=gpg->known_notations[i]); i++) + if (*s) + err = add_gpg_arg_with_value (gpg, "--known-notation=", s, 0); + } + return err; +} + + static gpgme_error_t gpg_decrypt (void *engine, gpgme_decrypt_flags_t flags, @@ -1929,6 +1961,9 @@ gpg_decrypt (void *engine, if (!err && gpg->flags.auto_key_import) err = add_gpg_arg (gpg, "--auto-key-import"); + if (!err) + err = add_known_notations (gpg); + if (!err && override_session_key && *override_session_key) { if (have_gpg_version (gpg, "2.1.16") && !gpg->flags.use_gpgtar) @@ -3927,6 +3962,9 @@ gpg_verify (void *engine, gpgme_verify_flags_t flags, gpgme_data_t sig, if (!err && ctx->auto_key_retrieve) err = add_gpg_arg (gpg, "--auto-key-retrieve"); + if (!err) + err = add_known_notations (gpg); + if (err) ; else if (gpg->flags.use_gpgtar) |