If we can't read the keyring, gpgme will output confusing debug
information and fail to verify the signature, so we should warn the user before.

Signed-off-by: Florian Pritz <[email protected]>
---
 lib/libalpm/signing.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/lib/libalpm/signing.c b/lib/libalpm/signing.c
index 1ac9963..19d3454 100644
--- a/lib/libalpm/signing.c
+++ b/lib/libalpm/signing.c
@@ -110,6 +110,8 @@ static int init_gpgme(alpm_handle_t *handle)
        const char *version, *sigdir;
        gpgme_error_t err;
        gpgme_engine_info_t enginfo;
+       const char *needed_files[] = {"secring.gpg", "trustdb.gpg", "gpg.conf", 
NULL};
+       int i = 0;
 
        if(init) {
                /* we already successfully initialized the library */
@@ -121,6 +123,21 @@ static int init_gpgme(alpm_handle_t *handle)
                RET_ERR(handle, ALPM_ERR_SIG_MISSINGDIR, 1);
        }
 
+       i = 0;
+       while (needed_files[i] != NULL) {
+               char *check_path = NULL;
+               size_t len = strlen(sigdir) + strlen(needed_files[i]) + 1;
+
+               CALLOC(check_path, len, sizeof(char), RET_ERR(handle, 
ALPM_ERR_MEMORY, -1));
+               snprintf(check_path, len, "%s%s", sigdir, needed_files[i]);
+
+               if(access(check_path, R_OK) != 0) {
+                       _alpm_log(handle, ALPM_LOG_WARNING, _("\"%s\" not 
readable. Signature verification will likely fail!\n"), check_path);
+               }
+               i++;
+       }
+
+
        /* calling gpgme_check_version() returns the current version and runs
         * some internal library setup code */
        version = gpgme_check_version(NULL);
-- 
1.7.6

Reply via email to