From: Michael Tremer Date: Wed, 8 Sep 2021 12:50:35 +0000 (+0000) Subject: downloader: Compare digests and try re-download if they don't match X-Git-Tag: 0.9.28~969 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35b5533fa9d8d977bc6171e302d95ff71335e9fa;p=pakfire.git downloader: Compare digests and try re-download if they don't match Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/downloader.c b/src/libpakfire/downloader.c index 911c17f32..2bbba0c53 100644 --- a/src/libpakfire/downloader.c +++ b/src/libpakfire/downloader.c @@ -600,7 +600,27 @@ static int pakfire_transfer_done(struct pakfire_downloader* downloader, free(hexdigest); } - // XXX check if digest matches + // Check if digests match + if (transfer->evp) { + r = CRYPTO_memcmp(transfer->computed_digest, transfer->expected_digest, + transfer->computed_digest_length); + + // If they don't match, log an error and try again + if (r) { + char* computed_hexdigest = __pakfire_hexlify(transfer->computed_digest, + transfer->computed_digest_length); + char* expected_hexdigest = __pakfire_hexlify(transfer->expected_digest, + transfer->expected_digest_length); + + ERROR(downloader->pakfire, "Download checksum didn't match:\n Expected: %s\n Computed: %s\n", + expected_hexdigest, computed_hexdigest); + + free(computed_hexdigest); + free(expected_hexdigest); + + return pakfire_transfer_fail(downloader, transfer, 0); + } + } switch (protocol) { case CURLPROTO_FILE: