PROC 0                                                                -
  CONSLIST(OFF)              /* DEFAULT IS OFF */                     -
  COMLIST(OFF)               /* DEFAULT IS OFF */                     -
  SYMLIST(OFF)               /* DEFAULT IS OFF */                     -
  TERMMSGS(OFF)              /* DEFAULT IS OFF */                     -
  TYPERUN(FSO)               /* Run for SRRAUDIT | FSO   */           -
  CACC1000(CACC1000)         /* SELECT SECURITY CHECK PGM*/           -
  CACT0000(CACT0000)         /* SELECT MVS REPORT TABLE  */           -
  CACT0008(CACT0008)         /* SELECT RESOURCE TABLE    */           -
  CACM000T(CACM000T)         /* SELECT edit macro/CACT0000 */         -
  CACM042R(CACM042R)         /* SELECT edit macro/CACT0008 */         -
  CARM0421(CARM0421)         /* SELECT EDIT MACRO/SENSITVE */         -
  CARM0422(CARM0422)         /* SELECT EDIT MACRO/SENSITVE */         -
  CARM0423(CARM0423)         /* AAMV0420                   */         -
  PDILIMIT(999999)           /* Limit output PDIs          */         -
  PDIDDN(PDIDD)              /* PDI DDNAME IN JCL          */         -
  SENSDDN(SENSITVE)          /* SENSITVE DDNAME IN JCL     */         -
  TEMP6DDN(TEMP6)            /* TEMP6 DDNAME IN JCL        */         -
  CNTLDDN(CNTL)              /* CNTL DDNAME IN JCL         */         -
  TRACE(OFF)                 /* TRACE ACTIONS AND ERRORS */
 
/* 06/01/2004 JL.NELSON CREATE to check data set FINDINGS
/* 06/18/2004 JL.NELSON ADDED EXIT CODE
/* 06/23/2004 JL.NELSON ADDED code to check security system
/* 01/20/2005 JL.NELSON Changed to add dslist to PDIs
/* 02/28/2005 JL.NELSON Changed constants to variables
/* 03/22/2005 JL.NELSON PDI member maybe blank, old CACT0000
/* 03/23/2005 JL.NELSON Added TYPERUN for Reports without PDIs
/* 06/09/2005 JL.NELSON Pass MAXCC in ZISPFRC variable
/* 06/15/2005 JL.NELSON Reset return code to end job step
/* 09/10/2007 CL.Fenton Added resource collection.  Chgd several
/*            variables and routines being executed by process.
/* 07/16/2009 CL.FENTON Changes CACT0001 to CACT0000, CACM042V to
/*            CACM000T.  Changes for reflect new table information.
/* 08/29/2016 CL.FENTON Correct issue with TBLMBR.
 
SET PGMNAME = &STR(CARC0421 08/29/16)
 
SET SYSPROMPT = OFF                /* CONTROL NOPROMPT          */
SET SYSFLUSH  = OFF                /* CONTROL NOFLUSH           */
SET SYSASIS   = ON                 /* CONTROL ASIS - caps off   */
 
/* ERROR ROUTINE */
ERROR DO
  SET RETURN_CODE = &LASTCC          /* SAVE LAST ERROR CODE */
  IF &LASTCC GT 16 THEN +
    WRITE &PGMNAME LASTCC = &LASTCC &ZERRLM
  RETURN
  END
 
IF &TRACE = ON THEN DO              /* TURN messages on          */
  SET TERMMSGS = ON                 /* CONTROL MSG               */
  SET COMLIST  = ON                 /* CONTROL LIST              */
  SET CONSLIST = ON                 /* CONTROL CONLIST           */
  SET SYMLIST  = ON                 /* CONTROL SYMLIST           */
  END
 
SET SYSSYMLIST = &SYMLIST           /* CONTROL SYMLIST/NOSYMLIST */
SET SYSCONLIST = &CONSLIST          /* CONTROL CONLIST/NOCONLIST */
SET SYSLIST    = &COMLIST           /* CONTROL LIST/NOLIST       */
SET SYSMSG     = &TERMMSGS          /* CONTROL MSG/NOMSG         */
 
SET ZISPFRC = 0
ISPEXEC VPUT (ZISPFRC) SHARED
 
SET RETURN_CODE = 0
 
ISPEXEC VPUT ( +
  CONSLIST     +
  COMLIST      +
  SYMLIST      +
  TERMMSGS     +
  CARM0422     +
  PDILIMIT     +
  TYPERUN      +
  ) ASIS
 
