diff options
| author | Roy Marples <roy@marples.name> | 2008-10-29 21:35:45 +0000 | 
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2008-10-29 21:35:45 +0000 | 
| commit | 53ddd6ca96a26e08b37b76bc4ec7477c83d8752e (patch) | |
| tree | a19b1a398bb81809874d9518dc15916e4c481125 /src/rc | |
| parent | 9ec6ff02bbb47f7ee03dc4b3d3cdf5c91052809c (diff) | |
| download | openrc-53ddd6ca96a26e08b37b76bc4ec7477c83d8752e.tar.xz | |
Properly set PAM enviornment variables after opening session.
Without this change, modules like pam_mktemp or pam_env and similar
will be unable to change users' environments, like they are supposed
to.
Diffstat (limited to 'src/rc')
| -rw-r--r-- | src/rc/start-stop-daemon.c | 14 | 
1 files changed, 14 insertions, 0 deletions
| diff --git a/src/rc/start-stop-daemon.c b/src/rc/start-stop-daemon.c index 463983e4..de5bd1dc 100644 --- a/src/rc/start-stop-daemon.c +++ b/src/rc/start-stop-daemon.c @@ -563,6 +563,7 @@ int start_stop_daemon(int argc, char **argv)  #ifdef HAVE_PAM  	pam_handle_t *pamh = NULL;  	int pamr; +	const char *const *pamenv = NULL;  #endif  	int opt; @@ -1026,6 +1027,19 @@ int start_stop_daemon(int argc, char **argv)  		i = 0;  		while(environ[i])  			rc_stringlist_add(env_list, environ[i++]); + +#ifdef HAVE_PAM +		pamenv = (const char *const *)pam_getenvlist(pamh); +		if (pamenv) { +			while (*pamenv) { +				/* Don't add strings unless they set a var */ +				if (strchr(*pamenv, '=')) +					putenv(xstrdup(*pamenv)); +				pamenv++; +			} +		} +#endif +  		TAILQ_FOREACH(env, env_list, entries) {  			if ((strncmp(env->value, "RC_", 3) == 0 &&  			     strncmp(env->value, "RC_SERVICE=", 10) != 0 && | 
