On Fri, Jul 19, 2013 at 02:26:53PM +0000, Serge Hallyn wrote: > From: Serge Hallyn <serge.hal...@ubuntu.com> > > When doing reboot test, must add clone_newuser to clone flags, else > we can't clone(CLONE_NEWPID). > > If we don't have caps at lxc-start, don't refuse to start. Drop the > lxc_caps_check() function altogether as it is unused now. > > Signed-off-by: Serge Hallyn <serge.hal...@ubuntu.com>
Happy to see that code go! Acked-by: Stéphane Graber <stgra...@ubuntu.com> > --- > src/lxc/caps.c | 38 -------------------------------------- > src/lxc/caps.h | 4 ---- > src/lxc/lxc_start.c | 8 -------- > src/lxc/start.c | 24 ++++++++++++------------ > 4 files changed, 12 insertions(+), 62 deletions(-) > > diff --git a/src/lxc/caps.c b/src/lxc/caps.c > index 0544451..56f0241 100644 > --- a/src/lxc/caps.c > +++ b/src/lxc/caps.c > @@ -227,42 +227,4 @@ int lxc_caps_last_cap(void) > return last_cap; > } > > -/* > - * check if we have the caps needed to start a container. returns 1 on > - * success, 0 on error. (I'd prefer this be a bool, but am afraid that > - * might fail to build on some distros). > - */ > -int lxc_caps_check(void) > -{ > - uid_t uid = getuid(); > - cap_t caps; > - cap_flag_value_t value; > - int i, ret; > - > - cap_value_t needed_caps[] = { CAP_SYS_ADMIN, CAP_NET_ADMIN, CAP_SETUID, > CAP_SETGID }; > - > -#define NUMCAPS ((int) (sizeof(needed_caps) / sizeof(cap_t))) > - > - if (!uid) > - return 1; > - > - caps = cap_get_proc(); > - if (!caps) { > - ERROR("failed to cap_get_proc: %m"); > - return 0; > - } > - > - for (i=0; i<NUMCAPS; i++) { > - ret = cap_get_flag(caps, needed_caps[i], CAP_EFFECTIVE, &value); > - if (ret) { > - ERROR("Failed to cap_get_flag: %m"); > - return 0; > - } > - if (!value) { > - return 0; > - } > - } > - > - return 1; > -} > #endif > diff --git a/src/lxc/caps.h b/src/lxc/caps.h > index 97bdab6..8de9635 100644 > --- a/src/lxc/caps.h > +++ b/src/lxc/caps.h > @@ -30,7 +30,6 @@ extern int lxc_caps_reset(void); > extern int lxc_caps_down(void); > extern int lxc_caps_up(void); > extern int lxc_caps_init(void); > -extern int lxc_caps_check(void); > > extern int lxc_caps_last_cap(void); > #else > @@ -46,9 +45,6 @@ static inline int lxc_caps_up(void) { > static inline int lxc_caps_init(void) { > return 0; > } > -static inline int lxc_caps_check(void) { > - return 1; > -} > > static inline int lxc_caps_last_cap(void) { > return 0; > diff --git a/src/lxc/lxc_start.c b/src/lxc/lxc_start.c > index 490dbad..e779304 100644 > --- a/src/lxc/lxc_start.c > +++ b/src/lxc/lxc_start.c > @@ -227,14 +227,6 @@ int main(int argc, char *argv[]) > } > > if (my_args.daemonize) { > - /* do an early check for needed privs, since otherwise the > - * user won't see the error */ > - > - if (!lxc_caps_check()) { > - ERROR("Not running with sufficient privilege"); > - goto out; > - } > - > if (daemon(0, 0)) { > SYSERROR("failed to daemonize '%s'", my_args.name); > goto out; > diff --git a/src/lxc/start.c b/src/lxc/start.c > index c91b231..00020de 100644 > --- a/src/lxc/start.c > +++ b/src/lxc/start.c > @@ -253,17 +253,10 @@ out_sigfd: > return -1; > } > > -extern int lxc_caps_check(void); > - > struct lxc_handler *lxc_init(const char *name, struct lxc_conf *conf, const > char *lxcpath) > { > struct lxc_handler *handler; > > - if (!lxc_caps_check()) { > - ERROR("Not running with sufficient privilege"); > - return NULL; > - } > - > handler = malloc(sizeof(*handler)); > if (!handler) > return NULL; > @@ -417,10 +410,10 @@ static int container_reboot_supported(void *arg) > return 0; > } > > -static int must_drop_cap_sys_boot(void) > +static int must_drop_cap_sys_boot(struct lxc_conf *conf) > { > FILE *f = fopen("/proc/sys/kernel/ctrl-alt-del", "r"); > - int ret, cmd, v; > + int ret, cmd, v, flags; > long stack_size = 4096; > void *stack = alloca(stack_size); > int status; > @@ -439,11 +432,15 @@ static int must_drop_cap_sys_boot(void) > } > cmd = v ? LINUX_REBOOT_CMD_CAD_ON : LINUX_REBOOT_CMD_CAD_OFF; > > + flags = CLONE_NEWPID | SIGCHLD; > + if (!lxc_list_empty(&conf->id_map)) > + flags |= CLONE_NEWUSER; > + > #ifdef __ia64__ > - pid = __clone2(container_reboot_supported, stack, stack_size, > CLONE_NEWPID | SIGCHLD, &cmd); > + pid = __clone2(container_reboot_supported, stack, stack_size, flags, > &cmd); > #else > stack += stack_size; > - pid = clone(container_reboot_supported, stack, CLONE_NEWPID | > SIGCHLD, &cmd); > + pid = clone(container_reboot_supported, stack, flags, &cmd); > #endif > if (pid < 0) { > SYSERROR("failed to clone\n"); > @@ -668,6 +665,9 @@ int lxc_spawn(struct lxc_handler *handler) > curcgroup = alloca(len); > if (lxc_curcgroup(curcgroup, len) <= 1) > curcgroup = NULL; > + FILE *f = fopen("/tmp/a", "a"); > + fprintf(f, "curcgroup is %s\n", curcgroup); > + fclose(f); > } > if ((handler->cgroup = lxc_cgroup_path_create(curcgroup, name)) == NULL) > goto out_delete_net; > @@ -776,7 +776,7 @@ int __lxc_start(const char *name, struct lxc_conf *conf, > handler->ops = ops; > handler->data = data; > > - if (must_drop_cap_sys_boot()) { > + if (must_drop_cap_sys_boot(handler->conf)) { > #if HAVE_SYS_CAPABILITY_H > DEBUG("Dropping cap_sys_boot\n"); > #else > -- > 1.8.3.2 > > > ------------------------------------------------------------------------------ > See everything from the browser to the database with AppDynamics > Get end-to-end visibility with application monitoring from AppDynamics > Isolate bottlenecks and diagnose root cause in seconds. > Start your free trial of AppDynamics Pro today! > http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk > _______________________________________________ > Lxc-devel mailing list > Lxc-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/lxc-devel -- Stéphane Graber Ubuntu developer http://www.ubuntu.com
signature.asc
Description: Digital signature
------------------------------------------------------------------------------ See everything from the browser to the database with AppDynamics Get end-to-end visibility with application monitoring from AppDynamics Isolate bottlenecks and diagnose root cause in seconds. Start your free trial of AppDynamics Pro today! http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel