[gmime] Fixed logic to select correct gpg subkey for signing/encrypting
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gmime] Fixed logic to select correct gpg subkey for signing/encrypting
- Date: Tue, 5 May 2020 15:48:45 +0000 (UTC)
commit 96f23da05a4df623e4eefacc925801e0a1738d58
Author: Jeffrey Stedfast <jestedfa microsoft com>
Date: Mon Mar 9 18:49:52 2020 -0400
Fixed logic to select correct gpg subkey for signing/encrypting
Some keys may have multiple subkeys that can be used for signing
or encrypting. Just because one of them may have expired or may
be revoked doesn't mean they all are. Keep looking to see if
another subkey can be used insead.
Fixes issue #88
gmime/gmime-gpgme-utils.c | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
---
diff --git a/gmime/gmime-gpgme-utils.c b/gmime/gmime-gpgme-utils.c
index b86a1011..041dd020 100644
--- a/gmime/gmime-gpgme-utils.c
+++ b/gmime/gmime-gpgme-utils.c
@@ -129,18 +129,25 @@ g_mime_gpgme_get_key_by_name (gpgme_ctx_t ctx, const char *name, gboolean secret
if (KEY_IS_OK (key)) {
subkey = key->subkeys;
- while (subkey && ((secret && !subkey->can_sign) || (!secret && !subkey->can_encrypt)))
- subkey = subkey->next;
-
- if (subkey) {
- if (KEY_IS_OK (subkey) && (subkey->expires == 0 || subkey->expires > now))
- break;
+ while (subkey) {
+ if ((secret && subkey->can_sign) || (!secret && subkey->can_encrypt)) {
+ if (KEY_IS_OK (subkey) && (subkey->expires == 0 || subkey->expires >
now)) {
+ errval = GPG_ERR_NO_ERROR;
+ break;
+ }
+
+ if (subkey->expired)
+ errval = GPG_ERR_KEY_EXPIRED;
+ }
- if (subkey->expired)
- errval = GPG_ERR_KEY_EXPIRED;
- else
- errval = GPG_ERR_BAD_KEY;
+ subkey = subkey->next;
}
+
+ if (subkey)
+ break;
+
+ if (errval == GPG_ERR_NO_ERROR)
+ errval = GPG_ERR_BAD_KEY;
} else {
if (key->expired)
errval = GPG_ERR_KEY_EXPIRED;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]