commit:     6e4d403adaa5efd03ee731a05c016d7c6affe6c8
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 12 10:06:14 2018 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Mon Mar 12 10:06:14 2018 +0000
URL:        https://gitweb.gentoo.org/repo/proj/prefix.git/commit/?id=6e4d403a

scripts/rsync-generation/hashgen: report no garbage when key is missing

 scripts/rsync-generation/hashgen.c | 41 ++++++++++++++++++++++----------------
 1 file changed, 24 insertions(+), 17 deletions(-)

diff --git a/scripts/rsync-generation/hashgen.c 
b/scripts/rsync-generation/hashgen.c
index c4955f65c7..60121978da 100644
--- a/scripts/rsync-generation/hashgen.c
+++ b/scripts/rsync-generation/hashgen.c
@@ -829,24 +829,31 @@ verify_gpg_sig(const char *path)
        vres = gpgme_op_verify_result(g_ctx);
        fclose(f);
 
+       if (vres == NULL || vres->signatures == NULL) {
+               fprintf(stderr, "verification failed due to a missing gpg 
keyring\n");
+               return ret;
+       }
+
        for (sig = vres->signatures; sig != NULL; sig = sig->next) {
-               ctime = gmtime((time_t *)&sig->timestamp);
-               strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S UTC", ctime);
-               printf("%s key fingerprint "
-                               "%.4s %.4s %.4s %.4s %.4s  %.4s %.4s %.4s %.4s 
%.4s\n"
-                               "%s signature made %s by\n",
-                               gpgme_pubkey_algo_name(sig->pubkey_algo),
-                               sig->fpr +  0, sig->fpr +  4, sig->fpr +  8, 
sig->fpr + 12,
-                               sig->fpr + 16, sig->fpr + 20, sig->fpr + 24, 
sig->fpr + 28,
-                               sig->fpr + 32, sig->fpr + 36,
-                               sig->status == GPG_ERR_NO_ERROR ? "good" : 
"BAD",
-                               buf);
-
-               if (gpgme_get_key(g_ctx, sig->fpr, &key, 0) == 
GPG_ERR_NO_ERROR) {
-                       ret = 0;  /* valid */
-                       if (key->uids != NULL)
-                               printf("%s\n", key->uids->uid);
-                       gpgme_key_release(key);
+               if (sig->status != GPG_ERR_NO_PUBKEY) {
+                       ctime = gmtime((time_t *)&sig->timestamp);
+                       strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S UTC", 
ctime);
+                       printf("%s key fingerprint "
+                                       "%.4s %.4s %.4s %.4s %.4s  %.4s %.4s 
%.4s %.4s %.4s\n"
+                                       "%s signature made %s by\n",
+                                       
gpgme_pubkey_algo_name(sig->pubkey_algo),
+                                       sig->fpr +  0, sig->fpr +  4, sig->fpr 
+  8, sig->fpr + 12,
+                                       sig->fpr + 16, sig->fpr + 20, sig->fpr 
+ 24, sig->fpr + 28,
+                                       sig->fpr + 32, sig->fpr + 36,
+                                       sig->status == GPG_ERR_NO_ERROR ? 
"good" : "BAD",
+                                       buf);
+
+                       if (gpgme_get_key(g_ctx, sig->fpr, &key, 0) == 
GPG_ERR_NO_ERROR) {
+                               ret = 0;  /* valid */
+                               if (key->uids != NULL)
+                                       printf("%s\n", key->uids->uid);
+                               gpgme_key_release(key);
+                       }
                }
 
                switch (sig->status) {

Reply via email to