Unverified Commit 7385273f by l00415420 Committed by Christian Brauner

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: 's avatarLiFeng <lifeng68@huawei.com> Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
parent 3fb8253d
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment