summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna (navi) Figueiredo Gomes <navi@vlhl.dev>2026-01-16 01:16:46 +0100
committerAnna (navi) Figueiredo Gomes <navi@vlhl.dev>2026-04-02 02:34:32 +0200
commit667e2fb2a4aeaf0f057a279b25d0e35a419b6944 (patch)
tree6a94de270a2bc6f6c9d01487a318ffa4afe3ef5f
parent3517d0bf850b9afaaa3e9f46def69aa477966ae0 (diff)
pam_openrc: export user starting environmentorigin/rc-update-env
-rw-r--r--src/pam_openrc/pam_openrc.c30
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);