--- /dev/null
+diff -urN autolog-0.34.orig/Makefile autolog-0.34/Makefile
+--- autolog-0.34.orig/Makefile Fri Oct 16 20:38:44 1998
++++ autolog-0.34/Makefile Fri Oct 16 20:39:16 1998
+@@ -3,9 +3,9 @@
+ # The -g flag is to include debugging information. It gets
+ # stripped back out in the install command anyway.
+ CC = gcc
+-CFLAGS = -g
+-MANDIR = /usr/man
+-BINDIR = /usr/sbin
++CFLAGS = -O2 -g -Wall
++MANDIR = $(DESTDIR)/usr/man
++BINDIR = $(DESTDIR)/usr/sbin
+ # *********************************************************
+
+ autolog: autolog.c
+@@ -13,8 +13,9 @@
+
+ install: autolog
+ install -s autolog $(BINDIR)
+- install -m644 autolog.conf.5 $(MANDIR)/man5
+- install -m644 autolog.8 $(MANDIR)/man8
++ install -p -m644 autolog.conf.5 $(MANDIR)/man5
++ install -p -m644 autolog.8 $(MANDIR)/man8
++ install -p -m644 crontab $(DESTDIR)/etc/cron.d/autolog
+
+ clean:
+- rm autolog
++ rm -f autolog
+diff -urN autolog-0.34.orig/autolog.8 autolog-0.34/autolog.8
+--- autolog-0.34.orig/autolog.8 Fri Oct 16 20:38:44 1998
++++ autolog-0.34/autolog.8 Fri Oct 16 20:39:16 1998
+@@ -1,4 +1,4 @@
+-.TH AUTOLOG 1L "Administrative Utilities" "Linux" \" -*- nroff -*-
++.TH AUTOLOG 8 "Administrative Utilities" "Linux" \" -*- nroff -*-
+ .SH NAME
+ autolog \- Log out idle users
+ .SH SYNOPSIS
+@@ -6,55 +6,59 @@
+ .br
+ .SH DESCRIPTION
+ The program reads the utmp file, entry by entry. The
+-username for each 'user process' is compared to the entries in the
+-configuration file (see
+-.B autoconf(5)
+-). The first entry to match both the name, the group,
++username for each `user process' is compared to the entries in the
++configuration file
++.IR autolog.conf .
++The first entry to match both the name, the group,
+ and the tty line of the process will be used to conduct the automatic
+ logout.
+
+ .SH OPTIONS
+ .TP
+-.B -a
++.I -a
+ (all processes) Print information on ALL utmp entries--not just user processes.
+ .TP
+-.B -d
++.I -d
+ (debug mode) This is helpful in setting up your configuration file.
+ The program runs in foreground rather than forking and it prints
+ out verbose messages about what it is doing.
+ .TP
+-.B -n
++.I -n
+ (nokill) Use this to prevent autolog from actually "killing"
+ anyone. Use -d and -n together when setting up a new
+ configuration file.
+ .TP
+-.B -f config_file_name
+-Use this to override the default: "/etc/autolog.conf"
+-.TP
+-.B -l log_file_name
+-Use this to override the default: "/var/log/autolog.log".
++.I -f config_file_name
++Use this to override the default:
++.I /etc/autolog.conf
++.TP
++.I -l log_file_name
++Use this to override the default:
++.IR /var/log/autolog.log .
+ Note that if this file doesn't exist, no logging will happen.
+ Create the file (with touch) to enable logging.
+ .TP
+-.B -t idle_time
++.I -t idle_time
+ Use this to override the internal default idle time (minutes)
+ .TP
+-.B -g grace_period
++.I -g grace_period
+ Use this to override the internal default grace period (seconds)
+ .TP
+-.B -m yes/no
++.I -m yes/no
+ Use this to override the internal mailing switch. If "yes"
+ the program will send mail to the users right after killing them.
+ .TP
+-.B -c yes/no
++.I -c yes/no
+ Use this to override the internal "pre-clear" switch. If "yes"
+ the program will clear the terminal screen before warning the user.
+ .TP
+-.B -w yes/no
++.I -w yes/no
+ Do timeouts based on total session time--not idle time. (hard)
+ .TP
+-.B -L yes/no
++.I -L yes/no
+ If set to "yes" activities will be written to the logfile if
+ present.
++.SH "SEE ALSO"
++.BR autolog.conf (5)
+ .SH AUTHOR
+ Kyle Bateman <kyle@actarg.com>
+diff -urN autolog-0.34.orig/autolog.c autolog-0.34/autolog.c
+--- autolog-0.34.orig/autolog.c Fri Oct 16 20:38:44 1998
++++ autolog-0.34/autolog.c Fri Oct 16 20:39:16 1998
+@@ -18,11 +18,13 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <stdlib.h>
+ #include <stdio.h>
+ #include <signal.h>
+ #include <string.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
++#include <unistd.h>
+ #include <utmp.h>
+ #include <time.h>
+ #include <pwd.h>
+@@ -80,7 +82,13 @@
+ conf_el c_arr[MAXCONF];
+ int c_idx = 0;
+
+-main(int argc, char *argv[])
++void eat_confile(void);
++int check_idle(void);
++void bailout(const char *message, int status) __attribute__ ((noreturn));
++void mesg(int flag, char *name, char *dev, int stime, int idle, conf_el *ce);
++int killit(pid_t pid);
++
++int main(int argc, char *argv[])
+ {
+ int i;
+ for (i = 1; i < argc; i++)
+@@ -132,15 +140,15 @@
+ eat_confile(); /* read config file */
+ if (!debug) /* if not in debug mode, */
+ if (fork()) /* the parent process */
+- exit(0); /* exits */
++ return 0; /* exits */
+
+ /* the child processes all utmp file entries: */
+ while ((utmpp = getutent()) != (struct utmp *) NULL)
+ check_idle();
+- exit(0); /* done, so bye */
++ return 0; /* done, so bye */
+ }
+
+-set_defs(int i)
++void set_defs(int i)
+ {
+ c_arr[i].name = anystrg;
+ c_arr[i].group = anystrg;
+@@ -154,7 +162,7 @@
+ c_arr[i].log = g_log;
+ }
+
+-eat_confile()
++void eat_confile(void)
+ {
+ FILE *f;
+ char *s, iline[LINELEN];
+@@ -169,7 +177,7 @@
+ {
+ while (fgets(iline, LINELEN, f))
+ {
+- if (*iline == '#' || strlen(iline) <= 1)
++ if (*iline == '#' || !iline[0] || !iline[1])
+ continue;
+ set_defs(c_idx);
+ s=strtok(iline,delims);
+@@ -207,7 +215,7 @@
+ printf("Unknown token in file: %s: %s\n",confname,s);
+ }
+ }
+- while(s=strtok(0,delims));
++ while((s=strtok(NULL,delims)));
+ c_idx++;
+ }
+ fclose(f);
+@@ -226,7 +234,7 @@
+ /* versions of the routine should work for you. */
+ #define AVOID_REGEX_BUG
+ #ifdef AVOID_REGEX_BUG /* some strange bug in re_exec */
+-pat_match(char *patt, char *strg)
++int pat_match(char *patt, char *strg)
+ {
+ struct re_pattern_buffer rpb;
+ int len, retval = 0;
+@@ -249,16 +257,16 @@
+
+ #else
+ /* return true if strg matches the regex in pattern */
+-pat_match(char *pattern,char *strg)
++int pat_match(char *pattern,char *strg)
+ {
+ re_comp(pattern);
+ return(re_exec(strg));
+ }
+ #endif
+
+-check_idle() /* select utmp entries needing killing */
++int check_idle(void) /* select utmp entries needing killing */
+ {
+- char dev[STRLEN], name[STRLEN], prname[STRLEN], *gn = "";
++ char dev[STRLEN], name[STRLEN], *gn = "";
+ struct stat status;
+ time_t idle, pres_time, start, time(), stime, atime;
+ struct passwd *passwd_entry;
+@@ -272,8 +280,7 @@
+ printf("Non-user process: N:%-8s P:%5d Login:%s",utmpp->ut_user,utmpp->ut_pid,ctime(&utmpp->ut_time));
+ return(0); /* skip the utmp entry */
+ }
+- sprintf(prname,"/proc/%d",utmpp->ut_pid); /* make filename to check in /proc */
+- if (stat(prname, &status)) /* is this a current process */
++ if (kill(utmpp->ut_pid,0)) /* is this a current process? */
+ {
+ if (listall)
+ printf("Dead process: N:%-8s P:%5d Login:%s",utmpp->ut_user,utmpp->ut_pid,ctime(&utmpp->ut_time));
+@@ -293,7 +300,7 @@
+ name[UT_NAMESIZE] = '\0'; /* null terminate user name string */
+
+ if (debug)
+- printf("\nChecking: %-11s on %-12s I:%-4d T:%d Login: %s",name,dev,idle,utmpp->ut_type,ctime(&utmpp->ut_time));
++ printf("\nChecking: %-11s on %-12s I:%-4ld T:%d Login: %s",name,dev,idle,utmpp->ut_type,ctime(&utmpp->ut_time));
+
+ /* now try to find the group of this person */
+ /* if usernames in utmp are limited to 8 chars, we will may fail on */
+@@ -303,7 +310,7 @@
+ if (passwd_entry)
+ {
+ strcpy(name,passwd_entry->pw_name);
+- if(group_entry = getgrgid( passwd_entry->pw_gid ))
++ if((group_entry = getgrgid( passwd_entry->pw_gid )))
+ gn = group_entry->gr_name;
+ else if (debug)
+ printf("Can't find group entry for user: %s\n",name);
+@@ -317,8 +324,8 @@
+ pat_match(c_arr[i].line,utmpp->ut_line))
+ {
+ if (debug)
+- printf("Match #%2d: U:%-12s Grp:%-8s Line:%-9s Pid:%-6d Sess:%3d:%02d\n",
+- i+1,name,gn,utmpp->ut_line,utmpp->ut_pid,stime/60,stime%60);
++ printf("Match #%2d: U:%-12s Grp:%-8s Line:%-9s Pid:%-6d Sess:%3ld:%02d\n",
++ i+1,name,gn,utmpp->ut_line,utmpp->ut_pid,stime/60,(int)(stime%60));
+ if (!c_arr[i].idle) /* if user exempt (idle=0) */
+ {
+ if (debug)
+@@ -338,14 +345,14 @@
+ if (!c_arr[i].hard) /* if considering idle time */
+ {
+ if (debug)
+- printf("Subject to logout Idle time: %4d (%2d allowed)\n",idle,ce->idle);
++ printf("Subject to logout Idle time: %4ld (%2d allowed)\n",idle,ce->idle);
+ if (idle < ce->idle) /* if user was recently active */
+ return(0); /* let it live */
+ }
+ else
+ {
+ if (debug)
+- printf("Subject to logout Total time: %4d (%2d allowed)\n",stime,ce->idle);
++ printf("Subject to logout Total time: %4ld (%2d allowed)\n",stime,ce->idle);
+ if (stime < ce->idle) /* if user still under limit */
+ return(0); /* let it live */
+ }
+@@ -378,7 +385,7 @@
+ return(0);
+ }
+
+-mesg(int flag, char *name, char *dev, int stime, int idle, conf_el *ce)
++void mesg(int flag, char *name, char *dev, int stime, int idle, conf_el *ce)
+ {
+ char mbuf[LINELEN]; /* message buffer */
+ time_t tvec;
+@@ -417,10 +424,10 @@
+ fprintf(log, "** LOGOFF ** %s %s idle:%d sess:%d %s",name, dev+5, idle, stime, ctime(&tvec)+3);
+ if (ce->mail)
+ {
+- sprintf(mbuf, "/bin/mail %s", name);
++ sprintf(mbuf, "/usr/sbin/sendmail %s", name);
+ /* open pipe to mail program for writing */
+ if (!(mprog = popen(mbuf, "w")) )
+- bailout("Can't use /bin/mail program", 6);
++ bailout("Can't use /usr/sbin/sendmail program", 6);
+ fprintf(mprog, "Subject: Excess Idle Time\nLogged off - excess idle time - %s %s\ntty = %s\n",name, ctime(&tvec), dev+5);
+ fclose(mprog);
+ }
+@@ -431,18 +438,18 @@
+ fprintf(log, "** LOGOFF-FAIL ** %s (pid = %d) %s (%d min idle time) %s",name, utmpp->ut_pid, dev+5, idle, ctime(&tvec)+3);
+ if (ce->mail)
+ {
+- sprintf(mbuf, "/bin/mail root");
++ sprintf(mbuf, "/usr/sbin/sendmail root");
+ if ((mprog = popen(mbuf, "w")) == (FILE *) NULL)
+- bailout("Can't use /bin/mail program", 7);
++ bailout("Can't use /usr/sbin/sendmail program", 7);
+ fprintf(mprog, "Subject: Can't logoff %s\nCan't Log off - %s %s\ntty = %s\n", name, name, ctime(&tvec), dev+5);
+ fclose(mprog);
+ }
+ }
+- fclose(log);
+- return(0);
++ if (log)
++ fclose(log);
+ }
+
+-killit(int pid) /* terminate process using SIGHUP, then SIGKILL */
++int killit(pid_t pid) /* terminate process using SIGHUP, then SIGKILL */
+ {
+ kill(pid, SIGHUP); /* first send "hangup" signal */
+ sleep(KWAIT);
+@@ -459,8 +466,8 @@
+ return(1); /* successful kill with SIGHUP */
+ }
+
+-bailout(char *message, int status) /* display error message and exit */
++void bailout(const char *message, int status) /* display error message and exit */
+ {
+- fprintf(stderr,"autologout: %s\n", message);
++ fprintf(stderr,"autologout: %s (%m)\n", message);
+ exit(status);
+ }
+diff -urN autolog-0.34.orig/autolog.conf.5 autolog-0.34/autolog.conf.5
+--- autolog-0.34.orig/autolog.conf.5 Fri Oct 16 20:38:44 1998
++++ autolog-0.34/autolog.conf.5 Fri Oct 16 20:39:16 1998
+@@ -1,4 +1,4 @@
+-.TH autolog.conf 1L "Configuration Files" "Linux" \" -*- nroff -*-
++.TH autolog.conf 5 "Configuration Files" "Linux" \" -*- nroff -*-
+ .SH NAME
+ autolog.conf \- Configuration file for the autolog command
+ .SH DESCRIPTION
+@@ -32,7 +32,7 @@
+ entry which has all values set from the defaults. This entry will match
+ any process on any port (name=.+ line=.+ group=.+). Therefore, the default
+ action is to kill all processes.
+-.SH ENTRYS
++.SH ENTRIES
+ .TP
+ .B name=
+ A regular expression specifying which username(s) to match.
+diff -urN autolog-0.34.orig/crontab autolog-0.34/crontab
+--- autolog-0.34.orig/crontab Thu Jan 1 01:00:00 1970
++++ autolog-0.34/crontab Fri Oct 16 20:39:17 1998
+@@ -0,0 +1 @@
++*/10 * * * * root test -x /usr/sbin/autolog && /usr/sbin/autolog