Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Beispiel 4: Zugriffsbedingungen anzeigen

Die Zugriffsbedingungen im Guard TEST-GUA, das im Beispiel 1 erstellt und in den Beispielen 2 und 3 geändert wurde, sollen mit dem Makro SHWSAC gelesen, aufbereitet und nach SYSOUT ausgegeben werden.

Lösung

 *        **************************************************************
 *        * ---------------------------------------------------------- *
 *        *                                                            *
 *        * Makro SHWSAC: Zugriffsbedingungen anzeigen                 *
 *        * ==========================================                 *
 *        *                                                            *
 *        * ---------------------------------------------------------- *
 *        **************************************************************
 *
 GUA4     CSECT
 *
 *        **************************************************************
 *        * ---------------------------------------------------------- *
 *        * Makro WRITE                                                *
 *        * ===========                                                *
 *        * Aufgabe: Ausgabe des Datensatzes WROBER nach WROUT und     *
 *        *          den Bereich WROBER wieder mit Blanks              *
 *        *          initialisieren.                                   *
 *        * ---------------------------------------------------------- *
 *        **************************************************************
 *
          MACRO
          WRITE
          BAL   R@BACK,OUTOUT
         MEND
 *
 *        **************************************************************
 *
 R@WEEK   EQU   2               fuer Weekday-Bearbeitung
 R@PRGNAM EQU   2               fuer Program-Bearbeitung
 R@USED   EQU   2               fuer Vergleich bereich mit R@OUT
 R@I      EQU   3               Schleifenzaehler
 R@CON    EQU   4               Basisregister fuer Condition
 R@OUT    EQU   5               Basisregister fuer Ausgabebereich
 R@BASE   EQU   10              Basisregister
 R@GUA    EQU   11              Subjekt-Zaehler
 R@BACK   EQU   14              Ruecksprungadresse
 *
 BALR  R@BASE,0
          USING *,R@BASE
 *
 *        **************************************************************
 *        * Initialisierung                                            *
 *        **************************************************************
          MVC   WROGNAM(WROTEXL),SPACES         Ausgabebereich loeschen
          MVC   PARSACC(PROW#),PARSACL          Parameterinitialisierung
          SHWSAC MF=M,                                                  -
                GUARD='TEST-GUA',                                       -
                SUBTYPE=*ALL,                                           -
                INFORM=*ADM,                                            -
                OUTAREA=(OUTBER,OUTBERLG)
 *
 *        **************************************************************
 *        * Zugriffsbedingungen ermitteln, bis keine weiteren Guards   *
 *        * mehr angezeigt werden. In diesem Beispiel wird jedoch      *
 *        * nur das eine Guard TEST-GUA angefordert.                   *
 *        **************************************************************
 MORE1    EQU   *
          SHWSAC MF=E,PARAM=PARSACC
          CLC   PROWMRET,=Y(PROPSUCC)
          BNE   RCNOTOK
 *
 *        **************************************************************
 *        * Ausgabebereich abarbeiten                                  *
 *        **************************************************************
          L     R@OUT,PROWOADR       Laden SHWSAC-Ausgabebereiches
          USING PROWOPUT,R@OUT
 *
          LA    R@OUT,PROWOSGC       Positionieren auf (erstes) Guard
          USING PROWGCON,R@OUT
 *
 ONEGUARD EQU   *
          MVC   WROGNAM,PROWGCNA     Guardname -> WROUT-Bereich
          LA    R@OUT,PROWGCSA       Positionieren auf 1. Subjekttyp
          USING PROWACOS,R@OUT
 *
 *        **************************************************************
 *        * Schleife ueber Subjekttyp *USER, *GROUP, *OTHERS, *ALLUSER *
 *        **************************************************************
         SR    R@GUA,R@GUA
          LH    R@GUA,PROWAAUN       *USER
          AH    R@GUA,PROWAAGN       *GROUP
          AH    R@GUA,PROWAAON       *OTHERS
          AH    R@GUA,PROWAAAN       *ALLUSER
 *
          LA    R@OUT,PROWACS        Positionieren auf erstes Subjekt
         USING PROWACON,R@OUT
 *
 *        **************************************************************
 *        * Fuer jedes Subjekt die Zugriffsbedingungen aus dem         *
 *        * Ausgabebereich lesen                                       *
 *        * Loop-Beginn                                                *
 *        **************************************************************
 MORE2    EQU   *
 *
 *        **************************************************************
 *        * Subjekt und Subjekttyp in den WROUT-Bereich schreiben
 *        **************************************************************
          CLI   PROWAITY,PROZSUSR
          BNE   SBJGRP
          MVC   WROSTYP,=C'USER    ' Type USER    -> WROUT-Bereich
          MVC   WROSNAM,PROWAINA     Subject      -> WROUT-Bereich
          B     SBJEND
 SBJGRP   CLI   PROWAITY,PROZSGRP
          BNE   SBJOTH
          MVC   WROSTYP,=C'GROUP   ' Type GROUP   -> WROUT-Bereich
          MVC   WROSNAM,PROWAINA     Subject      -> WROUT-Bereich
          B     SBJEND
 SBJOTH   CLI   PROWAITY,PROZSOTH
          BNE   SBJALL
          MVC   WROSTYP,=C'OTHERS  ' Type OTHERS  -> WROUT-Bereich
          B     SBJEND
 SBJALL   MVC   WROSTYP,=C'ALLUSERS' Type ALLUSER -> WROUT-Bereich
 SBJEND   EQU   *
 *
 *        **************************************************************
 *        * Im Testguard sind fuer alle Subjekte spezielle             *
 *        * Zugriffsbedingungen mit ADMISSION=*PARAMS                  *
 *        * (d.h. mit PROWAADM=PROZAPAR)spezifiziert                   *
 *        * Der Fall ADMISSION=*YES/*NO                                *
 *        * (d.h. mit PROWAADM=PROZAYES/PROZANO) wird nicht behandelt. *
 *        **************************************************************
          LA    R@OUT,PROWSTCO       Positionieren auf Time Condition
 *
 *        **************************************************************
 *        * TIME Condition                                             *
 *        **************************************************************
         USING PROWTCON,R@OUT
          CLI   PROWTKD,PROZCNO      Kind of Time EQ *ANY?
          BNE   TIMCYCLA
          LA    R@OUT,PROWT#IN       Positionieren auf Interval
          B     TIMEND
 TIMCYCLA EQU   *
          CLI   PROWTKD,PROZCEXC     Kind of Time EXCEPT(TIME=?)
          BNE   TIMCYCLB
          MVC   WROINEX,=C'EX '      EX -> WROUT-Bereich
 TIMCYCLB EQU   *
          MVC   WROINEX,=C'IN '      IN -> WROUT-Bereich
         SR    R@I,R@I
         IC    R@I,PROWT#IN
         LA    R@OUT,PROWTINS
         USING PROWTINT,R@OUT
 TIMCYCL  EQU   *
          MVC   WROTIML,PROWTILB     Time Lower Bound -> WROUT-Bereich
          MVC   WROTIMU,PROWTIUB     Time Upper Bound -> WROUT-Bereich
          LA    R@OUT,PROWTIN#(R@OUT)
 *
 *        * Time Condition nach WROUT schreiben
          WRITE
 *
          BCT   R@I,TIMCYCL          Naechstes Zeitinterval
 TIMEND   EQU   *
 *
 *        **************************************************************
 *        * DATE Condition                                             *
 *        **************************************************************
          USING PROWDCON,R@OUT
          CLI   PROWDKD,PROZCNO      Kind of Date EQ *ANY?
          BNE   DATCYCLA
          LA    R@OUT,PROWD#IN       Positionieren auf Interval
          B     DATEND
 DATCYCLA EQU   *
          CLI   PROWDKD,PROZCEXC     Kind of Date EXCEPT(TIME=?)
          BNE   DATCYCLB
          MVC   WROINEX,=C'EX '      EX -> WROUT-Bereich
 DATCYCLB EQU   *
          MVC   WROINEX,=C'IN '      IN -> WROUT-Bereich
         SR    R@I,R@I
         IC    R@I,PROWD#IN
         LA    R@OUT,PROWDINS
         USING PROWDINT,R@OUT
 DATCYCL  EQU   *
          MVC   WRODATL,PROWDILB     Date Lower Bound -> WROUT-Bereich
          MVC   WRODATU,PROWDIUB     Date Upper Bound -> WROUT-Bereich
          LA    R@OUT,PROWDIN#(R@OUT)
 *
 *        * Date Condition nach WROUT schreiben
          WRITE
 *
          BCT   R@I,DATCYCL          Naechstes Zeitinterval
 DATEND   EQU   *
 *
 *        **************************************************************
 *        * WEEKDAY Condition                                          *
 *        **************************************************************
         USING PROWWCON,R@OUT
          CLI   PROWWKD,PROZCNO      Kind of Weekday EQ *ANY?
          BNE   WEKCYCLA
          LA    R@OUT,PROWWDYS       Positionieren auf Weekdays
          B     WEKEND
 WEKCYCLA EQU   *
          CLI   PROWWKD,PROZCEXC     Kind of Wekday EXCEPT(WEEKDAY=?)
          BNE   WEKCYCLB
          MVC   WROINEX,=C'EX '      EX -> WROUT-Bereich
 WEKCYCLB EQU   *
 *
 *        Alle Wochentage im Ausgabefeld vorbesetzen
 *        In einer Schleife die vorbesetzen Wochentage mit Blank
 *        ueberschreiben, wenn sie nicht in der Zugriffsbedingung
 *        enthalten sind
 *
          MVC   WROWEEK,=C'MO TU WE TH FR SA SU '
         IC    R@I,=X'08'
         ICM   R@CON,B'1000',PROWWDYS
          LA    R@WEEK,WROWEEK
          USING WEKDSEC,R@WEEK
 WEKCYCL  EQU   *
          BM    WEKCYCLC
          MVC   WEEKDAY,SPACES
 WEKCYCLC EQU   *
          LA    R@WEEK,WEEKDAY#
         SLL   R@CON,1
         LTR   R@CON,R@CON
          BCT   R@I,WEKCYCL
          LA    R@OUT,PROWW#(R@OUT)
 *
 *        * Weekday Condition nach WROUT schreiben
          WRITE
 *
 WEKEND   EQU   *
 *
 *        **************************************************************
 *        * PRIVILEGE Condition                                        *
 *        * Die Behandlung der einzelnen Privilegien wird im Beispiel  *
 *        * nicht ausfuehrlich behandelt, sondern es wird gleich weiter*
 *        * auf die Zugriffsbedingungen PROGRAM ppositioniert.         *
 *        **************************************************************
         USING PROWPVCO,R@OUT
          CLI   PROWPKD,PROZCNO      Kind of Privilege EQ *ANY?
          BNE   PRVCYCLA
          LA    R@OUT,PROWPRV        Positionieren auf Privilegien
          B     PRVEND
 PRVCYCLA EQU   *
          LA    R@OUT,PROWP#(R@OUT)  -> Zugriffsbedingung Typ PROGRAM
 PRVEND   EQU   *
 *
 *        **************************************************************
 *        * PROGRAM Condition                                          *
 *        **************************************************************
         USING PROWPCON,R@OUT
          CLI   PROWPCKD,PROZCNO     Kind of Program EQ *ANY?
          BNE   PRGCYCLA
          LA    R@OUT,PROWPCNP       Positionieren auf Anzahl Programs
 *        LA    R@OUT,PROWPCPS       Positionieren auf Programs
          B     PRGEND
 PRGCYCLA EQU   *
         SR    R@I,R@I
          IC    R@I,PROWPCNP         Anzahl Programmnamen
          LA    R@OUT,PROWPCPS       Programmname
         USING PROWPRG,R@OUT
 PRGCYCL  EQU   *
 *
 *        Im Beispiel wird nur der Fall FILENAME behandelt
 *        Bibliotheksangaben werden nicht beruecksichtigt
 *
         SR    R@PRGNAM,R@PRGNAM
          IC    R@PRGNAM,PROWPAL#    size of whole program name
          SH    R@PRGNAM,=H'1'    -1 fuer MVC-Laenge
          N     R@PRGNAM,=F'63'      Name auf 64 begrenzt
          EX    R@PRGNAM,PRGEXMVC    Programname ->WROUT-Bereich
          AH    R@PRGNAM,=H'1'    +1 fuer echte Laenge
 *
 *        * Program Condition nach WROUT schreiben
          WRITE
 *
          LA    R@OUT,PROWPCNS       Start of Programs
         AR    R@OUT,R@PRGNAM
         BCT   R@I,PRGCYCL
 PRGEND   EQU   *
 *
 *        **************************************************************
 *        * Alle Zugriffsbedingungen fuer ein Subjekt sind abgearbeitet*
 *        * Auf Wortgrenze Positionieren                               *
 *        **************************************************************
          AH    R@OUT,=H'3'
          N     R@OUT,=F'-4'         X'FFFFFFFC'
 *
 *        **************************************************************
 *        * Fuer jedes Subjekt die Zugriffsbedingungen aus dem         *
 *        * Ausgabebereich lesen                                       *
 *        * Loop-Ende                                                  *
 *        **************************************************************
          BCT   R@GUA,MORE2
          B     GUAFRTG
 *
 *        **************************************************************
 *        * Ein Guard wurde komplett abgearbeitet. Pruefen, ob es      *
 *        * im SHWSAC-Ausgabebereich weitere Guardeintraege  gibt.     *
 *        * In diesem Beispiel gibt es keine.                          *
 *        **************************************************************
 GUAFRTG  EQU   *
          L     R@USED,PROWOADR
          A     R@USED,PROWOUS#
          CR    R@USED,R@OUT
          BP    ONEGUARD
 *
 *        **************************************************************
 *        * Pruefen, ob SHWSAC gemeldet hat, dass weitere Guards       *
 *        * zur Anzeige anstehen, die im Ausgabebereich keinen Platz   *
 *        * mehr gefunden haben.                                       *
 *        **************************************************************
         CLC   PROWOMOR,=Y(PROWMNO)
          BNE   MORE1
          B     ENDE
 *
 *        **************************************************************
 *        * Aufruf von WROUT                                           *
 *        **************************************************************
 OUTOUT   EQU   *
          WROUT WROBER,WROFEHL
          MVC   WROGNAM(WROTEXL),SPACES
         BR    R@BACK
 WROFEHL  EQU   *
          B     ENDE
 *
 *        **************************************************************
 *        * Fehlerbehandlung                                           *
 *        **************************************************************
 RCNOTOK  EQU   *
 *        Die moeglichen Returncode-Werte sind im Makro MSGGUAD
 *        aufgelistet
          B     ENDE
 *
 *        **************************************************************
 *        * Uebertragen Programmname in den WROUT-Ausgabebereich       *
 *        **************************************************************
 PRGEXMVC MVC   WROPRGNA(1),PROWPCNS   Start of Programs
 *
 *        **************************************************************
 *        * Programmende von Beispielprogramm GUA4                     *
 *        **************************************************************
 ENDE     EQU   *
          TERM
 *
 *
 *
 *        **************************************************************
 *        *------------------------------------------------------------*
 *        * Parameterdeklarationen                                     *
 *        *------------------------------------------------------------*
 *        **************************************************************
 *
 *        Dieser Parameterbereichs wird bei Aufruf des Makros SHWSAC
 *        im Register 1 uebergeben.
 *
 PARSACC  DS    0F
          SHWSAC MF=C
 *
 *        Dieser Parameterbereich wird vor Aufruf des Makros SHWSAC
 *        verwendet, um den Parameterbereich PARRACC neu zu
 *        initialisieren.
 *
 PARSACL  DS    0F
         SHWSAC MF=L,                                                  -
               GUARD='                                        '        -
                OUTAREA=(OUTBER,OUTBERLG)
 *
 OUTBERLG DC    A(OUTBERL)
 *
 *        **************************************************************
 *        *------------------------------------------------------------*
 *        * WROUT-Bereich                                              *
 *        *------------------------------------------------------------*
 *        **************************************************************
 *
 SPACES   DC   CL256' '
 WROBER   EQU   *
          DC    Y(WROBERL)
         DC    X'0000'
         DC    X'00'
 WROGNAM  DS    CL24                          Guardname
          DS    XL1
 WROSTYP  DS    CL8                           Subjekttyp
          DS    XL1
 WROSNAM  DS    CL8                           Subjekt
          DS    XL1
 WROINEX  DS    CL3                           INTERVAL oder EXCEPT
         DS    XL1
 WROTIML  DS    CL5                           Time Lower Bound
         DS    XL1
 WROTIMU  DS    CL5                           Time Upper Bound
         ORG   WROTIML
 WRODATL  DS    CL10                          Date Lower Bound
         DS    XL1
 WRODATU  DS    CL10                          Date Upper Bound
         ORG   WROTIML
 WROWEEK  DS    CL21                          Weekday
         ORG   WROTIML
 WROPRGNA DS    CL64                          Programmname
         ORG
 WROTEXL  EQU   *-WROGNAM
 WROBERL  EQU   *-WROBER
 *
 *        **************************************************************
 *        *------------------------------------------------------------*
 *        * Ausgabebereich fur SHWSAC                                  *
 *        *------------------------------------------------------------*
 *        **************************************************************
 *
 OUTBER   EQU   *
         DS    XL256
         DS    XL256
         DS    XL256
         DS    XL256
         DS    XL256
         DS    XL256
         DS    XL256
         DS    XL256
 OUTBERL  EQU   *-OUTBER
 *
 *        **************************************************************
 *        *------------------------------------------------------------*
 *        * Deklarationen globaler Variablen                           *
 *        *------------------------------------------------------------*
 *        **************************************************************
 *
         SACMGMT MF=D,XPAND=PARAM
 *
 *        **************************************************************
 *        *------------------------------------------------------------*
 *        * Deklarationen des Ausgabebereiches von SHWSAC              *
 *        *------------------------------------------------------------*
 *        **************************************************************
 *
         SHWSAC MF=D,XPAND=OUTPUT
 *
 *        **************************************************************
 *        *------------------------------------------------------------*
 *        * Deklarationen der Returncodes                              *
 *        *------------------------------------------------------------*
 *        **************************************************************
 *
         MSGGUAD MF=D
 *
 WEKDSEC  DSECT  0X     Weekday-Dsect
 WEEKDAY  DS    CL3
 WEEKDAY# EQU   *
 *
          END

Ergebnis

Das Programm gibt die Zugriffsbedingungen in folgender Form nach SYSOUT aus:

:PUB1:$TESTUID.TEST-GUA  USER     ANNE     IN  2017-10-15 2017-11-15
                         USER     MARY         MO TU WE
                         USER     PAUL     IN  2017-07-01 2017-09-30
                         GROUP    REVIEWER IN  09:00 15:00
                                           IN  2017-08-23 2017-08-24
                                               2017-09-09 2017-09-10
                         GROUP    TEAMWORK IN  09:00 15:00
                                           IN  2017-08-23 2017-08-24
                                               2017-09-09 2017-09-10
                         ALLUSERS          IN  07:00 19:00
                                           EX                 SA SU