Group :: System/Base
RPM: SimplePAMApps
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: SimplePAMApps-0.60-alt-login-su-ut_user.patch
Download
Download
diff -uprk.orig SimplePAMApps-0.60.orig/common/include/wtmp.h SimplePAMApps-0.60/common/include/wtmp.h
--- SimplePAMApps-0.60.orig/common/include/wtmp.h 1998-11-25 16:35:10 +0300
+++ SimplePAMApps-0.60/common/include/wtmp.h 2004-02-08 20:49:01 +0300
@@ -1,5 +1,5 @@
int utmp_do_open_session(const char *user, const char *terminal
, const char *rhost, pid_t pid
, const char **callname, const char **err_descr);
-int utmp_do_close_session(const char *terminal
+int utmp_do_close_session(const char *user, const char *terminal
, const char **callname, const char **err_descr);
diff -uprk.orig SimplePAMApps-0.60.orig/common/lib/wtmp.c SimplePAMApps-0.60/common/lib/wtmp.c
--- SimplePAMApps-0.60.orig/common/lib/wtmp.c 2004-02-08 20:38:32 +0300
+++ SimplePAMApps-0.60/common/lib/wtmp.c 2004-02-08 20:48:06 +0300
@@ -278,7 +278,7 @@ int utmp_do_open_session(const char *use
return retval;
}
-int utmp_do_close_session(const char *terminal
+int utmp_do_close_session(const char *user, const char *terminal
, const char **callname, const char **err_descr)
{
int retval;
@@ -313,7 +313,7 @@ int utmp_do_close_session(const char *te
memset(&u_tmp, 0, sizeof(u_tmp));
strncpy(u_tmp.ut_line, ut_line, UT_LINESIZE);
strncpy(u_tmp.ut_id, ut_id, UT_IDSIZE);
- memset(&u_tmp.ut_user, 0, sizeof(u_tmp.ut_user));
+ strncpy(u_tmp.ut_user, user, sizeof(u_tmp.ut_user));
memset(&u_tmp.ut_host, 0, sizeof(u_tmp.ut_host));
u_tmp.ut_addr = 0;
u_tmp.ut_type = DEAD_PROCESS; /* `old' login process */
diff -uprk.orig SimplePAMApps-0.60.orig/pamapps/lib/wtmp-gate.c SimplePAMApps-0.60/pamapps/lib/wtmp-gate.c
--- SimplePAMApps-0.60.orig/pamapps/lib/wtmp-gate.c 2004-02-08 20:38:32 +0300
+++ SimplePAMApps-0.60/pamapps/lib/wtmp-gate.c 2004-02-08 20:51:33 +0300
@@ -48,8 +48,14 @@ int utmp_close_session(pam_handle_t *pam
, const char **callname, const char **err_descr)
{
int retval;
- const char *terminal;
+ const char *user, *terminal;
+ retval = pam_get_item(pamh, PAM_USER, (const void **)&user);
+ if (retval != PAM_SUCCESS) {
+ *callname = "pam_get_item(PAM_USER)";
+ *err_descr = pam_strerror(pamh, retval);
+ return -1;
+ }
retval = pam_get_item(pamh, PAM_TTY, (const void **)&terminal);
if (retval != PAM_SUCCESS) {
*callname = "pam_get_item(PAM_TTY)";
@@ -59,5 +65,5 @@ int utmp_close_session(pam_handle_t *pam
if (!terminal) terminal = "???";
return
- utmp_do_close_session(terminal, callname, err_descr);
+ utmp_do_close_session(user, terminal, callname, err_descr);
}