mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-04 17:47:03 +03:00
pam-systemd: use secure_getenv() rather than getenv()
And explain why in a comment.
This commit is contained in:
parent
565026b49a
commit
83d4ab5533
@ -327,14 +327,21 @@ static const char* getenv_harder(pam_handle_t *handle, const char *key, const ch
|
||||
assert(handle);
|
||||
assert(key);
|
||||
|
||||
/* Looks for an environment variable, preferrably in the environment block associated with the specified PAM
|
||||
* handle, falling back to the process' block instead. */
|
||||
/* Looks for an environment variable, preferrably in the environment block associated with the
|
||||
* specified PAM handle, falling back to the process' block instead. Why check both? Because we want
|
||||
* to permit configuration of session properties from unit files that invoke PAM services, so that
|
||||
* PAM services don't have to be reworked to set systemd-specific properties, but these properties
|
||||
* can still be set from the unit file Environment= block. */
|
||||
|
||||
v = pam_getenv(handle, key);
|
||||
if (!isempty(v))
|
||||
return v;
|
||||
|
||||
v = getenv(key);
|
||||
/* We use secure_getenv() here, since we might get loaded into su/sudo, which are SUID. Ideally
|
||||
* they'd clean up the environment before invoking foreign code (such as PAM modules), but alas they
|
||||
* currently don't (to be precise, they clean up the environment they pass to their children, but
|
||||
* not their own environ[]). */
|
||||
v = secure_getenv(key);
|
||||
if (!isempty(v))
|
||||
return v;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user