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: make sure we don't mangle file ownerships with the local passwd database...
[elogind.git]
/
src
/
import
/
import-dkr.c
diff --git
a/src/import/import-dkr.c
b/src/import/import-dkr.c
index 16580538102d8465026a5ce79ec94787defc2334..b54a1a6d94b5eeeb9dcd9e2d938544022cfb2367 100644
(file)
--- a/
src/import/import-dkr.c
+++ b/
src/import/import-dkr.c
@@
-94,6
+94,7
@@
struct DkrImport {
CurlGlue *glue;
char *index_url;
CurlGlue *glue;
char *index_url;
+ char *image_root;
Hashmap *names;
Hashmap *jobs;
Hashmap *names;
Hashmap *jobs;
@@
-406,17
+407,17
@@
static void dkr_import_name_maybe_finish(DkrImportName *name) {
assert(name->id);
assert(name->id);
- p = strappenda(
"/var/lib/container
/", name->local);
- q = strappenda(
"/var/lib/container
/.dkr-", name->id);
+ p = strappenda(
name->import->image_root, "
/", name->local);
+ q = strappenda(
name->import->image_root, "
/.dkr-", name->id);
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;
}
@@
-492,7
+493,7
@@
static int dkr_import_job_run_tar(DkrImportJob *job) {
if (null_fd != STDOUT_FILENO)
safe_close(null_fd);
if (null_fd != STDOUT_FILENO)
safe_close(null_fd);
- execlp("tar", "tar", "-C", job->temp_path, gzip ? "-x
z" : "-x
", NULL);
+ execlp("tar", "tar", "-C", job->temp_path, gzip ? "-x
pz" : "-px", "--numeric-owner
", NULL);
_exit(EXIT_FAILURE);
}
_exit(EXIT_FAILURE);
}
@@
-534,7
+535,7
@@
static int dkr_import_name_pull_layer(DkrImportName *name) {
return 0;
}
return 0;
}
- path = strjoin(
"/var/lib/container
/.dkr-", layer, NULL);
+ path = strjoin(
name->import->image_root, "
/.dkr-", layer, NULL);
if (!path)
return log_oom();
if (!path)
return log_oom();
@@
-575,7
+576,7
@@
static int dkr_import_name_pull_layer(DkrImportName *name) {
if (base) {
const char *base_path;
if (base) {
const char *base_path;
- base_path = strappend
("/var/lib/container
/.dkr-", base);
+ base_path = strappend
a(name->import->image_root, "
/.dkr-", base);
r = btrfs_subvol_snapshot(base_path, temp, false, true);
} else
r = btrfs_subvol_make(temp);
r = btrfs_subvol_snapshot(base_path, temp, false, true);
} else
r = btrfs_subvol_make(temp);
@@
-1021,13
+1022,21
@@
static int dkr_import_name_begin(DkrImportName *name) {
return dkr_import_name_add_job(name, DKR_IMPORT_JOB_IMAGES, url, &name->job_images);
}
return dkr_import_name_add_job(name, DKR_IMPORT_JOB_IMAGES, url, &name->job_images);
}
-int dkr_import_new(DkrImport **import, sd_event *event, const char *index_url, dkr_import_on_finished on_finished, void *userdata) {
+int dkr_import_new(
+ DkrImport **import,
+ sd_event *event,
+ const char *index_url,
+ const char *image_root,
+ dkr_import_on_finished on_finished,
+ void *userdata) {
+
_cleanup_(dkr_import_unrefp) DkrImport *i = NULL;
char *e;
int r;
assert(import);
assert(dkr_url_is_valid(index_url));
_cleanup_(dkr_import_unrefp) DkrImport *i = NULL;
char *e;
int r;
assert(import);
assert(dkr_url_is_valid(index_url));
+ assert(image_root);
i = new0(DkrImport, 1);
if (!i)
i = new0(DkrImport, 1);
if (!i)
@@
-1040,6
+1049,10
@@
int dkr_import_new(DkrImport **import, sd_event *event, const char *index_url, d
if (!i->index_url)
return -ENOMEM;
if (!i->index_url)
return -ENOMEM;
+ i->image_root = strdup(image_root);
+ if (!i->image_root)
+ return -ENOMEM;
+
e = endswith(i->index_url, "/");
if (e)
*e = 0;
e = endswith(i->index_url, "/");
if (e)
*e = 0;
@@
-1084,7
+1097,7
@@
DkrImport* dkr_import_unref(DkrImport *import) {
sd_event_unref(import->event);
free(import->index_url);
sd_event_unref(import->event);
free(import->index_url);
-
+ free(import->image_root);
free(import);
return NULL;
free(import);
return NULL;