SET RC21VPUT = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME VPUT RC = &RETURN_CODE  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
/* Determine which security system is running */
 
SET RETURN_CODE = 0
 
ISPEXEC SELECT CMD(&CACC1000 ACP)
 
ISPEXEC VGET ( +
  ACPNAME      +
  ACPVERS      +
  ) ASIS
 
IF &STR(&ACPNAME) NE &STR(RACF) THEN DO
  WRITE &PGMNAME RACF Job running on the wrong system
  WRITE &PGMNAME &ACPNAME &ACPVERS
  WRITE &PGMNAME CCACPRC = &CCACPRC
  SET RETURN_CODE = 20
  GOTO ERR_EXIT
  END
 
/* *************************************** */
/* INITIALIZE LIBRARY MANAGEMENT           */
/* *************************************** */
 
SET RETURN_CODE = 0
 
ISPEXEC LMINIT DATAID(PDIDD) DDNAME(&PDIDDN)
 
SET LMINIT_PDIDD_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMINIT PDIDD     RC = &RETURN_CODE  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
ISPEXEC LMINIT DATAID(SENSITVE) DDNAME(&SENSDDN)
 
SET LMINIT_SENSITVE_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMINIT SENSITVE  RC = &RETURN_CODE  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
ISPEXEC LMINIT DATAID(TEMP6) DDNAME(&TEMP6DDN)
 
SET LMINIT_TEMP6_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMINIT TEMP6  RC = &RETURN_CODE  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
ISPEXEC LMINIT DATAID(CNTL) DDNAME(&CNTLDDN)
 
SET LMINIT_CNTL_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMINIT CNTL      RC = &RETURN_CODE  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
LISTDSI &PDIDDN FILE
 
SET LISTDSI_FILE_RCODE  = &RETURN_CODE
SET LISTDSI_FILE_REASON = &SYSREASON
IF &SYSREASON EQ 0 THEN DO
   SET ODSNAME  = &SYSDSNAME
   SET LISTDSI_FILE_MSGLVL2 = &STR(&SYSMSGLVL2)
   END
ELSE DO
   WRITE &PGMNAME Unable to determine PDI DSNAME SYSREASON &SYSREASON
   WRITE &PGMNAME &STR(&SYSMSGLVL1)
   WRITE &PGMNAME &STR(&SYSMSGLVL2)
   END
 
/* *************************************** */
/* OPEN DATASETS                           */
/* *************************************** */
 
SET RETURN_CODE = 0
 
ISPEXEC LMOPEN DATAID(&PDIDD) OPTION(OUTPUT)
 
SET LMOPEN_PDIDD_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMOPEN PDIDD     RC = &RETURN_CODE  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
ISPEXEC LMOPEN DATAID(&SENSITVE) OPTION(INPUT)
 
SET LMOPEN_SENSITVE_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMOPEN SENSITVE  RC = &RETURN_CODE  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
ISPEXEC LMOPEN DATAID(&TEMP6) OPTION(INPUT)
 
SET LMOPEN_TEMP6_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMOPEN TEMP6  RC = &RETURN_CODE  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
/* *************************************** */
/* PUT VARS IN POOL                        */
/* *************************************** */
 
ISPEXEC VPUT ( +
  PDIDD        +
  SENSITVE     +
  TEMP6        +
  CNTL         +
  CACT0000     +
  ) ASIS
 
/* *************************************** */
/* GET TABLE VALUES                        */
/* *************************************** */
 
SET RETURN_CODE = 0
 
ISPEXEC VIEW DATAID(&CNTL) MACRO(&CACM000T) MEMBER(&CACT0000)
 
SET VIEW_CACT0000_RC = &RETURN_CODE
 
SET RETURN_CODE = 0
 
ISPEXEC VGET ( +
  CM0TVGET     +
  CM0TVPUT     +
  CM00TRC      +
  TBLMBR       +
  ) ASIS
 
IF &VIEW_CACT0000_RC GT 4 THEN DO
  WRITE &PGMNAME VIEW CNTL &CACT0000  RC = &CM00TRC  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
SET RESOURCE = &STR(DSNAME)
ISPEXEC VPUT ( +
  RESOURCE     +
  ) ASIS
 
/* *************************************** */
/* EDIT RACF REPORTS                       */
/* *************************************** */
 
