make xenodm reload the environment variables after setusercontext(3)

so that environment variables configured in login.conf(5) are also
available

ok matthieu@, millert@
pull/1/head
robert 2023-04-14 11:17:49 +00:00
parent 3fad868fb3
commit c8f482983a
3 changed files with 11 additions and 5 deletions

View File

@ -60,7 +60,7 @@ userEnv (struct display *d, int useSystemPath, char *user, char *home, char *she
const char **envvar;
const char *str;
env = defaultEnv ();
env = defaultEnv (NULL);
env = setEnv (env, "DISPLAY", d->name);
env = setEnv (env, "HOME", home);
env = setEnv (env, "LOGNAME", user); /* POSIX, System V */

View File

@ -222,7 +222,7 @@ extern void LoadSessionResources (struct display *d);
extern void ReinitResources (void);
/* in session.c */
extern char **defaultEnv (void);
extern char **defaultEnv (char **e);
extern char **systemEnv (struct display *d, char *user, char *home);
extern int source (char **environ, char *file);
extern void ClearCloseOnFork (int fd);

View File

@ -339,6 +339,12 @@ StartClient (
name, _SysErrorMsg (errno));
return (0);
}
/*
* setusercontext(3) will update the environment based on
* the login class so update our idea about the environment
* as well
*/
vinfo->userEnviron = defaultEnv (vinfo->userEnviron);
} else {
LogError ("getpwnam for \"%s\" failed: %s\n",
name, _SysErrorMsg (errno));
@ -452,11 +458,11 @@ execute (char **argv, char **environ)
}
char **
defaultEnv (void)
defaultEnv (char **e)
{
char **env, **exp, *value;
env = NULL;
env = e;
for (exp = exportList; exp && *exp; ++exp) {
value = getenv (*exp);
if (value)
@ -470,7 +476,7 @@ systemEnv (struct display *d, char *user, char *home)
{
char **env;
env = defaultEnv ();
env = defaultEnv (NULL);
env = setEnv (env, "DISPLAY", d->name);
if (home)
env = setEnv (env, "HOME", home);