.TITLE CHG .MCALL FDBDF$,FSRSZ$,FDAT$A,FDRC$A,FDOP$A,FDBF$A .MCALL OPEN$A,PUT$,CLOSE$ .MCALL EXIT$S,TINIT,PSTR .MCALL FINIT$ ; ;+ ; CHG - A PROGRAM WHICH ENABLES THE SETTING AND ; UNSETTING OF THE PRIVALEGE STATUS OF THE ; ISSUING TERMINAL. ONLY THE GROUPS SPECIFIED ; IN THE USER TABLE ARE ALLOWED TO MAKE THEM- ; SELVES PRIVALEGED, AND ANY UNAUTHORIZED UIC ; IS ENTERED INTO THE FILE SPECIFIED. ANYONE ; CAN UN-PRIV THEMSELVES. ; ; AUTHOR: M. NEILSON ; WRITTEN: JULY 1977 ; ; REVISED: SEPT 06, 1977 (W. KORENDYK) ; ;- ; ; ; THE FDB OF THE FILE TO CONTAIN THE UICS ; OF OFFENDING PEOPLE. ; FDB: FDBDF$ FDAT$A R.VAR,FD.CR ;RECORD IO (IS EASIER) FDRC$A FD.PLC,BUF,9. ;L(BUF) =<9. FDOP$A 1,DSDS,,FO.APD FDBF$A ; ; THE DATA SET DESCR. OF THE FILE. ; DSDS: .WORD LDEV,DEV .WORD LUIC,UIC .WORD LFILE,FILE ; ; DEV: .ASCII /DM1:/ LDEV =.-DEV ; UIC: .ASCII /[10,3]/ LUIC =.-UIC ; FILE: .ASCII /CHGUSE.LST/ LFILE =.-FILE ; ; ; THE FOLLOWING IS THE TABLE OF UIC ; GROUP NUMBERS WHICH WILL BE ALLOWED TO ; MAKE THEMSELVES PRIVALEGED. ; TAB: .BYTE 001 .BYTE 100 .BYTE 101 .BYTE 102 .BYTE 111 .BYTE 000 ;TABLE'S END .EVEN ; ; ; AND THEN WHATEVER ELSE IS NEEDED. ; BUF: .BLKB 9. ;BUFFER FOR CONVERTED UIC .EVEN ; ERRPFX::PSTR ^*/CHG -- /* RETURN ; ; ; THE ACTUAL CODE BEGINS ; START: TINIT 5,23 ;TTYOUT INITIALIZE MOV $TKTCB,R0 ;GET TCB ADDRESS MOV T.UCB(R0),R5 ;GET UCB ADDRESS BIT #U2.PRV,U.CW2(R5) ;ARE WE PRIV? BEQ UNPRIV ;NO, CHECK IT OUT BIC #U2.PRV,U.CW2(R5) ;YES, MAKE UN-PRIV. BR DIE ;AND DIE. ; UNPRIV: MOV U.LUIC(R5),R1 ;GET THE UIC. SWAB R1 ;LOOK AT GROUP FIRST. MOV #TAB,R2 ;SET FOR CHECK. 1$: CMPB (R2)+,R1 ;HAS THIS GUY GOT PULL BEQ SET ;YES, MAKE HIM PRIV. TSTB @R2 ;IF JOE AIN'T IN THE TABLE, BNE 1$ ; WE FALL THROUGH... ; ; WHICH MEANS WE NEED TO WRITE THIS GUY'S ; UIC TO THE FILE. ; MOV #BUF,R0 ;WHERE TO PUT THINGS. MOVB #'[,(R0)+ ;START WITH BRACKET CLR R2 ;(SUPPRESS 0'S ON CONVERT) CALL .BOMGB MOVB #',,(R0)+ ;DELIMIT UIC SWAB R1 ;LOOK AT MEMBER. CALL .BOMGB MOVB #'],(R0)+ ;FINAL BRACKET SUB #BUF,R0 ;GET LENGTH MOV R0,R2 ;AND SAVE FROM FCS ; OPEN$A #FDB,,,,,,IOERR PUT$ R0,#BUF,R2,IOERR CLOSE$ R0,IOERR BR DIE ;DONE ; SET: BIS #U2.PRV,U.CW2(R5) ;MAKE HIM PRIV. DIE:: EXIT$S FSRSZ$ 1 .END START