/*SET TBLMBR = &NRSTR(&TBLMBR.#)
SET TBLMBR = &NRSTR(&TBLMBR)
 
DO X = 2 TO &LENGTH(&NRSTR(&TBLMBR))
  SET ITER   = &SUBSTR(&X:&X+1,&NRSTR(&TBLMBR))
  SET RPTMBR = &SUBSTR(&X+3:&X+11,&NRSTR(&TBLMBR))
  SET PDIMBR = &SUBSTR(&X+12:&X+19,&NRSTR(&TBLMBR))
  SET Y      = &SYSINDEX(&NRSTR(@),&NRSTR(&TBLMBR),&X)
  IF &Y GT 0 THEN +
    SET TITLE  = &SUBSTR(&X+21:&Y-1,&NRSTR(&TBLMBR))
  ELSE +
    SET TITLE  =
  SET X      = &SYSINDEX(&STR(#),&NRSTR(&TBLMBR),&X)
 
  SET RPTMBR = &RPTMBR
  SET PDIMBR = &PDIMBR
 
  SET RETURN_CODE = 0
 
  IF &STR(&PDIMBR) EQ &STR( ) THEN GOTO DO_END  /* No entry in CACT0000
 
  ISPEXEC LMMFIND DATAID(&TEMP6) MEMBER(&PDIMBR)
 
  IF &RETURN_CODE EQ 0 THEN +
    DO
 
    /* *************************************** */
    /* PUT VARS IN POOL                        */
    /* *************************************** */
 
    SET RETURN_CODE = 0
 
    ISPEXEC VPUT ( +
     PDIMBR        +
     RPTMBR        +
     ODSNAME       +
     ) ASIS
 
    SET RETURN_CODE = 0
 
    ISPEXEC VIEW DATAID(&TEMP6) MACRO(&CARM0421) MEMBER(&PDIMBR)
 
    IF &RETURN_CODE GT 4 THEN +
      WRITE &PGMNAME VIEW_TEMP6_RC = &RETURN_CODE +
        MEMBER &PDIMBR for &RPTMBR  &ZERRSM
 
    END
DO_END: END
 
SET PDIMBR = AAMV0420
 
ISPEXEC SELECT CMD(&CARM0423)
 
IF &RETURN_CODE GT 4 THEN +
  WRITE &PGMNAME AAMV0420_RC = &RETURN_CODE +
    MEMBER &PDIMBR &ZERRSM
 
SET RECTYPE = 1
SET PDINAME =
SET RESNAME =
 
ISPEXEC VPUT ( +
  RECTYPE      +
  PDINAME      +
  RESNAME      +
  ) ASIS
 
 
SET RETURN_CODE = 0
 
ISPEXEC VIEW DATAID(&CNTL) MEMBER(&CACT0008) MACRO(&CACM042R)
 
SET VIEW_CACT0008_RC = &RETURN_CODE
IF &VIEW_CACT0008_RC GT 4 THEN DO
  WRITE &PGMNAME VIEW CNTL &CACT0008  RC = &VIEW_CACT0008_RC
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO BYPASS_CACT0008
  END
 
ISPEXEC VGET ( +
  REC1TBL      +
  ) ASIS
 
SET RETURN_CODE = 0
DO X = 1 TO &LENGTH(&NRSTR(&REC1TBL)) BY 18
  SET PDIMBR = &SUBSTR(&X:&X+7,&NRSTR(&REC1TBL))    /* PDI ID
  SET RESOURCE = &SUBSTR(&X+9:&X+16,&NRSTR(&REC1TBL)) /* RESOURCE NAME
  SET PDIMBR = &PDIMBR
  SET RPTMBR = &PDIMBR
  SET RETURN_CODE = 0
 
  ISPEXEC LMMFIND DATAID(&TEMP6) MEMBER(&PDIMBR)
 
  IF &RETURN_CODE NE 0 THEN +
    WRITE &PGMNAME LMMFIND_RACFRPT_RC = &RETURN_CODE +
       MEMBER = &RPTNAME  &ZERRSM
  ELSE DO
    /* *************************************** */
    /* PUT VARS IN POOL                        */
    /* *************************************** */
    ISPEXEC VPUT (+
      PDIMBR   +
      RPTMBR   +
      RESOURCE +
     ) ASIS
 
    SET RETURN_CODE = 0
 
    ISPEXEC VIEW DATAID(&TEMP6) MACRO(&CARM0421) MEMBER(&PDIMBR)
 
    IF &RETURN_CODE GT 4 THEN +
      WRITE &PGMNAME VIEW_RACFRPT_RC = &RETURN_CODE MEMBER = +
        &RPTNAME &ZERRSM
    END
