]> git.ipfire.org Git - pakfire.git/commitdiff
downloader: Add method enable authentication
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 Oct 2023 16:24:58 +0000 (16:24 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 Oct 2023 16:24:58 +0000 (16:24 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/downloader.c

index 0c9aa96ef47e966661f0f4ea644cc8053550649e..db6375cb523d3f386e230289d940d987e4787be8 100644 (file)
@@ -84,6 +84,9 @@ struct pakfire_transfer {
        char baseurl[PATH_MAX];
        struct pakfire_mirrorlist* mirrors;
        struct pakfire_mirror* mirror;
+
+       // Authentication
+       unsigned int auth;
 };
 
 struct pakfire_downloader {
@@ -531,6 +534,13 @@ int pakfire_downloader_transfer_set_target(
        return pakfire_string_set(transfer->path, path);
 }
 
+int pakfire_downloader_transfer_auth(struct pakfire_transfer* transfer) {
+       // Enable authentication
+       transfer->auth = 1;
+
+       return 0;
+}
+
 static int pakfire_transfer_select_mirror(struct pakfire_downloader* downloader,
                struct pakfire_transfer* transfer) {
        // Choose the next mirror
@@ -935,6 +945,23 @@ static int pakfire_downloader_transfer_prepare(struct pakfire_downloader* downlo
                }
        }
 
+       // Authentication
+       if (transfer->auth) {
+               // Request SPNEGO
+               r = curl_easy_setopt(transfer->handle, CURLOPT_HTTPAUTH, CURLAUTH_NEGOTIATE|CURLAUTH_ONLY);
+               if (r) {
+                       CTX_ERROR(downloader->ctx, "Could not enable SPNEGO\n");
+                       return r;
+               }
+
+               // Set an empty username
+               r = curl_easy_setopt(transfer->handle, CURLOPT_USERPWD, ":");
+               if (r) {
+                       CTX_ERROR(downloader->ctx, "Could not set username\n");
+                       return r;
+               }
+       }
+
        // Drop any previously used EVP contexts
        if (transfer->evp) {
                EVP_MD_CTX_free(transfer->evp);