[pacman-dev] [PATCH 3/4] signing: check validity of all available signatures

Dan McGee dan at archlinux.org
Mon Jun 27 17:39:38 EDT 2011


Change the check into a loop over all signatures present and returned by
GPGME. Also modify the return values and checks slightly now that I know
a little bit more about what type of values are returned.

Signed-off-by: Dan McGee <dan at archlinux.org>
---

The code change looks bigger here due mostly to the reindent needed to move the
checks inside the loop.

 lib/libalpm/signing.c |   54 +++++++++++++++++++++++-------------------------
 1 files changed, 26 insertions(+), 28 deletions(-)

diff --git a/lib/libalpm/signing.c b/lib/libalpm/signing.c
index 06cb6ac..a19c1cb 100644
--- a/lib/libalpm/signing.c
+++ b/lib/libalpm/signing.c
@@ -292,7 +292,7 @@ int _alpm_gpgme_checksig(pmhandle_t *handle, const char *path,
 		goto error;
 	}
 
-	{
+	while(gpgsig) {
 		alpm_list_t *summary_list, *summary;
 
 		_alpm_log(handle, PM_LOG_DEBUG, "fingerprint: %s\n", gpgsig->fpr);
@@ -304,35 +304,33 @@ int _alpm_gpgme_checksig(pmhandle_t *handle, const char *path,
 		_alpm_log(handle, PM_LOG_DEBUG, "status: %s\n", gpgme_strerror(gpgsig->status));
 		_alpm_log(handle, PM_LOG_DEBUG, "timestamp: %lu\n", gpgsig->timestamp);
 		_alpm_log(handle, PM_LOG_DEBUG, "exp_timestamp: %lu\n", gpgsig->exp_timestamp);
-		_alpm_log(handle, PM_LOG_DEBUG, "validity: %s\n",
-				string_validity(gpgsig->validity));
-		_alpm_log(handle, PM_LOG_DEBUG, "validity_reason: %s\n",
+		_alpm_log(handle, PM_LOG_DEBUG, "validity: %s; reason: %s\n",
+				string_validity(gpgsig->validity),
 				gpgme_strerror(gpgsig->validity_reason));
-		_alpm_log(handle, PM_LOG_DEBUG, "pubkey algo: %s\n",
-				gpgme_pubkey_algo_name(gpgsig->pubkey_algo));
-		_alpm_log(handle, PM_LOG_DEBUG, "hash algo: %s\n",
-				gpgme_hash_algo_name(gpgsig->hash_algo));
-	}
 
-	if(gpgsig->summary & GPGME_SIGSUM_VALID) {
-		/* good signature, continue */
-		_alpm_log(handle, PM_LOG_DEBUG, _("File %s has a valid signature.\n"),
-				path);
-	} else if(gpgsig->summary & GPGME_SIGSUM_GREEN) {
-		/* 'green' signature, not sure what to do here */
-		_alpm_log(handle, PM_LOG_WARNING, _("File %s has a green signature.\n"),
-				path);
-	} else if(gpgsig->summary & GPGME_SIGSUM_KEY_MISSING) {
-		handle->pm_errno = PM_ERR_SIG_UNKNOWN;
-		_alpm_log(handle, PM_LOG_WARNING, _("File %s has a signature from an unknown key.\n"),
-				path);
-		ret = -1;
-	} else {
-		/* we'll capture everything else here */
-		handle->pm_errno = PM_ERR_SIG_INVALID;
-		_alpm_log(handle, PM_LOG_ERROR, _("File %s has an invalid signature.\n"),
-				path);
-		ret = 1;
+		if(gpgsig->summary & GPGME_SIGSUM_VALID) {
+			/* definite good signature */
+			_alpm_log(handle, PM_LOG_DEBUG, "result: valid signature\n");
+		} else if(gpgsig->summary & GPGME_SIGSUM_GREEN) {
+			/* good signature */
+			_alpm_log(handle, PM_LOG_DEBUG, "result: green signature\n");
+		} else if(gpgsig->summary & GPGME_SIGSUM_RED) {
+			/* definite bad signature, error */
+			_alpm_log(handle, PM_LOG_DEBUG, "result: red signature\n");
+			handle->pm_errno = PM_ERR_SIG_INVALID;
+			ret = 1;
+		} else if(gpgsig->summary & GPGME_SIGSUM_KEY_MISSING) {
+			_alpm_log(handle, PM_LOG_DEBUG, "result: signature from unknown key\n");
+			handle->pm_errno = PM_ERR_SIG_UNKNOWN;
+			ret = 1;
+		} else {
+			/* we'll capture everything else here */
+			_alpm_log(handle, PM_LOG_DEBUG, "result: invalid signature\n");
+			handle->pm_errno = PM_ERR_SIG_INVALID;
+			ret = 1;
+		}
+
+		gpgsig = gpgsig->next;
 	}
 
 error:
-- 
1.7.5.4



More information about the pacman-dev mailing list