diff options
author | Werner Koch <[email protected]> | 2015-03-11 15:28:32 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2015-03-11 15:28:32 +0000 |
commit | efde50f92af241d8357db83e280a6ece62f6397f (patch) | |
tree | 5d9f9131c3b2bdce779e947e0237df4d46ad0ba7 | |
parent | gpg: Change --print-pka-records into an option. (diff) | |
download | gnupg-efde50f92af241d8357db83e280a6ece62f6397f.tar.gz gnupg-efde50f92af241d8357db83e280a6ece62f6397f.zip |
agent: Improve error reporting from Pinentry.
* agent/call-pinentry.c (unlock_pinentry): Add error logging. Map
error source of uncommon errors to Pinentry.
--
With this change it is possible to detect whether an error like
GPG_ERR_ASS_INV_RESPONSE has its origin in a call to Pinentry or comes
from another part of gpg-agent.
Signed-off-by: Werner Koch <[email protected]>
-rw-r--r-- | agent/call-pinentry.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/agent/call-pinentry.c b/agent/call-pinentry.c index a96406fa3..ef1bfa428 100644 --- a/agent/call-pinentry.c +++ b/agent/call-pinentry.c @@ -133,6 +133,34 @@ unlock_pinentry (int rc) assuan_context_t ctx = entry_ctx; int err; + if (rc) + { + if (DBG_ASSUAN) + log_debug ("error calling pinentry: %s <%s>\n", + gpg_strerror (rc), gpg_strsource (rc)); + + /* Change the source of the error to pinentry so that the final + consumer of the error code knows that the problem is with + pinentry. For backward compatibility we do not do that for + some common error codes. */ + switch (gpg_err_code (rc)) + { + case GPG_ERR_NO_PIN_ENTRY: + case GPG_ERR_CANCELED: + case GPG_ERR_FULLY_CANCELED: + case GPG_ERR_ASS_UNKNOWN_INQUIRE: + case GPG_ERR_ASS_TOO_MUCH_DATA: + case GPG_ERR_NO_PASSPHRASE: + case GPG_ERR_BAD_PASSPHRASE: + case GPG_ERR_BAD_PIN: + break; + + default: + rc = gpg_err_make (GPG_ERR_SOURCE_PINENTRY, gpg_err_code (rc)); + break; + } + } + entry_ctx = NULL; err = npth_mutex_unlock (&entry_lock); if (err) |