Quoting Stéphane Graber ([email protected]): > When running unprivileged (euid != 0), LXC will now use the following paths: > - Default lxc path: ~/.local/share/lxc/ > - Default config path: ~/.config/lxc/lxc.conf > > Those two paths are based on standard XDG paths (though ignoring all the > possible override paths for now at least) and so probably don't need to > be configurable at build time. > > Signed-off-by: Stéphane Graber <[email protected]>
Acked-by: Serge E. Hallyn <[email protected]> > --- > src/lxc/utils.c | 43 ++++++++++++++++++++++++++++++++++++++++--- > 1 file changed, 40 insertions(+), 3 deletions(-) > > diff --git a/src/lxc/utils.c b/src/lxc/utils.c > index 785f3e6..832dbe5 100644 > --- a/src/lxc/utils.c > +++ b/src/lxc/utils.c > @@ -248,11 +248,36 @@ const char *lxc_global_config_value(const char > *option_name) > { "lvm_vg", DEFAULT_VG }, > { "lvm_thin_pool", DEFAULT_THIN_POOL }, > { "zfsroot", DEFAULT_ZFSROOT }, > - { "lxcpath", LXCPATH }, > + { "lxcpath", NULL }, > { "cgroup.pattern", DEFAULT_CGROUP_PATTERN }, > { "cgroup.use", NULL }, > { NULL, NULL }, > }; > + > + char *user_config_path = NULL; > + char *user_lxc_path = NULL; > + char *user_home = NULL; > + > + if (geteuid() > 0) { > + user_home = getenv("HOME"); > + if (user_home) > + user_home = strdup(user_home); > + else > + user_home = "/"; > + > + user_config_path = malloc(sizeof(char) * (22 + > strlen(user_home))); > + user_lxc_path = malloc(sizeof(char) * (19 + strlen(user_home))); > + > + sprintf(user_config_path, "%s/.config/lxc/lxc.conf", user_home); > + sprintf(user_lxc_path, "%s/.local/share/lxc/", user_home); > + > + free(user_home); > + } > + else { > + user_config_path = strdup(LXC_GLOBAL_CONF); > + user_lxc_path = strdup(LXCPATH); > + } > + > /* placed in the thread local storage pool */ > static __thread const char *values[sizeof(options) / > sizeof(options[0])] = { 0 }; > const char *(*ptr)[2]; > @@ -266,17 +291,23 @@ const char *lxc_global_config_value(const char > *option_name) > break; > } > if (!(*ptr)[0]) { > + free(user_config_path); > + free(user_lxc_path); > errno = EINVAL; > return NULL; > } > > if (values[i]) { > + free(user_config_path); > + free(user_lxc_path); > value = values[i]; > + > return value; > } > > process_lock(); > - fin = fopen_cloexec(LXC_GLOBAL_CONF, "r"); > + fin = fopen_cloexec(user_config_path, "r"); > + free(user_config_path); > process_unlock(); > if (fin) { > while (fgets(buf, 1024, fin)) { > @@ -311,11 +342,17 @@ const char *lxc_global_config_value(const char > *option_name) > if (!*p) > continue; > values[i] = copy_global_config_value(p); > + free(user_lxc_path); > goto out; > } > } > /* could not find value, use default */ > - values[i] = (*ptr)[1]; > + if (strcmp(option_name, "lxcpath") == 0) > + values[i] = user_lxc_path; > + else { > + free(user_lxc_path); > + values[i] = (*ptr)[1]; > + } > /* special case: if default value is NULL, > * and there is no config, don't view that > * as an error... */ > -- > 1.8.5.2 > > _______________________________________________ > lxc-devel mailing list > [email protected] > http://lists.linuxcontainers.org/listinfo/lxc-devel _______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
