- Pass maintainership to submitter PR: 143509 Submitted by: Rob Farmer <rfarmer@predatorlabs.net> Reviewed by: ed@
105 lines
2.7 KiB
C
105 lines
2.7 KiB
C
--- whowatch.c.orig 2000-06-06 03:21:44.000000000 -0700
|
|
+++ whowatch.c 2010-02-02 19:56:37.081269004 -0800
|
|
@@ -119,21 +119,17 @@
|
|
/*
|
|
* Create new user structure and fill it
|
|
*/
|
|
-struct user_t *allocate_user(struct utmp *entry)
|
|
+struct user_t *allocate_user(struct utmpx *entry)
|
|
{
|
|
struct user_t *u;
|
|
int ppid;
|
|
u = calloc(1, sizeof *u);
|
|
if(!u) errx(1, "Cannot allocate memory.");
|
|
- strncpy(u->name, entry->ut_user, UT_NAMESIZE);
|
|
- strncpy(u->tty, entry->ut_line, UT_LINESIZE);
|
|
- strncpy(u->host, entry->ut_host, UT_HOSTSIZE);
|
|
+ strncpy(u->name, entry->ut_user, sizeof(entry->ut_user));
|
|
+ strncpy(u->tty, entry->ut_line, sizeof(entry->ut_line));
|
|
+ strncpy(u->host, entry->ut_host, sizeof(entry->ut_host));
|
|
|
|
-#ifdef HAVE_UTPID
|
|
u->pid = entry->ut_pid;
|
|
-#else
|
|
- u->pid = get_login_pid(u->tty);
|
|
-#endif
|
|
|
|
if((ppid = get_ppid(u->pid)) == -1)
|
|
strncpy(u->parent, "can't access", sizeof u->parent);
|
|
@@ -192,34 +188,24 @@
|
|
*/
|
|
void read_utmp()
|
|
{
|
|
- int fd, i;
|
|
- static struct utmp entry;
|
|
+ static struct utmpx *entry;
|
|
struct user_t *u;
|
|
+
|
|
+ while ((entry = getutxent()) != NULL) {
|
|
|
|
- if ((fd = open(UTMP_FILE ,O_RDONLY)) == -1){
|
|
- curses_end();
|
|
- errx(1, "Cannot open " UTMP_FILE);
|
|
- }
|
|
- while((i = read(fd, &entry,sizeof entry)) > 0) {
|
|
- if(i != sizeof entry) errx(1, "Error reading " UTMP_FILE );
|
|
-#ifdef HAVE_USER_PROCESS
|
|
- if(entry.ut_type != USER_PROCESS) continue;
|
|
-#else
|
|
- if(!entry.ut_name[0]) continue;
|
|
-#endif
|
|
- u = allocate_user(&entry);
|
|
+ if(entry->ut_type != USER_PROCESS) continue;
|
|
+ u = allocate_user(entry);
|
|
print_user(u);
|
|
update_nr_users(u->parent, &u->prot, LOGIN);
|
|
how_many ++;
|
|
users_list.d_lines = how_many;
|
|
addto_list(u, users);
|
|
}
|
|
- close(fd);
|
|
wnoutrefresh(users_list.wd);
|
|
return;
|
|
}
|
|
|
|
-struct user_t* new_user(struct utmp *newone)
|
|
+struct user_t* new_user(struct utmpx *newone)
|
|
{
|
|
struct user_t *u;
|
|
u = allocate_user(newone);
|
|
@@ -246,7 +232,7 @@
|
|
void check_wtmp()
|
|
{
|
|
struct user_t *u;
|
|
- struct utmp entry;
|
|
+ struct utmpx entry;
|
|
int i;
|
|
|
|
while((i = read(wtmp_fd, &entry, sizeof entry)) > 0){
|
|
@@ -256,25 +242,17 @@
|
|
errx(1, "Error reading " WTMP_FILE );
|
|
}
|
|
/* user just logged in */
|
|
-#ifdef HAVE_USER_PROCESS
|
|
if(entry.ut_type == USER_PROCESS) {
|
|
-#else
|
|
- if(entry.ut_user[0]) {
|
|
-#endif
|
|
u = new_user(&entry);
|
|
print_user(u);
|
|
wrefresh(users_list.wd);
|
|
print_info();
|
|
continue;
|
|
}
|
|
-#ifdef HAVE_DEAD_PROCESS
|
|
if(entry.ut_type != DEAD_PROCESS) continue;
|
|
-#else
|
|
-// if(entry.ut_line[0]) continue;
|
|
-#endif
|
|
/* user just logged out */
|
|
for_each(u, users) {
|
|
- if(strncmp(u->tty, entry.ut_line, UT_LINESIZE))
|
|
+ if(strncmp(u->tty, entry.ut_line, sizeof(entry.ut_line)))
|
|
continue;
|
|
if (state == USERS_LIST)
|
|
delete_line(&users_list, u->line);
|