Commit 5eea90e8 by Serge Hallyn Committed by Stéphane Graber

clone: clear the rootfs out of unexpanded config

Closes #694 When we start cloning container c1 to c2, we first save c1's configuration in c2's as a starting point. We long ago cleared out the lxc.rootfs entry before saving it, so that if we are killed before we update the rootfs, c2's rootfs doesn't point to c1's. Because then lxc-destroy -n c2 would delete c1's rootfs. But when we introduced the unexpanded_config, we didn't update this code to clear the rootfs out of the unexpanded_config, which is what now actually gets saved in write_config(). Do so. Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com> Acked-by: 's avatarStéphane Graber <stgraber@ubuntu.com>
parent 8130ebe8
...@@ -3057,7 +3057,7 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char ...@@ -3057,7 +3057,7 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char
struct lxc_container *c2 = NULL; struct lxc_container *c2 = NULL;
char newpath[MAXPATHLEN]; char newpath[MAXPATHLEN];
int ret, storage_copied = 0; int ret, storage_copied = 0;
char *origroot = NULL; char *origroot = NULL, *saved_unexp_conf = NULL;
struct clone_update_data data; struct clone_update_data data;
FILE *fout; FILE *fout;
pid_t pid; pid_t pid;
...@@ -3104,9 +3104,20 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char ...@@ -3104,9 +3104,20 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char
SYSERROR("open %s", newpath); SYSERROR("open %s", newpath);
goto out; goto out;
} }
saved_unexp_conf = c->lxc_conf->unexpanded_config;
c->lxc_conf->unexpanded_config = strdup(saved_unexp_conf);
if (!c->lxc_conf->unexpanded_config) {
ERROR("Out of memory");
goto out;
}
clear_unexp_config_line(c->lxc_conf, "lxc.rootfs", false);
write_config(fout, c->lxc_conf); write_config(fout, c->lxc_conf);
fclose(fout); fclose(fout);
c->lxc_conf->rootfs.path = origroot; c->lxc_conf->rootfs.path = origroot;
free(c->lxc_conf->unexpanded_config);
c->lxc_conf->unexpanded_config = saved_unexp_conf;
saved_unexp_conf = NULL;
sprintf(newpath, "%s/%s/rootfs", lxcpath, newname); sprintf(newpath, "%s/%s/rootfs", lxcpath, newname);
if (mkdir(newpath, 0755) < 0) { if (mkdir(newpath, 0755) < 0) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment