1 ! ! L O G I N 2! PROGRAM : LOGIN.BAS 5! VERSION : V06C 6! EDIT : 03 7! EDIT DATE : 30-NOV-77 10 NO EXTEND 11 ! ! C O P Y R I G H T ! Copyright (C) 1974, 1975, 1976, 1977 by ! Digital Equipment Corporation, Maynard, Mass. ! ! ! This software is furnished under a license and may be used and ! copied only in accordance with the terms of such license and ! with the inclusion of the above copyright notice. This ! software or any other copies thereof may not be provided or ! otherwise made available to any other person. No title to and ! ownership of the software is hereby transferred. ! ! The information in this software is subject to change without ! notice and should not be construed as a commitment by Digital ! Equipment Corporation. ! ! DIGITAL assumes no responsibility for the use or reliability ! of its software on equipment that is not supplied by DIGITAL. ! !******************************************************************* 20 ! ! M O D I F I C A T I O N H I S T O R Y ! VER/ED EDIT DATE REASON 21 ! ! 50 ! USER MODIFICATIONS AND OPTIONAL PATCHES ! 51 ! DATE AUTHOR CHANGE 12/08/77 GREGORY LINE 14000 CHANGED SO MESSAGES NOT PRINTED OUT FOR PRIVILEGED LOGIN 8/24/77 GREGORY LINES 14000-14900 CHANGED TO ALWAYS PRINT OUT IMPORTANT MESSAGES 7/15/78 GREGORY LINES 1400-14900 CHANGED TO PRINT OUT ANY MESAGE.TXT FILE IN USER'S ACCOUNT WHEN THEY LOG IN. 08/20/77 GREGORY LINES 110,120,28000-28999,210,15000,32420 ADDED OR CHANGED TO RECORD LOGINS IN A FILE FOR LATER INTERPRETATION ! 100 DIM M%(30),W%(30) 110 GOTO 200 120 A1%=A% ! LINES 110 AND 120 ADDED 8/19/77 ! 200 ON ERROR GOTO 32400 \ I$=SYS(CHR$(0%))+SYS(CHR$(2%)) \ OPEN "KB:LOGIN.CMD" FOR INPUT AS FILE 1% \ A$=CVT$$(SYS(CHR$(7%)),1%+4%+8%+16%+32%+128%+256%) \ A$=CVT$$(RIGHT(A$,FNC%(A$,"HELLO",5%)),8%) \ A$=CVT$$(RIGHT(A$,FNC%(A$,"LOGIN",3%)),8%) \ A%=PEEK(PEEK(PEEK(520%)+8%)+24%) \ GOSUB 16000 IF A% 210 IF A% THEN GOSUB 13000 \ IF I% THEN 5000 ELSE GOSUB 20000 \ IF I% THEN 21000 ELSE I$=SYS(CHR$(6%)+CHR$(5%)) \ GOTO 120 ! START HERE IF "HELLO" OR "LOGIN" AND NOT LOGGED IN 500 T%=0% \ IF LEN(A$) THEN GOSUB 13000 \ IF I% THEN 900 ELSE 2000 510 GOSUB 10000 \ GOTO 1000 900 T%=T%+1% \ IF T%<5% THEN PRINT FNC$;"Invalid entry - try again" ELSE PRINT FNC$;"Access denied" \ GOTO 32650 1000 GOSUB 11000 \ GOSUB 13000 \ IF I% THEN 900 2000 GOSUB 12000 \ GOSUB 15000 \ IF I% THEN 900 ELSE GOSUB 17100 \ GOTO 5010 ! START HERE IF "HELLO" OR "LOGIN" WITHOUT PPN ! AND LOGGED IN 5000 GOSUB 10000 \ N%=0% \ GOSUB 17000 5010 IF M%(4%) THEN GOSUB 27000 \ GOSUB 18000 \ GOTO 7000 5100 IF N0%=0% AND M%(3%)>1% THEN PRINT FNC$;NUM1$(M%(3%)-1%);" other user"; FNS$(M%(3%)-1%);" ";FNA$(M%(3%)-1%); " logged in under this account" 5200 GOSUB 14000 5210 I$=SYS(CHR$(0%))+SYS(CHR$(2%)) \ CLOSE 1%,2% \ PRINT \ PRINT CHR$(10%); FOR I%=1% TO 3% \ GOTO 32650 UNLESS N1% 5220 I$=SYS(CHR$(6%)+CHR$(-21%)) \ CHAIN P0$ ! DO A CHAIN, IF REQUESTED 5290 PRINT FNC$;CVT$$(RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(ERR)),3%),5%); " - ";P0$ \ N1%=0% \ RESUME 5210 ! TRAP IN CASE OF ILLEGAL FILENAME ! START HERE IF "ATTACH" 6000 N%=1% \ GOSUB 22000 \ GOSUB 27000 \ IF LEN(A$) THEN GOSUB 18800 ELSE GOSUB 10000 \ GOSUB 17000 IF A% \ GOSUB 18000 7000 IF I% THEN IF A%=0% THEN 32650 ELSE IF N%=1% THEN 5210 ELSE 5100 7020 A0%=PEEK(PEEK(J0%+8%)+24%) \ IF A%=A0% THEN CHANGE SYS(CHR$(6%)+CHR$(14%)) TO M% \ M%(I%)=M%(I%+2%) FOR I%=5% TO 10% \ GOTO 7100 7030 GOSUB 12000 \ CHANGE SYS(CHR$(6%)+CHR$(-10%)+P$) TO M% \ IF M%(28%) AND 154% THEN 7900 ELSE M%(5%)=A0% \ M%(6%)=SWAP%(A0%) 7100 GOSUB 19000 \ GOTO 7000 7900 PRINT FNC$;"Illegal password"; \ IF A% THEN 7030 ELSE PRINT " - access denied" \ GOTO 32650 10000 PRINT CHR$(-1%); \ I$=SYS(CHR$(6%)+CHR$(9%)+CHR$(0%)) \ CHANGE I$ TO M% \ PRINT FNC$;CVT$$(RIGHT(I$,3%),5%); \ PRINT " Job";M%(1%)/2%; \ IF A% THEN PRINT " [";NUM1$(SWAP%(A%) AND 255%);","; NUM1$(A% AND 255%);"] "; 10010 PRINT " KB";NUM1$(M%(2%)/2%);" ";DATE$(0%);" "; TIME$(0%) \ RETURN 10900 ON ERROR GOTO 0 \ STOP ! ! ENTRY POINT IF "HELLO" OR "LOGIN" 11000 I$=SYS(CHR$(2%)) \ PRINT FNC$;"#"; \ WAIT 30% UNLESS A% \ INPUT LINE #1%,A$ \ I$=SYS(CHR$(3%)) UNLESS N0% \ WAIT 0% \ RETURN 11900 WAIT 0% \ A$="'" \ RESUME 19999 ! ! ACCOUNT GETTER 12000 RETURN IF N0% \ I$=SYS(CHR$(3%)) \ PRINT FNC$;"Password:"; \ GOSUB 12100 IF PEEK(PEEK(PEEK(PEEK(520%)))+8%) AND 196% \ WAIT 30% UNLESS A% \ INPUT LINE #1%,P$ \ I$=SYS(CHR$(2%)) \ WAIT 0% 12010 PRINT FNC$; \ RETURN ! ! PASSWORD GETTER 12100 I$=STRING$(6%,8%) \ IF PEEK(PEEK(PEEK(PEEK(520%)))+8%) AND 68% THEN I$=CHR$(13%)+CHR$(0%)+SPACE$(9%) 12110 PRINT "XXXXXX";I$; \ PRINT "OOOOOO";I$; \ PRINT "%%%%%%";I$; \ RETURN 12900 I$=SYS(CHR$(2%)) \ WAIT 0% \ P$="%" \ RESUME 19999 13000 N%=-1% \ GOSUB 22000 \ I%=INSTR(1%,A$,"/") \ IF I% THEN N%=0% \ A$=LEFT(A$,I%-1%)+","+RIGHT(A$,I%+1%) 13010 I%=-1% \ CHANGE SYS(CHR$(6%)+CHR$(-10%)+"["+A$+"]") TO M% \ N8%=1% IF M%(6%)=1% \ I%=0% IF M%(5%)<=254% AND M%(6%)<=254% AND M%(6%)<>0% AND (M%(28%) AND 154%)=0% ! N8% = SWITCH TO NOT PRINT OUT MESSAGES IF PRIV ACCOUNT ! 13020 N0%,N1%=0% IF I% \ RETURN 13900 RESUME 13020 ! ! ACCOUNT VERIFY 14000 GOTO 19999 IF N8%=1% \ IF N% THEN OPEN '$NOTICE.TXT' FOR INPUT AS FILE 2% \ PRINT FNC$; ! DO NOT PRINT OUT MESSAGES FOR PRIVILEGED ACCOUNTS 14010 INPUT LINE #2%,I$ \ PRINT I$; \ GOTO 14010 14100 CLOSE 2% \ OPEN 'MESAGE.TXT' FOR INPUT AS FILE 2% \ PRINT FNC$; 14110 INPUT LINE #2%, I$ \ PRINT I$; \ GOTO 14110 ! PRINT OUT SPECIAL MESSAGE TO SPECIFIC USER ! 14200 CLOSE 2% \ OPEN '$IMPORT.TXT' FOR INPUT AS FILE 2% \ PRINT FNC$; 14210 INPUT LINE #2%, I$ \ PRINT I$; \ GOTO 14210 ! ALWAYS PRINT OUT IMPORTANT MESSAGES ! 14900 RESUME 19999 ! 15000 I%=-1% \ CHANGE SYS(CHR$(6%)+CHR$(-10%)+"["+A$+"]"+P$) TO M% \ RETURN IF (M%(28%) AND 154%)<>0% \ M%(1%)=6% \ M%(2%)=4% \ CHANGE M% TO I$ \ CHANGE SYS(I$) TO M% \ GO SUB 28000 \ A%=PEEK(PEEK(PEEK(520%)+8%)+24%) \ I%=0% ! GO SUB 28000 ADDED 8/18/77 15010 J%=28% \ J%=28% IF (A% AND -256%)=256% \ I$=SYS(CHR$(6%)+CHR$(-13%)+CHR$(-1%)+ CHR$(-1%)+CHR$(-8%)+ CHR$(-1%)+CHR$( 6%)+ CHR$(-1%)+CHR$( J%)) \ GOSUB 27100 IF W% \ RETURN 15900 RESUME 19999 ! ! L O G I N 16000 W%=A% \ CHANGE SYS(CHR$(6%)+CHR$(-10%)+"????"+ RIGHT(NUM1$(100%+(255% AND PEEK(518%))/2%),2%)+ ".TMP") TO W% \ W%(0%)=30% \ W%(1%)=6% \ W%(2%)=17% \ W%(3%),W%(4%)=0% \ CHANGE W% TO I$ 16010 CHANGE SYS(I$) TO W% \ KILL RAD$(W%(7%)+SWAP%(W%(8%)))+ RAD$(W%(9%)+SWAP%(W%(10%)))+ "."+RAD$(W%(11%)+SWAP%(W%(12%))) \ GOTO 16010 16900 RESUME 19999 ! ! DELETE ALL ????NN.TMP FILES 17000 CHANGE SYS(CHR$(6%)+CHR$(4%)) TO M% 17100 RETURN IF N0% \ IF M%(4%)=0% THEN RETURN ELSE PRINT FNC$;"Job";FNS$(1%+(M%(5%)<>0%));" "; \ PRINT RIGHT(NUM$(M%(I%)),2%); FOR I%=4% WHILE M%(I%)<>0% \ PRINT FNA$(1%+(M%(5%)<>0%)); " detached under this account" \ RETURN 17900 ON ERROR GOTO 0 \ STOP ! ! GET AND/OR PRINT DETACHED JOB(S) 18000 J%=0% \ I%=-1% \ IF N0%=0% THEN WAIT 30% UNLESS A% \ PRINT FNC$;"Job number to attach to"; \ INPUT J% \ WAIT 0% 18010 I%=-3% \ I%=-2% UNLESS J% \ I%=0% IF J%>0% AND J%<=J9% 18020 IF I%=0% THEN J0%=PEEK(M%+(J%*2%)) \ IF J0%=0% THEN I%=-4% ELSE IF J%*2%=(PEEK(PEEK(PEEK(J0%))+2%) AND 255%) AND (PEEK(PEEK(PEEK(J0%))+6%) AND 8192%)<>0% THEN I%=-5% 18030 IF I%=0% THEN RETURN ELSE ON -I% GOTO 18100,18200,18300,18400,18500 ! ! GET JOB NUMBER TO ATTACH TO 18100 PRINT FNC$;"Illegal job number"; \ GOTO 18600 18200 RETURN 18300 PRINT FNC$;"Job number out of range"; \ GOTO 18600 18400 PRINT FNC$;"No job by that number"; \ GOTO 18600 18500 PRINT FNC$;"Job not detached"; 18600 IF A% THEN PRINT " - try again" \ GOTO 18000 18610 PRINT " - access denied" \ RETURN 18800 I%=-1% \ J%=VAL(A$) \ GOTO 18010 18900 WAIT 0% \ RESUME 18030 19000 I%=-1% \ GOSUB 16000 IF A% 19010 M%(1%),M%(2%)=6% \ M%(3%)=J% \ M%(4%)=-1% \ CHANGE M% TO I$ \ PRINT FNC$;"Attaching to job";J% UNLESS N0% \ CLOSE 1%,2% \ I$=SYS(I$) \ STOP ! ! ATTACH TO A JOB 19900 OPEN "KB:LOGIN.CMD" FOR INPUT AS FILE 1% \ PRINT FNC$;"Failure to attach to job";J% \ CHANGE SYS(CHR$(6%)+CHR$(4%)) TO M% IF A% \ RESUME 19999 ! GENERAL RETURN 19999 RETURN 20000 CHANGE SYS(CHR$(6%)+CHR$(14%)) TO M% \ Q=M%(27%)+SWAP%(M%(28%)) \ Q=Q+65536. IF Q<0. \ T=M%(5%)+SWAP%(M%(6%)) \ T=T+65536. IF T<0. \ CHANGE SYS(CHR$(6%)+CHR$(4%)+" "+A$) TO M% 20010 I%=NOT((M%(3%)<>1% OR Q=0. OR Q>=T)) \ RETURN ! CHECK QUOTA FOR CHANGE OF ACCOUNT 21000 PRINT FNC$;"Quota exceeded - please logout" \ GOTO 5210 ! DON'T LET THEM CHANGE ACCOUNT 22000 N0%=INSTR(1%,A$,";") \ RETURN UNLESS N0% \ P$=RIGHT(A$,N0%+1%) \ A$=LEFT(A$,N0%-1%) \ N1%=INSTR(1%,P$,"'") \ RETURN UNLESS N1% ! CHECK FOR PASSWORD IN ORIGINAL STRING 22010 P0$=RIGHT(P$,N1%+1%) \ P$=LEFT(P$,N1%-1%) \ RETURN ! GET PROGRAM TO CHAIN TO IF SPECIFIED 23000 DEF FNS$(Q%) \ FNS$="" \ FNS$="s" IF Q%<>1% \ FNEND ! FNS$ IS FOR PLURALS 24000 DEF FNA$(Q%) \ FNA$="is" \ FNA$="are" IF Q%<>1% \ FNEND ! FNA$ IS FOR PLURAL VERBS 25000 DEF FNC$ \ FNC$="" \ FNC$=CHR$(13%)+CHR$(10%) IF POS(0%) \ FNEND ! FNC$ RESTORES CARRIAGE IF NEEDED 26000 DEF FNC%(Q$,Q0$,Q%) \ FOR Q0%=LEN(Q0$) TO Q% STEP -1% \ GOTO 26010 IF LEFT(Q$,Q0%)=LEFT(Q0$,Q0%) \ NEXT Q0% \ Q0%=-1% 26010 FNC%=Q0%+1% \ FNEND ! FNC% DETERMINES UNIQUENESS OF A COMMAND 27000 CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO W% \ J9%=W%(4%) \ M%=W%(11%)+SWAP%(W%(12%)) \ RETURN ! GET JOBMAX (J9%) AND JOBTBL (M%) 27100 PRINT \ PRINT 'Old Account: ['; NUM1$(SWAP%(W%) AND 255%); ','; NUM1$(W% AND 255%); ']' \ PRINT 'New Account: ['; NUM1$(SWAP%(A%) AND 255%); ','; NUM1$(A% AND 255%); ']' \ W$='Possible Security Breach, Please Notify System Manager' \ PRINT W$ \ RETURN ! ADDED 6/22/78 BY JIM GREGORY TO DETECT POSSIBLE ACCOUNT, PASSWORD STEALING ACTIVITY ! 28000 ! **************** RECORD LOGINS ROUTINE ******************* ! 28100 A2%=PEEK(PEEK(PEEK(520%)+8%)+24%) \ RETURN IF A2%=A1% \ K%=(SWAP%(PEEK(PEEK(PEEK(PEEK(520%)))+2%)) AND 255%) \ D%=PEEK(512%) \ T%=PEEK(514%) ! A2% = PPN RETURN IF LOGGING INTO CURRENTLY LOGGED IN ACCOUNT K% = KEYBOARD # D% = DATE T% = TIME ! 28200 OPEN '[1,7]LOGINS.FIL' AS FILE #3% \ DIM #3%, L%(10000%,3%) \ IF (STATUS AND 1024%)=0% THEN 28300 ELSE CLOSE #3% \ GOTO 28200 ! OPEN UP FILE TO RECORD LOGINS CHECK FOR WRITE PRIVILEGES - CLOSE FILE AND TRY AGAIN IF DON'T HAVE ! 28300 R%=L%(0%,0%) \ L%(0%,0%)=L%(0%,0%)+1% \ L%(R%,0%)=A2% \ L%(R%,1%)=K% \ L%(R%,2%)=D% \ L%(R%,3%)=T% ! GET POINTER IN R% UPDATE POINTER L%(0,0) STORE INFO ! 28400 CLOSE #3% \ RETURN ! 30000 ON ERROR GOTO 32400 \ I$=SYS(CHR$(0%))+SYS(CHR$(2%)) \ OPEN "KB:LOGIN.CMD" FOR INPUT AS FILE 1% \ A$=CVT$$(SYS(CHR$(7%)),1%+4%+8%+16%+32%+128%+256%) \ A$=CVT$$(RIGHT(A$,FNC%(A$,"ATTACH",3%)),8%) \ A%=PEEK(PEEK(PEEK(520%)+8%)+24%) \ GOTO 6000 ! ! ENTRY POINT IF "ATTACH" 32000 ON ERROR GOTO 32400 \ I$=SYS(CHR$(0%))+SYS(CHR$(2%)) \ OPEN "KB:LOGIN.CMD" FOR INPUT AS FILE 1% 32010 WAIT 1% \ INPUT LINE #1%,A$ \ WAIT 0% \ A$=CVT$$(A$,1%+4%+8%+16%+32%+128%+256%) \ A%=0% \ IF LEN(A$) THEN RESTORE ELSE 32010 32020 READ I$,P$,I%,J% \ GOTO 32600 UNLESS J% \ I%=FNC%(A$,I$,I%) \ GOTO 32020 UNLESS I% \ A$=RIGHT(A$,I%) \ ON J% GOTO 500,6000,32300,32100 ! ! ENTRY POINT IF LINE TYPED AND NOT LOGGED IN 32100 I$=SYS(CHR$(8%)+A$) \ CHAIN P$ 32000% \ STOP ! ! DO CHAINING 32200 DATA HELLO, "", 5, 1 32210 DATA LOGIN, "", 3, 1 32220 DATA I, "", 1, 1 32230 DATA ATTACH, "", 3, 2 32240 DATA HELP, "", 4, 3 32250 DATA SET, $TTYSET,3, 4 32260 DATA SYSTAT, $SYSTAT,2, 4 32265 DATA NIP, $NIP, 2, 4 32270 DATA QUEUE, $QUE, 2, 4 32299 DATA "", "", 0, 0 32300 OPEN "$HELP.TXT" FOR INPUT AS FILE 2% \ PRINT FNC$; 32310 INPUT LINE #2%,I$ \ PRINT I$; \ GOTO 32310 32320 CLOSE 2% \ GOTO 32650 ! ! HELPER 32400 IF ERR=27% THEN Q$=CHR$(9%) \ RESUME 32700 32405 IF ERL=14000% OR ERL=14010% THEN RESUME 14100 ELSE IF ERL=14100% OR ERL=14110 THEN RESUME 14200 32410 E%=(ERL/1000%)-9% \ IF E%>0% AND E%<=10% THEN ON E% GOTO 10900,11900,12900,13900,14900,15900,16900,17900, 18900,19900 32420 IF ERL>28000 AND ERL<28999 THEN & 'PROBLEM IN LOGINS NOTIFY COMPUTER CENTER' \ RESUME 19999 ! 32430 IF ERL=5220% THEN RESUME 5290 32440 IF ERL=7030% THEN RESUME 7900 32490 IF ERL=32010% AND ERR=15% THEN Q$=CHR$(5%) \ RESUME 32670 32500 IF ERL=32100% THEN RESUME 32600 32510 IF ERL=32310% AND ERR=11% THEN RESUME 32320 32520 IF ERL=32300% OR ERL=32310% THEN RESUME 32600 32530 IF ERL=32600% OR ERL=32670% THEN RESUME 32700 32540 IF A% THEN RESUME 5210 ELSE RESUME 32600 ! ! E R R O R S 32600 Q$=CHR$(9%) \ PRINT FNC$;"Please say HELLO" 32650 Q$=CHR$(9%) 32670 I$=SYS(CHR$(0%))+SYS(CHR$(2%)) 32700 CLOSE 1%,2% \ I$=SYS(Q$) \ STOP ! ! E X I T S 32767 END