diff options
author | NIIBE Yutaka <[email protected]> | 2019-01-16 01:27:21 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2019-01-16 01:27:21 +0000 |
commit | dafffa95b2317bcb80fff1fd6d2bc7b4e6b1e206 (patch) | |
tree | d24572d613e8439f814600cfff9ddb2de284d83e | |
parent | doc: Mark keyserver-options timeout and http-proxy as obsolete. (diff) | |
download | gnupg-dafffa95b2317bcb80fff1fd6d2bc7b4e6b1e206.tar.gz gnupg-dafffa95b2317bcb80fff1fd6d2bc7b4e6b1e206.zip |
gpg: Report STATUS_NO_SECKEY when it is examined.
* g10/packet.h (struct pubkey_enc_list): Add result.
* g10/mainproc.c (proc_pubkey_enc): Initialize ->result.
(proc_encrypted): Report STATUS_NO_SECKEY status.
* g10/pubkey-enc.c (get_session_key): Set ->result.
--
This change is for GPGME compatibility. Before this change,
gpgme/tests/json/t-json failed with t-decrypt-verify.
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r-- | g10/mainproc.c | 30 | ||||
-rw-r--r-- | g10/packet.h | 1 | ||||
-rw-r--r-- | g10/pubkey-enc.c | 3 |
3 files changed, 19 insertions, 15 deletions
diff --git a/g10/mainproc.c b/g10/mainproc.c index dce3f3799..8c41088cc 100644 --- a/g10/mainproc.c +++ b/g10/mainproc.c @@ -481,6 +481,7 @@ proc_pubkey_enc (CTX c, PACKET *pkt) x->keyid[0] = enc->keyid[0]; x->keyid[1] = enc->keyid[1]; x->pubkey_algo = enc->pubkey_algo; + x->result = -1; x->data[0] = x->data[1] = NULL; if (enc->data[0]) { @@ -577,22 +578,21 @@ proc_encrypted (CTX c, PACKET *pkt) { c->dek = xmalloc_secure_clear (sizeof *c->dek); result = get_session_key (c->ctrl, c->pkenc_list, c->dek); - if (result == GPG_ERR_NO_SECKEY) - { - if (is_status_enabled ()) - { - struct pubkey_enc_list *list; - - for (list = c->pkenc_list; list; list = list->next) - { - char buf[20]; - snprintf (buf, sizeof buf, "%08lX%08lX", - (ulong)list->keyid[0], (ulong)list->keyid[1]); - write_status_text (STATUS_NO_SECKEY, buf); - } - } + if (is_status_enabled ()) + { + struct pubkey_enc_list *list; + + for (list = c->pkenc_list; list; list = list->next) + if (list->result == GPG_ERR_NO_SECKEY) + { + char buf[20]; + snprintf (buf, sizeof buf, "%08lX%08lX", + (ulong)list->keyid[0], (ulong)list->keyid[1]); + write_status_text (STATUS_NO_SECKEY, buf); + } } - else if (result) + + if (result) { log_info (_("public key decryption failed: %s\n"), gpg_strerror (result)); diff --git a/g10/packet.h b/g10/packet.h index 1ec12d64b..78a57bacf 100644 --- a/g10/packet.h +++ b/g10/packet.h @@ -137,6 +137,7 @@ struct pubkey_enc_list struct pubkey_enc_list *next; u32 keyid[2]; int pubkey_algo; + int result; gcry_mpi_t data[PUBKEY_MAX_NENC]; }; diff --git a/g10/pubkey-enc.c b/g10/pubkey-enc.c index ad0a77e59..e0a6e8ae1 100644 --- a/g10/pubkey-enc.c +++ b/g10/pubkey-enc.c @@ -132,6 +132,8 @@ get_session_key (ctrl_t ctrl, struct pubkey_enc_list *list, DEK *dek) if (openpgp_pk_test_algo2 (k->pubkey_algo, PUBKEY_USAGE_ENC)) continue; + k->result = GPG_ERR_NO_SECKEY; + if (sk->pubkey_algo != k->pubkey_algo) continue; @@ -155,6 +157,7 @@ get_session_key (ctrl_t ctrl, struct pubkey_enc_list *list, DEK *dek) rc = get_it (ctrl, k, dek, sk, keyid); if (!rc) { + k->result = 0; if (!opt.quiet && !k->keyid[0] && !k->keyid[1]) log_info (_("okay, we are the anonymous recipient.\n")); search_for_secret_keys = 0; |