]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
import: ignore non-successful HTTP codes for collecing image metadata
authorLennart Poettering <lennart@poettering.net>
Fri, 15 Jan 2021 21:55:15 +0000 (22:55 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 19 Jan 2021 17:29:59 +0000 (18:29 +0100)
Previously we'd collect the data from redirects too, which wasn't
particularly terrible, since these typically don't carry the data we
were interested in, but it's still incorrect to do so.

src/import/pull-job.c

index f41a7e7a5d06aa11ad60414c82748c2a87ad039f..d1e61ba601f0e964e6798b467c4c70810331c452 100644 (file)
@@ -435,8 +435,10 @@ fail:
 
 static size_t pull_job_header_callback(void *contents, size_t size, size_t nmemb, void *userdata) {
         _cleanup_free_ char *length = NULL, *last_modified = NULL, *etag = NULL;
-        PullJob *j = userdata;
         size_t sz = size * nmemb;
+        PullJob *j = userdata;
+        CURLcode code;
+        long status;
         int r;
 
         assert(contents);
@@ -449,6 +451,18 @@ static size_t pull_job_header_callback(void *contents, size_t size, size_t nmemb
 
         assert(j->state == PULL_JOB_ANALYZING);
 
+        code = curl_easy_getinfo(j->curl, CURLINFO_RESPONSE_CODE, &status);
+        if (code != CURLE_OK) {
+                log_error("Failed to retrieve response code: %s", curl_easy_strerror(code));
+                r = -EIO;
+                goto fail;
+        }
+
+        if (status < 200 || status >= 300)
+                /* If this is not HTTP 2xx, let's skip these headers, they are probably for
+                 * some redirect or so, and we are not interested in the headers of those. */
+                return sz;
+
         r = curl_header_strdup(contents, sz, "ETag:", &etag);
         if (r < 0) {
                 log_oom();