From: Serge Hallyn Date: Tue, 10 Jun 2014 03:29:11 +0000 (+0000) Subject: container start: check for start hooks in container rootfs X-Git-Tag: lxc-1.1.0.alpha1~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1c1c70514f20fed5137fd6028810a9f7be9d1eba;p=thirdparty%2Flxc.git container start: check for start hooks in container rootfs Do so early enough that we can report a meaningful failure. (This should fix https://github.com/lxc/lxc/issues/225) Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index a63157117..4b5255033 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -3896,6 +3896,30 @@ int do_rootfs_setup(struct lxc_conf *conf, const char *name, const char *lxcpath return 0; } +static bool verify_start_hooks(struct lxc_conf *conf) +{ + struct lxc_list *it; + char path[MAXPATHLEN]; + lxc_list_for_each(it, &conf->hooks[LXCHOOK_START]) { + char *hookname = it->elem; + struct stat st; + int ret; + + ret = snprintf(path, MAXPATHLEN, "%s%s", + conf->rootfs.mount, hookname); + if (ret < 0 || ret >= MAXPATHLEN) + return false; + ret = stat(path, &st); + if (ret) { + SYSERROR("Start hook %s not found in container rootfs", + hookname); + return false; + } + } + + return true; +} + int lxc_setup(struct lxc_handler *handler) { const char *name = handler->name; @@ -3949,6 +3973,10 @@ int lxc_setup(struct lxc_handler *handler) return -1; } + /* Make sure any start hooks are in the rootfs */ + if (!verify_start_hooks(lxc_conf)) + return -1; + if (lxc_conf->is_execute) lxc_execute_bind_init(lxc_conf);