Mit diesem Makro wird GUARDS aus einem Programm heraus aufgerufen, um eine Bedingungsauswertung durchzuführen. Das Programm wird damit zu einer Objektverwaltung. GUARDS kann dann zum Schutz der Objekte des Programms eingesetzt werden.
Makro | Operanden |
CHKSAC | MF = D / L / C / M / E ,PREFIX = P / <name 1> ,MACID = ROV / <name 3> ,PARAM =<name 1..8> ,GUARD = <c-string: filename 1..24 without-gen-vers> / <var: char(24)> / (<reg: A(char(24))>) ,OBJOWN = *OWN / <c-string: name 1..8> / <var: char(8)> / (<reg: A(char(8))>) ,ACCTSN = *OWN / <c-string: name 1..4> / <var: char(4)> / (<reg: A(char(4))>) ,ACCUID = *OWN / <c-string: name 1..8> / <var: char(8)> / (<reg: A(char(8))>) ,EVAL * = *ACCESS / *SHOW / <var: enum EVAL> / (<reg: enum EVAL>) ,TIME = *NO / *YES ,DATE = *NO / *YES ,WEEKDAY = *NO / *YES ,PRIV = *NO / *YES ,PROG = *NO / *YES |
Die Beschreibung der Parameter MF, PREFIX, MACID, PARAM finden Sie im Handbuch „Makroaufrufe an den Ablaufteil“ [16].
Operanden, die mit „*“ gekennzeichnet sind, sind Pflichtoperanden bei MF=L.
GUARD
Name des Guards, mit dem die Bedingung geprüft wird. Der Name darf nur aus Großbuchstaben bestehen.
OBJOWN
Eigentümer des Objekts, das durch das Guard geschützt ist. Mit *OWN ist die eigene Benutzerkennung voreingestellt.
Die beiden folgenden Operanden ACCTSN und ACCUID können nur alternativ angegeben werden.
ACCTSN
TSN der Task, die den Zugriff durchführt. Mit *OWN ist die eigene TSN voreingestellt.
ACCUID
Benutzerkennung, für die eine Zugriffsüberprüfung durchgeführt wird. Die Kennung muss existieren. Diese Angabe ist nur aus Programmen erlaubt, die unter einer Task mit TSOS-Privileg laufen. Mit *OWN ist die eigene Benutzerkennung voreingestellt.
EVAL
Legt fest, wie überprüft wird. Dieser Operand ist bei MF=L Pflichtoperand.
=*ACCESS
Es wird überprüft, ob ein Zugriff auf das durch GUARDS zu schützende Objekt zugelassen ist.
=*SHOW
Es wird überprüft, ob der Benutzer das Guard sehen darf. Zu schützende Objekte sind hiervon unberührt. Es wird überprüft, ob der Zugriff immer oder nur unter bestimmten Umständen erlaubt ist.
*SHOW führt dazu, dass die folgenden Parameter dieses Makros nicht ausgewertet werden.
TIME
Festlegung, ob eine Zeitbedingung ignoriert wird:
=*NO
Zeitbedingung nicht ignorieren
=*YES
Zeitbedingung ignorieren
DATE
Festlegung, ob eine Datumsbedingung ignoriert wird:
=*NO
Datumsbedingung nicht ignorieren
=*YES
Datumsbedingung ignorieren
WEEKDAY
Festlegung, ob eine Wochentagsbedingung ignoriert wird:
=*NO
Wochentagsbedingung nicht ignorieren
=*YES
Wochentagsbedingung ignorieren
PRIV
Festlegung, ob eine Privilegsbedingung ignoriert wird:
=*NO
Privilegsbedingung nicht ignorieren
=*YES
Privilegsbedingung ignorieren
PROG
Festlegung, ob eine Programmbedingung ignoriert wird:
=*NO
Programmbedingung nicht ignorieren
=*YES
Programmbedingung ignorieren
Makro-Returncode
SC2 | SC1 | Maincode | Erläuterung |
X’01’ | X’1000’ | Der angegebene Wert des Operanden liegt nicht im erlaubten Bereich. Der fehlerhafte Operand steht als symbolischer Wert im SC2 | |
X’20’ | X’1001’ | Ein interner Fehler trat auf. Für eine genauere Analyse wurde ein SERSLOG-Eintrag geschrieben | |
X’40’ | X’1002’ | Der Guard-Name ist syntaktisch falsch | |
X’40’ | X’1003’ | Speicher für den Parameterbereich nicht in der benötigten Länge allokiert oder nicht zugreifbar | |
X’40’ | X’1007’ | Das angegebene Guard existiert nicht | |
X’40’ | X’1012’ | Der angegebene Katalog ist nicht definiert oder nicht zugreifbar | |
X’40’ | X’1013’ | Das Pubset ist bei der GUARDS-Verwaltung unbekannt (Guardskatalog wurde wahrscheinlich bei IMPORT-PUBSET nicht geöffnet) | |
X’40’ | X’1014’ | Der Benutzer ist nicht autorisiert, die Funktion auszuführen | |
X’40’ | X’1019’ | Zugreifende Benutzerkennung unbekannt | |
X’40’ | X’1020’ | Kein Speicher mehr vorhanden | |
X’40’ | X’1024’ | Nutzung des Guards nicht zugelassen |
Beispiel
Dieses Beispiel zeigt, wie ein Programmteil mit GUARDS geschützt werden kann.
Im Programm sind Teile enthalten, die nur bestimmten Programmbenutzern zugänglich sein sollen. Im Programm muss hinterlegt werden, welche Programmteile durch welche Guards geschützt werden sollen.
Für den Schutz der Programmteile müssen die entsprechenden Guards erstellt werden, um dann vor der Ausführung des Programmteils durch den CHKSAC-Aufruf geprüft werden zu können.
So wird ermittelt, ob die im Guard definierten Bedingungen für den Benutzer erfüllt sind oder nicht.
Beispiel für den Schutz eines Programmteils mit Hilfe von GUARDS über den Makro CHKSAC
BSPL CSECT R10 EQU 10 BALR R10,0 USING *,R10 * *************************************************** * * * DER PARAMETERBEREICH WIRD VOR JEDEM MF=E-AUFRUF * * WIEDER MIT DEM ANFANGSINHALT VERSORGT: * * * MVC PARAMFC(PROV#),PARAMFL * * * UND FALLS ERFORDERLICH GEAENDERT: * * * CHKSAC MF=M,GUARD=GUARDNAM * * * *************************************************** * * * AUSFUEHRUNG DES MACRO: * * CHKSAC MF=E,PARAM=PARAMFC * * * *************************************************** * * * ABFRAGE DES RETURNCODES: * * * CLC PROVMRET,=Y(PRMTSUCC) BNE RCNOTOK * * * *************************************************** * * * ABFRAGE DES ERGEBNISSES: * * * CLI PROVCHKR,PROVCYES BNE BSPLNO * * * *************************************************** * DIESER TEIL DES PROGRAMS IST GESCHUETZT UND WIRD * * NUR DANN AUSGEFUEHRT, WENN ES DURCH DAS GUARD * * MYGUARD ERLAUBT WIRD * * * MVC TEXT,OKTEXT B ENDE * * * *************************************************** BSPLNO EQU *
* WENN GUARD MYGUARD DIE AUSFUEHRUNG DES GESCHUETZTEN * PROGRAMTEILS NICHT ERLAUBT, WIRD DIESER TEIL * * DURCHGEFUEHRT * * * B ENDE * * * *************************************************** * * RCNOTOK EQU * * FEHLERBEHANDLUNG DES FEHLERHAFTEN RETURNCODE * * WIE SOLL FORTGESETZT WERDEN, HAENGT VON DER * * AUFGABE AB. * * FALLS WEITERGEMACHT WERDEN SOLL * * (DAS KANN Z.B. BEI 1007 SINNVOLL SEIN), * * SO SOLLTE DER GESCHUETZTE PROGRAMTEIL NICHT * * DURCHLAUFEN WERDEN * MVC TEXT,RCTEXT B ENDE * * * *************************************************** * * ENDE EQU * WROUT MELDUNG,WRFEHL WRFEHL EQU * TERM * * * *************************************************** * * * DER PARAMETERBEREICH (BEIM MACROAUFRUF IST * * DIE ADRESSE PARAMFC IM REGISTER 1 : * PARAMFC DS 0F CHKSAC MF=C * * * *************************************************** * * * DER BEREICH PARAMFL BLEIBT UNVERAENDERT WAEHREND * * DES GANZEN PROGRAMLAUFS (IM NORMALFALL) UND WIRD * * VOR JEDEM MF=E-AUFRUF DES MACROS IN DEN PARAMETER-* * BEREICH (PARAMFC) UEBERTRAGEN (S. MVC OBEN) * * * PARAMFL DS 0F CHKSAC EVAL=*ACCESS,MF=L * * * *************************************************** * * * DER WERT EINES ZU MODIFIZIERENDEN PARAMETERS: * * * GUARDNAM DC CL24'MYGUARD'
* * * *************************************************** * * MELDUNG DC Y(MELDENDE-MELDUNG) DS CL2 DC X'01' TEXT DC 'ZUGRIFFSBEDINGUNGEN IN MYGUARD: ZUGRIFF NICHT GESTATTET' MELDENDE EQU * OKTEXT DC 'ZUGRIFFSBEDINGUNGEN IN MYGUARD: ZUGRIFF GESTATTET' RCTEXT DC '..... RETURN CODE UNGLEICH 0000 ..... ' * * * *************************************************** * * * DIE NAMEN (EQUATES) FUER RETURN CODE WERTE SIND * * IN DER FOLGENDEN DSECT VORHANDEN * * * MSGGUAD MF=D * * * FALLS NOETIG KOENNEN DIE NAMEN IM PARAMETERBEREICH * ALS DSECT GENERIERT WERDEN, JEDOCH WEGEN DER * * GLEICHZEITIGEN BENUTZUNG VON MF=C, MUESSEN DIE * * NAMEN EINEN ANDEREN PREFIX HABEN * * * CHKSAC MF=D,PREFIX=X * * * *************************************************** END
Prozedur zum Aufruf des Beispielprogramms
/PROC A,(&BIBL),SUBDTA= /REMARK DAS BEISPIELPROGRAM BSPL IST IN DER BIBLIOTHEK BIBL /DELETE-GUARD MYGUARD /STEP /ADD-ACCESS-CONDITION MYGUARD,SUBJECT=USER(($SYSJV.USERID)), ADM=NO /START-PROGRAM *P(&BIBL.,BSPL) /REMARK FOLGENDER TEXT WURDE VOM BSPL AUSGEGEBEN: /REMARK ZUGRIFFSBEDINGUNGEN IN MYGUARD: ZUGRIFF NICHT GESTATTET /MOD-ACCESS-CONDITION MYGUARD,SUBJECT=USER( ($SYSJV.USERID)),ADM=YES ? /START-PROGRAM *P(&BIBL.,BSPL) /REMARK FOLGENDER TEXT WURDE VOM BSPL AUSGEGEBEN: /REMARK ZUGRIFFSBEDINGUNGEN IN MYGUARD: ZUGRIFF GESTATTET /ENDP