X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fimport%2Fimport-dkr.c;h=fbd64122f9eff5aabd863ff90f5531e157ebebe4;hb=f0be89eee9bf887bac87b59702bf688f691c2340;hp=8f26191c40fd90a9d7e95dd3b9f50a3e9180f275;hpb=0c7bf33a989a58922b3eb9aaa96abd773c8754c4;p=elogind.git diff --git a/src/import/import-dkr.c b/src/import/import-dkr.c index 8f26191c4..fbd64122f 100644 --- a/src/import/import-dkr.c +++ b/src/import/import-dkr.c @@ -411,17 +411,17 @@ static void dkr_import_name_maybe_finish(DkrImportName *name) { if (name->force_local) { (void) btrfs_subvol_remove(p); - (void) rm_rf(p, false, true, false); + (void) rm_rf_dangerous(p, false, true, false); } r = btrfs_subvol_snapshot(q, p, false, false); if (r < 0) { - log_error_errno(r, "Failed to snapshot final image: %m"); + log_error_errno(r, "Failed to snapshot local image: %m"); dkr_import_finish(name->import, r); return; } - log_info("Created new image %s.", p); + log_info("Created new local image %s.", p); } dkr_import_finish(name->import, 0); @@ -718,7 +718,7 @@ static void dkr_import_curl_on_finished(CurlGlue *g, CURL *curl, CURLcode result if (curl_easy_getinfo(curl, CURLINFO_PRIVATE, &job) != CURLE_OK) return; - if (!job) + if (!job || job->done) return; job->done = true; @@ -780,7 +780,7 @@ static void dkr_import_curl_on_finished(CurlGlue *g, CURL *curl, CURLcode result goto fail; } - r = btrfs_subvol_read_only(job->temp_path, true); + r = btrfs_subvol_set_read_only(job->temp_path, true); if (r < 0) { log_error_errno(r, "Failed to mark snapshot read-only: %m"); goto fail; @@ -817,6 +817,11 @@ static size_t dkr_import_job_write_callback(void *contents, size_t size, size_t assert(contents); assert(j); + if (j->done) { + r = -ESTALE; + goto fail; + } + if (j->tar_stream) { size_t l; @@ -866,6 +871,11 @@ static size_t dkr_import_job_header_callback(void *contents, size_t size, size_t assert(contents); assert(j); + if (j->done) { + r = -ESTALE; + goto fail; + } + r = curl_header_strdup(contents, sz, HEADER_TOKEN, &token); if (r < 0) { log_oom();