From: KATOH Yasufumi Date: Thu, 2 Oct 2014 09:01:06 +0000 (+0900) Subject: lxc_global_config_value can return the default lxc.cgroup.pattern whether root or... X-Git-Tag: lxc-1.0.7~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9e6ac598b3956e745467c0df6f21c699968d7ad;p=thirdparty%2Flxc.git lxc_global_config_value can return the default lxc.cgroup.pattern whether root or non-root >>> On Tue, 30 Sep 2014 19:48:09 +0000 in message "Re: [lxc-devel] [PATCH] lxc-config can show lxc.cgroup.(use|pattern)" Serge Hallyn-san wrote: > I think it would be worth also augmenting > lxc_global_config_value() to return a default lxc.cgroup.use > for 'all', and a default lxc.cgroup.pattern ("/lxc/%n" for root > or "%n" for non-root). lxc.cgroup.pattern is like this? (^_^;) Signed-off-by: KATOH Yasufumi Signed-off-by: Serge Hallyn --- diff --git a/src/lxc/cgfs.c b/src/lxc/cgfs.c index 796b2202f..cee3c0c65 100644 --- a/src/lxc/cgfs.c +++ b/src/lxc/cgfs.c @@ -2226,15 +2226,7 @@ static void *cgfs_init(const char *name) if (!d->name) goto err1; - /* if we are running as root, use system cgroup pattern, otherwise - * just create a cgroup under the current one. But also fall back to - * that if for some reason reading the configuration fails and no - * default value is available - */ - if (geteuid() == 0) - d->cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern"); - if (!d->cgroup_pattern) - d->cgroup_pattern = "%n"; + d->cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern"); d->meta = lxc_cgroup_load_meta(); if (!d->meta) { diff --git a/src/lxc/cgmanager.c b/src/lxc/cgmanager.c index ada35d732..6fe830589 100644 --- a/src/lxc/cgmanager.c +++ b/src/lxc/cgmanager.c @@ -532,15 +532,8 @@ static void *cgm_init(const char *name) goto err1; } - /* if we are running as root, use system cgroup pattern, otherwise - * just create a cgroup under the current one. But also fall back to - * that if for some reason reading the configuration fails and no - * default value is available - */ - if (geteuid() == 0) - d->cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern"); - if (!d->cgroup_pattern) - d->cgroup_pattern = "%n"; + d->cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern"); + // cgm_create immediately gets called so keep the connection open return d; diff --git a/src/lxc/utils.c b/src/lxc/utils.c index efec41490..ca86c4c57 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -238,7 +238,7 @@ const char *lxc_global_config_value(const char *option_name) { "lxc.bdev.zfs.root", DEFAULT_ZFSROOT }, { "lxc.lxcpath", NULL }, { "lxc.default_config", NULL }, - { "lxc.cgroup.pattern", DEFAULT_CGROUP_PATTERN }, + { "lxc.cgroup.pattern", NULL }, { "lxc.cgroup.use", NULL }, { NULL, NULL }, }; @@ -252,6 +252,7 @@ const char *lxc_global_config_value(const char *option_name) char *user_config_path = NULL; char *user_default_config_path = NULL; char *user_lxc_path = NULL; + char *user_cgroup_pattern = NULL; if (geteuid() > 0) { const char *user_home = getenv("HOME"); @@ -265,11 +266,13 @@ const char *lxc_global_config_value(const char *option_name) sprintf(user_config_path, "%s/.config/lxc/lxc.conf", user_home); sprintf(user_default_config_path, "%s/.config/lxc/default.conf", user_home); sprintf(user_lxc_path, "%s/.local/share/lxc/", user_home); + user_cgroup_pattern = strdup("%n"); } else { user_config_path = strdup(LXC_GLOBAL_CONF); user_default_config_path = strdup(LXC_DEFAULT_CONFIG); user_lxc_path = strdup(LXCPATH); + user_cgroup_pattern = strdup(DEFAULT_CGROUP_PATTERN); } const char * const (*ptr)[2]; @@ -285,6 +288,7 @@ const char *lxc_global_config_value(const char *option_name) free(user_config_path); free(user_default_config_path); free(user_lxc_path); + free(user_cgroup_pattern); errno = EINVAL; return NULL; } @@ -293,6 +297,7 @@ const char *lxc_global_config_value(const char *option_name) free(user_config_path); free(user_default_config_path); free(user_lxc_path); + free(user_cgroup_pattern); return values[i]; } @@ -351,14 +356,22 @@ const char *lxc_global_config_value(const char *option_name) remove_trailing_slashes(user_lxc_path); values[i] = user_lxc_path; free(user_default_config_path); + free(user_cgroup_pattern); } else if (strcmp(option_name, "lxc.default_config") == 0) { values[i] = user_default_config_path; free(user_lxc_path); + free(user_cgroup_pattern); + } + else if (strcmp(option_name, "lxc.cgroup.pattern") == 0) { + values[i] = user_cgroup_pattern; + free(user_default_config_path); + free(user_lxc_path); } else { free(user_default_config_path); free(user_lxc_path); + free(user_cgroup_pattern); values[i] = (*ptr)[1]; } /* special case: if default value is NULL,