diff options
Diffstat (limited to 'src/gpg.c')
-rw-r--r-- | src/gpg.c | 43 |
1 files changed, 27 insertions, 16 deletions
@@ -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); |