.TITLE SETPRV - EXECUTE A PRIV COMMAND ; EDIT # 0013 25 Feb 1981 14:37:24 DR0:[7,7]SETPRV.MAC;20 ; PREVIOUS EDIT 25 Feb 1981 11:45:32 DR0:[7,7]SETPRV.MAC;17 ; THIS PROGRAM WILL ALLOW A NON-PRIVILEGED USER TO EXECUTE ; A PRIVILEGED MCR COMMAND, AS LONG AS HE KNOWS THE PASSWORD. ; IF THE CURRENT (LOGIN) UIC IS PRIVILEGED, IT WILL JUST ; SET THE TERMINAL TO PRIV. THIS WILL LET A PRIV USER ; TURN OFF HIS PRIV AND TURN IT ON AGAIN ; ; BY RAY VAN TASSLE 29 Jan 1981 .MCALL SPWN$S,EXST$S,EXIT$S,QIOW$S,QIOW$C,STSE$S .MCALL UCBDF$,TCBDF$ UCBDF$ TCBDF$ ; LUN 1 IS TI: .ENABLE LC .ENABLE LSB START: MOV $TKTCB,R1 ; GET MY TCB ADDR MOV T.UCB(R1),R1 ; GET MY TI: UCB CMPB U.LUIC+1(R1),#10; IS MY UIC A PRIV ONE?? BHI 10$ ; NO, GET PASSWORD BIS #U2.PRV,U.CW2(R1) ; YES-SET TERM TO PRIV EXIT$S ; ASK FOR THE PASSWORD 10$: QIOW$C IO.RPR!TF.RNE,1,1,,,, MOV #IN,R0 ; ADDR OF INPUT PASSWORD MOV #PSW,R1 ; ADDR OF REAL PASSWORD MOV #PSWL,R2 ; LENGTH OF IT 1$: CMPB (R0),#140 ; CONVERT TO UPPER CASE BLT 2$ BICB #40,(R0) 2$: CMPB (R0)+,(R1)+ ; COMPARE THEM BNE 100$ SOB R2,1$ ;;;;;;; RIGHT PASSWORD-GET THE MCR COMMAND TO SPAWN QIOW$C IO.RPR,1,1,,IOSB,, CMPB IOSB,#IS.SUC BNE 110$ ; ERROR ON INPUT MOV IOSB+2,R0 ; SET TERM TO PRIV MOV $TKTCB,R1 ; GET MY TCB ADDR BIS #T3.MCR,T.ST3(R1) ; FORCE MCR PROMPT WHEN I EXIT MOV T.UCB(R1),R1 ; GET MY TI: UCB BIS #U2.PRV,U.CW2(R1) ; SET IT TO PRIV SPWN$S #MCR,,,,,#1,,#IOSB,#IN,R0 ; PASS IT TO MCR BCS 110$ STSE$S #1 BCS 110$ BIC #U2.PRV,U.CW2(R1) ; SET IT TO NON-PRIV EXST$S IOSB ; EXIT WITH STATUS OF MCR TASK EXIT$S ; WRONG PASSWORD 100$: QIOW$C IO.WVB,1,1,,,, EXST$S #EX$SEV EXIT$S ;;;;; EXIT ON ERROR, AFTER PASSWORD HAS BEEN VALIDATED 110$: BIC #U2.PRV,U.CW2(R1) ; SET IT TO NON-PRIV EXST$S #EX$SEV EXIT$S IOSB: .BLKW 8. ; IO & SPAWN STATUS BLOCK MCR: .RAD50 "MCR..." PR: .ASCII "What is the magic word?" PRL=.-PR PR1: .ASCII <15>"MCR-" PR1L=.-PR1 IN: .BLKB 80. ; HIS TYPED IN PASSWORD INL=.-IN PSW: .ASCII "PUT YOUR DESIRED PASSWORD STRING HERE" PSWL=.-PSW NGM: .ASCII <15><07>"You lose!!" NGML=.-NGM .END START