]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
execute: set init_path when existing init is found 2308/head
authorTycho Andersen <tycho@tycho.ws>
Wed, 9 May 2018 01:48:31 +0000 (01:48 +0000)
committerTycho Andersen <tycho@tycho.ws>
Wed, 9 May 2018 14:36:02 +0000 (14:36 +0000)
I'm not really sure we should be looking in the rootfs for an existing
init, but I'll send a much more invasive patch to correct that. For now,
let's just make sure we set init_path when we find one, so that later in
execute_start() we don't bail.

Signed-off-by: Tycho Andersen <tycho@tycho.ws>
src/lxc/conf.c

index 48c4b4ecc639b767f56014961141000fa7361cd3..253331160aa2d466ad10320a3af1029437094838 100644 (file)
@@ -3213,8 +3213,15 @@ static int lxc_execute_bind_init(struct lxc_handler *handler)
        /* If init exists in the container, don't bind mount a static one */
        p = choose_init(conf->rootfs.mount);
        if (p) {
-               free(p);
-               return 0;
+               char *old = p;
+
+               p = strdup(old + strlen(conf->rootfs.mount));
+               free(old);
+               if (!p)
+                       return -ENOMEM;
+
+               INFO("Found existing init at \"%s\"", p);
+               goto out;
        }
 
        ret = snprintf(path, PATH_MAX, SBINDIR "/init.lxc.static");
@@ -3247,9 +3254,10 @@ static int lxc_execute_bind_init(struct lxc_handler *handler)
        p = strdup(destpath + strlen(conf->rootfs.mount));
        if (!p)
                return -ENOMEM;
-       ((struct execute_args *)handler->data)->init_path = p;
 
        INFO("Bind mounted lxc.init.static into container at \"%s\"", path);
+out:
+       ((struct execute_args *)handler->data)->init_path = p;
        return 0;
 }