diff options
author | Werner Koch <[email protected]> | 2018-05-31 23:29:20 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2018-05-31 23:29:34 +0000 |
commit | 662604c5bcb4e03d3c9ecc670d4f320a2418ebb3 (patch) | |
tree | 4495b29c8d7ab2c323f58d8fb772411789d7c565 /src/decrypt.c | |
parent | core: New decryption result flag 'legacy_cipher_nomdc'. (diff) | |
download | gpgme-662604c5bcb4e03d3c9ecc670d4f320a2418ebb3.tar.gz gpgme-662604c5bcb4e03d3c9ecc670d4f320a2418ebb3.zip |
core: New context flag "ignore-mdc-error".
* src/context.h (gpgme_context): Add field ignore_mdc_error.
* src/gpgme.c (gpgme_set_ctx_flag, gpgme_get_ctx_flag): Set/get it.
* src/engine-gpg.c (engine_gpg): Add flags.ignore_mdc_error.
(gpg_set_engine_flags): Set it.
(build_argv): Pass option to gpg.
* src/decrypt.c (_gpgme_decrypt_status_handler): Take care of flag.
(gpgme_op_decrypt_result): Clear flag.
(gpgme_op_decrypt): Clear flag.
* src/decrypt-verify.c (gpgme_op_decrypt_verify): Clear flag
(gpgme_op_decrypt_ext): Clear flag.
* tests/run-decrypt.c (show_usage): Add option --ignore-mdc-error.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'src/decrypt.c')
-rw-r--r-- | src/decrypt.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/decrypt.c b/src/decrypt.c index f2278d8d..8c95ebed 100644 --- a/src/decrypt.c +++ b/src/decrypt.c @@ -97,6 +97,8 @@ gpgme_op_decrypt_result (gpgme_ctx_t ctx) TRACE_BEG (DEBUG_CTX, "gpgme_op_decrypt_result", ctx); + ctx->ignore_mdc_error = 0; /* Always reset this flag. */ + err = _gpgme_op_data_lookup (ctx, OPDATA_DECRYPT, &hook, -1, NULL); opd = hook; if (err || !opd) @@ -362,7 +364,8 @@ _gpgme_decrypt_status_handler (void *priv, gpgme_status_code_t code, return opd->pkdecrypt_failed; else if (opd->failed && opd->any_no_seckey) return gpg_error (GPG_ERR_NO_SECKEY); - else if (opd->failed || opd->not_integrity_protected) + else if (opd->failed || (opd->not_integrity_protected + && !ctx->ignore_mdc_error)) return gpg_error (GPG_ERR_DECRYPT_FAILED); else if (!opd->okay) return gpg_error (GPG_ERR_NO_DATA); @@ -564,5 +567,6 @@ gpgme_op_decrypt (gpgme_ctx_t ctx, gpgme_data_t cipher, gpgme_data_t plain) err = _gpgme_decrypt_start (ctx, 1, 0, cipher, plain); if (!err) err = _gpgme_wait_one (ctx); + ctx->ignore_mdc_error = 0; /* Always reset. */ return TRACE_ERR (err); } |