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

Reply via email to