chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
import: properly remove pre-existing images if --force is used
[elogind.git]
/
src
/
import
/
import-dkr.c
diff --git
a/src/import/import-dkr.c
b/src/import/import-dkr.c
index b290619305552e7eb460486476b996a799d27a4a..fbd64122f9eff5aabd863ff90f5531e157ebebe4 100644
(file)
--- 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);
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) {
}
r = btrfs_subvol_snapshot(q, p, false, false);
if (r < 0) {
- log_error_errno(r, "Failed to snapshot
fin
al image: %m");
+ log_error_errno(r, "Failed to snapshot
loc
al image: %m");
dkr_import_finish(name->import, r);
return;
}
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);
}
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 (curl_easy_getinfo(curl, CURLINFO_PRIVATE, &job) != CURLE_OK)
return;
- if (!job)
+ if (!job
|| job->done
)
return;
job->done = true;
return;
job->done = true;
@@
-817,6
+817,11
@@
static size_t dkr_import_job_write_callback(void *contents, size_t size, size_t
assert(contents);
assert(j);
assert(contents);
assert(j);
+ if (j->done) {
+ r = -ESTALE;
+ goto fail;
+ }
+
if (j->tar_stream) {
size_t l;
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);
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();
r = curl_header_strdup(contents, sz, HEADER_TOKEN, &token);
if (r < 0) {
log_oom();