From: l00415420 Date: Wed, 7 Feb 2018 12:39:28 +0000 (-0500) Subject: attach: set the container's environment variables X-Git-Tag: lxc-3.0.0.beta1~51^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7385273fc415fe56d499e2bdfd628dfe0e06e10c;p=thirdparty%2Flxc.git attach: set the container's environment variables Set the same environment variables that were used when starting the container when attaching to the container. Signed-off-by: LiFeng Signed-off-by: Christian Brauner --- diff --git a/src/lxc/attach.c b/src/lxc/attach.c index 6d3377f3e..ac8d9b2d5 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c @@ -322,9 +322,12 @@ static int lxc_attach_drop_privs(struct lxc_proc_context_info *ctx) return 0; } -static int lxc_attach_set_environment(enum lxc_attach_env_policy_t policy, +static int lxc_attach_set_environment(struct lxc_proc_context_info *init_ctx, + enum lxc_attach_env_policy_t policy, char **extra_env, char **extra_keep) { + struct lxc_list *iterator; + if (policy == LXC_ATTACH_CLEAR_ENV) { int path_kept = 0; char **extra_keep_store = NULL; @@ -400,6 +403,23 @@ static int lxc_attach_set_environment(enum lxc_attach_env_policy_t policy, return -1; } + /* Set container environment variables.*/ + if (init_ctx && init_ctx->container && init_ctx->container->lxc_conf) { + lxc_list_for_each(iterator, &init_ctx->container->lxc_conf->environment) { + char *env_tmp = strdup((char *)iterator->elem); + if (!env_tmp) { + SYSERROR("Failed to allocate memory for container environment " + "variables."); + return -1; + } + + if (putenv(env_tmp)) { + SYSERROR("Failed to set environment variable: %s.", (char *)iterator->elem); + return -1; + } + } + } + /* Set extra environment variables. */ if (extra_env) { for (; *extra_env; extra_env++) { @@ -798,7 +818,8 @@ static int attach_child_main(struct attach_clone_payload *payload) /* Always set the environment (specify (LXC_ATTACH_KEEP_ENV, NULL, NULL) * if you want this to be a no-op). */ - ret = lxc_attach_set_environment(options->env_policy, + ret = lxc_attach_set_environment(init_ctx, + options->env_policy, options->extra_env_vars, options->extra_keep_env); if (ret < 0)