summaryrefslogtreecommitdiff
path: root/gmime/gmime-gpgme-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'gmime/gmime-gpgme-utils.c')
-rw-r--r--gmime/gmime-gpgme-utils.c27
1 files 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;