aboutsummaryrefslogtreecommitdiff
path: root/src/openrc-pam/openrc-pam.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/openrc-pam/openrc-pam.c')
-rw-r--r--src/openrc-pam/openrc-pam.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/openrc-pam/openrc-pam.c b/src/openrc-pam/openrc-pam.c
index 5b480836..eba3846b 100644
--- a/src/openrc-pam/openrc-pam.c
+++ b/src/openrc-pam/openrc-pam.c
@@ -9,6 +9,8 @@
#include <security/pam_appl.h>
#endif
+#include "einfo.h"
+
static bool exec_openrc(pam_handle_t *pamh, const char *runlevel) {
char *cmd = NULL;
const char *username;
@@ -20,6 +22,8 @@ static bool exec_openrc(pam_handle_t *pamh, const char *runlevel) {
if (!pw)
return false;
+ elog(LOG_INFO, "Executing %s runlevel for user %s", runlevel, username);
+
xasprintf(&cmd, "openrc --user %s", runlevel);
switch (fork()) {
case 0:
@@ -46,12 +50,19 @@ PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, cons
(void)argc;
(void)argv;
+ setenv("EINFO_LOG", "openrc-pam", 1);
+ elog(LOG_INFO, "Opening openrc session");
+
setenv("RC_PAM_STARTING", "YES", true);
if (exec_openrc(pamh, "default")) {
+ elog(LOG_INFO, "Openrc session opened");
unsetenv("RC_PAM_STARTING");
+ unsetenv("EINFO_LOG");
return PAM_SUCCESS;
} else {
+ elog(LOG_ERR, "Failed to open session");
unsetenv("RC_PAM_STARTING");
+ unsetenv("EINFO_LOG");
return PAM_SESSION_ERR;
}
}
@@ -61,12 +72,19 @@ PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, con
(void)argc;
(void)argv;
+ setenv("EINFO_LOG", "openrc-pam", 1);
+ elog(LOG_INFO, "Closing openrc session");
+
setenv("RC_PAM_STOPPING", "YES", true);
if (exec_openrc(pamh, "none")) {
+ elog(LOG_INFO, "Openrc session closed");
unsetenv("RC_PAM_STOPPING");
+ unsetenv("EINFO_LOG");
return PAM_SUCCESS;
} else {
+ elog(LOG_ERR, "Failed to close session");
unsetenv("RC_PAM_STOPPING");
+ unsetenv("EINFO_LOG");
return PAM_SESSION_ERR;
}
}