123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- #include "config.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdarg.h>
- #include <unistd.h>
- #include <syslog.h>
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <security/_pam_macros.h>
- #include <security/pam_modules.h>
- #include <security/pam_ext.h>
- #include <security/pam_modutil.h>
- #include "support.h"
- int
- pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
- {
- char *user_name, *service;
- unsigned long long ctrl;
- int retval;
- const char *login_name;
- D(("called."));
- ctrl = _set_ctrl(pamh, flags, NULL, NULL, NULL, argc, argv);
- retval = pam_get_item(pamh, PAM_USER, (void *) &user_name);
- if (user_name == NULL || *user_name == '\0' || retval != PAM_SUCCESS) {
- pam_syslog(pamh, LOG_ERR,
- "open_session - error recovering username");
- return PAM_SESSION_ERR;
- }
- retval = pam_get_item(pamh, PAM_SERVICE, (void *) &service);
- if (service == NULL || *service == '\0' || retval != PAM_SUCCESS) {
- pam_syslog(pamh, LOG_CRIT,
- "open_session - error recovering service");
- return PAM_SESSION_ERR;
- }
- login_name = pam_modutil_getlogin(pamh);
- if (login_name == NULL) {
- login_name = "";
- }
- if (off (UNIX_QUIET, ctrl)) {
- char uid[32];
- struct passwd *pwd = pam_modutil_getpwnam (pamh, user_name);
- if (pwd == NULL) {
- snprintf (uid, 32, "getpwnam error");
- }
- else {
- snprintf (uid, 32, "%u", pwd->pw_uid);
- }
- pam_syslog(pamh, LOG_INFO, "session opened for user %s(uid=%s) by %s(uid=%lu)", user_name, uid, login_name, (unsigned long)getuid());
- }
- return PAM_SUCCESS;
- }
- int
- pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
- {
- char *user_name, *service;
- unsigned long long ctrl;
- int retval;
- D(("called."));
- ctrl = _set_ctrl(pamh, flags, NULL, NULL, NULL, argc, argv);
- retval = pam_get_item(pamh, PAM_USER, (void *) &user_name);
- if (user_name == NULL || *user_name == '\0' || retval != PAM_SUCCESS) {
- pam_syslog(pamh, LOG_ERR,
- "close_session - error recovering username");
- return PAM_SESSION_ERR;
- }
- retval = pam_get_item(pamh, PAM_SERVICE, (void *) &service);
- if (service == NULL || *service == '\0' || retval != PAM_SUCCESS) {
- pam_syslog(pamh, LOG_CRIT,
- "close_session - error recovering service");
- return PAM_SESSION_ERR;
- }
- if (off (UNIX_QUIET, ctrl))
- pam_syslog(pamh, LOG_INFO, "session closed for user %s",
- user_name);
- return PAM_SUCCESS;
- }
|