.TITLE FILPRO .IDENT /1.02A/ ; ; MODIFICATIONS: ; 1.02A -- DO FILE ACCESS CHECK ; $$$=. .=$$$+100 JMP PAT1 ; DO FILE ACCESS CHECK .=$$$+114 ERR: ; ERROR RETURN .=$$$+134 PNT: ; SUCCESS RETURN .PSECT PAT1 .MCALL QIOW$,DIR$,OFID$R,CLOSE$ RATT: QIOW$ IO.RAT,GETLUN,GETEF,,,,<,RATTB> ; READ FILE ATTRIBUTES RATTB: .BYTE -1,4 ; READ OWNER UIC AND FILE PROTECTION WORDS .WORD OWN .WORD 0 ; END OF ATTRIBUTE LIST OWN: .WORD 0 ; OWNER UIC (.BYTE MEMBER,GROUP) FPRO: .WORD 0 ; FILE PROTECTION WORD PAT1: OFID$R R0 ; OPEN FILE FOR READ BCC 5$ ; ALL OK JMP ERR ; OPEN ERROR 5$: DIR$ #RATT ; READ FILE ATTRIBUTES COM FPRO ; 1'S NOW MEAN ACCESS ALLOWED CMPB $JUIC+1,#10 ; SYSTEM UIC BLOS 10$ ; YES BIC #17,FPRO ; NO - TURN OFF SYSTEM BITS CMP $JUIC,OWN ; FILE OWNER BEQ 10$ ; YES BIC #360,FPRO ; NO - TURN OFF OWNER BITS CMPB $JUIC+1,OWN+1 ; SAME GROUP? BEQ 10$ ; YES BIC #7400,FPRO ; NO - TURN OFF GROUP BITS 10$: MOV R0,-(SP) ; NEED A REG NOW MOV FPRO,R0 ; REMAINING ACCESS BITS .REPT 3 .REPT 4 ; SHIFT A PROTECTION GROUP ROR R0 .ENDR BIS R0,FPRO ; SET APPLICABLE BITS .ENDR MOV (SP)+,R0 ; RESTORE REG BIC #^C17,FPRO ; LEAVE ONLY FOUR LOW ORDER BITS MOV FPRO,$FPRO ; SAVE ACCESS RIGHTS BEQ 15$ JMP PNT ; ANY BIT SET ALLOWS READ ACCESS 15$: MOV #E$R0+<400*S$V2>,ERROR MOV #IE.PRI,ERROR+2 ; FLAG PRIVILEGE VIOLATION CLOSE$ JMP FIRST .END