Path: utzoo!attcan!uunet!timbuk!cs.umn.edu!msi.umn.edu!src.honeywell.com!sol.ctr.columbia.edu!samsung!olivea!apple!agate!fugitive!izumi From: izumi@fugitive.berkeley.edu (Izumi Ohzawa) Newsgroups: comp.sys.next Subject: Re: User loging/logout records (/usr/adm/wtmp) Message-ID: <1990Nov6.015327.3090@agate.berkeley.edu> Date: 6 Nov 90 01:53:27 GMT References: <1990Nov5.185742.1004@msuinfo.cl.msu.edu> Sender: usenet@agate.berkeley.edu (USENET Administrator) Organization: University of California Lines: 116 In article <1990Nov5.185742.1004@msuinfo.cl.msu.edu> chouw@galaxy.cps.msu.edu (Wen Hwa Chou) writes: >Last time I posted a question about how to get the "w" and "who" >commands straight. After that I received two suggestions from e-mail >in the very next day. Thanks, you netters out there are really >helpful. > >The first solution I received consists of two programs: >1. MOTD >2. ghostbuster > >The MOTD (available from most ftp sites) will make the console login >records correct. And the ghostbuster are supposedly to clean the mess >left by Shell and Terminal. I have got MOTD installed a few weeks >ago, and it runs fine, except that voice alert won't work. But I ^^^^^^^^^^^^^^^^^^^^^^ Try the following to make voice alert work. Login as root with WorkSpace (not su from Terminal/Shell). Launch Preferences App. Click the cube button. Toggle the check mark for "voice alerts", i.e., turn it off first, then turn it back on again. Also, make sure that you have copied "mail.snd" and "newmail.snd" to /LocalLibrary/Sounds directory (after creating the dir if it doesn't exist already). >cannot find "ghostbuster" from any ftp sites that I know. I know I >should ask the person who e-mailed me. Unfortunately I forgot to save >the mail after I replied. So if any of you knows where I can get it That's probably me. I run ghostbuster from cron at 1 hour intervals. The best thing to do is to combine this with LogoutHook.c contained in the MOTD distrubition, and run the combination as -logoutHook to loginWindow program. ------- HERE's the source to ghostbuster.c by EPS ---------- /* * ghostbuster - log out orphaned ptys * Eric P. Scott, San Francisco State University, January 1990 * * cc -o ghostbuster -s -O -bsd ghostbuster.c -lsys_s * chown root.tty ghostbuster * chmod 4755 ghostbuster */ #include #include #include #include #include #include #include main(argc, argv) int argc; char *argv[]; { char *malloc(); time_t time(); register struct utmp *ut; register char *ubuf; register struct group *gr; register int s; int u, w, p; struct stat st; char devname[12]; s=3; do close(s); while (++s<20); openlog("ghostbuster", LOG_PID, LOG_AUTH); if ((u=open("/etc/utmp", O_RDWR))<0) { syslog(LOG_ERR, "/etc/utmp: %m"); exit(1); } gr=getgrnam("tty"); endgrent(); (void)fstat(u, &st); if ((st.st_size%sizeof (struct utmp))!=0) { syslog(LOG_ALERT, "utmp corrupt"); exit(1); } if (!(ubuf=malloc(st.st_size))) abort(); if ((s=read(u, ubuf, st.st_size))!=st.st_size) { if (s<0) syslog(LOG_ERR, "read error: %m"); else syslog(LOG_ERR, "read expected %d, got %d\n", st.st_size, s); exit(1); } s/=sizeof (struct utmp); for (ut=(struct utmp *)ubuf;s>0;--s,ut++) { if (ut->ut_line[0]!='t'||ut->ut_line[1]!='t'|| ut->ut_line[2]!='y'|| ut->ut_line[3]<'p'|| ut->ut_line[3]>'s'||!ut->ut_name[0]) continue; sprintf(devname, "/dev/pty%.5s", &ut->ut_line[3]); if ((p=open(devname, O_RDWR))<0) continue; devname[5]='t'; bzero(ut->ut_name, sizeof ut->ut_name); bzero(ut->ut_host, sizeof ut->ut_host); (void)time(&ut->ut_time); if ((w=open("/usr/adm/wtmp", O_WRONLY|O_APPEND))>=0) { (void)write(w, (char *)ut, sizeof (struct utmp)); (void)close(w); } (void)lseek(u, (long)((char *)ut-ubuf), L_SET); (void)write(u, (char *)ut, sizeof (struct utmp)); (void)chmod(devname, 0666); (void)chown(devname, 0, gr ? gr->gr_gid : 0); (void)close(p); syslog(LOG_NOTICE, "%s logged out", ut->ut_line); } (void)close(u); exit(0); } ---------- end of ghostbuster.c ------- Izumi Ohzawa, izumi@violet.berkeley.edu