]> git.ipfire.org Git - pakfire.git/commitdiff
downloader: Make message digest algorithm selectable
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 8 Sep 2021 12:24:24 +0000 (12:24 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 8 Sep 2021 12:24:24 +0000 (12:24 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/dist.c
src/libpakfire/downloader.c
src/libpakfire/include/pakfire/downloader.h
src/libpakfire/repo.c
src/libpakfire/request.c
src/libpakfire/transaction.c

index 74e6b5ce059c2026a44e0c21cc220286ae8e6cad..e094416dea938d2ff0fa77dd48f50308e133ec6a 100644 (file)
@@ -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;
        }
index dcf5908e821ad01644dd69fd20473c94ae3103e2..f95cb8bb3d5226a03dc49ba6deee17e14194c26e 100644 (file)
@@ -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;
 
index 34c05f96324b5240214bb3fcf8c2948ce57c95e7..4e71f4b76dc7a78e6a78a6abe2cbd49d0518f23b 100644 (file)
@@ -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);
 
index 061e21999b44dc399f8858b94c05355a67fe8a0a..bc3217ba65581c3715e4680fcb56fcecb32883ce 100644 (file)
@@ -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;
 
index 28a4a1b5fe71d4f4d600207740a4832c92920839..c4568cf9b1b22d5dd802ec2cb3feefbd8ce0982b 100644 (file)
@@ -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;
 
index 4315f420c3c5b2e1d343e0d399fa6e5f790c5d4d..493e30b34784a6fcf5d5efe0eb82518e9a7df7f3 100644 (file)
@@ -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)