0707070000020056131006440001500000000000010657440373060073500000500000000004Size210 0707070000020056141006440001500000000000010657450402213273400000500000000062NameElock - electronic lock Ver 1.02 - via THE STORE! 0707070000020056151006440001500000000000010657460373060071200000700000000663Remove# Remove elock - Unixpc locking program by /SCS # NOTE the source is NOT deleted!! echo "The source code in .../SRC/ELOCK will NOT be removed!" rm -f /usr/bin/elock rm -f /usr/lib/wfont/elock.X rm -f /usr/lib/ua/elock.hlp rm -f /usr/man/local/man1/elock.1 [ -z "`ls /usr/man/local/man1`" ] && rmdir /usr/man/local/man1 [ -z "`ls /usr/man/local`" ] && rmdir /usr/man/local [ -z "`ls /usr/man`" ] && rmdir /usr/man uaupd -r Elock Office 0707070000020056161006440001500000000000010657470002611213700001000000003522Install# Install elock - Unixpc locking program by /SCS echo "$HOME/Filecabinet/SRC/ELOCK/README contains information." if [ ! -d /usr/man ] #is there no elegant way of doing this?? then mkdir /usr/man chown bin /usr/man; chgrp bin /usr/man chmod 755 /usr/man fi if [ ! -d /usr/man/local ] #and this?? then mkdir /usr/man/local chown bin /usr/man/local; chgrp bin /usr/man/local chmod 755 /usr/man/local fi if [ ! -d /usr/man/local/man1 ] #and this?? then mkdir /usr/man/local/man1 chown bin /usr/man/local/man1; chgrp bin /usr/man/local/man1 chmod 755 /usr/man/local/man1 fi if [ ! -d $HOME/Filecabinet/SRC ] then mkdir $HOME/Filecabinet/SRC chown $LOGNAME $HOME/Filecabinet/SRC chmod 755 $HOME/Filecabinet/SRC fi if [ ! -d $HOME/Filecabinet/SRC/ELOCK ] then mkdir $HOME/Filecabinet/SRC/ELOCK chown $LOGNAME $HOME/Filecabinet/SRC/ELOCK chmod 755 $HOME/Filecabinet/SRC/ELOCK fi HERE=`pwd` cd $HOME/Filecabinet/SRC/ELOCK cpio <$HERE/files.cpio -icBdm chown $LOGNAME *; chgrp users * mv elock /usr/bin/elock cp elock.1 /usr/man/local/man1/elock.1 cp elock.hlp /usr/lib/ua/elock.hlp chown bin /usr/man/local/man1/elock.1 /usr/lib/ua/elock.hlp /usr/bin/elock chgrp bin /usr/man/local/man1/elock.1 /usr/lib/ua/elock.hlp chmod 444 /usr/man/local/man1/elock.1 /usr/lib/ua/elock.hlp chgrp sys /usr/bin/elock; chmod 2105 /usr/bin/elock # non fatal if no font file is available if [ ! -f /usr/lib/wfont/oldenglish.18 ] then if [ -f oldenglish.18 ] then cp oldenglish.18 /usr/lib/wfont/elock.X chown bin /usr/lib/wfont/elock.X chgrp bin /usr/lib/wfont/elock.X chmod 444 /usr/lib/wfont/elock.X fi else ln /usr/lib/wfont/oldenglish.18 /usr/lib/wfont/elock.X chmod o+r /usr/lib/wfont/elock.X fi cat <O.$$ Name=Elock Default = Open Open=EXEC -d /usr/bin/elock Help=EXEC -d /usr/bin/uahelp -h /usr/lib/ua/elock.hlp END uaupd -r Elock -a O.$$ Office rm -f O.$$ 0707070000020056171006440001500000000000010657510402213675400000600000000074FilesSize Name Remove Install Files files.cpio MAKEcpio MAKEflop 0707070000020056201006440001500000000000010657520373060072400001300000310000files.cpio0707070000020013711006440001460001440000010114470372733603600000700000005627main.c/* main.c - main program for window locker Svante C. Seleborg Last modified 05/22/86 - /SCS */ #include #include extern void perror(), exit(); main(argc, argv) int argc; char **argv; { extern char *getpword(); /* get pw from file */ extern int swdisable(); /* disable system windows */ extern int swenable(); /* enable system windows */ extern int tstwind(); /* iswind lookalike, but does not require winit() first */ extern int idle(); extern int (*signal())(); /* signal returns a pointer to a function that returns an int */ extern int optind; /* next arg nr from getopt */ extern void remote(); /* handle the case of a remote term */ void werrorexit(); /* error exit after winit */ void catchph(); /* catch possible phone call */ void crashexit(); /* catch program bug exits */ char *passwd; /* encrypted password */ int ppforce = 0; /* pw promt force flag */ int errflg = 0; int c; while ((c = getopt(argc, argv, "p")) != EOF) { switch (c) { case 'p': ppforce = -1; break; default: errflg++; break; } } if (optind < argc) errflg++; if (errflg) { (void)fprintf(stderr, "usage: elock {-p}\n"); exit(5); } (void)signal(SIGINT, (void (*)())SIG_IGN); /* ignore interrupt */ (void)signal(SIGQUIT, (void (*)())SIG_IGN); /* ignore quit */ (void)signal(SIGHUP, (void (*)())SIG_IGN); /* ignore hangup */ (void)signal(SIGILL, crashexit); /* program bug!! */ (void)signal(SIGTRAP, crashexit); /* program bug!! */ (void)signal(SIGIOT, crashexit); /* program bug!! */ (void)signal(SIGEMT, crashexit); /* program bug!! */ (void)signal(SIGFPE, crashexit); /* program bug!! */ (void)signal(SIGBUS, crashexit); /* program bug!! */ (void)signal(SIGSEGV, crashexit); /* program bug!! */ (void)signal(SIGSYS, crashexit); /* program bug!! */ (void)signal(SIGPIPE, crashexit); /* program bug!! */ (void)signal(SIGALRM, (void (*)())SIG_IGN); (void)signal(SIGTERM, (void (*)())SIG_IGN); (void)signal(SIGUSR1, (void (*)())SIG_IGN); (void)signal(SIGUSR2, (void (*)())SIG_IGN); if ((passwd = getpword(ppforce)) == NULL) { /* get password from passwd file */ exit(1); /* exit with error */ } if (tstwind()) { int flag; (void)wmake(); /* open new window as 0,1,2 */ if (swdisable()) werrorexit(3); /* disable all system windows */ catchph(); /* catch phone problems */ do idle(); /* remain idle until key is pressed */ while ((flag=okpasswd(passwd, 20)) == 0); /* read and check passwords */ if (flag == -1) { /* password read error */ werrorexit(2); } if (swenable()) werrorexit(4); /* reenable all system windows */ } else { /* not on bitmapped display!!! */ remote(passwd); } wexit(0); } void werrorexit(retstatus) int retstatus; { (void)perror("elock"); (void)swenable(); /* reenable system windows */ (void)wexit(retstatus); } void crashexit(sig) int sig; { werrorexit(100+sig); } 0707070000020062351006440001460001440000010174460372733604200001100000012066syswin.c/* syswin.c - enable and disable system windows Svante C. Seleborg Last modified 05/22/86 - /SCS */ #include #include #include #include #include #include #include #include #include #include #include #include static struct syswn { int fd; /* open file descriptor */ char name[DIRSIZ+1]; /* name without /dev prefix */ } syswn[SYSWIN] = {{-1, ""}, {-1, ""}, {-1, ""}}; /* array of sys window names and fd's */ int swdisable() /* disable all SYSWIN system windows by declaring them to be connected to the current window. Remember the window numbers for all system windows, so that they may later be re-connected, open the system windows, and keep the file descriptors for later enabling. */ { int sys_prgrp[SYSWIN]; /* process group of syswin n */ dev_t sys_dev[SYSWIN]; /* devid of cntrl term of syswin n */ int i; /* temporary */ int fd; /* current window descriptor */ fd = wgetsel(); if ( chdir("/dev") < 0) return(-1); /* must be in /dev as default */ if (getsyswpg(sys_prgrp)) /* get process groups of sys wins */ return(-1); if (getsysdev(sys_prgrp, sys_dev)) /* get dev id's of sys wins */ return(-1); if (getsyswn(sys_dev, syswn)) /* get dev names of sys wins */ return(-1); for (i=0; i 0) { /* sys win existed to start with */ (void)ioctl(syswn[i].fd, WIOCSYS, i); (void)close(syswn[i].fd); syswn[i].fd = -1; /* mark restored */ } } return(0); } int getsyswpg(syswpg) int syswpg[SYSWIN]; { int i; for (i=0; i= 0) { (void)fprintf(stderr, "elock: Incompatible UNIX ver %s\n", sysname.version); return(-1); } if ((kmem=open("/dev/kmem", O_RDONLY)) < 0 || (mem=open("/dev/mem", O_RDONLY)) < 0 ) return(-1); procadr = (struct proc *)syslocal(SYSL_KADDR, SLA_PROC); varadr = (struct var *)syslocal(SYSL_KADDR, SLA_V); (void)lseek(kmem, (long)varadr, 0); if (read(kmem, (char *)&vs, sizeof(vs)) < sizeof(vs)) return(-1); (void)lseek(kmem, (long)procadr, 0); for (i = 0, count = 0; i < vs.v_proc && count < SYSWIN; i++) { if (read(kmem, (char *)&pp, sizeof(pp)) < sizeof(pp)) return(-1); if (pp.p_stat == 0) continue; /* not allocated slot */ for (i=0; i #include #include #include #include #include #include #define TEXT "Locked..." int idle() /* clear screen, print waiting message on it. Set terminal mode to raw, waiting for character. When one is received, the terminal mode is restored, and the character is deleted. Assume that font 1 is loaded with a nice font to print "locked..." in. If there is no font there it won't hurt. */ { void wescout(); int row, col; unsigned char ch; /* received char */ void center(); /* calculate center position */ void help(); extern int loadfont(), unloadfont(); int wn; /* current window number */ wn = wgetsel(); if (loadfont() == 0) { wescout(wn, "[11m"); /* Select Font 1 */ } wescout(wn, "[=1C"); /* invisible cursor */ center(TEXT, &row, &col, wn); wescout(wn, "[2J"); /* clear display */ wgoto(wn, row, col); /* position cursor to middle */ wputs(wn, TEXT); (void)ioctl(wn, TCFLSH, 0); /* flush input queue */ wcmd(wn, "Touch any key to enter password"); do { if ((ch = wgetc(wn)) == Help) help(); } while (ch == Help); wescout(wn, "[2J"); /* clear window */ wcmd(wn, "Enter password"); if (unloadfont() == 0) { wescout(wn, "[10m"); /* select Font 0, system font */ } wescout(wn, "[=0C"); /* visible cursor */ center("", &row, &col, wn); /* Just get center line now. */ wgoto(wn, row, 0); } static int spn; /* process number of help process */ static int swn; /* window number of parent */ void help() { extern int (*signal())(); extern void perror(); extern unsigned alarm(); void catchwind(); swn = wgetsel(); if ((spn=fork()) == 0) { (void)signal(SIGHUP, (void (*)())SIG_DFL); (void)wprexec(); (void)execl("/usr/bin/uahelp", "uahelp", "-h/usr/lib/ua/elock.hlp", 0); } else { sleep(5); /* give help some time */ do { (void)signal(SIGALRM, catchwind); (void)signal(SIGWIND, catchwind); /* reassert signal catcher */ (void)alarm(1); } while(wait((int *)0) == -1 && errno == EINTR); (void)alarm(0); (void)signal(SIGWIND, (void (*)())SIG_IGN); (void)wpostwait(); } } void catchwind(sig) int sig; { extern int (*signal())(); if (swn == wgetsel()) { /* selected old window */ (void)kill(spn, SIGKILL); /* terminate the help process */ } } void center(txt, row, col, wn) char *txt; int *row, *col, wn; /* calculate center row and column for text txt, using the most extreme font loaded as worst case. */ { struct uwdata uw; (void)ioctl(wn, WIOCGETD, &uw); *row = (uw.uw_height/uw.uw_vs)/2; /* set middle row */ *col = ((uw.uw_width/uw.uw_hs) - strlen(txt))/2; } void wescout(wn, cmd) char *cmd; /* prefix string with ESCape char, and output it. */ { wputc(wn, '\033'); wputs(wn, cmd); } 0707070000020070771006440001460001440000010547670372733604200001100000004677wsetup.c/* wsetup.c - Setup a new window and load an interesting font. Svante C. Seleborg Last modified 05/22/86 - /SCS */ #include #include #include #include #include #define FONT "/usr/lib/wfont/elock.X" static struct ufdata uf = {1, FONT}; int wmake() /* Make and initialize the window for the lock, return non-zero if error. */ { void setmouse(); int i; /* temporary */ /* get terminal modes of controling terminal, regardless of whether standard input is redirected or not */ (void)setpgrp(); /* set process group to ourselves */ (void)close(0); (void)close(1); /* close stdin, stdout */ (void)close(2); if (open("/dev/window", O_RDWR) < 0) return(-1); (void)dup(0); /* dup stdout */ (void)dup(0); winit(); keypad(0, 1); /* let key pad code return 8-bit */ if ((i=wcreate(0, 0, 25, 80, NBORDMOVE|BORDHELP)) < 0) { (void)fprintf(stderr, "elock: Can't make a new window.\n"); return(-1); } /* set this window as ctr term */ (void)ioctl(i, WIOCPGRP, 0); setmouse(i); wlabel(i, "Unixpc lock"); return(0); } int loadfont() /* Load a font into slot 1. If not possible, this is a non-fatal error and the function will return a non-zero return value. */ { int i; if (iswind() == 0) return(-1); i = wgetsel(); /* now load an interesting font, if it exists */ if (ioctl(i, WIOCLFONT, &uf) < 0) { errno = 0; /* Don't care about the error */ return (-1); } return(0); } int unloadfont() /* unload font in slot 1. Note that it is a non fatal error if the font can't be unloaded. */ { int i; i = wgetsel(); /* get current window */ /* unload font 1 if necessary */ if (iswind() == 0) return(-1); if (ioctl(i, WIOCUFONT, &uf) < 0) { errno = 0; /* Reset system error code */ return(-1); } return(0); } int tstwind() /* return non zero if we are not running from a window. This is a look alike for iswind(), but it does not require a previous call to winit(). This is necessary since it the program structure will suffer if winit is called even when wmake() is not supposed to be called. */ { struct uwdata uw; int fd, result; fd = open("/dev/tty", O_RDWR); /* get controling terminal */ result = ioctl(fd, WIOCGETD, &uw); (void)close(fd); return(result == 0); } void setmouse(wn) int wn; { extern struct icon *geticon(); struct umdata mouse; (void)ioctl(wn, WIOCGETMOUSE, &mouse); mouse.um_icon = geticon(); (void)ioctl(wn, WIOCSETMOUSE, &mouse); } 0707070000020065041006440001460001440000010372020372733604000001100000010170passwd.c/* passwd.c - get users password, read and check Svante C. Seleborg Last modified 07/22/86 - /SCS - time out when reading password. Last modified 05/22/86 - /SCS */ #include #define PROMPT "Password: " #define DEFINE "Enter password: " #define VERIFY "Verify password: " #include #include #include char *getpword(force) int force; /* if no zero, prompt for passwd */ /* Get users password from passwd file, or if none or force!=0 then prompt for password from terminal. NULL means abort. */ { extern char *malloc(); /* allocate core memory */ extern char *strcpy(); char *promptpw(); /* prompt for password fr terminal */ struct passwd *getpwuid(), *pwp; char *spw, *pwstr; if (force) pwstr = promptpw(); /* force prompted passwd */ else if ( ( (pwp=getpwuid(getuid()))->pw_passwd ) == NULL) { (void)fprintf(stderr, "elock: Can't read password file.\n"); return(NULL); } else { /* password in file */ pwstr = pwp->pw_passwd; if (strlen(pwstr) == 0) pwstr = promptpw(); } if (strlen(pwstr) == 0) return NULL; spw = malloc((unsigned)(strlen(pwstr)+1)); spw = strcpy(spw, pwstr); return(spw); } char *promptpw() /* Prompt for password to use from terminal. If user make a mistake, NULL pointer is returned, and it is expected that the program aborts. */ { extern char *l64a(); /* Convert from long to radix 64 */ extern char *malloc(); /* allocate memory */ extern long time(); /* return seconds since 1/1/70 */ extern char *crypt(); /* password encryption */ void strclear(); /* clear string */ char *rdpw(); /* read password from termial */ char *pp; /* password pointer */ char *epw; /* pointer to encrypted pw */ char *salt; char pc[9]; /* passwords max 8 char + \0 */ if ( (pp = rdpw(DEFINE, 0)) == NULL) return NULL; (void)strcpy(pc, pp); /* save a copy */ if ( (pp = rdpw(VERIFY, 0)) == NULL) return NULL; if (strcmp(pc, pp) != 0) return NULL; /* unequal, abort */ salt = l64a(time((long *)0)); salt = &salt[strlen(salt)-2]; /* Use low order digits as salt */ epw = crypt(pp, salt); /* get the encrypt variant */ strclear(pp); /* clear static password */ strclear(pc); /* clear automatic copy too! */ pp = malloc((unsigned)strlen(epw)+1); /* allocate an area for it */ epw = strcpy(pp, epw); /* copy it to dynamic memory */ return(epw); } int okpasswd(pw, to) char *pw; unsigned to; /* read password and compare with the old one. return 0 means passwords didn't match, return 1 means match, return -1 means error. */ { extern char *crypt(); /* encrypt password */ void strclear(); char *rdpw(); /* read password from terminal */ char *try, *etry; if ( (try = rdpw(PROMPT, to)) == NULL ) return(-1); etry = crypt(try, pw); strclear(try); /* clear password in the clear */ if (strcmp(etry, pw) == 0) return(1); else return(0); } char *rdpw(prompt, to) char *prompt; unsigned to; /* timeout time or 0 */ { extern char *getpass(); /* read password from file */ extern int (*signal())(); extern void crashexit(); /* make a clean exit from problem */ extern unsigned alarm(), sleep(); void sig_alarm(); char *pp; struct termio oldmodes,ttymodes;/* temp area for tty modes */ int fd; /* tty temp file descriptor */ (void)signal(SIGALRM, sig_alarm); if (to) { (void)alarm(to); /* time out after some time */ } if ( (fd = open("/dev/tty", 0)) < 0) { crashexit(-1); } (void)ioctl(fd, TCGETA, &ttymodes); oldmodes = ttymodes; /* save current state of affairs */ ttymodes.c_iflag |= ICRNL; ttymodes.c_lflag |= ICANON; ttymodes.c_oflag |= OPOST|ONLCR; (void)ioctl(fd, TCSETA, &ttymodes); if ( (pp = getpass(prompt)) == NULL) { (void)fprintf(stderr,"elock: can't read password!\n"); (void)sleep(3); /* short delay */ pp = NULL; } (void)ioctl(fd, TCSETA, &oldmodes); (void)close(fd); if (to) { (void)alarm(0); } return(pp); } void sig_alarm(sig) int sig; { extern int (*signal())(); (void)signal(sig, (void (*)())SIG_IGN); } void strclear(cp) char *cp; /* clear characters of string, including terminating nul */ { while ((int)*cp) *cp++ = ' '; *cp = ' '; /* clear final nul */ } 0707070000020022731006440001460001440000010545240372733603500001200000001047geticon.c/* icondef.c - define and return pointer to alternate mouse. Svante C. Seleborg Last modified 05/27/86 - /SCS */ #include static struct icon key_icon; extern unsigned short keyicon[]; struct icon *geticon() { int i; key_icon.ic_flags = 0; key_icon.ic_fc.fc_hs = 32; key_icon.ic_fc.fc_vs = 32; key_icon.ic_fc.fc_ha = 0; key_icon.ic_fc.fc_va = 0; key_icon.ic_fc.fc_hi = 0; key_icon.ic_fc.fc_vi = 0; key_icon.ic_fc.fc_mr = 0; for (i=0; i #include #include static int wn; /* elock's window */ void catchph() /* Because of the cludge called the phone manager, there are some problems when a phone status change is detected. It is not possible to catch the signal, since the phone manager already owns the device. When the phone manager does catch the SIGPHONE signal, it has the gall to unconditionally restore it self as system window! This makes it possible then to enter the phone manager by use of the function keys. This routine will trap the SIGWIND signal, and once every 10 seconds check to see if the system window has changed. NOTE since the SIGWIND signal is trapped, the sleep call may therefore terminate, leading to the detection of the changed system window if that was what caused the status change. */ { extern int (*signal())(); extern unsigned sleep(); void wintrap(); wn = wgetsel(); if (fork() == 0) { /* child */ (void)signal(SIGWIND, wintrap); (void)signal(SIGHUP, (void (*)())SIG_DFL); while (-1) { int i; if ((i=sleep(1)) < 0) { (void)signal(SIGWIND, wintrap); } if (getppid() != ioctl(0, WIOCGSYS, 1)) { (void)ioctl(wn, WIOCSYS, 1); /* set us as ph mgr window */ (void)wselect(wn); /* reselect the right window */ } } } else { /* parent */ } } void wintrap(sig) int sig; { extern int (*signal())(); } 0707070000020013661006440001460001440000010242510372733604200001100000001116remote.c/* remote.c - handle lock in the case of a remote terminal. Svante C. Seleborg Last modified 08/01/86 - /SCS */ #include #include #include void remote(passwd) char *passwd; { extern int okpasswd(); extern void werrorexit(); int flag; int i, pn; winit(); if ((pn=fork()) == 0) { wprexec(); i=wcreate(0, 0, 99, 132, NBORDER); /* huge */ while ((flag=okpasswd(passwd, 0)) == 0) { (void)printf("Sorry\n"); } if (flag == -1) werrorexit(2); /* error from password read */ } else { wait((int *)0); wpostwait(); } wexit(0); } 0707070000020014561006440001460001440000010536260372736065500001100000003477makefile# makefile to build the electronic lock, and the installable distribution. # # Svante C. Seleborg # # The following targets may be of interest: # elock: builds the actual program from the .c sourcefiles # floppy: prompts for a floppy, and makes an installable kit # ELOCK+IN: same as floppy, but to a file. Good for email distr. # include $(MAKEINC)/Makepre.h .PRECIOUS: elock FONT=oldenglish.18 OBJECTS=main.o syswin.o idle.o wsetup.o passwd.o geticon.o \ keyicon.o catchph.o remote.o FILES=Name Remove Install Files files.cpio SRCFILES=main.c syswin.c idle.c wsetup.c passwd.c geticon.c \ keyicon.c catchph.c remote.c makefile README elock.1 remove.sh \ install.sh RESFILES=elock.man elock.hlp $(FONT) elock NAME="Elock - electronic lock Ver 1.02 - \(soon\) from THE STORE!" all: elock elock: $(OBJECTS) echo "Root permission needed." /bin/su root -c '$(LD) $(LDFLAGS) $(SHAREDLIB) \ $(OBJECTS) -lld -o elock; \ chgrp sys elock; \ chown bin elock; \ chmod 2105 elock' $(FONT): if [ ! -f $(FONT) ]; \ then \ if [ -f /usr/lib/wfont/$(FONT) ]; \ then \ ln /usr/lib/wfont/$(FONT) .; \ fi; \ fi Name: makefile echo "$(NAME)" >Name Remove: remove.sh cp remove.sh Remove Install: install.sh cp install.sh Install Size: Files cpio /dev/null 2>/usr/tmp/Size.t (set +e; tail -1 /usr/tmp/Size.t | cut -f1 -d\ >Size; true) rm /usr/tmp/Size.t elock.man: elock.1 nroff -man elock.1 >elock.man floppy: ELOCK+IN echo "Please insert floppy. Press when ready" ; read dummy cat ELOCK+IN >/dev/rfp021 files.cpio: $(SRCFILES) $(RESFILES) echo $(SRCFILES) $(RESFILES)\ | tr " " "\012" | cpio -ocB >$@ 2>/dev/null ELOCK+IN: $(FILES) Size cpio $@ 2>/dev/null install: ELOCK+IN Files: . echo Size $(FILES) | tr " " "\012" >Files clobber: rm -f Install Remove elock.man ELOCK+IN files.cpio Name Size\ Files 0707070000020014661006440001460001440000010536200372736230500000700000002016READMEThis directory ($HOME/Filecabinet/SRC/ELOCK) contains all files necessary to create and modify the electronic lock. elock.man - man page, read for more info about running the program. makefile - contains all info necessary to build the system *.c - sourcefiles .... and some more files, the meaning of which is explained in the makefile. If you rebuild the program, remember that it is done locally and does not affect the program generally available in /usr/bin. To rebuild the program you need the development set and access to the root password, to rebuild the manual page you need the document preparation set. The lock itself should be completely installed and ready to use. If you don't care about the source code, you should remove this entire directory. BUGS: The lock is currently only supported on UNIX version 3 on the UNIX PC, it will not run on UNIX version 4 without change. It has been tested on 3.0, 3.47 and 3.5. 09/04/86 - Svante C. Seleborg Comments, complaints, suggestions, bugs etc to mtuxn!svante. 0707070000020013531006440001460001440000010501010372733603400001000000004735elock.1.TH elock 1 "UNIX PC" .SH NAME elock - locks the terminal from use without logging out .SH SYNOPSIS elock [-p] .SH DESCRIPTION This program clears the screen, displays a caption to the effect that the terminal is locked, and then waits for someone to enter the correct password. .P The intent is provide the same access protection as logging out would, without the inconvenience. The program may be invoked either from a regular shell, or from the user agent. .P The password used is the same one as the login password for the user invoking it, unless the .B -p option is used when .I elock is invoked from a regular shell. .SS Options .sp .TP -p This option, when specified, will prompt for another password than the users. It will prompt twice, to confirm the correct entry of the password. The password is only in effect for one invokation of .B elock. The password will not be shown on the display. .sp If the verification of the password fails, then .I elock exits immediately with a non-zero status code. .SH EXAMPLES .nf elock -p Enter password: Verify password: .fi .SH FILES .nf /etc/passwd - where the default password is read /usr/bin/elock - the actual program /usr/lib/ua/Office - updated to contain elock entry /usr/lib/ua/elock.hlp - the on-line help file /usr/lib/wfont/elock.X - font file for caption display /usr/man/local/man1/elock.1 - this document .fi .SH BUGS If .B elock is killed from another terminal by the superuser, and it was running on the bit-mapped display, there is a risk that the phone manager, the status manager and the window manager may be permanently disabled. .P Due to a problem with the phone manager, there is a risk that there might be left-over call-screens still active when .B elock is exited and any of the phonemanager keys have been pressed. This can only happen under very special circumstances, and does not constitute a security risk. If it does happen, select the call-screen from the window manager, and exit (you may have to exit several times due to buffering by the phone manager). .P If .B elock is run when su'd through root to a login name that has .I NONE or some such, non passwd(1) generated, field as the password in /etc/passwd, then there is no way of unlocking but to dial in from another machine as root and kill the process. .P The implementation when run from a remote terminal is very simplistic, but safe. .P Due to the nature of the special concerns caused by the kernel support for system windows on the UNIX PC, this program is not very portable. 0707070000020014571006440001460001440000010532160373060067300001200000000663remove.sh# Remove elock - Unixpc locking program by /SCS # NOTE the source is NOT deleted!! echo "The source code in .../SRC/ELOCK will NOT be removed!" rm -f /usr/bin/elock rm -f /usr/lib/wfont/elock.X rm -f /usr/lib/ua/elock.hlp rm -f /usr/man/local/man1/elock.1 [ -z "`ls /usr/man/local/man1`" ] && rmdir /usr/man/local/man1 [ -z "`ls /usr/man/local`" ] && rmdir /usr/man/local [ -z "`ls /usr/man`" ] && rmdir /usr/man uaupd -r Elock Office 0707070000020065111006440001460001440000010366660372736237000001300000003517install.sh# Install elock - Unixpc locking program by /SCS echo "$HOME/Filecabinet/SRC/ELOCK/README contains information." if [ ! -d /usr/man ] #is there no elegant way of doing this?? then mkdir /usr/man chown bin /usr/man; chgrp bin /usr/man chmod 755 /usr/man fi if [ ! -d /usr/man/local ] #and this?? then mkdir /usr/man/local chown bin /usr/man/local; chgrp bin /usr/man/local chmod 755 /usr/man/local fi if [ ! -d /usr/man/local/man1 ] #and this?? then mkdir /usr/man/local/man1 chown bin /usr/man/local/man1; chgrp bin /usr/man/local/man1 chmod 755 /usr/man/local/man1 fi if [ ! -d $HOME/Filecabinet/SRC ] then mkdir $HOME/Filecabinet/SRC chown $LOGNAME $HOME/Filecabinet/SRC chmod 755 $HOME/Filecabinet/SRC fi if [ ! -d $HOME/Filecabinet/SRC/ELOCK ] then mkdir $HOME/Filecabinet/SRC/ELOCK chown $LOGNAME $HOME/Filecabinet/SRC/ELOCK chmod 755 $HOME/Filecabinet/SRC/ELOCK fi HERE=`pwd` cd $HOME/Filecabinet/SRC/ELOCK cpio <$HERE/files.cpio -icBdm chown $LOGNAME *; chgrp users * mv elock /usr/bin/elock cp elock.1 /usr/man/local/man1/elock.1 cp elock.hlp /usr/lib/ua/elock.hlp chown bin /usr/man/local/man1/elock.1 /usr/lib/ua/elock.hlp /usr/bin/elock chgrp bin /usr/man/local/man1/elock.1 /usr/lib/ua/elock.hlp chmod 444 /usr/man/local/man1/elock.1 /usr/lib/ua/elock.hlp chgrp sys /usr/bin/elock; chmod 2105 /usr/bin/elock # non fatal if no font file is available if [ ! -f /usr/lib/wfont/oldenglish.18 ] then if [ -f oldenglish.18 ] then cp oldenglish.18 /usr/lib/wfont/elock.X chown bin /usr/lib/wfont/elock.X chgrp bin /usr/lib/wfont/elock.X chmod 444 /usr/lib/wfont/elock.X fi else ln /usr/lib/wfont/oldenglish.18 /usr/lib/wfont/elock.X chmod o+r /usr/lib/wfont/elock.X fi cat <O.$$ Name=Elock Default = Open Open=EXEC -d /usr/bin/elock Help=EXEC -d /usr/bin/uahelp -h /usr/lib/ua/elock.hlp END uaupd -r Elock -a O.$$ Office rm -f O.$$ 0707070000020014611006440001460001440000010542260372736364700001200000010055elock.man eeeelllloooocccckkkk((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((UUUUNNNNIIIIXXXX PPPPCCCC)))) eeeelllloooocccckkkk((((1111)))) NNNNAAAAMMMMEEEE elock - locks the terminal from use without logging out SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS elock [-p] DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN This program clears the screen, displays a caption to the effect that the terminal is locked, and then waits for someone to enter the correct password. The intent is provide the same access protection as logging out would, without the inconvenience. The program may be invoked either from a regular shell, or from the user agent. The password used is the same one as the login password for the user invoking it, unless the ----pppp option is used when _e_l_o_c_k is invoked from a regular shell. OOOOppppttttiiiioooonnnnssss -p This option, when specified, will prompt for another password than the users. It will prompt twice, to confirm the correct entry of the password. The password is only in effect for one invokation of eeeelllloooocccckkkk.... The password will not be shown on the display. If the verification of the password fails, then _e_l_o_c_k exits immediately with a non-zero status code. EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS elock -p Enter password: Verify password: FFFFIIIILLLLEEEESSSS /etc/passwd - where the default password is read /usr/bin/elock - the actual program /usr/lib/ua/Office - updated to contain elock entry /usr/lib/ua/elock.hlp - the on-line help file /usr/lib/wfont/elock.X - font file for caption display /usr/man/local/man1/elock.1 - this document BBBBUUUUGGGGSSSS If eeeelllloooocccckkkk is killed from another terminal by the superuser, and it was running on the bit-mapped display, there is a risk that the phone manager, the status manager and the window manager may be permanently disabled. Due to a problem with the phone manager, there is a risk that there might be left-over call-screens still active when eeeelllloooocccckkkk is exited and any of the phonemanager keys have been pressed. This can only happen under very special Page 1 (printed 9/4/86) eeeelllloooocccckkkk((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((UUUUNNNNIIIIXXXX PPPPCCCC)))) eeeelllloooocccckkkk((((1111)))) circumstances, and does not constitute a security risk. If it does happen, select the call-screen from the window manager, and exit (you may have to exit several times due to buffering by the phone manager). If eeeelllloooocccckkkk is run when su'd through root to a login name that has _N_O_N_E or some such, non passwd(1) generated, field as the password in /etc/passwd, then there is no way of unlocking but to dial in from another machine as root and kill the process. The implementation when run from a remote terminal is very simplistic, but safe. Due to the nature of the special concerns caused by the kernel support for system windows on the UNIX PC, this program is not very portable. Page 2 (printed 9/4/86) 0707070000020057301006440001460001440000010351320372733603500001200000007201elock.hlpWlabel = "Electronic Lock Help" Contents = Using the lock, Locking the lock, Opening the lock Name = Using the lock Llabel = " USING ELOCK" Slabel = " USAGE" Branch = Using the lock, Locking the lock, Opening the lock Title = "Description of the electronic lock" Text = \CEN\\BL\The Electronic Lock\BS\ The \UL\Electronic Lock\US\ is a utility that allows you \ to lock the UNIX PC in a quick, easy and secure fashion without \ aborting any work that may be in progress. This will ensure that nobody gains unauthorized access to your machine when \ you temporarily leave it during the working day, thereby increasing the \ security of your system. When the \UL\Electronic Lock\US\ is in place, it will cover the entire \ screen with an essentially empty window. The only information visible \ is a caption to the effect that the machine is in the locked state. The \ key to the lock is the same password that is used for login, or \ a different password of your choice if you lock the machine from \ the UNIX shell. The only effect of the \UL\Electronic Lock\US\ is to disable all forms \ of input from the keyboard or mouse at the terminal where it was invoked. \ All other processes in the machine will run uninterrupted.\EOT\ Name = Locking the lock Llabel = "LOCKING UNIX PC" Slabel = "LOCKING" Branch = Using the lock, Locking the lock, Opening the lock Title = "How to lock the electronic lock" Text = \CEN\\BL\Locking the UNIX PC lock\BS\ There are two ways to lock the \UL\Electronic Lock\US\. You may either \ invoke the lock from the \UL\User Agent\US\, or you may give the \ \BL\elock\BS\ command from the shell. In either case, the default \ key password that will unlock the machine is the password of the \ \UL\effective\US\ user running the program. This means that the \ password will be that of the user last \UL\su\US\:ed to, not the password \ of the user originally logged in. Normally this aspect is only of \ concern to super users. If no password is defined for the active user, \ you will be prompted to enter one before the machine is locked. Once locked, the machine will be unusable from that terminal until \ the correct key password is entered. \UL\root\US\ may of course kill the process from another terminal, \ but this practice is strongly discouraged since it may cause the \ \UL\Phone Manager\US\, the \UL\Window Manager\US\ and the \UL\Status \ Manager\US\ to be permanently disabled. This does not lessen the \ security offered, since anyone with access to the \UL\root\US\ user \ must be assumed to be an authorized user. The \UL\Electronic Lock\US\ may also of course be bypassed by physically \ resetting the machine, and loading a stand alone UNIX from a floppy disk. \ This kind of intrusion is likely to take time, and is very difficult to \ do undetected so this is not a really strong concern. The goal of the \ \UL\Electronic Lock\US\ is to provide the same amount of security as \ logging out would, without the inconvenience.\EOT\ Name = Opening the lock Llabel = "OPENING UNIX PC" Slabel = "OPENING" Branch = Using the lock, Locking the lock, Opening the lock Title = "How to unlock the electronic lock" Text = \CEN\\BL\Opening the UNIX PC lock\BS\ To open the \UL\Electronic Lock\US\, first press any key when the machine \ is in the locked state. The lock will then prompt for a key password, \ which must be entered followed by a . The entered key is compared to the one specified when the machine \ was locked, or to the login password if no key was given then. If the \ two keys match, the machine will revert to the unlocked, normal state. If \ they mismatch the lock will not open, and the machine will still be locked \ from use. \EOT\ 0707070000020014331006440001460001440000010475270372733604000001600000033736oldenglish.1833#++  +f + ++@ +++x+++d+++ P+ + + (+, '++ $+( (+,(+,(+,(+,,+0++$*+.!+%2+7*+. '++&+*'++(+,&+*#+')+-*+.3+8 %+)"&)+-# $+($+$+%+&,+&+'t+(+(+)` + * +*R+* + +D%+)++,+-0+-+.x+/+/ +0d+0+1V"+&1+2+3+4<>|~~~<<88888<<~~~|<|xx|<8 <? ~?~?~?~?~?????`0 ?8À~~~~~~~~?~<~??pp82???p#0|~~~|?>0@??~<?>>>>>~x0x? |?~||<x8xxxxx|?|||8?< ggg7810@8??`v|~??gcc?c?cccccc?cc!1111?1?1?3???????@~<?`~x?>x?x?8?8????????? ? ? ? ? ? ? ? ?  l?<? L??111?1110???>?3?11?00000?000013??00000x>>????????v| 8 | ?0??'####ccs##!!!!#3???#!?< 0>?0|8?~???  ~ 1??331111p10113|33 3333????7##x!! `gc???@oo??????  v~~<`<><?      ? ?|<????g??>|'####?#?#?????c## ########3??0?00 ?x>???????x>>????gcc#?#?#?#?`####<333333333?????0?>0000??<< ????? x|x???????????? ? ? ????????? |8 x?y?q?|>???Acc3?9ys>0x8@   ?O?o??????|??><p8`?~??>< ???c#3????`?`@?@????><>?~? ?8?????????x0?x`@??À~~~~~??>?x?pxcc#?8??????????~~~|>?0???|0|0x0:`?pp` p?????????px???x~? ?` ?~~~~~~x8` ? ??????????x8<0@|??0?0???~|??`?`x??8 p????????????||||8? p 0707070000020060451021050000020000030000010120400372734171600000600000133243elockR]# l .textl` .data @.bss  .lib \ \/< \N1X OQ./HJf/H#0NR,`.N1B.N1Bp`LN^NuNVHBB/< N1XO-@lp`p.Hn/.N1,POrfpoJnf`HnHnN1tPOJg`p0. fpBpob .Ѐ"n01nfD ."Ё"n B1p.Hn ."Ё"n AHPN1POR`R``..N1Bp`LN^NuNqNVHN1-@N PJf. /.NXO. /.NXO.HnHn/< NO . /.NXO././.N1HPO. /.N1XOBHxT/.N1PO. /.N1~XO.N1@ fN .g. /.NXO. /.N1~XON Jf.  /.NXO. /.NXO.HnHn/< N4O B/./.N1HPOLN^NuNVHN1# N1# f8Bp/N1nXON1B/< +/< $/< N1TO `vp.N1. p/N1nXO. p/N1nXOp.N1BN1rfp0gBN1.p/N1nXON1LN^NuNVHN1"9 Ȳfp ./9 N1XOLN^NuNVHHnHxW/.N1O p0.r..N1" "n ".N1 $p0.r..N1ڐ" "n"LN^NuNVHp./.N1XO. /.N1XOLN^NuNqNVHN1DBN1Bp.N1Bp.N1Bp./< N1XOJlp`BN1NBN1NN1$p.BN1 XO.pP/p/BBN1O-@l. /<0N1XOp`4BHxW /.N1PO.NB. /.N1XOp`LN^NuNVHN10Jfp`:N1-@. DHxW/.N1POJlB0p`p`LN^NuNVHN1-@N10Jfp`0. DHxW/.N1POJlB0p`p`LN^NuNVHp./< N1XO-@HnHxW/.N1O -@.N1BJfp`p`LN^NuNVHHnHxW /.N1O Nt-@HnHxW /.N1O LN^NuNVHJgN-@`ZN1.N1 @-HJf. /<0N1XO`n n-h.N1 Jf N\-@.N1 Jf`6.N1 R.N1B-@./.N1XO-@ n` LN^NuNVHB/< NbXO @-Hf`.HnN1XOB/< N4XO @-Hf`.HnN1XOJg`BN1.N1-@.N1 U"nA-H./.N1XO-@.NHnNXO.N1 R.N1B-@./.N1XO-@ n` LN^NuNVH. /<  N\XO @-Hfp`@./.N1XO-@.Nn./.N1XOJfp`p`LN^NuNVH.p/N1nXOJ g . N1B/< N1XO-@l p.NHnHxT/.N1O AC 0nHnHxT/.N1O .N1 @-Hf$. /<0N1XOp.N1BHnHxT/.N1O .N1BJ g BN1 n` LN^NuNVH./.N1nXOLN^NuNVH nHHg nR ` n LN^NuNVHB9   B9 B9 B9 B9 By Bp@o* .Ѐ"| <41 .Ѐ"| 3R` | ` LN^NuNqNVHN1# XN1Jf.p/N1nXOBp/N1nXOp.N1-@l.p/N1nXOp.HxWBN1PO$N1g$p.HxW /9 XN1PO. XN1`LN^NuNVHLN^NuNqNVHN1$N1-@fdN1p.Hxpc/BBN1O-@B/.NXO-@f. N1`pf p.N`BN1N1BN16LN^Nupusage: elock {-p} elock/dev4elock: Incompatible UNIX ver %s /dev/kmem/dev/memelock: process not in core. .[11m[=1CLocked...[2JLocked...Touch any key to enter password[2JEnter password[10m[=0C/usr/bin/uahelpuahelp-h/usr/lib/ua/elock.hlp/usr/lib/wfont/elock.X/dev/windowelock: Can't make a new window. Unixpc lock/dev/ttyelock: Can't read password file. Enter password: Verify password: Password: /dev/ttyelock: can't read password! ?|<8?|?|~>Sorry FFJNpx !"#%&'(),*>+P,b-t./01234579<"=6@<BBCZEdFlHKMN#*  , 2 F Lbhv*P l   *DJz*0<!J%h(r*-.01234567 89 :&;::> \  $0 :!@"wVV ` l |   $ 4 F R b r  !          2 < X ` r x         ( < < L \: r r x            & . @ FA Z Z l v    H         O   , F P d Y x x         .D\px "6>H`t|       (@J`rx~ !#$0DDbj3~~      " 4 BTfE    $ 4LTZb.text<.data .bss XX1.file9gmain.c.0fake _cnt_ptr_base_flag _file .eosf main<$d#.bfFeargc argv R passwdppforceerrflgc.bbd:!flag.ebdN.efeN 0*.bfea .efe  1.bfeisig .efeFILE  .text</4.data .bss .filegsyswin.c.0fake D_cnt_ptr_base_flag _file .eosf;flock Ml_typel_whencel_startl_lenl_pid .eosfD.1fake Sr4.eosfMfcdef ^fc_hsfc_vsfc_hafc_vafc_hifc_vifc_mr.eosfSfntdef "lff_magicff_flags ff_hsff_vs#ff_dummy2ff_fc 8S`/ .eos"f^"ufdata >suf_slotuf_name2<<.eos>fl>icon |ic_flagsic_fcS9 =@.eosfswfont wf_ff^"Cwf_ino wf_mtimewf_size .eosf|.2fake 4i_a4 4 i_f3 4.eos4f4.3fake 8i_p 4i_l4.eos8f8inode ^i_forw^i_back^i_flagi_count i_dev i_number i_mode i_nlinki_uid i_gid i_sizei_sptri_blks 8i_vfdcntXMZ.eos^f^text 8x_daddr= W x_size$ x_caddr&x_iptr*^x_rssize.x_swrss0x_count2x_ccount3x_flag4a5x_poip6.eos8f8ipc_perm uid gid cuid cgid mode seq key .eosfpte pt_wp pt_acc pt_pfnum  .eosfmpte pg_ipte pt_wp pg_acc pg_fod pg_swapm pg_pageo pg_pfnum  .eosffpte pg_blkno pt_wp pg_acc pg_fod pg_swapm pg_pageo pg_last k v .eosfvaddress v_regionv_vpn v_byte  .eosfpaddress  p_mbz p_pfn  p_byte .eosfshmid_ds *shm_permshm_ptblshm_lpid shm_cpid  "&.eos*f *shmpt_ds $shm_linkshm_sflg   .eosfshminfo .shmmaxshmminshmmnishmseg shmbrkshmall.eosf$.4fake 4p_cad p_int .eosf.proc pep_link4pp_flagp_statp_pri p_time p_cpu p_nice p_szpt p_usrprip_uid p_suid p_pgrpp_pidp_ppidp_addr=p_pptr4pp_swaddr"p_tsize&p_ssize*p_dsize.p_lsize2p_tpage6p_dpage:p_spage>p_rssizeBp_maxrssFp_swrssJp_sigNp_unwR .p_textpV8p_xlinkZ4pp_clktim^p_smbegbp_smendfp_ndxjp_xinol p_poipn.eospf4pxproc ,xp_link4pxp_flagxp_statxp_pri xp_time xp_cpu xp_nice xp_szpt xp_uid xp_suid xp_pgrpxp_pidxp_ppidxp_addr=xp_pptr4pxp_xstat"xp_utime$xp_stime(.eos,fe,direct d_ino d_name2.eosfvar Lv_bufv_callv_inodeve_inode v_fileve_filev_mountve_mountv_proc ve_proc$v_text(ve_text,v_clist0v_sabuf4v_maxup8v_smap<v_hbuf@v_hmaskDv_pbufH.eosLfL.5fake f_uinode ^f_unext .eosffile  f_flagf_countf_up f_offset.eos f dmap &dm_size dm_alloc dm_fsize dm_map= .eos&f&dblock db_basedb_size.eosf.6fake r_val1r_val2.eosf.7fake r_reg r_off r_time .eosfu_prof pr_basepr_sizepr_offpr_scale .eosf.8fake  ux_magux_stampux_tsizeux_dsizeux_bsize ux_ssize.eos f user D8u_rsav44 u_qsav444 u_ssavh44 u_segflgu_erroru_uid u_gid u_ruid u_rgid u_procp4pu_apu_r u_baseu_countu_offsetu_fmodeu_pbsize u_pboff u_pbdevu_errcntu_cdir^u_rdir^u_dirpu_dentu_pdir^u_ofileX u_pofile2\\u_argT4( u_tsize|u_dsizeu_ssizeu_lsizeu_signal4 u_utime u_stimeu_cutimeu_cstimeu_ar0u_prof u_ttyp0u_ttyd4u_exdata6 u_xlsizeVu_commZ2u_starthu_tickslu_mempu_iortu_iowxu_iosw|u_iochu_acflagu_cmasku_limit4u_dmap&u_smap&u_cdmap&u_csmap&u_outime<u_usize@u_lockB.eosDfDutsname .Fsysname2 nodename 2 release2 version2 machine$2 .eos.f8.uwdata Tuw_x uw_y uw_width  $ uw_hs uw_vs . uw_cx uw_cy .eosfFutdata T[ut_numut_text2QQ.eosTfTTumdata fum_flagsum_xum_yum_wum_hum_icon s.eosf[urdata w:E Q\ ur_srcx ur_srcy ur_dstx ur_dsty ur_width h ur_srcop ur_dstop r.eosffstat st_devst_ino st_mode st_nlinkst_uid st_gid st_rdev st_sizest_atimest_mtimest_ctime.eosfwsyswn fdname2.eosf}$.bfe"4 sys_dev3ifd.efeswenable$h.bfe?i.efe$R.bfeQsyswpg i.efe$@.bfe\prgrp dev  kmemmemcountpp4pvs8Lprocadr44pvaradr0Li,sysname8..bbJd"uadruD.ebd7.ef&e;getsyswn0$.bf:edev windows  fdcountdirbufstatbufw.bbdi.eb,d.ef@e"FILE ;physadr Mdaddr_t caddr_t uint ushort ino_t cnt_t time_t label_t4 4 dev_t off_t paddr_t key_t swblk_t size_t port_t mdev_t syswn 8<.text\-V.data .bss .filegidle.c.0fake r4.eosffcdef  fc_hsfc_vsfc_hafc_vafc_hifc_vifc_mr.eosffntdef "ff_magicff_flags ff_hsff_vsff_dummy2ff_fc 8` .eos"f "ufdata >uf_slotuf_name2<<.eos>f>icon 'ic_flagsic_fc =@.eosfwfont 1wf_ff "wf_ino wf_mtimewf_size .eosf'uwdata ?uw_x uw_y uw_width   uw_hs uw_vs  uw_cx uw_cy .eosf1utdata TFut_numut_text2QQ.eosTf?Tumdata Qum_flagsum_xum_yum_wum_hum_icon .eosfFurdata b  ur_srcx ur_srcy ur_dstx ur_dsty ur_width  ur_srcop ur_dstop '.eosfQtermio mc_iflag c_oflag c_cflag c_lflag c_linec_cc <.eosfbtermcb wst_flgsst_termtst_crowst_ccolst_vrowst_lrow.eosfmidleL$\.bfVerowcolch wn.ef e!help  .bf e?.ef xe2  8.bf e]sig .ef ecenter  x.bf eltxt row  col wn uw1.ef (ewescout 2 4&.bf <ewwn cmd  .ef \ephysadr daddr_t caddr_t uint ushort ino_t cnt_t time_t label_t4 4 dev_t off_t paddr_t key_t swblk_t size_t port_t mdev_t spn swn .textL46.data .bss .filegwsetup.cflock l_typel_whencel_startl_lenl_pid .eosfuwdata uw_x uw_y uw_width < F uw_hs uw_vs P uw_cx uw_cy .eosfutdata Tut_numut_text2QQ.eosTfTumdata um_flagsum_xum_yum_wum_hum_icon .eosfurdata \g s~ ur_srcx ur_srcy ur_dstx ur_dsty ur_width  ur_srcop ur_dstop .eosf.0fake r4.eosffcdef  fc_hsfc_vsfc_hafc_vafc_hifc_vifc_mr.eosffntdef "ff_magicff_flags ff_hsff_vsff_dummy2ff_fc 8` .eos"f "ufdata >uf_slotuf_name2<<.eos>f>icon 'ic_flagsic_fc =@.eosfwfont 1wf_ff "wf_ino wf_mtimewf_size .eosf'.1fake :_cnt_ptr_base_flag _file .eosf1wmake h$DA.bf rei.ef Feloadfont P$^H.bf Ze5i.ef e  $^O.bf eGi.ef e tstwind $b Y.bf e[uwfdresult.ef de setmouse n J Fb.bf xegwn mouse.ef ephysadr daddr_t caddr_t uint ushort ino_t cnt_t time_t label_t4 4 dev_t off_t paddr_t key_t swblk_t size_t port_t mdev_t FILE 1uf D>.text hP"1.data D.bss .filegpasswd.cpasswd $pw_namepw_uidpw_gid pw_agepw_gecospw_dirpw_shell .eos$f$comment c_deptc_namec_acctc_bin .eosf.0fake _cnt_ptr_base_flag _file .eosftermio c_iflag c_oflag c_cflag c_lflag c_linec_cc <.eosftermcb st_flgsst_termtst_crowst_ccolst_vrowst_lrow.eosfgetpword b j.bf eforce pwp$spwpwstr.efxepromptpwb .bfe5ppepwsaltpc2 .ef|eokpasswd$r!.bfeXpw to  tryetry.efe rdpwb!B.bfeiprompt to  ppoldmodesttymodesfd.efe$ &!.bfesig .ef0estrclear: :!.bfDecp .efjeFILE .text )D.data x.bss .fileUggeticon.c.0fake r4.eosffcdef  fc_hsfc_vsfc_hafc_vafc_hifc_vifc_mr.eosffntdef "ff_magicff_flags ff_hsff_vsff_dummy2ff_fc 8` .eos"f "ufdata > uf_slotuf_name2<<.eos>f>icon )ic_flagsic_fc =@.eosf wfont 3wf_ff "wf_ino wf_mtimewf_size .eosf)geticonth ":.bf~ei.efephysadr daddr_t caddr_t uint ushort ino_t cnt_t time_t label_t4 4 dev_t off_t paddr_t key_t swblk_t size_t port_t mdev_t key_icon  .textt .data <.bss .file]gkeyicon.c.text.data <.bss X.filegcatchph.c.0fake er4.eosf_fcdef pfc_hsfc_vsfc_hafc_vafc_hifc_vifc_mr.eosfefntdef "~ff_magicff_flags ff_hsff_vsff_dummy2ff_fc 8e`) .eos"fp"ufdata >uf_slotuf_name2<<.eos>f~>icon ic_flagsic_fce3 =@.eosfwfont wf_ffp"=wf_ino wf_mtimewf_size .eosfuwdata uw_x uw_y uw_width G Q uw_hs uw_vs [ uw_cx uw_cy .eosfutdata Tut_numut_text2QQ.eosTfTumdata um_flagsum_xum_yum_wum_hum_icon .eosfurdata gr ~ ur_srcx ur_srcy ur_dstx ur_dsty ur_width  ur_srcop ur_dstop .eosfcatchph "\.bf e.bbBd i.ebd.efewintrap ".bfe9sig .efephysadr _daddr_t caddr_t uint ushort ino_t cnt_t time_t label_t4 4 dev_t off_t paddr_t key_t swblk_t size_t port_t mdev_t wn X.text.data .bss X.fileUgremote.cuwdata uw_x uw_y uw_width   uw_hs uw_vs  uw_cx uw_cy .eosfutdata T ut_numut_text2QQ.eosTfTumdata um_flagsum_xum_yum_wum_hum_icon .eosf urdata '  ur_srcx ur_srcy ur_dstx ur_dsty ur_width  ur_srcop ur_dstop .eosfflock 0l_typel_whencel_startl_lenl_pid .eosf'termio ;c_iflag c_oflag c_cflag c_lflag c_linec_cc <.eosf0termcb Est_flgsst_termtst_crowst_ccolst_vrowst_lrow.eosf;remote "O.bfe passwd flagipn.efbe.text .data .bss \timezone0tzname0patblack0patwhite04patgray0T 0t_iob00_ctype0 "0_iob20 .0 _dbase0errno0environ0PC0BC0 UP0ospeed0LINES0COLS0wncur0 optind0"optarg0&opterr0*optopt0.sys_nerr02FPA_flag06FPA_s0:FPA_d0>_sibuf0`_sobuf0d_tbase1shlbat1shlbatid1access1 alarm1brk1ibrk1sbrk1$chdir1*chmod10chown16chroot1<close1Bcreat1Hdup1Nexecl1Texecv1Zexecle1`execve1fexeclp1lexecvp1rexit1x_exit1~fcntl1fork1getpid1getpgrp1getppid1getuid1geteuid1getgid1getegid1gtty1ioctl1kill1link1locking1lseek1mknod1mount1msgctl1msgget1msgsnd1msgrcv1nice1open1openi1pause1pipe1profil1 ptrace1&read1,semctl12semget18semop1>setpgrp1Dsetuid1Jsetgid1Pshmctl1Vshmget1\shmat1bshmdt1hsignal1nstat1tstty1zfstat1stime1swrite1sync1syslocal1time1times1ulimit1umask1umount1uname1unlink1ustat1utime1wait1write1abort1abs1atof1clock1crypt1setkey1encrypt1ctermid1 ctime1:1gmtime1asctime1"tzset1(cuserid1.ecvt14fcvt1:gcvt1@fclose1Ffflush1Lfopen1Rfreopen1Xfdopen1^fread1dfwrite1jfrexp1pldexp1vmodf1|fseek1rewind1ftell1ftw1fgetc1getw1getcwd1getenv1getgrent1getgrgid1getgrnam1setgrent1endgrent1getlogin1getopt1getpass1getpw1getpwent1getpwuid1getpwnam1setpwent1endpwent1gets1getchar1 fgets1getutent1getutid1D1$N1*setutent10endutent16utmpname1<malloc1Bfree1Hrealloc1Ncalloc1Tcfree1Zmemccpy1`memchr1fmemcmp1lmemcpy1rmemset1xmktemp1~monitor1perror1popen1pclose1printf1fprintf1sprintf1fputc1putw1putpwent1puts1putchar1fputs1scanf1fscanf1sscanf1setbuf1sleep1ssignal1gsignal1strcat1strncat1strcmp1strncmp1strcpy1strncpy1strlen1 strchr1&strrchr1,strpbrk12strspn18strcspn1>strtok1Dstrtol1Jatol1Patoi1Vswab1\system1btmpfile1htmpnam1ntempnam1tttyname1zisatty1ttyslot1ungetc1_filbuf1_flsbuf1lmul__1lmul1ldiv__1ldiv1lrem__1lrem1aldiv1almul1alrem1ulmul1uldiv__1uldiv1ulrem__1ulrem1qsort1l3tol1ltol31tgetflag1tgetent1 tgetstr1tgetnum1tgoto1tputs1"form1(menu1.message14setattr1:pb_open1@X1Fb1Lpb_gets1Rpb_check1Xpb_weof1^pb_seek1dpb_puts1jpb_name1ppb_empty1vpb_gbuf1|l1wrefresh1track1wcreate1initscr1cbreak1attroff1nl1attron1flushinp1noecho1inch1getch1savetty1resetty1echo1nocbreak1nonl1wdelete1wprexec1v1wgetc1kcodemap1keypad1 wsigintr1wind11winit1$wsetbuf1*iswind10wexit16endwin1<wgetpos1Bwgoto1Hwinstr1N1T1Z1`wnl1fwndelay1lwprompt1rwguser1xwcmd1~wslk1wlabel1wuser1wprintf1printw1wputc1wputs1wrastop1wselect1wgetsel1wsetstat1wgetstat1setty1fixterm1physclr11setterm1getterm1baudrate11slkcol1setjmp1longjmp1afmulf1afdivf1afaddf1_cvfd1 _cvif1&fltused1,nlist12fmul18fdiv1>fadd1Dfsub1J_cvdf1P_cvdi1V_cvid1\_cvfi1bafadd1hafsub1nafsubf1tafmul1zexhelp1tolower1wicon1wicoff1toupper1l64a1a64l1_bufsync1setuname1auldiv1eprintf1dbsub__1dbadd__1dbdiv__1dbmul__1ltodb__1dbtol__1dbtofl__1fltodb__1ltofl__1fltol__1ultodb__1ultofl__1aulmul1 afdiv1dbtst__1fltst__1plock1"dial1(callout1.undial14drand481:erand481@lrand481Fmrand481Lsrand481Rjrand481Xseed481^lcong481drand1jsrand1pftok1vputenv1|targets111w_target1_fpachk1_start_end \keyicon <=@_etextletextl_edata edata end \werrorexitretstatuscrashexitff_baselineff_rasteric_rasterwf_usecnti_filocksx_ptdaddrx_slptimepg_lastsecpg_filenoshm_segszshm_nattchshm_atimeshm_dtimeshm_ctimeshm_indexshm_sgbeginp_slptimexp_usrprixp_slptimeux_entlocux_unusedux_relflgu_rablockFillerYUKuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternswdisablesys_prgrpgetsyswpggetsysdevff_baselineff_rasteric_rasterwf_usecntuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patterncatchwinduw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternff_baselineff_rasteric_rasterwf_usecntunloadfontpw_passwdpw_commentsig_alarmff_baselineff_rasteric_rasterwf_usecntff_baselineff_rasteric_rasterwf_usecntuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternpatltgray_bufendtabsys_errlist_buf2endtablocaltimegetutlinepututlineadf_gtxcdadf_gtwrdadf_gttokwpostwaitwsigcatchwreadmousewsetmousewgetmouseresettermparselinen_targetswtargeton0707070000020060451021050000020000030000010120400372734171600001300000000000TRAILER!!!eprintf1dbsub__1dbadd__1dbdiv__1dbmul__1ltodb__1dbtol__1dbtofl__1fltodb__1ltofl__1fltol__1ultodb__1ultofl__1aulmul1 afdiv1dbtst__1fltst__1plock1"dial1(callout1.undial14drand481:erand481@lrand481Fmrand481Lsrand481Rjrand481Xseed481^lcong481drand1jsrand1pftok1vputenv1|targets111w_target1_fpachk1_start_end \keyicon <=@_etextletextl_edata edata end \werrorexitretstatuscrashexitff_baselineff_rasteric_rasterwf_usecnti_filocksx_ptdaddrx_slptimepg_lastsecpg_filenoshm_segszshm_nattchshm_atimeshm_dtimeshm_ctimeshm_indexshm_sgbeginp_slptimexp_usrprixp_slptimeux_entlocux_unusedux_relflgu_rablockFillerYUKuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternswdisablesys_prgrpgetsyswpggetsysdevff_baselineff_rasteric_rasterwf_usecntuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patterncatchwinduw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternff_baselineff_rasteric_rasterwf_usecntunloadfontpw_passwdpw_commentsig_alarmff_baselineff_rasteric_rasterwf_usecntff_baselineff_rasteric_rasterwf_usecntuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternpatltgray_bufendtabsys_errlist_buf2endtablocaltimegetutlinepututlineadf_gtxcdadf_gtwrdadf_gttokwpostwaitwsigcatchwreadmousewsetmousewgetmouseresettermparselinen_targetswtargeton0707070000020060451021050000020000030000010120400372734171600001300000000000TRAILER!!!eprintf1dbsub__1dbadd__1dbdiv__1dbmul__1ltodb__1dbtol__1dbtofl__1fltodb__1ltofl__1fltol__1ultodb__1ultofl__1aulmul1 afdiv1dbtst__1fltst__1plock1"dial1(callout1.undial14drand481:erand481@lrand481Fmrand481Lsrand481Rjrand481Xseed481^lcong481drand1jsrand1pftok1vputenv1|targets111w_target1_fpachk1_start_end \keyicon <=@_etextl0707070000020045411007740000000000000000010625110402213667600001100000000042MAKEcpiocat Files | cpio -ocBv > ELOCK+IN 0707070000020056211007740000000000000000010624450402213665300001100000000061MAKEflopcat Files | cpio -ocBv > /dev/rfp021 dismount -f 0707070000020056211007740000000000000000010624450402213665300001300000000000TRAILER!!!ub__1dbadd__1dbdiv__1dbmul__1ltodb__1dbtol__1dbtofl__1fltodb__1ltofl__1fltol__1ultodb__1ultofl__1aulmul1 afdiv1dbtst__1fltst__1plock1"dial1(callout1.undial14drand481:erand481@lrand481Fmrand481Lsrand481Rjrand481Xseed481^lcong481drand1jsrand1pftok1vputenv1|targets111w_target1_fpachk1_start_end \keyicon <=@_etextletextl_edata edata end \werrorexitretstatuscrashexitff_baselineff_rasteric_rasterwf_usecnti_filocksx_ptdaddrx_slptimepg_lastsecpg_filenoshm_segszshm_nattchshm_atimeshm_dtimeshm_ctimeshm_indexshm_sgbeginp_slptimexp_usrprixp_slptimeux_entlocux_unusedux_relflgu_rablockFillerYUKuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternswdisablesys_prgrpgetsyswpggetsysdevff_baselineff_rasteric_rasterwf_usecntuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patterncatchwinduw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternff_baselineff_rasteric_rasterwf_usecntunloadfontpw_passwdpw_commentsig_alarmff_baselineff_rasteric_rasterwf_usecntff_baselineff_rasteric_rasterwf_usecntuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patternuw_heightuw_uflagsuw_baselineur_srcbaseur_srcwidthur_dstbaseur_dstwidthur_heightur_patte