diff options
| author | Anna (navi) Figueiredo Gomes <navi@vlhl.dev> | 2026-01-16 01:16:46 +0100 |
|---|---|---|
| committer | Anna (navi) Figueiredo Gomes <navi@vlhl.dev> | 2026-04-02 02:34:32 +0200 |
| commit | 667e2fb2a4aeaf0f057a279b25d0e35a419b6944 (patch) | |
| tree | 6a94de270a2bc6f6c9d01487a318ffa4afe3ef5f | |
| parent | 3517d0bf850b9afaaa3e9f46def69aa477966ae0 (diff) | |
pam_openrc: export user starting environmentorigin/rc-update-env
| -rw-r--r-- | src/pam_openrc/pam_openrc.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/pam_openrc/pam_openrc.c b/src/pam_openrc/pam_openrc.c index e7fed659..4fe39808 100644 --- a/src/pam_openrc/pam_openrc.c +++ b/src/pam_openrc/pam_openrc.c @@ -11,6 +11,33 @@ #include "librc.h" #include "einfo.h" +#include "helpers.h" + +static bool +import_env(pam_handle_t *pamh, const char *user) +{ + char *path, *string = NULL; + bool ret = false; + size_t size; + FILE *fp; + + xasprintf(&path, "user/%s/environ", user); + + if (!(fp = do_fopenat(rc_dirfd(RC_DIR_SVCDIR), path, O_RDONLY))) + goto out; + + while (getdelim(&string, &size, '\0', fp) != -1) + pam_putenv(pamh, string); + + free(string); + fclose(fp); + + ret = true; +out: + free(path); + + return ret; +} static int exec_openrc(pam_handle_t *pamh, bool opening, bool quiet) @@ -123,6 +150,9 @@ exec_openrc(pam_handle_t *pamh, bool opening, bool quiet) unlock: svc_unlock(pam_lock, fd); out: + if (opening) + import_env(pamh, user->pw_name); + free(pam_lock); free(svc_name); free(script); |
