1 --- util-linux-2.10l/lib/pathnames.h.wiget Wed Apr 26 20:17:29 2000
2 +++ util-linux-2.10l/lib/pathnames.h Wed Apr 26 20:17:29 2000
4 #define SECURETTY "/etc/securetty"
5 #define _PATH_UTMP "/var/run/utmpx"
6 #define _PATH_WTMP LOGDIR "/wtmpx"
7 -#define _PATH_WTMPLOCK "/var/log/wtmpxlock"
8 +#define _PATH_WTMPLOCK "/var/lock/wtmpxlock"
10 /* no more . in DEFPATH */
11 #define _PATH_DEFPATH "/usr/local/bin:/bin:/usr/bin"
12 --- util-linux-2.10l/login-utils/login.c.wiget Tue Mar 21 00:18:38 2000
13 +++ util-linux-2.10l/login-utils/login.c Wed Apr 26 20:22:32 2000
16 #define SLEEP_EXIT_TIMEOUT 5
20 #define DO_PS_FIDDLING
28 +#define _PATH_BTMPX "/var/log/btmpx"
29 +static void logbtmp(const char *line, const char *username, const char *hostname)
33 + memset(&ut, 0, sizeof(ut));
35 + strncpy(ut.ut_user, username, sizeof(ut.ut_user));
37 + strncpy(ut.ut_id, line + 3, sizeof(ut.ut_id));
38 + strncpy(ut.ut_line, line, sizeof(ut.ut_line));
39 + ut.ut_line[sizeof(ut.ut_line)-1] = 0;
41 +#if defined(_HAVE_UT_TV)
42 + gettimeofday(&ut.ut_tv, NULL);
45 + ut.ut_time = t; /* ut_time is not always a time_t */
48 + ut.ut_type = LOGIN_PROCESS; /* XXX doesn't matter */
49 + ut.ut_pid = getpid();
51 + strncpy(ut.ut_host, hostname, sizeof(ut.ut_host));
52 + ut.ut_host[sizeof(ut.ut_host)-1] = 0;
53 + if (hostaddress.h_addr_list)
54 + memcpy(&ut.ut_addr, hostaddress.h_addr_list[0],
55 + sizeof(ut.ut_addr));
58 + updwtmp(_PATH_BTMPX, &ut);
63 main(int argc, char **argv)
68 - openlog("login", LOG_ODELAY, LOG_AUTHPRIV);
71 /* other than iso-8859-1 */
74 (retcode == PAM_AUTHINFO_UNAVAIL))) {
75 pam_get_item(pamh, PAM_USER, (const void **) &username);
76 syslog(LOG_NOTICE,_("FAILED LOGIN %d FROM %s FOR %s, %s"),
77 - failcount, hostname, username, pam_strerror(pamh, retcode));
78 + failcount, hostname, username, pam_strerror(pamh, retcode));
79 + logbtmp(ttyn + 5, username, hostname);
80 fprintf(stderr,_("Login incorrect\n\n"));
81 pam_set_item(pamh,PAM_USER,NULL);
82 retcode = pam_authenticate(pamh, 0);
84 if (retcode != PAM_SUCCESS) {
85 pam_get_item(pamh, PAM_USER, (const void **) &username);
87 - if (retcode == PAM_MAXTRIES)
88 + if (retcode == PAM_MAXTRIES) {
89 syslog(LOG_NOTICE,_("TOO MANY LOGIN TRIES (%d) FROM %s FOR "
90 "%s, %s"), failcount, hostname, username,
91 pam_strerror(pamh, retcode));
93 + logbtmp(ttyn + 5, username, hostname);
95 syslog(LOG_NOTICE,_("FAILED LOGIN SESSION FROM %s FOR %s, %s"),
96 hostname, username, pam_strerror(pamh, retcode));
97 + logbtmp(ttyn + 5, username, hostname);
100 fprintf(stderr,_("\nLogin incorrect\n"));
101 pam_end(pamh, retcode);
103 retcode = pam_open_session(pamh, 0);
106 + openlog("login", LOG_ODELAY, LOG_AUTHPRIV);
108 #else /* ! USE_PAM */
110 + openlog("login", LOG_ODELAY, LOG_AUTHPRIV);
112 for (cnt = 0;; ask = 1) {
116 /* If we can't find a pre-existing entry by pid, try by line.
117 BSD network daemons may rely on this. (anonymous) */
122 + memset(&ut, 0, sizeof(ut));
123 ut.ut_type = LOGIN_PROCESS;
124 strncpy(ut.ut_id, ttyn + 8, sizeof(ut.ut_id));
125 strncpy(ut.ut_line, ttyn + 5, sizeof(ut.ut_line));
126 @@ -1127,6 +1169,8 @@
128 signal(SIGINT, SIG_DFL);
130 + openlog("login", LOG_ODELAY, LOG_AUTHPRIV);
132 /* discard permissions last so can't get killed and drop core */
133 if(setuid(pwd->pw_uid) < 0 && pwd->pw_uid) {
134 syslog(LOG_ALERT, _("setuid() failed"));