diff options
Diffstat (limited to 'src/openrc-pam/openrc-pam.c')
-rw-r--r-- | src/openrc-pam/openrc-pam.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/openrc-pam/openrc-pam.c b/src/openrc-pam/openrc-pam.c index 51dafb17..a9b2e36b 100644 --- a/src/openrc-pam/openrc-pam.c +++ b/src/openrc-pam/openrc-pam.c @@ -9,7 +9,7 @@ #include "einfo.h" -static bool exec_openrc(pam_handle_t *pamh, const char *runlevel) { +static bool exec_openrc(pam_handle_t *pamh, const char *runlevel, bool lock) { char *cmd = NULL; const char *username; struct passwd *pw = NULL; @@ -26,7 +26,7 @@ static bool exec_openrc(pam_handle_t *pamh, const char *runlevel) { elog(LOG_INFO, "Executing %s runlevel for user %s", runlevel, username); - xasprintf(&cmd, "openrc --user %s", runlevel); + xasprintf(&cmd, "openrc --user %s %s", lock ? "--lock" : "--unlock", runlevel); switch (fork()) { case 0: setgid(pw->pw_gid); @@ -58,8 +58,7 @@ PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, cons setenv("EINFO_LOG", "openrc-pam", 1); elog(LOG_INFO, "Opening openrc session"); - setenv("RC_PAM_STARTING", "YES", true); - if (exec_openrc(pamh, runlevel)) { + if (exec_openrc(pamh, runlevel, true)) { elog(LOG_INFO, "Openrc session opened"); unsetenv("RC_PAM_STARTING"); unsetenv("EINFO_LOG"); @@ -79,8 +78,7 @@ PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, con setenv("EINFO_LOG", "openrc-pam", 1); elog(LOG_INFO, "Closing openrc session"); - setenv("RC_PAM_STOPPING", "YES", true); - if (exec_openrc(pamh, runlevel)) { + if (exec_openrc(pamh, runlevel, false)) { elog(LOG_INFO, "Openrc session closed"); unsetenv("RC_PAM_STOPPING"); unsetenv("EINFO_LOG"); |