diff options
author | Anna (navi) Figueiredo Gomes <navi@vlhl.dev> | 2023-06-15 22:30:56 -0300 |
---|---|---|
committer | Anna (navi) Figueiredo Gomes <navi@vlhl.dev> | 2023-10-19 10:56:54 +0200 |
commit | 0c69c923f7daaeaf327a063b31135e51d696d391 (patch) | |
tree | 319a5cb038b2e8f5125a364b33f0abb656159e4a | |
parent | 249a920b64f87217b8ba5f9b0b3f1bacdd1e189f (diff) |
misc.c: use userenv_whitelist in the env filtering
Signed-off-by: Anna (navi) Figueiredo Gomes <navi@vlhl.dev>
-rw-r--r-- | src/shared/misc.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/shared/misc.c b/src/shared/misc.c index 11393d33..b6001d77 100644 --- a/src/shared/misc.c +++ b/src/shared/misc.c @@ -67,6 +67,19 @@ static const char *const env_whitelist[] = { NULL }; +#ifdef RC_USER_SERVICES +/* Needed for local user services to be found */ +static const char *const userenv_whitelist[] = { + "HOME", + "XDG_RUNTIME_DIR", + "XDG_CONFIG_HOME", + "XDG_CACHE_HOME", + "RC_USER_SERVICES", + "RC_PAM_STARTING", + "RC_PAM_STOPPING", +}; +#endif + void env_filter(void) { @@ -80,17 +93,6 @@ env_filter(void) /* Add the user defined list of vars */ env_allow = rc_stringlist_split(rc_conf_value("rc_env_allow"), " "); -#ifdef RC_USER_SERVICES - /* Needed for local user services to be found */ - if (rc_is_user()) { - rc_stringlist_addu(env_allow, "HOME"); - rc_stringlist_addu(env_allow, "XDG_RUNTIME_DIR"); - rc_stringlist_addu(env_allow, "XDG_CONFIG_HOME"); - rc_stringlist_addu(env_allow, "RC_USER_SERVICES"); - rc_stringlist_addu(env_allow, "RC_PAM_STARTING"); - rc_stringlist_addu(env_allow, "RC_PAM_STOPPING"); - } -#endif /* * If '*' is an entry in rc_env_allow, do nothing as we are to pass * through all environment variables. @@ -119,6 +121,18 @@ env_filter(void) if (env_whitelist[i]) continue; +#ifdef RC_USER_SERVICES + if (rc_is_user() ) { + for (i = 0; userenv_whitelist[i]; i++) { + if (strcmp(userenv_whitelist[i], env->value) == 0) + break; + } + + if (env_whitelist[i]) + continue; + } +#endif + /* Check our user defined list */ if (rc_stringlist_find(env_allow, env->value)) continue; |