aboutsummaryrefslogtreecommitdiff
path: root/src/gpg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpg.c')
-rw-r--r--src/gpg.c43
1 files changed, 27 insertions, 16 deletions
diff --git a/src/gpg.c b/src/gpg.c
index 8979e9c..814be6f 100644
--- a/src/gpg.c
+++ b/src/gpg.c
@@ -149,18 +149,4 @@ create_gpg_homedir ()
static int
-gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig,
- struct file_triplet *trp)
+checksig (gpgme_signature_t sig, const char *uid, struct file_triplet *trp)
{
- if (!sig)
- return 0;
-
- for (; sig; sig = sig->next)
- {
- const char *uid;
- gpgme_key_t key;
-
- if (gpgme_get_key (ctx, sig->fpr, &key, 0) == GPG_ERR_NO_ERROR)
- uid = key->uids->uid;
- else
- uid = sig->fpr;
-
switch (gpg_err_code (sig->status))
@@ -210,2 +196,26 @@ gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig,
}
+ return -1;
+}
+
+static int
+gpg_verify_signature (gpgme_ctx_t ctx, gpgme_signature_t sig,
+ struct file_triplet *trp)
+{
+ if (!sig)
+ return 0;
+
+ for (; sig; sig = sig->next)
+ {
+ const char *uid;
+ gpgme_key_t key;
+ int rc;
+
+ if (gpgme_get_key (ctx, sig->fpr, &key, 0) == GPG_ERR_NO_ERROR)
+ uid = key->uids->uid;
+ else
+ uid = sig->fpr;
+ rc = checksig (sig, uid, trp);
+ gpgme_key_unref (key);
+ if (rc != -1)
+ return rc;
}
@@ -219,3 +229,3 @@ verify_directive_signature (struct file_triplet *trp)
gpgme_ctx_t ctx;
- gpgme_data_t key_data, directive_data, plain;
+ gpgme_data_t key_data, directive_data, plain = NULL;
gpgme_error_t ec;
@@ -271,2 +281,3 @@ verify_directive_signature (struct file_triplet *trp)
+ gpgme_data_release (plain);
gpgme_data_release (directive_data);

Return to:

Send suggestions and report system problems to the System administrator.