10 REM: PASWRD: Secondary password maintenance program 15 REM: 17 REM: Written by David Shayer SMHS 20 REM: Overhauled by Brad Zaller SMHS 9/81 30 DIM A$[100],B$[100],F$[100],P$[100],I$[100] 40 FILES *,* 41 REM: The BREAK key must be disabled due to the sensitivity of 45 REM: the security system. An aborted secondary could be fatal. 50 REM b=brk(0) 55 O=0 60 REM: In the next line, A$ must be set to the account in 70 REM: which the LOG file resides. 80 A$="A101" 90 SYSTEM F$,"TIM" 110 IF POS("A0A1X0X1",F$[1,2]) <> 0 THEN 140 120 CHAIN B5,"$HELLO",350 130 STOP 140 F$="LOG." 150 F$[LEN(F$)+1]=A$ 160 ASSIGN F$,1,R,"HAN" 180 IF R=0 THEN 220 190 ASSIGN *,1 200 PRINT '7"Flag file assign error - Cannot continue."'7 205 SYSTEM X,"MES-"'7":::ASSIGN ERROR:::LOG FILE:::PASWRD:::"'7 210 STOP 220 PRINT LIN(1);"*** Secondary Password ***" 240 REM 520 PRINT LIN(1);"Command: "; 530 LINPUT A$ 540 IF LEN(A$)=0 THEN 520 545 A$=UPS$(A$) 547 IF A$[1,3]="//R" THEN 2920 550 IF A$[1,3]#"//S" THEN 570 560 STOP 570 IF A$[1,3]#"//H" THEN 600 571 PRINT LIN(1);TAB(13);"Valid password commands:";LIN(1) 572 PRINT " (A)dd - Adds a secondary password into the system" 573 PRINT " (M)odify - Modifies a secondary password" 574 PRINT " (D)ump - Dumps all secondary passwords" 575 PRINT " (E)cho - Changes to half or full duplex" 576 PRINT " (L)ist - Lists a single password by port/account" 577 PRINT " (K)ill - Removes a secondary password from the system" 578 PRINT LIN(1);" (//R)epgen - Transfers control to the REPGEN program" 579 PRINT " (//S)top - Exits this program" 580 ASSIGN "INFOP.A101",2,R,"CONTROL" 581 IF R THEN 520 582 IF END #2 THEN 520 583 READ #2;B$ 584 PRINT LIN(1);"Continue? "; 585 LINPUT A$ 586 A$=UPS$(A$) 587 IF A$[1,1]#"Y" THEN 520 588 PRINT LIN(1);"Secondary password information file updated: ";B$ 589 READ #2;I$ 590 PRINT I$ 591 GOTO 589 600 P=POS("AMKLDE",A$[1,1]) 610 GOTO P OF 640,1110,1400,1630,1760,2980 620 PRINT "Invalid command" 630 GOTO 520 640 REM ***** Add a secondary password ***** 650 PRINT "Account: "; 660 LINPUT A$ 670 IF LEN(A$)=0 THEN 520 680 GOSUB 2470 690 IF R=1 THEN 650 700 PRINT "Password: "; 710 IF O=0 THEN 730 720 SYSTEM K,"ECH-OFF" 730 LINPUT P$ 740 IF O=0 THEN 770 750 PRINT 760 SYSTEM K,"ECH-ON" 770 IF LEN(P$)=0 THEN 520 780 GOSUB 2190 790 IF R=1 THEN 700 800 GOSUB 1930 810 IF END #1 THEN 1080 820 GOTO R OF 860,1030 830 UNLOCK #1 840 PRINT A$;" already has a secondary password - Use the (C)hange option." 850 GOTO 520 860 FOR X=LEN(A$)+1 TO 25 870 A$[X,X]=" " 880 NEXT X 890 A$[8,7+LEN(P$)]=P$ 900 READ #1,100;E 910 FOR X=1 TO E 920 READ #1;F$ 930 IF F$[1,1]#" " THEN 980 940 F$=A$ 950 READ #1,100 960 ADVANCE #1;X,R 970 GOTO 1040 980 NEXT X 990 PRINT #1;A$ 1000 READ #1,100 1010 UPDATE #1;E+1 1020 GOTO 1050 1030 F$[8,7+LEN(P$)]=P$ 1040 UPDATE #1;F$ 1050 UNLOCK #1 1060 PRINT A$[1,6];": Password ready" 1070 GOTO 520 1080 UNLOCK #1 1090 PRINT '7"No room in flag file - Password NOT entered."'7 1100 GOTO 520 1110 REM ***** Change a Password ***** 1120 PRINT "Account: "; 1130 LINPUT A$ 1140 IF LEN(A$)=0 THEN 520 1150 GOSUB 2470 1160 IF R=1 THEN 1120 1170 PRINT "New Password: "; 1180 IF O=0 THEN 1200 1190 SYSTEM K,"ECH-OFF" 1200 LINPUT P$ 1210 IF O=0 THEN 1240 1220 PRINT 1230 SYSTEM K,"ECH-ON" 1240 IF LEN(P$)=0 THEN 520 1250 GOSUB 2190 1260 IF R=1 THEN 1170 1270 GOSUB 1930 1280 IF R=0 THEN 1320 1290 UNLOCK #1 1300 PRINT A$;" doesn't have a secondary - Use the (A)dd option." 1310 GOTO 520 1320 F$[8,7+LEN(P$)]=P$ 1330 FOR X=8+LEN(P$) TO 14 1340 F$[X,X]=" " 1350 NEXT X 1360 UPDATE #1;F$ 1370 UNLOCK #1 1380 PRINT A$;": Password changed" 1390 GOTO 520 1400 REM ***** Remove Password from System ***** 1410 PRINT LIN(1);"Account: "; 1420 LINPUT A$ 1430 IF LEN(A$)=0 THEN 520 1435 A$=UPS$(A$) 1440 GOSUB 2470 1450 IF R=1 THEN 1410 1460 GOSUB 1930 1470 IF R=0 THEN 1510 1480 UNLOCK #1 1490 PRINT A$;" doesn't have a secondary password." 1500 GOTO 520 1510 IF NUM(F$[7,7])#32 OR NUM(F$[15,15])#32 THEN 1560 1520 FOR X=1 TO 25 1530 F$[X,X]=" " 1540 NEXT X 1550 GOTO 1590 1560 FOR X=8 TO 14 1570 F$[X,X]=" " 1580 NEXT X 1590 UPDATE #1;F$ 1600 UNLOCK #1 1610 PRINT A$;": Password Removed" 1620 GOTO 520 1630 REM ***** List a Password ***** 1640 PRINT LIN(1);"Account: "; 1650 LINPUT A$ 1660 IF LEN(A$)=0 THEN 520 1670 GOSUB 2470 1680 IF R=1 THEN 1640 1690 GOSUB 1930 1700 UNLOCK #1 1710 IF R=0 THEN 1740 1720 PRINT A$;": doesn't have a secondary password." 1730 GOTO 520 1740 PRINT A$;": ";F$[8,14] 1750 GOTO 520 1760 REM ***** Dump All Passwords ***** 1770 PRINT LIN(2);"Account","Password" 1780 LOCK #1 1790 READ #1,100;E 1800 UNLOCK #1 1810 FOR X=1 TO E 1820 LOCK #1 1830 READ #1,100 1840 ADVANCE #1;X,R 1850 READ #1;F$ 1860 UNLOCK #1 1870 IF F$[1,1]=" " THEN 1900 1880 IF F$[8,8]=" " THEN 1900 1890 PRINT F$[1,6],F$[8,14] 1900 NEXT X 1910 PRINT LIN(2) 1920 GOTO 520 1930 REM ***** Look for account in file ***** 1940 REM: A$ = Account to be checked 1950 REM: R = Return variable; 0=Good account, 1=Bad account, 1960 REM: 2=Account in file, but without secondary 1970 REM: 1980 REM: File pointer will be positioned just before entry if 1990 REM: good; If no good, at end of file. 1995 A$=UPS$(A$) 2000 LOCK #1 2010 IF END #1 THEN 2160 2020 READ #1,100;E 2030 FOR X=1 TO E 2040 READ #1;F$ 2050 IF A$=F$[1,POS(F$," ")-1 MIN 6] THEN 2090 2060 NEXT X 2070 R=1 2080 RETURN 2090 R=0 2100 READ #1,100 2110 ADVANCE #1;X,R 2120 IF F$[8,8]=" " THEN 2140 2130 RETURN 2140 R=2 2150 RETURN 2160 UNLOCK #1 2170 PRINT '7"Data format error (Flag fil) - Cannot continue."'7 2180 STOP 2190 REM ***** Check for valid password ***** 2200 REM: P$ = Password 2210 REM: R = Return variable; 0=good password, 1=bad password 2220 R=0 2225 P$=UPS$(P$) 2230 IF P$[1,3]#"//S" THEN 2250 2240 STOP 2250 IF P$[1,3]#"//H" THEN 2290 2260 PRINT "Enter the secondary password for ";A$;"."; 2280 GOTO 2440 2290 IF LEN(P$)>7 OR LEN(P$)<1 THEN 2390 2300 FOR X=1 TO LEN(P$) 2310 IF NUM(P$[X,X])<32 THEN 2430 2330 IF NUM(P$[X,X])>47 AND NUM(P$[X,X])<58 THEN 2370 2340 IF NUM(P$[X,X])>64 AND NUM(P$[X,X])<91 THEN 2370 2350 PRINT "Special characters not allowed" 2360 GOTO 2440 2370 NEXT X 2380 RETURN 2390 PRINT "7 characters maximum" 2400 GOTO 2440 2430 PRINT "Control characters not allowed" 2440 R=1 2450 PRINT 2460 RETURN 2470 REM ***** Check port/account validity ***** 2480 REM: A$ = Account to be checked 2490 REM: R = Return variable; 0=good account, 1=bad account 2500 R=0 2510 A$=UPS$(A$) 2520 IF A$[1,3]#"//S" THEN 2540 2530 STOP 2540 IF A$[1,3]#"//H" THEN 2580 2550 PRINT "Enter the port/account combination that you want to" 2560 PRINT "put the secondary password on." 2565 PRINT "Example: 09K123 14 Q100 ALL MASTER" 2570 GOTO 2900 2580 IF LEN(A$)<1 OR LEN(A$)>6 THEN 2870 2590 IF A$="ALL" THEN 2670 2600 IF A$="MASTER" THEN 2670 2610 IF NUM(A$)>47 AND NUM(A$)<58 THEN 2680 2620 IF NUM(A$)<65 OR NUM(A$)>90 THEN 2890 2630 IF LEN(A$)>4 THEN 2890 2640 FOR X=2 TO LEN(A$) 2650 IF NUM(A$[X,X])<48 OR NUM(A$[X,X])>57 THEN 2890 2660 NEXT X 2670 RETURN 2680 IF LEN(A$)=1 THEN 2830 2690 IF NUM(A$[2,2])<48 OR NUM(A$[2,2])>57 THEN 2770 2700 IF LEN(A$)=2 THEN 2760 2710 IF NUM(A$[3,3])<65 OR NUM(A$[3,3])>90 THEN 2890 2720 IF LEN(A$)=3 THEN 2760 2730 FOR X=4 TO LEN(A$) 2740 IF NUM(A$[X,X])<48 OR NUM(A$[X,X])>57 THEN 2890 2750 NEXT X 2760 RETURN 2770 IF NUM(A$[2,2])<65 OR NUM(A$[2,2])>90 THEN 2890 2780 IF LEN(A$)=2 THEN 2830 2790 IF LEN(A$)>5 THEN 2890 2800 FOR X=3 TO LEN(A$) 2810 IF NUM(A$[X,X])<48 OR NUM(A$[X,X])>57 THEN 2890 2820 NEXT X 2830 F$=A$ 2840 A$="0" 2850 A$[2]=F$ 2860 RETURN 2870 PRINT A$;": Illegal account (6 characters maximum)" 2880 GOTO 2900 2890 PRINT A$;": Illegal account" 2900 R=1 2910 RETURN 2920 REM ***** Chain to $REPGEN ***** 2930 PRINT LIN(1);"*** Repgen ***" 2940 CHAIN "$REPGEN" 2950 PRINT '7"Program $REPGEN not found." 2960 SYSTEM X,"mes-"'7":::CHAIN ERROR:::PASWRD TO $REPGEN:::"'7 2970 GOTO 520 2980 REM ***** Flip Duplex during "Password: " prompts ***** 2990 IF O=0 THEN 3010 3000 O=0 3005 PRINT "Echo: ON" 3007 GOTO 520 3010 O=1 3020 PRINT "Echo: OFF" 3030 GOTO 520 9999 END