]> git.ipfire.org Git - pakfire.git/commitdiff
archive: verify: Return status as an argument
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 9 Jul 2021 15:21:17 +0000 (15:21 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 9 Jul 2021 15:21:17 +0000 (15:21 +0000)
This avoids that it can be confused with any error code that is being
returned.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/archive.c
src/libpakfire/archive.c
src/libpakfire/include/pakfire/archive.h
src/libpakfire/transaction.c

index 2745d1b3a1015961e8a5f4005170e1d47cbd5c5d..3e3d25e4fa7f21db2102c323d82da7cf6bcf9a87 100644 (file)
@@ -100,14 +100,28 @@ static PyObject* Archive_read(ArchiveObject* self, PyObject* args) {
 }
 
 static PyObject* Archive_verify(ArchiveObject* self) {
-       pakfire_archive_verify_status_t status = pakfire_archive_verify(self->archive);
+       pakfire_archive_verify_status_t status;
 
-       // Return True if everything is fine
-       if (status == PAKFIRE_ARCHIVE_VERIFY_OK || status == PAKFIRE_ARCHIVE_VERIFY_KEY_EXPIRED)
-               Py_RETURN_TRUE;
+       // Verify this archive
+       int r = pakfire_archive_verify(self->archive, &status);
+       if (r) {
+               PyErr_SetFromErrno(PyExc_OSError);
+               return NULL;
+       }
 
-       // Raise an exception if not okay
-       PyErr_SetString(PyExc_BadSignatureError, pakfire_archive_verify_strerror(status));
+       // Evaluate result
+       switch (status) {
+               // Good
+               case PAKFIRE_ARCHIVE_VERIFY_OK:
+               case PAKFIRE_ARCHIVE_VERIFY_KEY_EXPIRED:
+                       Py_RETURN_TRUE;
+
+               // Bad
+               default:
+                       PyErr_SetString(PyExc_BadSignatureError,
+                               pakfire_archive_verify_strerror(status));
+                       break;
+       }
 
        return NULL;
 }
index 084b96011b849e34eb3dae4f0656c3726d494711..f58e197cfd9a5c78d25db96d9c417328638e0409 100644 (file)
@@ -1317,24 +1317,27 @@ ERROR:
        return r;
 }
 
-PAKFIRE_EXPORT pakfire_archive_verify_status_t pakfire_archive_verify(struct pakfire_archive* archive) {
+PAKFIRE_EXPORT int pakfire_archive_verify(struct pakfire_archive* archive,
+               pakfire_archive_verify_status_t* status) {
        DEBUG(archive->pakfire, "Verifying archive %p\n", archive);
 
        // Return previous result if this has already been called
-       if (archive->verify != PAKFIRE_ARCHIVE_VERIFY_UNKNOWN)
-               return archive->verify;
-
-       int r = pakfire_archive_verify_signatures(archive);
-       if (r)
-               return r;
+       if (archive->verify == PAKFIRE_ARCHIVE_VERIFY_UNKNOWN) {
+               // Verify all sigantures
+               int r = pakfire_archive_verify_signatures(archive);
+               if (r)
+                       return r;
+       }
 
-       return PAKFIRE_ARCHIVE_VERIFY_OK; // XXX DEBUG
+       // Store result
+       *status = archive->verify;
 
-       int status = 0;
+       return 0;
 
+#if 0
        // Open the archive file
        struct archive* a;
-       r = open_archive(archive, &a);
+       int r = open_archive(archive, &a);
        if (r)
                return PAKFIRE_ARCHIVE_VERIFY_ERROR;
 
index d088b93a32294dcf6b98db23a638aad664578d22..ca072c0c47690c8a884b5e6f212da2795e0689e0 100644 (file)
@@ -58,7 +58,8 @@ unsigned int pakfire_archive_get_format(struct pakfire_archive* archive);
 
 struct pakfire_filelist* pakfire_archive_get_filelist(struct pakfire_archive* archive);
 
-pakfire_archive_verify_status_t pakfire_archive_verify(struct pakfire_archive* archive);
+int pakfire_archive_verify(struct pakfire_archive* archive,
+       pakfire_archive_verify_status_t* status);
 const char* pakfire_archive_verify_strerror(pakfire_archive_verify_status_t status);
 
 size_t pakfire_archive_get_size(struct pakfire_archive* archive);
index 2010ceacb98b9567255680f81d0c25b536511b6e..7dce2034d4b545222e92783b648344fcb2b366f7 100644 (file)
@@ -578,16 +578,29 @@ static int pakfire_transaction_verify(struct pakfire_transaction* transaction,
        if (!archive)
                return 0;
 
+       pakfire_archive_verify_status_t status;
+
        // Verify the archive
-       pakfire_archive_verify_status_t status = pakfire_archive_verify(archive);
+       int r = pakfire_archive_verify(archive, &status);
+       if (r)
+               return r;
+
+       // This function will return a binary status which is zero for success and
+       // anything else for errors, etc...
+       switch (status) {
+               // Good
+               case PAKFIRE_ARCHIVE_VERIFY_OK:
+               case PAKFIRE_ARCHIVE_VERIFY_KEY_EXPIRED:
+                       return 0;
 
-       // Log error
-       if (status) {
-               const char* error = pakfire_archive_verify_strerror(status);
-               ERROR(transaction->pakfire, "Archive verification failed: %s\n", error);
+               // Bad
+               default:
+                       ERROR(transaction->pakfire, "Archive verification failed: %s\n",
+                               pakfire_archive_verify_strerror(status));
+                       break;
        }
 
-       return status;
+       return 1;
 }
 
 static int pakfire_transaction_run_script(struct pakfire_transaction* transaction,