]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Fail hard when files do not have a checksum
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 13 Jul 2021 11:55:59 +0000 (11:55 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 13 Jul 2021 11:55:59 +0000 (11:55 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c

index e1f35168382feccbb1688cdca42fef3a4dc7ffda..35bcc7d2e2cbfcf16ea1cb47c6c4453ba6bb8da9 100644 (file)
@@ -57,6 +57,12 @@ enum pakfire_archive_verify_flags {
        PAKFIRE_ARCHIVE_VERIFY_BEST,
 };
 
+static const char* pakfire_archive_files_without_chksums[] = {
+       "pakfire-format",
+       "chksums",
+       NULL,
+};
+
 struct pakfire_archive_chksum {
        STAILQ_ENTRY(pakfire_archive_chksum) nodes;
 
@@ -1396,11 +1402,21 @@ static int pakfire_archive_verify_file(struct pakfire_archive* archive,
                struct archive* a, struct archive_entry* entry, int flags, void* data) {
        const char* path = archive_entry_pathname(entry);
 
+       // Signatures do not have checksums
+       if (pakfire_string_startswith(path, "signatures/"))
+               return 0;
+
+       // Some files do not have checksums
+       for (const char** file = pakfire_archive_files_without_chksums; *file; file++) {
+               if (strcmp(*file, path) == 0)
+                       return 0;
+       }
+
        // Fetch the checksum
        struct pakfire_archive_chksum* chksum = pakfire_archive_find_chksum(archive, path);
        if (!chksum) {
-               DEBUG(archive->pakfire, "No checksum found for %s\n", path);
-               return 0;
+               ERROR(archive->pakfire, "No checksum found for %s\n", path);
+               return 1;
        }
 
        struct pakfire_archive_validator** validators = NULL;