From: Michael Tremer Date: Tue, 13 Jul 2021 11:55:59 +0000 (+0000) Subject: archive: Fail hard when files do not have a checksum X-Git-Tag: 0.9.28~1034 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6a473a36d271f10314d73d4cd558217959a6061;p=pakfire.git archive: Fail hard when files do not have a checksum Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index e1f351683..35bcc7d2e 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -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;