]> git.ipfire.org Git - pakfire.git/commitdiff
downloader: Use baseurl if no mirrors are configured
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 13 Mar 2021 14:06:49 +0000 (14:06 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 13 Mar 2021 14:06:49 +0000 (14:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/downloader.c

index afb154dc9ff8cdf07ebc48b49264902c15dbbf60..37528720c62aa045b8fac452a104b43d6d01ea7e 100644 (file)
@@ -384,9 +384,11 @@ int pakfire_downloader_add_transfer(
        DEBUG(downloader->pakfire, "Adding download of %s\n", url);
 
        // Do not allow relative URLs when no mirrors are set
-       if (!pakfire_url_is_absolute(url) && STAILQ_EMPTY(&downloader->mirrors)) {
-               ERROR(downloader->pakfire, "Relative URLs cannot be used without any mirrors set\n");
-               return EINVAL;
+       if (!pakfire_url_is_absolute(url)) {
+               if (STAILQ_EMPTY(&downloader->mirrors) && !*downloader->baseurl) {
+                       ERROR(downloader->pakfire, "Relative URLs cannot be used without any mirrors set\n");
+                       return EINVAL;
+               }
        }
 
        struct pakfire_transfer* transfer = calloc(1, sizeof(*transfer));
@@ -653,7 +655,7 @@ static int pakfire_downloader_activate_transfer(struct pakfire_downloader* downl
                curl_easy_setopt(transfer->handle, CURLOPT_URL, transfer->url);
 
        // Join path if we are using mirrors
-       } else {
+       } else if (!STAILQ_EMPTY(&downloader->mirrors)) {
                int r = pakfire_transfer_select_mirror(downloader, transfer);
                if (r)
                        return r;
@@ -667,6 +669,23 @@ static int pakfire_downloader_activate_transfer(struct pakfire_downloader* downl
 
                curl_easy_setopt(transfer->handle, CURLOPT_URL, url);
                free(url);
+
+       // Use baseurl
+       } else if (*downloader->baseurl) {
+               char* url = pakfire_url_join(downloader->baseurl, transfer->url);
+               if (!url) {
+                       ERROR(downloader->pakfire, "Error composing download URL: %s\n",
+                               strerror(errno));
+                       return 1;
+               }
+
+               curl_easy_setopt(transfer->handle, CURLOPT_URL, url);
+               free(url);
+
+       // Cannot compose URL
+       } else {
+               ERROR(downloader->pakfire, "Could not set URL\n");
+               return 1;
        }
 
        // Add the handle to cURL