OU:INSHD.MAC=IN:[12,10]INSHD.VGN/AU \ -2,2 .IDENT /11.00X/ ; ; JGD02 5/29/77 CHECKS PRIVILEGE MASK WORD TO SEE IF USER ; (NON PRIVILEGED) IS ALLOWED TO A)RUN TASKS OR ; B)RUN TASKS ONLY OWNED BY HIS UIC. ; THE EXCEPTION TO THIS IS THAT ANY TASK BUILT WITH. ; A UIC=[377,377] OR [200,200] MAY BE RUN BY ANY USER. ; HOWEVER, SYSTEM AND REAL TIME TASKS(THOSE ; BUILT WITH TKB) WITH UIC'S OTHER THAN [377,377] ARE ; ONLY RUNNABLE(FOR THOSE WITH BIT 2 IN U.PRV1 SET) ; IF THE TASK DEFAULT UIC MATCHES THEIR UIC ; ; JGD14 ADD ONE TO U.INCT EVERY TIME INS IS USED ; ; JGD15 CORRECT UCB OFFSETS IF M$$CLI DEFINED ; ; AES01 4/86 REMOVE U.PRV1=U.CW3 FOR DL11-ONLY SYSTEM. TTDRV ; NOW USES U.CW3 FOR UPPER CASE EVEN ON DL11S. ; % -/.MCALL/,,/; JGD02/ .MCALL UCBDF$ UCBDF$ -,,/; JGD15/ .IFDF M$$CLI!A$$CLI ; IF HAVE MULTIPLE CLI SUPPORT U.PRV1=U.CLI-2 ; OFFSET U.PRV1 FROM U.CLI .IFF ; IF DO NOT HAVE MULT CLI SUPPORT U.PRV1=U.LUIC-2 ; FOR SYSTEMS WITH MULTIPLEXERS' .ENDC ; .END M$$CLI .IFNDF R$$PRV ; IF DATA BASE NOT ADDED IN SYSCM .ERROR ; UCB DATA BASE CHANGES HAVE NOT BEEN MADE .ENDC ; .END R$$PRV .IF DF M$$MUP ; ONLY IF MULTI USER PROTECTION .IF DF T$$CPU ; IF CPU ACCOUNTING DEFINED .IFDF M$$CLI!A$$CLI ; IF HAVE MULT CLI SUPPORT U.INCT=U.CLI-14 ; THEN OFFSET FROM U.CLI .IFF ; IF NO MULT CLI SUPPORT U.INCT=U.LUIC-14 ; OFFSET INTO UCB FOR COUNTING INS USAGE .ENDC ; .END M$$CLI .ENDC ; .END T$$CPU .ENDC ; .END M$$MUP -/ALUN/,,/; JGD02/ .IFDF R$$PRV PRVMSK: .WORD 0 ; PRIVILEGE ACCESS MASK LUIC: .WORD 0 ; UIC OF FILE OWNER(LOGON UIC) .ENDC -/ERR4:/,,/; JGD02/ .IFDF R$$PRV ERR5: .ASCIZ <15>/INS -- Privilege Violation - RUN command not allowed/ ERR6: .ASCIZ <15>/INS -- Privilege Violation - Task ownership/ .ENDC -/$INSHD:/ -/CALL $READ/,,/; JGD02/ .IFDF R$$PRV CALL PRIVCK ; CHECK RUN PRIVILEGE .ENDC -/RDLBL:/ -/10$:/,,/; JGD02/ ; .IFDF R$$PRV ;+ ; *** - PRIVCK - CHECK U.CW3 IN THE TERMINALS UCB TO SEE WHICH(IF ANY) ; RUN PRIVILEGES ARE ALLOWED. AT PRESENT TWO FLAVORS ; EXIST AND ARE DEFINED BY BITS IN PRVMSK. ; ; DEFINITION OF PRVMSK, THE ACCESS RIGHTS PRIVILEGE MASK ; ; BIT 00 ALL RUN PRIVILEGES ARE DENIED ; ; BIT 01 RUN PRIVILEGES ARE ALLOWED IF AND ONLY IF THE DEFAULT PROTECTION ; UIC DEFINED BY U.LUIC IN THE TERMINAL UIC, IS EQUAL TO THE ; DEFAULT TASK UIC(H.DUIC) WHICH IS SET EITHER BY THE UIC OPTION ; AT TASK BUILD(BIGTKB) OR SET TO THE TERMINAL'S U.LUIC AT TASK- ; BUILD(AS BY FTB) IF THE UIC OPTION OMITTED ; ; BIT 02 IMMEDIATELY ACTIVATE TASK XXXXXX UPON EXIT FROM HELLO. THIS ; ALLOWS FOR USERS TO BE PERMANTLY SLAVED TO CLI'S OTHER THAN MCR ; ; BIT 03 Not used by V4.0 HELLO ; ; BIT 04 DO NOT ABORT ANY TASKS AT LOGOFF ; ; BIT 06 PASS A MESSAGE TO UPDATE THE NUMBER OF DISK BLOCKS AND FILES ; USED BY THE USER AND TO PLACE THE INFORMATION IN THE USER'S ; ACCOUNT BLOCK. ; ; BIT 15 IF SET, THE USER IS SET PRIVILEGED REGARDLESS OF TERMINAL UIC. ; ; THE FUNCTION OF THIS IS SUBROUTINE IS EITHER TO VERIFY THAT THERE IS NO ; PRIVILEGE VIOLATION IF THE TASK IS RUN, OR TO PRINT A WARNING ERROR ; MESSAGE AND EXIT FROM INSTALL ; ; R4 - IS ONLY REGISTER USED AND DOESN'T INTERFERE WITH NON-MODIFIED ; INSHD CODE ;- PRIVCK: MOV $TKTCB,R4 ; GET TCB ADRESS MOV T.UCB(R4),R4 ; GET TERMINAL'S UCB ADDRESS -,,/; JGD14/ .IF DF T$$CPU ; IF CPU ACCOUNTING DEFINED INC U.INCT(R4) ; BUMP COUNTER UP ONE .ENDC ; .ENDC T$$CPU -,,/; JGD02/ MOV U.PRV1(R4),PRVMSK ; GET TERMINALS PRIVILEGE MASK TST PRVMSK ; IF NO MASK BITS ARE SET - BEQ 40$ ; THEN RETURN TO MAINLINE CODE AT ONCE BIT #1,PRVMSK ; SEE IF ANY RUN PRIVILEGES ALLOWED BEQ 20$ ; EQUAL TO ZERO SO SOMETHING IS ALLOWED ; BRANCH AROUND TO 20$ TO SEE WHAT MOV #ERR5,R0 ; BIT #1 IS SET, SO NO RUN COMMANDS ARE ALLOWED JMP INSHDE ; THIS USER. PRINT ERROR MESSAGE AND EXIT 20$: BIT #2,PRVMSK ; ANYTHING MORE TO CHECK FOR BEQ 40$ ; BIT 2 IS NOT SET SO RETURN TO MAINLINE CODE MOV U.LUIC(R4),LUIC ; SAVE PROTECTION UIC WORD MOV #$HDRBF,R4 ; GET HEADER BLOCK ADRESS CMP H.DUIC(R4),LUIC ; ARE THE DEFAULT AND PROTECTION UIC THE SAME BEQ 40$ ; YES, THEN RETURN CMP #177777,H.DUIC(R4) ; WAS THE TASK BUILT TO BE RUNNABLE BY ; EVERYONE [377,377] BEQ 40$ ; YES, THEN RETURN CMP #100200,H.DUIC(R4) ; OR [200,200] BEQ 40$ ; IF YES, THEN RETURN MOV #ERR6,R0 ; NO, THE USER MAY NOT RUN THIS TASK, WARN HIM JMP INSHDE ; PRINT ERROR MESSAGE, AND EXIT 40$: RETURN ; RETURN ; ; ; .ENDC ; .END R$$PRV /