]>
Commit | Line | Data |
---|---|---|
eab95ebb AF |
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 | |
f196f300 | 3 | @@ -105,7 +105,7 @@ |
baf031b2 AF |
4 | #define SECURETTY "/etc/securetty" |
5 | #define _PATH_UTMP "/var/run/utmpx" | |
6 | #define _PATH_WTMP LOGDIR "/wtmpx" | |
f196f300 AF |
7 | -#define _PATH_WTMPLOCK "/var/log/wtmpxlock" |
8 | +#define _PATH_WTMPLOCK "/var/lock/wtmpxlock" | |
baf031b2 AF |
9 | |
10 | /* no more . in DEFPATH */ | |
11 | #define _PATH_DEFPATH "/usr/local/bin:/bin:/usr/bin" | |
eab95ebb AF |
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 | |
67dbd305 | 14 | @@ -154,7 +154,7 @@ |
15 | ||
16 | #define SLEEP_EXIT_TIMEOUT 5 | |
17 | ||
18 | -#ifdef __linux__ | |
baf031b2 | 19 | +#ifndef __linux__ |
67dbd305 | 20 | #define DO_PS_FIDDLING |
21 | #endif | |
22 | ||
f196f300 | 23 | @@ -300,6 +300,40 @@ |
67dbd305 | 24 | return 0; |
25 | } | |
26 | ||
27 | +#if USE_PAM | |
28 | +#define _PATH_BTMPX "/var/log/btmpx" | |
29 | +static void logbtmp(const char *line, const char *username, const char *hostname) | |
30 | +{ | |
31 | + struct utmp ut; | |
32 | + | |
33 | + memset(&ut, 0, sizeof(ut)); | |
34 | + | |
35 | + strncpy(ut.ut_user, username, sizeof(ut.ut_user)); | |
36 | + | |
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; | |
40 | + | |
41 | +#if defined(_HAVE_UT_TV) | |
42 | + gettimeofday(&ut.ut_tv, NULL); | |
43 | +#else | |
44 | + time(&t) ; | |
45 | + ut.ut_time = t; /* ut_time is not always a time_t */ | |
46 | +#endif | |
47 | + | |
48 | + ut.ut_type = LOGIN_PROCESS; /* XXX doesn't matter */ | |
49 | + ut.ut_pid = getpid(); | |
50 | + if (hostname) { | |
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)); | |
56 | + } | |
57 | + | |
58 | + updwtmp(_PATH_BTMPX, &ut); | |
59 | +} | |
60 | +#endif /* USE_PAM */ | |
67dbd305 | 61 | |
62 | int | |
63 | main(int argc, char **argv) | |
f196f300 | 64 | @@ -485,8 +519,6 @@ |
67dbd305 | 65 | else |
eab95ebb AF |
66 | tty = ttyn; |
67 | ||
67dbd305 | 68 | - openlog("login", LOG_ODELAY, LOG_AUTHPRIV); |
69 | - | |
70 | #if 0 | |
71 | /* other than iso-8859-1 */ | |
72 | printf("\033(K"); | |
eab95ebb | 73 | @@ -555,7 +587,8 @@ |
67dbd305 | 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); | |
eab95ebb | 83 | @@ -564,13 +597,16 @@ |
67dbd305 | 84 | if (retcode != PAM_SUCCESS) { |
85 | pam_get_item(pamh, PAM_USER, (const void **) &username); | |
86 | ||
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)); | |
92 | - else | |
93 | + logbtmp(ttyn + 5, username, hostname); | |
94 | + } else { | |
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); | |
98 | + } | |
99 | ||
100 | fprintf(stderr,_("\nLogin incorrect\n")); | |
101 | pam_end(pamh, retcode); | |
eab95ebb | 102 | @@ -600,8 +636,12 @@ |
67dbd305 | 103 | retcode = pam_open_session(pamh, 0); |
104 | PAM_FAIL_CHECK; | |
105 | ||
106 | + openlog("login", LOG_ODELAY, LOG_AUTHPRIV); | |
107 | + | |
108 | #else /* ! USE_PAM */ | |
109 | ||
110 | + openlog("login", LOG_ODELAY, LOG_AUTHPRIV); | |
111 | + | |
112 | for (cnt = 0;; ask = 1) { | |
113 | # ifndef __linux__ | |
114 | ioctlval = 0; | |
eab95ebb | 115 | @@ -880,7 +920,9 @@ |
baf031b2 AF |
116 | /* If we can't find a pre-existing entry by pid, try by line. |
117 | BSD network daemons may rely on this. (anonymous) */ | |
118 | if (utp == NULL) { | |
119 | - setutent(); | |
120 | + endutent(); | |
67dbd305 | 121 | + setutent(); |
122 | + memset(&ut, 0, sizeof(ut)); | |
baf031b2 AF |
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)); | |
eab95ebb | 126 | @@ -1127,6 +1169,8 @@ |
67dbd305 | 127 | #endif |
128 | signal(SIGINT, SIG_DFL); | |
129 | ||
130 | + openlog("login", LOG_ODELAY, LOG_AUTHPRIV); | |
131 | + | |
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")); |