diff --git a/init/job_process.c b/init/job_process.c index 281b56a2..437da0ec 100644 --- a/init/job_process.c +++ b/init/job_process.c @@ -190,6 +190,7 @@ job_process_start (Job *job, Process *proc; nih_local char **argv = NULL; nih_local char **env = NULL; + nih_local char **eenv = NULL; nih_local char *script = NULL; char **e; size_t argc, envc; @@ -283,8 +284,25 @@ job_process_start (Job *job, envc = 0; env = NIH_MUST (nih_str_array_new (NULL)); - if (job->env) - NIH_MUST (environ_append (&env, NULL, &envc, TRUE, job->env)); + if (job->env) { + /* expand vars in the env table */ + eenv = NIH_MUST (nih_str_array_new (NULL)); + for (e = job->env; *e; e++) { + nih_local char *var = NIH_SHOULD ( + environ_expand (NULL, *e, eenv)); + if (!var) { + NihError *err; + err = nih_error_get (); + nih_warn ("failed to expand env var %s: %s", + *e, err->message); + nih_free (err); + nih_debug ("falling back to unexpanded"); + var = *e; + } + NIH_MUST (environ_add (&eenv, NULL, NULL, TRUE, var)); + } + NIH_MUST (environ_append (&env, NULL, &envc, TRUE, eenv)); + } if (job->stop_env && ((process == PROCESS_PRE_STOP)