]> git.ipfire.org Git - people/stevee/pakfire.git/commitdiff
archive: Drop old signature data type
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 7 Jul 2021 22:14:59 +0000 (22:14 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 7 Jul 2021 22:15:41 +0000 (22:15 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/_pakfiremodule.c
src/_pakfire/archive.c
src/_pakfire/archive.h
src/libpakfire/archive.c
src/libpakfire/include/pakfire/archive.h
src/libpakfire/include/pakfire/types.h
src/libpakfire/libpakfire.sym

index 2e31f8f3bbf4ced13ccf7707f4908c06e05e3575..514c31588a76710982a77c79648a78010ea56b6c 100644 (file)
@@ -96,13 +96,6 @@ PyMODINIT_FUNC PyInit__pakfire(void) {
        Py_INCREF(&ArchiveType);
        PyModule_AddObject(module, "Archive", (PyObject *)&ArchiveType);
 
-       // Archive Signature
-       if (PyType_Ready(&ArchiveSignatureType) < 0)
-               return NULL;
-
-       Py_INCREF(&ArchiveSignatureType);
-       PyModule_AddObject(module, "ArchiveSignature", (PyObject *)&ArchiveSignatureType);
-
        // Key
        if (PyType_Ready(&KeyType) < 0)
                return NULL;
index 6feb8d8c8db5cf6f96bd2879a57a0db675c87f7b..3eda9d8dae0eca51471d93ac33a09462a1e1bd9b 100644 (file)
@@ -103,24 +103,6 @@ static PyObject* Archive_verify(ArchiveObject* self) {
        return NULL;
 }
 
-static PyObject* Archive_get_signatures(ArchiveObject* self) {
-       PyObject* list = PyList_New(0);
-
-       PakfireArchiveSignature* head = pakfire_archive_get_signatures(self->archive);
-
-       PakfireArchiveSignature* signatures = head;
-       while (signatures && *signatures) {
-               PakfireArchiveSignature signature = *signatures++;
-
-               PyObject* object = new_archive_signature(self, signature);
-               PyList_Append(list, object);
-
-               Py_DECREF(object);
-       }
-
-       return list;
-}
-
 static PyObject* Archive_extract(ArchiveObject* self, PyObject* args) {
        const char* prefix = NULL;
 
@@ -218,13 +200,6 @@ static struct PyGetSetDef Archive_getsetters[] = {
                NULL,
                NULL
        },
-       {
-               "signatures",
-               (getter)Archive_get_signatures,
-               NULL,
-               NULL,
-               NULL
-       },
        { NULL },
 };
 
@@ -244,51 +219,3 @@ PyTypeObject ArchiveType = {
        //tp_str:             (reprfunc)Archive_str,
        //tp_richcompare:     (richcmpfunc)Archive_richcompare,
 };
-
-// Archive Signature
-
-static PyObject* ArchiveSignature_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
-       ArchiveSignatureObject* self = (ArchiveSignatureObject *)type->tp_alloc(type, 0);
-       if (self) {
-               self->signature = NULL;
-       }
-
-       return (PyObject *)self;
-}
-
-PyObject* new_archive_signature(ArchiveObject* archive, PakfireArchiveSignature signature) {
-       ArchiveSignatureObject* s = (ArchiveSignatureObject*)ArchiveSignature_new(&ArchiveSignatureType, NULL, NULL);
-       if (s)
-               s->signature = pakfire_archive_signature_ref(signature);
-
-       return (PyObject *)s;
-}
-
-static void ArchiveSignature_dealloc(ArchiveSignatureObject* self) {
-       if (self->signature)
-               pakfire_archive_signature_unref(self->signature);
-
-       Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-static PyObject* ArchiveSignature_str(ArchiveSignatureObject* self) {
-       const char* data = pakfire_archive_signature_get_data(self->signature);
-
-       return PyUnicode_FromString(data);
-}
-
-static struct PyGetSetDef ArchiveSignature_getsetters[] = {
-       { NULL },
-};
-
-PyTypeObject ArchiveSignatureType = {
-       PyVarObject_HEAD_INIT(NULL, 0)
-       tp_name:            "_pakfire.ArchiveSignature",
-       tp_basicsize:       sizeof(ArchiveSignatureObject),
-       tp_flags:           Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
-       tp_new:             ArchiveSignature_new,
-       tp_dealloc:         (destructor)ArchiveSignature_dealloc,
-       tp_doc:             "ArchiveSignature object",
-       tp_getset:          ArchiveSignature_getsetters,
-       tp_str:             (reprfunc)ArchiveSignature_str,
-};
index 8dfef97467f9b226ef48e8b85f58cc16906aec48..a750842d235d5086ed04eef46e3c431025fa612a 100644 (file)
@@ -25,8 +25,6 @@
 
 #include <pakfire/archive.h>
 
-#include "pakfire.h"
-
 typedef struct {
        PyObject_HEAD
        PakfireArchive archive;
@@ -34,13 +32,4 @@ typedef struct {
 
 extern PyTypeObject ArchiveType;
 
-typedef struct {
-       PyObject_HEAD
-       PakfireArchiveSignature signature;
-} ArchiveSignatureObject;
-
-extern PyTypeObject ArchiveSignatureType;
-
-PyObject* new_archive_signature(ArchiveObject* archive, PakfireArchiveSignature signature);
-
 #endif /* PYTHON_PAKFIRE_ARCHIVE_H */
index 076f94269703d1abfaefd8af54538024e72df74a..db9ad7e3055e569f7b8aac36e3014cfd2298d29b 100644 (file)
@@ -77,10 +77,6 @@ struct _PakfireArchive {
        // Checksums
        STAILQ_HEAD(chksums, pakfire_archive_chksum) chksums;
 
-       // Signatures
-       PakfireArchiveSignature* signatures;
-       int signatures_loaded;
-
        // Scriptlets
        struct pakfire_scriptlet** scriptlets;
        size_t nscriptlets;
@@ -89,13 +85,6 @@ struct _PakfireArchive {
        int verify;
 };
 
-struct _PakfireArchiveSignature {
-       Pakfire pakfire;
-       struct pakfire_key* key;
-       char* sigdata;
-       int nrefs;
-};
-
 /*
        A helper function to close the archive and reset our data structures
 */
@@ -331,58 +320,6 @@ static struct pakfire_archive_chksum* pakfire_archive_find_chksum(
        return NULL;
 }
 
-// Signature Stuff
-
-static PakfireArchiveSignature pakfire_archive_signature_create(PakfireArchive archive, const char* sigdata) {
-       PakfireArchiveSignature signature = calloc(1, sizeof(*signature));
-       if (signature) {
-               signature->pakfire = pakfire_ref(archive->pakfire);
-               signature->nrefs = 1;
-               signature->sigdata = strdup(sigdata);
-       }
-
-       return signature;
-}
-
-static void pakfire_archive_signature_free(PakfireArchiveSignature signature) {
-       pakfire_unref(signature->pakfire);
-
-       if (signature->key)
-               pakfire_key_unref(signature->key);
-
-       free(signature->sigdata);
-       free(signature);
-}
-
-PAKFIRE_EXPORT PakfireArchiveSignature pakfire_archive_signature_ref(PakfireArchiveSignature signature) {
-       ++signature->nrefs;
-
-       return signature;
-}
-
-PAKFIRE_EXPORT void pakfire_archive_signature_unref(PakfireArchiveSignature signature) {
-       if (--signature->nrefs > 0)
-               return;
-
-       pakfire_archive_signature_free(signature);
-}
-
-static size_t _pakfire_archive_count_signatures(const PakfireArchiveSignature* signatures) {
-       size_t i = 0;
-
-       while (signatures && *signatures++) {
-               i++;
-       }
-
-       return i;
-}
-
-PAKFIRE_EXPORT size_t pakfire_archive_count_signatures(PakfireArchive archive) {
-       PakfireArchiveSignature* signatures = pakfire_archive_get_signatures(archive);
-
-       return _pakfire_archive_count_signatures(signatures);
-}
-
 static void pakfire_archive_free_chksums(PakfireArchive archive) {
        struct pakfire_archive_chksum* chksum;
 
@@ -401,15 +338,6 @@ static void pakfire_archive_free(PakfireArchive archive) {
        // Free all checksums
        pakfire_archive_free_chksums(archive);
 
-       // Free signatures
-       if (archive->signatures) {
-               PakfireArchiveSignature* signatures = archive->signatures;
-               while (signatures && *signatures)
-                       pakfire_archive_signature_unref(*signatures++);
-
-               free(archive->signatures);
-       }
-
        // Free scriptlets
        if (archive->scriptlets) {
                for (unsigned int i = 0; i < archive->nscriptlets; i++)
@@ -1154,183 +1082,6 @@ PAKFIRE_EXPORT PakfireFilelist pakfire_archive_get_filelist(PakfireArchive archi
        return pakfire_filelist_ref(archive->filelist);
 }
 
-PAKFIRE_EXPORT const char* pakfire_archive_signature_get_data(PakfireArchiveSignature signature) {
-       return signature->sigdata;
-}
-
-static int pakfire_archive_parse_entry_signature(PakfireArchive archive,
-               struct archive* a, struct archive_entry* e) {
-       char* data;
-       size_t data_size;
-
-       int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, &data, &data_size);
-       if (r)
-               return 1;
-
-       // Terminate string.
-       data[data_size] = '\0';
-
-       PakfireArchiveSignature signature = pakfire_archive_signature_create(archive, data);
-       if (!signature)
-               return 1;
-
-       if (archive->signatures) {
-               // Count signatures
-               size_t num_signatures = _pakfire_archive_count_signatures(archive->signatures) + 1;
-
-               // Resize the array
-               archive->signatures = realloc(archive->signatures, sizeof(*archive->signatures) * num_signatures);
-       } else {
-               archive->signatures = calloc(2, sizeof(*archive->signatures));
-       }
-
-       // Look for last element
-       PakfireArchiveSignature* signatures = archive->signatures;
-       while (signatures && *signatures) {
-               *signatures++;
-       }
-
-       // Append signature
-       *signatures++ = signature;
-
-       // Terminate list
-       *signatures = NULL;
-
-       return 0;
-}
-
-static int pakfire_archive_read_signature_entry(PakfireArchive archive, struct archive* a, struct archive_entry* e, void* data) {
-       const char* entry_name = archive_entry_pathname(e);
-
-       if (strncmp(PAKFIRE_ARCHIVE_FN_SIGNATURES, entry_name, strlen(PAKFIRE_ARCHIVE_FN_SIGNATURES)) == 0) {
-               int ret = pakfire_archive_parse_entry_signature(archive, a, e);
-               if (ret)
-                       return EINVAL;
-       }
-
-       return 0;
-}
-
-static int pakfire_archive_load_signatures(PakfireArchive archive) {
-       DEBUG(archive->pakfire, "Loading all signatures for archive at %p\n", archive);
-
-       return pakfire_archive_walk(archive, pakfire_archive_read_signature_entry, NULL);
-}
-
-PAKFIRE_EXPORT PakfireArchiveSignature* pakfire_archive_get_signatures(PakfireArchive archive) {
-       if (!archive->signatures_loaded++)
-               pakfire_archive_load_signatures(archive);
-
-       return archive->signatures;
-}
-
-static pakfire_archive_verify_status_t pakfire_archive_verify_checksums(PakfireArchive archive) {
-       DEBUG(archive->pakfire, "Verifying checksums of %p\n", archive);
-
-       // Cannot validate anything if no signatures are available
-       PakfireArchiveSignature* signatures = pakfire_archive_get_signatures(archive);
-       if (!signatures) {
-               ERROR(archive->pakfire, "Archive %p does not have any signatures\n", archive);
-               return PAKFIRE_ARCHIVE_VERIFY_NO_SIGNATURES;
-       }
-
-       pakfire_archive_verify_status_t status = PAKFIRE_ARCHIVE_VERIFY_INVALID;
-       const char* data = NULL;
-       size_t size = 0;
-       gpgme_error_t error;
-
-       // Load the checksums file
-       int r = pakfire_archive_read(archive, PAKFIRE_ARCHIVE_FN_CHECKSUMS,
-               (void *)&data, &size);
-       if (r) {
-               ERROR(archive->pakfire, "Could not read %s from archive %p\n",
-                       PAKFIRE_ARCHIVE_FN_CHECKSUMS, archive);
-               return status;
-       }
-
-       // Get GPG context
-       gpgme_ctx_t gpgctx = pakfire_get_gpgctx(archive->pakfire);
-
-       // Convert into gpgme data object
-       gpgme_data_t signed_text;
-       error = gpgme_data_new_from_mem(&signed_text, data, size, 0);
-       if (error != GPG_ERR_NO_ERROR) {
-               ERROR(archive->pakfire, "Could not load signed text: %s\n%s\n",
-                       gpgme_strerror(status), data);
-               goto ABORT;
-       }
-
-       // Try for each signature
-       while (signatures && *signatures) {
-               PakfireArchiveSignature signature = *signatures++;
-
-               gpgme_data_t sigdata;
-               error = gpgme_data_new_from_mem(&sigdata, signature->sigdata, strlen(signature->sigdata), 0);
-               if (error != GPG_ERR_NO_ERROR) {
-                       ERROR(archive->pakfire, "Could not load signature:\n%s\n", signature->sigdata);
-                       continue;
-               }
-
-               DEBUG(archive->pakfire, "Validating signature %p\n", signature);
-
-               // Perform verification
-               error = gpgme_op_verify(gpgctx, sigdata, signed_text, NULL);
-               if (error != GPG_ERR_NO_ERROR)
-                       goto CLEANUP;
-
-               // Run the operation
-               gpgme_verify_result_t result = gpgme_op_verify_result(gpgctx);
-
-               // Check if any signatures have been returned
-               if (!result || !result->signatures)
-                       goto CLEANUP;
-
-               // Walk through all signatures
-               for (gpgme_signature_t sig = result->signatures; sig; sig = sig->next) {
-                       switch (gpg_err_code(sig->status)) {
-                               // All good
-                               case GPG_ERR_NO_ERROR:
-                                       status = PAKFIRE_ARCHIVE_VERIFY_OK;
-                                       break;
-
-                               // Key has expired (still good)
-                               case GPG_ERR_KEY_EXPIRED:
-                                       status = PAKFIRE_ARCHIVE_VERIFY_KEY_EXPIRED;
-                                       break;
-
-                               // Signature has expired (bad)
-                               case GPG_ERR_SIG_EXPIRED:
-                                       status = PAKFIRE_ARCHIVE_VERIFY_SIG_EXPIRED;
-                                       break;
-
-                               // We don't have the key
-                               case GPG_ERR_NO_PUBKEY:
-                                       status = PAKFIRE_ARCHIVE_VERIFY_KEY_UNKNOWN;
-                                       break;
-
-                               // Bad signature (or any other errors)
-                               case GPG_ERR_BAD_SIGNATURE:
-                               default:
-                                       status = PAKFIRE_ARCHIVE_VERIFY_INVALID;
-                                       break;
-                       }
-               }
-
-CLEANUP:
-               gpgme_data_release(sigdata);
-       }
-
-       gpgme_data_release(signed_text);
-
-ABORT:
-       gpgme_release(gpgctx);
-
-       DEBUG(archive->pakfire, "Checksum verification status: %s\n",
-               pakfire_archive_verify_strerror(status));
-
-       return status;
-}
-
 static pakfire_archive_verify_status_t pakfire_archive_verify_file(Pakfire pakfire,
                struct archive* a, const struct pakfire_archive_chksum* chksum) {
        pakfire_archive_verify_status_t status = PAKFIRE_ARCHIVE_VERIFY_ERROR;
@@ -1547,10 +1298,7 @@ PAKFIRE_EXPORT pakfire_archive_verify_status_t pakfire_archive_verify(PakfireArc
 
        return PAKFIRE_ARCHIVE_VERIFY_OK; // XXX DEBUG
 
-       // Verify that checksums file is signed with a valid key
-       pakfire_archive_verify_status_t status = pakfire_archive_verify_checksums(archive);
-       if (status)
-               return status;
+       int status = 0;
 
        // Open the archive file
        struct archive* a;
index 452cc2f2e7f82572584497a06afababef124f971..640a89ba5e306c7ff9417cf13d9b080c49227cac 100644 (file)
@@ -59,13 +59,6 @@ PakfireFilelist pakfire_archive_get_filelist(PakfireArchive archive);
 pakfire_archive_verify_status_t pakfire_archive_verify(PakfireArchive archive);
 const char* pakfire_archive_verify_strerror(pakfire_archive_verify_status_t status);
 
-size_t pakfire_archive_count_signatures(PakfireArchive archive);
-PakfireArchiveSignature* pakfire_archive_get_signatures(PakfireArchive archive);
-
-PakfireArchiveSignature pakfire_archive_signature_ref(PakfireArchiveSignature signature);
-void pakfire_archive_signature_unref(PakfireArchiveSignature signature);
-const char* pakfire_archive_signature_get_data(PakfireArchiveSignature signature);
-
 size_t pakfire_archive_get_size(PakfireArchive archive);
 struct pakfire_package* pakfire_archive_make_package(
        PakfireArchive archive, struct pakfire_repo* repo);
index 97332dc4161886cd34d7506c8ad9922174d2ce14..36b8a107abc0dcf47c6eb4a7bdf6c3bda472ebed 100644 (file)
@@ -23,7 +23,6 @@
 
 typedef struct _Pakfire* Pakfire;
 typedef struct _PakfireArchive* PakfireArchive;
-typedef struct _PakfireArchiveSignature* PakfireArchiveSignature;
 typedef struct _PakfireFilelist* PakfireFilelist;
 
 #endif /* PAKFIRE_TYPES_H */
index a2b5b86308f0fc10f0aefdc36b66bb977146abc2..dd8d6aa2ef5f07f8c6de1fb04810084c70e1e8af 100644 (file)
@@ -69,11 +69,6 @@ global:
        pakfire_archive_verify;
        pakfire_archive_verify_strerror;
 
-       # archive signature
-       pakfire_archive_signature_get_data;
-       pakfire_archive_signature_ref;
-       pakfire_archive_signature_unref;
-
        # build
        pakfire_build;
        pakfire_shell;