TEST TITLE 'IEAVTEST - IGC119 - TEST AUTHORIZATION ROUTINE' 00300001 * /* START OF SPECIFICATIONS **** 00400002 * 00500002 *01* MODULE-NAME = IEAVTEST 00600002 * 00630002 *01* DESCRIPTIVE-NAME = TESTAUTH 00640002 * 00660002 *01* COPYRIGHT = NONE 00670002 * 00680002 *01* STATUS = OSVS2 REL 2 00690002 * 00700002 *01* FUNCTION = TESTS AN SVC'S CALLER FOR PROPER AUTHORIZATION. ANY 00710002 * COMBINATION OF 3 TYPES OF AUTHORIZATIONS MAY BE REQUESTED BY THE 00720002 * SVC. THESE ARE: 1. PSW STATE; 2. PSW KEY; 3. APF. 00730002 * PASSES AN INDICATION TO THE SVC AS TO WHETHER HIS CALLER WAS 00740002 * AUTHORIZED OR NOT. 00750002 * 00760002 *02* OPERATION = 1. CHECK OR IGNORE STATE CHECK. 00770002 * 2. AUTHORIZED RETURN WITH ZERO 00830002 * 3. CHECK OR IGNORE KEY CHECK. 00900002 * 4. AUTHORIZED RETURN WITH ZERO 00903002 * 5. CHECK OR IGNORE APF CHECK. 00906002 * 6. AUTHORIZED 00909002 * 7. OTHER RETURN WITH 4. 00912002 * 00918002 *01* NOTES = TESTAUTH DOES NO STORES. TESTAUTH IS VERY SENSITIVE TO 00924002 * PERFORMANCE AND MUST BE KEPT TO A BARE MINIMUM. IT CANNOT USE 00930002 * REGISTERS OTHER THAN R14 THROUGH R3. IT RUNS IN ANY KEY. IT IS 00936002 * CALLED BY THE SVC FLIH. ITS MOST POPULAR PATH IS A RETURN CODE 0 00942002 * FROM EITHER THE STATE OR KEY CHECK. 13 AND 15 INSTURCTIONS 00948002 * RESPECTIVELY. 00954002 * 00960002 *02* DEPENDENCIES = NONE 00966002 * 00972002 *03* CHARACTER-CODE-DEPENDENCIES = NONE 00978002 * 00984002 *02* RESTRICTIONS = NONE 00990002 * 00996002 *02* REGISTER-CONVENTIONS = SEE INPUT AND REGISTER EQUATES. 01002002 * 01026002 *02* PATCH-LABEL = NONE 01032002 * 01038002 *01* MODULE-TYPE = TYPE 1 SVC ROUTINE 01044002 * 01056002 *02* PROCESSOR = ASSEMBLER 01062002 * 01068002 *02* MODULE-SIZE = 300 BYTES 01074002 * 01080002 *02* ATTRIBUTES = NUCLEUS, ZERO PROTECT KEY(CAN RUN ANY 01086002 * KEY), REENTERABLE, SUPERVISOR MODE, LOCAL LOCK 01092002 * 01098002 *01* ENTRY-POINT = IGC119 - SVC ENTRY; 01104002 * IEAVTEST - BRANCH ENTRY 01107002 * 01110002 *02* PURPOSE = SEE FUNCTION 01116002 * 01128002 *02* LINKAGE = VIA SVC 119 OR BRANCH; SEE INPUT 01134002 * 01158002 *02* INPUT = 01164002 * IGC119 (SVC ENTRY) 01170002 * 01176002 * PSW - KEY0, SUPERVISOR STATE, DISABLED 01182002 * R0 - AUTH. CODE, IF SUPPLIED; OTHERWISE R0 IS NEGATIVE 01188002 * R1 - FUNCTION CODE 01194002 * R3 - @ CVT 01200002 * R4 - @ TCB 01206002 * R5 - @ RB 01212002 * R6 - ENTRY POINT 01216002 * R14 - RETURN @ 01217002 * R2,R7-R13,R15 - IRRELEVANT 01218002 * 01219002 * IEAVTEST (BRANCH ENTRY) 01220002 * 01221002 * PSW - KEY0, SUPERVISOR STATE, DISABLED 01222002 * R0 - AUTHORIZATION CODE, IF SUPPLIED; OTHERWISE R0 IS NEGATIVE 01223002 * R1 - FUNCTION CODE 01224002 * R4 - TCB @ (IF 0, THE CURRENT TCB @ WILL BE USED) 01228002 * R14 - RETURN @ 01229002 * R15 - ENTRY POINT 01230002 * R2,R3,R5-R13 - IRRELEVANT 01232002 * 01233002 *02* OUTPUT = NONE EXCEPT RETURN CODE - SEE EXIT, NORMAL. 01234002 * 01235002 *01* EXIT-NORMAL = RC 0 - AUTHORIZED; 01236002 * RC 4 - NOT AUTHORIZED 01246002 * 01256002 *02* OUTPUT = 01276002 * 01280002 * IGC119 (SVC ENTRY) 01288002 * 01288502 * PSW - KEY0, SUPERVISOR STATE, DISABLED 01289002 * R0-R13 - UNPREDICTABLE 01289502 * R14 - UNCHANGED 01290002 * R15 - RETURN CODE 01290502 * . 0 - TASK AUTHORIZED 01291002 * . 4 - TASK NOT AUTHORIZED 01292002 * 01293002 * IEAVTEST (BRANCH ENTRY) 01294002 * 01296002 * PSW - KEY0, SUPERVISOR STATE, DISABLED 01296502 * R0-R14 - UNCHANGED 01297002 * R15 - RETURN CODE 01297502 * . 0 - TASK AUTHORIZED 01298002 * . 4 - TASK NOT AUTHORIZED 01298502 * 01299002 * 01300002 *01* EXIT-ERROR = ABEND CODE 177 - INVALID PARM LIST 01328002 * 01332002 *02* CONDITIONS = ONE OF FOLLOWING ERROR CONDITIONS OCCURED 01336002 * - RBLEVEL=2 SPECIFIED BUT TOP RB IS LAST RB 01337002 * - FUNCTION CODE GT OR EQ TO 256 01338002 * OR NOT IN TABLE RANGE 01339002 * - AUTHORIZATION CODE GT OR EQ TO 256 01340002 * OR NOT IN TABLE RANGE 01341002 * 01344002 *02* OUTPUT = 01348002 * 01350002 *02* RETURN-CODES = IF AUTHORIZED, THE RETURN CODE IS ZERO (0) IN 01352002 * REG 15, IF NOT THE RETURN CODE IS 4 01380002 * 01384002 *01* EXTERNAL-REFERENCES = ROUTINES - ABEND; 01388002 * DATA AREAS - IEAVAUTH - APF BIT MATRIX 01392002 * 01396002 *02* ROUTINES = ABEND 01400002 * 01412002 *02* DATA-AREAS = APF BIT MATRIX - IEAVAUTH 01416002 * USED TO TEST FOR SPECIFIC AUTHORIZATION 01420002 * POINTER LOCATED AT SYMBOLIC LOCATIONIEAVAUTH 01424002 * USED. FOR DATA SETS, INDICATE WHETHER CREATED/DELETED, 01428002 * OPENED/CLOSED, POSITIONED/READ/UPDATED/ADDED TO.; 01432002 * 01436002 *02* CONTROL-BLOCKS = TCB,JSCB,PSA,RB. 01440002 * 01444002 *01* TABLES = NONE 01448002 * 01452002 *01* MACROS = ABEND 01456002 * 01460002 *02* SERIALIZATION = RES: COMMENTS, 01464002 * COMMENTS: NAMES OF LOCKS AND ENQ RESOURCES OBTAINED BY 01468002 * THIS MODULE; 01472002 * 01476002 *01* CHANGE-ACTIVITY = Y02752 FOR OSVS2 RELEASE 2 01480002 * 01484002 *01* MESSAGES = NONE 01488002 * 01492002 *01* ABEND-CODES = 177 FOR INVALID PARM LIST. 01500002 * 01540002 **** END OF SPECIFICATIONS ***/ 01580002 * 52200001 EJECT 52500001 IEAVTST1 CSECT 52800002 DC CL8'IEAVTEST' MODULE NAME 53100002 IGC119 CSECT 53400002 ENTRY IEAVTEST BRANCH ENTRY ADDRESS 53700002 BALR R15,ZERO SETUP BASE ADDRESS. 54000002 IEAVTEST EQU * BRANCH E.P. 54300002 USING IEAVTEST,R15 BASE REGISTER FOR TESTAUTH 54600002 USING FLC,0 LOW CORE ADDRESSABILITY 54900002 SLA R1,ELEVEN SHIFT OUT THE RESERVED BITS AND TEST 55200002 BC OVERFLOW+NEGATIVE,INVALID BRANCH IF ANY RESERVED BIT=1 55500002 ALR R1,R1 SHIFT OUT THE POSITIVE SIGN BIT 55800002 L R3,PSATOLD GET THE CURRENT TCB ADDRESS 56100002 L R2,TCBRBP-TCB(R3) GET THE 1ST RB OFF CURRENT TCB 56400002 ALR R1,R1 TEST THE FIRST FLAG BIT(RBLEVEL) 56700002 BC NOCARRY,SKIP1 BIT=0(RBLEVEL=1 OR APF CHECK ONLY) 57000002 TM RBSTAB2-RBSECT(R2),RBTCBNXT Q. ONE R.B. 57300002 BO INVALID A. YES. MUST HAVE TWO. 57600002 L R2,RBLINK-RBSECT(R2) GET THE 2ND RB OFF THE CURRENT TCB 57900002 SKIP1 EQU * R2 CONTAINS CORRECT RB LEVEL 58200002 ALR R1,R1 TEST THE 'STATE' FLAG 58500002 BC NOCARRY,SKIP2 BIT=0(STATE=NO) 58800002 TM RBOPSW+XMWP-RBSECT(R2),PBIT Q.PSW IN SUPERVISOR STATE 59100002 BZ RET0 A. YES. RETURN TO CALLER WITH R.C. OF 0 59400002 SKIP2 EQU * 'KEY' LOGIC IS NEXT 59700002 ALR R1,R1 TEST THE 'KEY' FLAG 60000002 BC NOCARRY,SKIP3 BIT=0(KEY=NO) 60300002 CLI RBOPSWKY-RBSECT(R2),KEY8 Q.IS KEY LESS THAN 8 60600002 BL RET0 A. YES. RETURN TO CALLER WITH R.C. OF 0. 60900002 SKIP3 EQU * 'APF' LOGIC IS NEXT 61200002 ALR R1,R1 TEST THE 'APF' FLAG 61500002 BC CARRY,RET4 BIT=1(APF NOT REQUESTED) 61800002 L R2,TCBJSTCB-TCB(R3) GET THE JOB STEP TCB. 62100002 L R2,TCBJSCB-TCB(R2) GET THE JOB STEP CONTROL BLOCK 62400002 SRL R1,SIXTEEN RIGHT JUSIFY THE FCTN CODE. 62700002 CL R1,F256 Q. FCTN GT 255 63000002 BNL INVALID A. YES. ABEND CALLER. 63300002 LTR R0,R0 Q. WAS 'AUTH' SPECIFIED. 63600002 BNL AUTHCK A. YES. CHECK VALUE 63900002 LA R0,AUTHEQ1 SETUP AUTH=1 64200002 LTR R2,R2 Q. IS THERE A JSCB 64500002 BZ RET0 A. NO. HAS TO BE AUTHORIZED. 64800002 TM JSCBOPTS-IEZJSCB(R2),JSCBAUTH Q. IS JOB STEP AUTHORIZED 65100002 BO AUTHCK A. YES. 65400002 LA R0,AUTHEQ0 SETUP AUTH=0 65700002 AUTHCK EQU * CHECK FOR VALID CODE. 66000002 CL R0,F256 Q. AUTH GT 255 66300002 BNL INVALID A. YES. ABEND CALLER 66600002 LR R2,R1 SAVE THE FCTN CODE 66900002 LR R1,R0 SAVE THE AUTH CODE 67200002 L R3,VAUTH GET THE AUTHORIZATION MATRIX. 67500002 * NOTE: THE IBM SUPPLIED MATRIX IS DC X'0202B0' 67800002 EX R1,CLI0 Q. AUTH CODE WITHIN MATRIX RANGE 68100002 BNH INVALID A. NO. ABEND. INVALID PARMS. 68400002 EX R2,CLI1 Q. FCTN CODE WITHIN MATRIX RANGE 68700002 BNH INVALID A. NO. ABEND. INVALID PARMS. 69000002 SR R0,R0 ZERO FOR INSERT 69300002 IC R0,MTRXAUTH-MTRX(R3) GET THE AUTH RANGE 69600002 MR R0R1,R0 AUTH VALUE X AUTH RANGE = R1 69900002 AR R1,R2 R1 + FCTN CODE = R1 = BIT DISPLACEMENT 70200002 LR R2,R1 SAVE THE RESULT 70500002 SRL R1,THREE BIT DISPLACEMENT / 8 = BYTE DISPLACEMENT 70800002 ALR R1,R3 BYTE DISPLACEMENT + MATRIX ADDRESS 71100002 LA R1,TWO(R1) + TWO = TARGET BYTE. 71400002 N R2,HIGH29 RESULT IS BIT DISPLACEMENT IN BYTE 71700002 IC R2,TABLE(R2) GET THE PROPER MASK FOR TM INSTRUCTION 72000002 EX R2,TM TEST PROPER BIT WITHIN THE PROPER BYTE 72300002 BO RET0 BIT=1 THE CALLER IS AUTHORIZED. 72600002 RET4 EQU * CALLER IS NOT AUTHORIZED. 72900002 LA R15,RC4 RETURN CODE OF 4 73200002 BR R14 RETURN 73500002 RET0 EQU * CALLER IS AUTHORIZED. 73800002 LA R15,RC0 RETURN CODE OF 0 74100002 BR R14 RETURN 74400002 INVALID EQU * INVALID PARAMETERS FROM CALLER 74700002 L R1,CODE177 ABEND CODE OF 177 75000002 ABEND (1),DUMP,,SYSTEM ABEND CALLER 75300002 EJECT 75600002 R0 EQU 0 REGISTER 0 75900002 R1 EQU 1 REGISTER 1 76200002 R2 EQU 2 REGISTER 2 76500002 R3 EQU 3 REGISTER 3 76800002 R14 EQU 14 REGISTER 14 77100002 R15 EQU 15 REGISTER 15 77400002 R0R1 EQU 0 REGISTERS 0 AND 1 FOR MULTIPLY INSTR 77700002 SPACE 3 78000002 NOCARRY EQU X'C' NOCARRY CONDITION CODE 78300002 CARRY EQU X'3' CARRY CONDITION CODE 78600002 OVERFLOW EQU X'1' OVERFLOW CONDITION CODE 78900002 NEGATIVE EQU X'4' NEGITIVE CONDITION CODE 79200002 SPACE 3 79500002 RC0 EQU 0 RETURN CODE OF 0 79800002 RC4 EQU 4 RETURN CODE OF 4 80100002 ZERO EQU 0 0 80400002 ONE EQU 1 1 80700002 TWO EQU 2 2 81000002 THREE EQU 3 3 81300002 FOUR EQU 4 4 81600002 ELEVEN EQU 11 11 81900002 SIXTEEN EQU 16 16 82200002 SPACE 3 82500002 AUTHEQ0 EQU 0 AUTH=0 82800002 AUTHEQ1 EQU 1 AUTH=1 83100002 SPACE 3 83400002 TABLE DC X'8040201008040201' BIT MASK TABLE 83700002 F256 DC F'256' MAX MATRIX DIMENSION 84000002 CODE177 DC X'00000177' ABEND CODE 177 84300002 HIGH29 DC X'00000007' MASK TO ZERO HIGH 29 BITS IN A REG 84600002 VAUTH DC V(IEAVAUTH) ADDRESS OF APF MATRIX 84900002 CLI0 CLI MTRXAUTH-MTRX(R3),ZERO USED WITH EX INTRUCTION 85200002 CLI1 CLI MTRXFCTN-MTRX(R3),ZERO USED WITH EX INSTRUCTION 85500002 TM TM ZERO(R1),ZERO USED WITH EX INSTRUCTION 85800002 EJECT 86100002 MTRX DSECT 86400002 MTRXAUTH DS X 'AUTH' RANGE 86700002 MTRXFCTN DS X 'FCTN' RANGE 87000002 MTRXSTRG DS B VARIABLE LENGTH BIT STRING 87300002 EJECT 87600002 IHARB 87900002 XMWP EQU 1 XMWP IS IN BYTE 1 OF RBOPSW 88200002 RBOPSWKY EQU RBOPSW+1 KEY IS IN BYTE 1 OF RBOPSW 88500002 PBIT EQU B'0001' PBIT IS LAST BIT IN XMWP 88800002 KEY8 EQU X'80' KEY CHECK AGAINST RBOPSW'S KEY 89100002 EJECT 89400002 IKJTCB 89700002 EJECT 90000002 IEZJSCB 90300002 EJECT 90600002 IHAPSA 90900002 END IGC119 91800002