home *** CD-ROM | disk | FTP | other *** search
- From: jay@gdx.UUCP (Jay A. Snyder)
- Newsgroups: alt.sources
- Subject: logout idle users on selected ports
- Message-ID: <114@gdx.UUCP>
- Date: 27 Jan 91 01:07:05 GMT
-
-
- I wanted to be able to do idle logout for dialins only, but not
- console jobs (to keep the dialin lines open). So I wrote this little
- program. It must be run as root.
-
- This is a simpile little utility that will logout selected terminals
- after a specified idle time is reached.
-
- usage:
- idleout [time in minutes] list of ttys
-
- --- idleout.c ----
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <sys/signal.h>
- #include <utmp.h>
-
- kill_process(pid)
- short pid;
- {
- if (kill(pid,SIGHUP)) /* try hangup */
- if (kill(pid,SIGTERM)) /* try term */
- kill(pid,SIGKILL); /* just brute force kill it! */
- }
-
- time_t idletime(linename)
- char *linename;
- {
- char filename[40];
- struct stat s;
- sprintf(filename,"/dev/%s",linename);
- stat(filename,&s);
- return((time((time_t *) 0)-s.st_mtime)/60);
- }
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- struct utmp *u,uu;
- int i;
- time_t t,maxidle;
-
- if (argc<3)
- {
- fprintf(stderr,"usage: idletime [time] [tty] ...\n");
- exit(-1);
- }
- if (fork()) exit(0); /* run as daemon */
- close(0);
- close(1);
- close(2);
- setpgrp(); /* detach from process group */
- maxidle=atoi(argv[1]);
- uu.ut_user[0]=0;
- uu.ut_id[0]=0;
- uu.ut_line[0]=0;
- uu.ut_pid=0;
- uu.ut_type=0;
- for (;;)
- {
- for (i=2;i<argc;++i)
- {
- setutent();
- strcpy(uu.ut_line,argv[i]);
- u=getutline(&uu);
- if (u->ut_type==USER_PROCESS)
- {
- if (idletime(u->ut_line)>maxidle)
- {
- kill_process(u->ut_pid);
- }
- }
- }
- sleep(60);
- }
- }
-