From: Michael Tremer Date: Wed, 8 Sep 2021 12:24:24 +0000 (+0000) Subject: downloader: Make message digest algorithm selectable X-Git-Tag: 0.9.28~971 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bacdc13f507f0448be1c6e5b380ecc6941209964;p=pakfire.git downloader: Make message digest algorithm selectable Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/dist.c b/src/libpakfire/dist.c index 74e6b5ce0..e094416de 100644 --- a/src/libpakfire/dist.c +++ b/src/libpakfire/dist.c @@ -251,7 +251,7 @@ static int pakfire_dist_add_source(struct pakfire* pakfire, struct pakfire_packa // Download the file if it does not exist in the cache if (access(cache_path, R_OK) != 0) { r = pakfire_downloader_retrieve(downloader, BASEURL, mirrorlist, - NULL, filename, cache_path, 0); + NULL, filename, cache_path, PAKFIRE_DOWNLOADER_MD_NONE, 0); if (r) return r; } diff --git a/src/libpakfire/downloader.c b/src/libpakfire/downloader.c index dcf5908e8..f95cb8bb3 100644 --- a/src/libpakfire/downloader.c +++ b/src/libpakfire/downloader.c @@ -257,7 +257,8 @@ static int debug_callback(CURL *handle, curl_infotype type, static struct pakfire_transfer* pakfire_downloader_create_transfer( struct pakfire_downloader* downloader, const char* baseurl, struct pakfire_mirrorlist* mirrors, - const char* title, const char* url, const char* path, enum pakfire_transfer_flags flags) { + const char* title, const char* url, const char* path, + enum pakfire_downloader_message_digest md, enum pakfire_transfer_flags flags) { struct pakfire_config* config = NULL; DEBUG(downloader->pakfire, "Adding download of %s\n", url); @@ -319,7 +320,22 @@ static struct pakfire_transfer* pakfire_downloader_create_transfer( transfer->flags = flags; // Set message digest - transfer->md = EVP_sha512(); + switch (md) { + case PAKFIRE_DOWNLOADER_MD_SHA512: + transfer->md = EVP_sha512(); + break; + + case PAKFIRE_DOWNLOADER_MD_SHA256: + transfer->md = EVP_sha256(); + break; + + case PAKFIRE_DOWNLOADER_MD_SHA1: + transfer->md = EVP_sha1(); + break; + + case PAKFIRE_DOWNLOADER_MD_NONE: + break; + } // Allocate handle transfer->handle = curl_easy_init(); @@ -368,9 +384,10 @@ ERROR: int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader, const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title, - const char* url, const char* path, enum pakfire_transfer_flags flags) { + const char* url, const char* path, enum pakfire_downloader_message_digest md, + enum pakfire_transfer_flags flags) { struct pakfire_transfer* transfer = pakfire_downloader_create_transfer( - downloader, baseurl, mirrors, title, url, path, flags); + downloader, baseurl, mirrors, title, url, path, md, flags); if (!transfer) return 1; @@ -819,9 +836,10 @@ AGAIN: int pakfire_downloader_retrieve(struct pakfire_downloader* downloader, const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title, - const char* url, const char* path, enum pakfire_transfer_flags flags) { + const char* url, const char* path, enum pakfire_downloader_message_digest md, + enum pakfire_transfer_flags flags) { struct pakfire_transfer* transfer = pakfire_downloader_create_transfer( - downloader, baseurl, mirrors, title, url, path, flags); + downloader, baseurl, mirrors, title, url, path, md, flags); if (!transfer) return 1; diff --git a/src/libpakfire/include/pakfire/downloader.h b/src/libpakfire/include/pakfire/downloader.h index 34c05f963..4e71f4b76 100644 --- a/src/libpakfire/include/pakfire/downloader.h +++ b/src/libpakfire/include/pakfire/downloader.h @@ -34,6 +34,13 @@ enum pakfire_transfer_flags { PAKFIRE_TRANSFER_NOTEMP = (1 << 1), }; +enum pakfire_downloader_message_digest { + PAKFIRE_DOWNLOADER_MD_NONE = 0, + PAKFIRE_DOWNLOADER_MD_SHA1, + PAKFIRE_DOWNLOADER_MD_SHA256, + PAKFIRE_DOWNLOADER_MD_SHA512, +}; + int pakfire_downloader_create(struct pakfire_downloader** downloader, struct pakfire* pakfire); struct pakfire_downloader* pakfire_downloader_ref(struct pakfire_downloader* downloader); @@ -41,10 +48,12 @@ struct pakfire_downloader* pakfire_downloader_unref(struct pakfire_downloader* d int pakfire_downloader_retrieve(struct pakfire_downloader* downloader, const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title, - const char* url, const char* path, enum pakfire_transfer_flags flags); + const char* url, const char* path, enum pakfire_downloader_message_digest md, + enum pakfire_transfer_flags flags); int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader, const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title, - const char* url, const char* path, enum pakfire_transfer_flags flags); + const char* url, const char* path, enum pakfire_downloader_message_digest md, + enum pakfire_transfer_flags flags); int pakfire_downloader_run(struct pakfire_downloader* downloader); diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index 061e21999..bc3217ba6 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -86,7 +86,8 @@ static int pakfire_repo_is_internal(struct pakfire_repo* repo) { } static int pakfire_repo_retrieve(struct pakfire_repo* repo, const char* title, - const char* url, const char* path, enum pakfire_transfer_flags flags) { + const char* url, const char* path, enum pakfire_downloader_message_digest md, + enum pakfire_transfer_flags flags) { struct pakfire_downloader* downloader; int r = pakfire_downloader_create(&downloader, repo->pakfire); if (r) @@ -97,7 +98,7 @@ static int pakfire_repo_retrieve(struct pakfire_repo* repo, const char* title, // Retrieve the database file r = pakfire_downloader_retrieve(downloader, repo->appdata->baseurl, mirrorlist, - title, url, path, flags); + title, url, path, md, flags); if (mirrorlist) pakfire_mirrorlist_unref(mirrorlist); @@ -120,7 +121,7 @@ static int pakfire_repo_import_key(struct pakfire_repo* repo, const char* url) { // Try to download the key int r = pakfire_repo_retrieve(repo, NULL, url, path, - PAKFIRE_TRANSFER_NOTEMP|PAKFIRE_TRANSFER_NOPROGRESS); + PAKFIRE_DOWNLOADER_MD_NONE, PAKFIRE_TRANSFER_NOTEMP|PAKFIRE_TRANSFER_NOPROGRESS); if (r) goto ERROR; @@ -277,7 +278,8 @@ static int pakfire_repo_download_database(struct pakfire_repo* repo, const char* // Make download URL pakfire_string_format(database_url, "repodata/%s", database); - return pakfire_repo_retrieve(repo, title, database_url, cache_path, 0); + return pakfire_repo_retrieve(repo, title, database_url, cache_path, + PAKFIRE_DOWNLOADER_MD_NONE, 0); } static int pakfire_repo_read_metadata(struct pakfire_repo* repo, const char* path, int refresh) { @@ -367,7 +369,8 @@ static int pakfire_repo_refresh_mirrorlist(struct pakfire_repo* repo, const int } return pakfire_repo_retrieve(repo, NULL, - repo->appdata->mirrorlist_url, repo->appdata->mirrorlist, PAKFIRE_TRANSFER_NOPROGRESS); + repo->appdata->mirrorlist_url, repo->appdata->mirrorlist, + PAKFIRE_DOWNLOADER_MD_NONE, PAKFIRE_TRANSFER_NOPROGRESS); } static int pakfire_repo_refresh_metadata(struct pakfire_repo* repo, const int force) { @@ -382,7 +385,8 @@ static int pakfire_repo_refresh_metadata(struct pakfire_repo* repo, const int fo } int r = pakfire_repo_retrieve(repo, NULL, - "repodata/repomd.json", repo->appdata->metadata, PAKFIRE_TRANSFER_NOPROGRESS); + "repodata/repomd.json", repo->appdata->metadata, PAKFIRE_DOWNLOADER_MD_NONE, + PAKFIRE_TRANSFER_NOPROGRESS); if (r) return r; diff --git a/src/libpakfire/request.c b/src/libpakfire/request.c index 28a4a1b5f..c4568cf9b 100644 --- a/src/libpakfire/request.c +++ b/src/libpakfire/request.c @@ -457,7 +457,7 @@ static int pakfire_request_add_url(struct pakfire_request* request, int action, // Download the file r = pakfire_downloader_retrieve(downloader, NULL, NULL, NULL, - url, path, PAKFIRE_TRANSFER_NOTEMP); + url, path, PAKFIRE_DOWNLOADER_MD_NONE, PAKFIRE_TRANSFER_NOTEMP); if (r) goto ERROR; diff --git a/src/libpakfire/transaction.c b/src/libpakfire/transaction.c index 4315f420c..493e30b34 100644 --- a/src/libpakfire/transaction.c +++ b/src/libpakfire/transaction.c @@ -1019,7 +1019,7 @@ static int pakfire_transaction_download_package(struct pakfire_transaction* tran // Add transfer to downloader r = pakfire_downloader_add_transfer(downloader, baseurl, mirrorlist, - nevra, filename, path, 0); + nevra, filename, path, PAKFIRE_DOWNLOADER_MD_NONE, 0); ERROR: if (mirrorlist)