MainframeSupports
tip uge 6/2013:
Hvis du er den nysgerrige type, så er denne uges tip lige noget for dig. Måske kender du
allerede kommandoen TSO LD DA(<dataset>) GEN, som fortæller dig, hvilken adgang du
har til <dataset>. Fordelen ved denne kommando er, at den pænt spørger RACF, hvad din
adgang er i modsætning til, hvis du forsøger at åbne datasettet, hvor du i stedet får en
abend. Udover en abend bliver det også logget, at du har forsøgt at få adgang uautoriseret
til <dataset>. Alt dette undgår du med TSO LD DA(<dataset>) GEN.
Det er faktisk også muligt at lave et program, der udfører samme funktion som LD
kommandoen. Desværre er programmeringsinterfacet til RACF kun muligt at bruge fra assembler,
så derfor har jeg strikket et assembler program sammen, der udfører en LD kommando. Bemærk,
at programmet ikke er reentrant. Du kan bruge det fra din TSO session eller fra et batch
program, men ellers ikke.
* NAME : AUTHLVL
* FUNCTION : THIS SUBROUTINE FINDS YOUR RACF-ACCESS TO A DATASET.
* CALL FMT : CALL AUTHLVL(DATASET,ACCESS)
* REMARKS : PROGRAM IS NOT REENTRANT.
* PARAMETERS: THE TWO PARAMETERS PASSED TO THIS SUBROUTINE ARE DEFINED
* AS FOLLOWS:
* DATASET DS CL44 THE DATASETNAME SUPPLIED BY THE CALLER.
* BY THE CALLER.
* ACCESS DS CL8 THE ACCESS LEVEL RETURNED TO THE CALLER.
* POSSIBLE VALUES ARE NONE, READ, UPDATE,
* CONTROL, ALTER OR UNKNOWN.
* UNKNOWN IS RETURNED WHEN REG-15 = 8 OR
* IF NEW VALUES ARE INTRODUCED IN RACF.
*
* REG-15 WILL CONTAIN ONE OF THE FOLLOWING RETURN CODES:
* 0: CALL TO RACF WENT OK.
* 8: CALL TO RACF FAILED.
AUTHLVL CSECT
AUTHLVL AMODE 31
AUTHLVL RMODE ANY
* USE BAKR TO PRESERVE REGISTERS
BAKR R14,0 * ESA STYLE SAVE
BASR R12,0 * ADDRESS THIS CSECT
USING *,R12 * AH .. ADDRESSABILITY
* HAVING REACHED HERE, WE NOW ISSUE A RACROUTE REQUEST=AUTH MACRO
* FOR THE DATASET
LM R3,R4,0(R1) * R3->DSNAME, R4->ACCESS
LA R8,RACLAB * POINT TO PARAMETER LIST IN RACF
USING SAFP,R8 *
RACROUTE REQUEST=AUTH,ENTITY=((3)),MF=(E,RACLAB)
CLC SAFPRRET,F20 * OK RETURN CODE?
BNE ERACCESS * NO SO GIVE UNKNOWN ACCESS BACK
CLC SAFPRREA,F00 * NO ACCESS?
BE NOACCESS * YES SO SET NOACCESS
CLC SAFPRREA,F04 * READ ACCESS?
BE RDACCESS * YES SO SET READ
CLC SAFPRREA,F08 * UPDATE ACCESS
BE UPACCESS * YES SO SET UPDATE
CLC SAFPRREA,F12 * CONTROL ACCESS
BE CTACCESS * YES SO SET CONTROL
CLC SAFPRREA,F16 * ALTER ACCESS?
BNE UNACCESS * NO, SO UNKNOWN REASON CODE?
MVC 0(8,R4),ALTER
B RETDETS
ERACCESS EQU *
MVC 0(8,R4),UNKNOWN
LA R15,8
B RETURNS
NOACCESS EQU *
MVC 0(8,R4),NONE
B RETDETS
RDACCESS EQU *
MVC 0(8,R4),READ
B RETDETS
UPACCESS EQU *
MVC 0(8,R4),UPDATE
B RETDETS
CTACCESS EQU *
MVC 0(8,R4),CONTROL
B RETDETS
UNACCESS EQU *
MVC 0(8,R4),UNKNOWN
* SET ZERO RETURN CODE AND RETURN TO CALLER
RETDETS EQU *
LA R15,0
RETURNS EQU *
PR
RACLAB RACROUTE REQUEST=AUTH,CLASS='DATASET',STATUS=ACCESS, X
DSTYPE=M,WORKA=ENDPROG,RELEASE=1.9,MF=L
F00 DC F'00'
F04 DC F'04'
F08 DC F'08'
F12 DC F'12'
F16 DC F'16'
F20 DC F'20'
UNKNOWN DC CL8'UNKNOWN'
NONE DC CL8'NONE'
READ DC CL8'READ'
UPDATE DC CL8'UPDATE'
CONTROL DC CL8'CONTROL'
ALTER DC CL8'ALTER'
ENDPROG DC A(HALFK)
HALFK DS 512C
ICHSAFP
LTORG
YREGS
END
Hvis du får blod på tanden, så kan du faktisk få programmet til at virke for andet end
datasets. Hvis du kender RACF CLASS navnet for den ressource, du vil spørge om adgangen til,
så kan du angive CLASS navnet i RACROUTE kommandoen med label RACLAB.
Held og lykke med programmet. Husk du kan altid skrive, hvis du ikke kan få programmet
til at virke. Så vil jeg forsøge at hjælpe, så godt jeg kan. Til sidst vil jeg lige gøre opmærksom på det X, der står yderst til højre i linien med
label RACLAB. Det skal stå i position 72, ellers virker det ikke. Et hvilket som helst tegn
forskellige fra blank i position 72 i assembler fortæller, at instruktionen fortsættes på
næste linie.
Forrige danske tip
Last tip in english
Tip oversigten