aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2022-04-25 09:18:40 +0000
committerWerner Koch <[email protected]>2022-04-25 09:18:40 +0000
commitf021ecd57624f09430731f5deee2c4d0712150c8 (patch)
treecebbc527cb2f93e333e35272253da0a6aa0e4ff0
parentpo: Update German translation (diff)
downloadgnupg-f021ecd57624f09430731f5deee2c4d0712150c8.tar.gz
gnupg-f021ecd57624f09430731f5deee2c4d0712150c8.zip
gpg: Emit an ERROR status as hint for a bad passphrase.
* g10/mainproc.c (proc_symkey_enc): Issue new error code. (proc_encrypted): Ditto. -- This allows GPGME to return a better error message than "bad session key" to the user. Technically we could get run into these errors also in other cases but this more unlikley. For the command line use we don't do anything to not change the expected output of the command line interface. GnuPG-bug-id: 5943
-rw-r--r--g10/mainproc.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/g10/mainproc.c b/g10/mainproc.c
index 4fb7d6840..14b83d0a9 100644
--- a/g10/mainproc.c
+++ b/g10/mainproc.c
@@ -448,6 +448,11 @@ proc_symkey_enc (CTX c, PACKET *pkt)
if (gpg_err_code (err) != GPG_ERR_BAD_KEY
&& gpg_err_code (err) != GPG_ERR_CHECKSUM)
log_fatal ("process terminated to be bug compatible\n");
+ else
+ write_status_text (STATUS_ERROR,
+ "symkey_decrypt.maybe_error"
+ " 11_BAD_PASSPHRASE");
+
if (c->dek->s2k_cacheid[0])
{
if (opt.debug)
@@ -846,15 +851,22 @@ proc_encrypted (CTX c, PACKET *pkt)
}
else
{
- if ((gpg_err_code (result) == GPG_ERR_BAD_KEY
- || gpg_err_code (result) == GPG_ERR_CHECKSUM
- || gpg_err_code (result) == GPG_ERR_CIPHER_ALGO)
- && *c->dek->s2k_cacheid != '\0')
+ if (gpg_err_code (result) == GPG_ERR_BAD_KEY
+ || gpg_err_code (result) == GPG_ERR_CHECKSUM
+ || gpg_err_code (result) == GPG_ERR_CIPHER_ALGO)
{
- if (opt.debug)
- log_debug ("cleared passphrase cached with ID: %s\n",
- c->dek->s2k_cacheid);
- passphrase_clear_cache (c->dek->s2k_cacheid);
+ if (c->symkeys)
+ write_status_text (STATUS_ERROR,
+ "symkey_decrypt.maybe_error"
+ " 11_BAD_PASSPHRASE");
+
+ if (*c->dek->s2k_cacheid != '\0')
+ {
+ if (opt.debug)
+ log_debug ("cleared passphrase cached with ID: %s\n",
+ c->dek->s2k_cacheid);
+ passphrase_clear_cache (c->dek->s2k_cacheid);
+ }
}
glo_ctrl.lasterr = result;
write_status (STATUS_DECRYPTION_FAILED);