From 5eab47bce5d5fd77c32143002b56c1b3606b5909 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Sat, 31 Mar 2018 02:39:28 +0200 Subject: [PATCH] confile: expand lxc.environment When a bare environment variable is specified then retrieve the value from the current environment. For example, setting lxc.environment = PATH will cause LXC to inherit the value of PATH from the current environment. Suggested-by: Jonathan Calmels Signed-off-by: Christian Brauner --- doc/lxc.container.conf.sgml.in | 7 +++++++ src/lxc/confile.c | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/doc/lxc.container.conf.sgml.in b/doc/lxc.container.conf.sgml.in index bd4195d9df..e9a013b8cf 100644 --- a/doc/lxc.container.conf.sgml.in +++ b/doc/lxc.container.conf.sgml.in @@ -2445,6 +2445,13 @@ dev/null proc/kcore none bind,relative 0 0 lxc.environment = APP_ENV=production lxc.environment = SYSLOG_SERVER=192.0.2.42 + + It is possible to inherit host environment variables by setting the + name of the variable without a "=" sign. For example: + + + lxc.environment = PATH + diff --git a/src/lxc/confile.c b/src/lxc/confile.c index c1b4638d9b..9704bbbecb 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -1096,7 +1096,21 @@ static int set_config_environment(const char *key, const char *value, if (!list_item) goto on_error; - list_item->elem = strdup(value); + if (!strchr(value, '=')) { + const char *env_val; + const char *env_key = value; + const char *env_var[3] = {0}; + + env_val = getenv(env_key); + if (!env_val) + goto on_error; + + env_var[0] = env_key; + env_var[1] = env_val; + list_item->elem = lxc_string_join("=", env_var, false); + } else { + list_item->elem = strdup(value); + } if (!list_item->elem) goto on_error;