From 71c8aa1361c54125c88898e40487e5e5e11c4127 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Mon, 11 Oct 2021 22:15:44 +0100 Subject: [PATCH] session: resolve variables in environment file When parsing = pairs to set enrivonment variables, resolve variables in . For example, resolve $bar in foo=$bar Fix issue #70 --- src/config/session.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/config/session.c b/src/config/session.c index 4372c7eb..880eaeae 100644 --- a/src/config/session.c +++ b/src/config/session.c @@ -7,6 +7,7 @@ #include #include #include +#include "common/buf.h" #include "common/dir.h" #include "common/spawn.h" #include "common/string-helpers.h" @@ -30,18 +31,24 @@ process_line(char *line) if (string_empty(line) || line[0] == '#') { return; } - char *key = NULL, *value = NULL; + char *key = NULL; char *p = strchr(line, '='); if (!p) { return; } *p = '\0'; key = string_strip(line); - value = string_strip(++p); - if (string_empty(key) || string_empty(value)) { - return; + + struct buf value; + buf_init(&value); + buf_add(&value, string_strip(++p)); + buf_expand_shell_variables(&value); + if (string_empty(key) || !value.len) { + goto error; } - setenv(key, value, 1); + setenv(key, value.buf, 1); +error: + free(value.buf); } void