END
 
BYPASS_CACT0008:+
SET RETURN_CODE = 0
 
/* *************************************** */
/* CLOSE OUTPUT                            */
/* *************************************** */
 
END_EXIT: +
SET RETURN_CODE = 0
 
ISPEXEC LMCLOSE DATAID(&PDIDD)
 
SET LMCLOSE_PDIDD_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMCLOSE DATAID(&SENSITVE)
 
SET LMCLOSE_SENSITVE_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMCLOSE DATAID(&TEMP6)
 
SET LMCLOSE_TEMP6_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMCOMP DATAID(&PDIDD)
 
SET LMCOMP_PDIDD_RC = &RETURN_CODE
 
/* *************************************** */
/* FREE FILES                              */
/* *************************************** */
 
SET RETURN_CODE = 0
 
ISPEXEC LMFREE DATAID(&SENSITVE)
 
SET LMFREE_SENSITVE_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMFREE DATAID(&TEMP6)
 
SET LMFREE_TEMP6_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
 
ISPEXEC LMFREE DATAID(&PDIDD)
 
SET LMFREE_PDIDD_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
 
ISPEXEC LMFREE DATAID(&CNTL)
 
SET LMFREE_CNTL_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
/* *************************************** */
/* ERROR EXIT                              */
/* *************************************** */
 
ERR_EXIT: +
IF &MAXCC GE 16 OR +
   &RETURN_CODE GT 0 THEN DO
  ISPEXEC VGET (ZISPFRC) SHARED
  IF &MAXCC GT &ZISPFRC THEN +
    SET ZISPFRC = &MAXCC
  ELSE +
    SET ZISPFRC = &RETURN_CODE
  ISPEXEC VPUT (ZISPFRC) SHARED
  WRITE &PGMNAME ZISPFRC = &ZISPFRC
  END
 
ISPEXEC VGET ( +
  RM21VGET     +
  RM421RC      +
  RM22VGET     +
  RM422RC      +
  CM42VRC      +
  ) ASIS
 
IF &TERMMSGS = ON THEN DO                       /* TURN TRACE ON */
WRITE ===============================================================
WRITE &PGMNAME LMINIT_PDIDD_RC          &LMINIT_PDIDD_RC
WRITE &PGMNAME LMINIT_SENSITVE_RC       &LMINIT_SENSITVE_RC
WRITE &PGMNAME LMINIT_CNTL_RC           &LMINIT_CNTL_RC
WRITE ===============================================================
WRITE &PGMNAME LMOPEN_PDIDD_RC          &LMOPEN_PDIDD_RC
WRITE &PGMNAME LMOPEN_SENSITVE_RC       &LMOPEN_SENSITVE_RC
WRITE ===============================================================
WRITE &PGMNAME VIEW_CACT0000_RC         &VIEW_CACT0000_RC
WRITE &PGMNAME &CACM000T CM00TRC         &CM00TRC
  IF &CM00TRC NE 0 THEN DO
    WRITE &PGMNAME &CACM000T VGET            &CM0TVGET
    WRITE &PGMNAME &CACM000T VPUT            &CM0TVPUT
    END
WRITE &PGMNAME &CARM0421 VGET            &RM21VGET
WRITE &PGMNAME &CARM0421 RM421RC         &RM421RC
WRITE &PGMNAME &CARM0422 VGET            &RM22VGET
WRITE &PGMNAME &CARM0422 RM422RC         &RM422RC
WRITE ===============================================================
WRITE &PGMNAME LMCOMP_PDIDD_RC          &LMCOMP_PDIDD_RC
WRITE &PGMNAME LMCLOSE_PDIDD_RC         &LMCLOSE_PDIDD_RC
WRITE &PGMNAME LMCLOSE_SENSITVE_RC      &LMCLOSE_SENSITVE_RC
WRITE &PGMNAME LMFREE_PDIDD_RC          &LMFREE_PDIDD_RC
WRITE &PGMNAME LMFREE_SENSITVE_RC       &LMFREE_SENSITVE_RC
WRITE &PGMNAME LMFREE_CNTL_RC           &LMFREE_CNTL_RC
END
EXIT CODE(0)
END
