1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
$NetBSD: patch-ah,v 1.7 2008/05/09 18:43:07 agc Exp $
--- src/utmp.c.orig 2006-05-11 04:33:40.000000000 +0100
+++ src/utmp.c 2006-11-25 13:01:25.000000000 +0000
@@ -44,11 +44,20 @@
static int utmp_pos; /* BSD position of utmp-stamp */
# endif
+
# ifdef USE_SYSV_UTMP
# ifdef HAVE_UTMPX_H
+# include <utmp.h>
# undef WTMP_FILENAME
-# define WTMP_FILENAME WTMPX_FILE
+# ifndef _PATH_WTMPX
+# define _PATH_WTMPX "/var/log/wtmp"
+# endif
+# if defined(WTMPX_FILE)
+# define WTMP_FILENAME WTMPX_FILE
+# else
+# define WTMP_FILENAME _PATH_WTMPX
+# endif
# define update_wtmp updwtmpx
# else /* HAVE_UTMPX_H */
@@ -128,22 +137,26 @@
privileges(INVOKE);
# ifdef HAVE_UTMPX_H
getutmp(&utmp, &utmp2);
- getutid(&utmp2); /* position to entry in utmp file */
+ getutxid(&utmp); /* position to entry in utmp file */
# else
- getutid(&utmp); /* position to entry in utmp file */
+ getutxid(&utmp); /* position to entry in utmp file */
# endif
/* set up the new entry */
strncpy(utmp.ut_id, ut_id, sizeof(utmp.ut_id));
strncpy(utmp.ut_line, pty, sizeof(utmp.ut_line));
+# ifndef __APPLE__
strncpy(utmp.ut_name, pwent->pw_name, sizeof(utmp.ut_name));
+# endif
strncpy(utmp.ut_user, pwent->pw_name, sizeof(utmp.ut_user));
strncpy(utmp.ut_host, hostname, sizeof(utmp.ut_host));
utmp.ut_type = USER_PROCESS;
utmp.ut_pid = getpid();
# ifdef HAVE_UTMPX_H
+# ifndef __APPLE__
utmp.ut_session = getsid(0);
utmp.ut_xtime = time(NULL);
+# endif /* __APPLE__ */
utmp.ut_tv.tv_usec = 0;
# else
utmp.ut_time = time(NULL);
@@ -152,16 +165,15 @@
/*
* write a utmp entry to the utmp file
*/
- utmpname(UTMP_FILENAME);
+ utmpxname(UTMP_FILENAME);
# ifdef HAVE_UTMPX_H
getutmp(&utmp, &utmp2);
- pututline(&utmp2);
pututxline(&utmp);
# else
pututline(&utmp);
# endif
update_wtmp(WTMP_FILENAME, &utmp);
- endutent(); /* close the file */
+ endutxent(); /* close the file */
privileges(REVERT);
return;
fd = 0;
@@ -177,19 +189,19 @@
if (!ut_id[0])
return; /* entry not made */
- utmpname(UTMP_FILENAME);
- setutent();
- strncpy(utmp.ut_id, ut_id, sizeof(utmp.ut_id));
- utmp.ut_type = USER_PROCESS;
- if (getutid(&utmp) == NULL) {
+ utmpxname(UTMP_FILENAME);
+ setutxent();
+ strncpy(utmpx.ut_id, ut_id, sizeof(utmpx.ut_id));
+ utmpx.ut_type = USER_PROCESS;
+ if (getutxid(&utmp) == NULL) {
return;
}
- utmp.ut_type = DEAD_PROCESS;
+ utmpx.ut_type = DEAD_PROCESS;
utmp.ut_time = time(NULL);
- pututline(&utmp);
+ pututxline(&utmpx);
getutmpx(&utmp, &utmpx);
update_wtmp(WTMP_FILENAME, &utmpx);
- endutent();
+ endutxent();
# else /* HAVE_UTMPX_H */
struct utmp *putmp;
|