PROC 0                                                                -
  CONSLIST(OFF)              /* DEFAULT IS OFF                     */ -
  COMLIST(OFF)               /* DEFAULT IS OFF                     */ -
  SYMLIST(OFF)               /* DEFAULT IS OFF                     */ -
  TERMMSGS(ON)               /* DEFAULT IS OFF                     */ -
  TYPERUN(FSO)               /* Run for SRRAUDIT | FSO             */ -
  CAAM0421(CAAM0421)         /* SELECT EDIT macro SEN(pdi)         */ -
  CACC1000(CACC1000)         /* SELECT SECURITY CHECK PGM          */ -
  CACM000T(CACM000T)         /* SELECT EDIT macro CT0000           */ -
  CACM0422(CACM0422)         /* SELECT EDIT macro AUACCESS(*)      */ -
  CACT0000(CACT0000)         /* SELECT MVS REPORT TABLE            */ -
  CACT0008(CACT0008)         /* SELECT MVS REPORT TABLE            */ -
  CNTLDD(CNTL)               /* Default DDNAME - Security table    */ -
  PDIDD(PDIDD)               /* Default DDNAME - PDI data set      */ -
  TEMP4DD(TEMP4)             /* Default DDNAME - TEMP records      */ -
  DIALOGDD(DIALOG)           /* Default DDNAME - Authorized users  */ -
  AUACCESSDD(AUACCESS)       /* Default DDNAME - Work file         */ -
  TRACE(OFF)                 /* TRACE ACTIONS AND ERRORS           */
 
/* 06/01/2004 JL.NELSON CREATE TO REPORT NEW FINDINGS
/* 07/12/2004 JL.NELSON copied from CARC0420 for TSS
/* 11/16/2004 JL.NELSON Added code for Authorized users
/* 01/25/2005 JL.NELSON Changed to add dslist to PDIs
/* 02/08/2005 JL.NELSON Changed constants to variables
/* 03/28/2005 JL.NELSON Added TYPERUN for Reports without PDIs
/* 06/06/2006 C. STERN  Updated ERROR ROUTINE.
/*                      Removed PDI compress.  Done in last step.
/* 08/08/2006 CL.FENTON Added 'Not a finding' for empty dsn groups.
/* 01/31/2008 CL.Fenton Chgs made to use RESTYPE of DSN.
/* 07/16/2009 CL.FENTON Changes CACT0001 to CACT0000, CACM042V to
/*            CACM000T.  Changes for reflect new table information.
/* 05/23/2012 CL.FENTON Chgs to allow use of AUACCESS for authorized
/*            users list to prevent the possible "IKJ56548I INSUFFICIENT
/*            STORAGE FOR CLIST TO CONTINUE" message from occurring when
/*            a DIALOG user group contains an excessive number of user,
/*            CSD-AR003400969.
/* 08/29/2016 CL.FENTON Correct issue with TBLMBR.
 
SET PGMNAME = &STR(CAAC0420 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 GE 16 THEN +
    WRITE &PGMNAME LASTCC = &LASTCC &ZERRLM
  RETURN
  END
 
SET RETURN_CODE = 0
 
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 AUACCCNT = 0
SET RP = )
SET RETURN_CODE = 0
SET ZISPFRC     = 0
ISPEXEC VPUT (ZISPFRC) SHARED
 
ISPEXEC VPUT ( +
  CONSLIST     +
  COMLIST      +
  SYMLIST      +
  TERMMSGS     +
  CACM0422     +
  TYPERUN      +
  ) ASIS
 
SET AC20VPUT = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN +
  WRITE &PGMNAME VPUT RC = &RETURN_CODE  &ZERRSM
 
/* Determine which security system is running */
 
SET RETURN_CODE = 0
 
ISPEXEC SELECT CMD(&CACC1000 ACP)
 
ISPEXEC VGET ( +
  ACPNAME      +
  ACPVERS      +
  ) ASIS
 
IF &NRSTR(&ACPNAME) NE &STR(ACF2) THEN DO
  WRITE &PGMNAME ACF2 Job running on the wrong system
  WRITE &PGMNAME &ACPNAME &ACPVERS
  SET RETURN_CODE = 12
  GOTO ERR_EXIT
  END
 
/* *************************************** */
/* INITIALIZE LIBRARY MANAGEMENT           */
/* *************************************** */
 
SET RETURN_CODE = 0
 
ISPEXEC LMINIT DATAID(PDIDD) DDNAME(&PDIDD)
SET LMINIT_PDIDD_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMINIT_PDIDD_RC &RETURN_CODE  &ZERRSM
  GOTO ERR_EXIT
  END
 
ISPEXEC LMINIT DATAID(TEMP4) DDNAME(&TEMP4DD)
SET LMINIT_TEMP4_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMINIT_TEMP4_RC &RETURN_CODE     &ZERRSM
  GOTO ERR_EXIT
  END
 
ISPEXEC LMINIT DATAID(CNTL) DDNAME(&CNTLDD)
SET LMINIT_CNTL_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMINIT_CNTL_RC &RETURN_CODE  &ZERRSM
  GOTO ERR_EXIT
  END
 
ISPEXEC LMINIT DATAID(DIALOG) DDNAME(&DIALOGDD)
SET LMINIT_DIALOG_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMINIT DIALOG  RC = &RETURN_CODE  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
ISPEXEC LMINIT DATAID(AUACCESS) DDNAME(&AUACCESSDD) ENQ(EXCLU)
SET LMINIT_AUACCESS_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMINIT AUACCESS  RC = &RETURN_CODE  &ZERRSM
  SET RETURN_CODE = &RETURN_CODE + 16
  GOTO ERR_EXIT
  END
 
SET ODDNAME  = TEMP4
 
LISTDSI &ODDNAME 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 = &NRSTR(&SYSMSGLVL2)
  END
ELSE DO
  WRITE &PGMNAME LISTDSI failed for TEMP4 &SYSREASON
  WRITE &PGMNAME &SYSMSGLVL1
  WRITE &PGMNAME &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
  GOTO ERR_EXIT
  END
 
ISPEXEC LMOPEN DATAID(&CNTL) OPTION(INPUT)
SET LMOPEN_CNTL_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMOPEN_CNTL_RC &RETURN_CODE  &ZERRSM
  GOTO ERR_EXIT
  END
 
ISPEXEC LMOPEN DATAID(&DIALOG) OPTION(INPUT)
SET LMOPEN_DIALOG_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMOPEN_DIALOG_RC &RETURN_CODE  &ZERRSM
  GOTO ERR_EXIT
  END
 
ISPEXEC LMOPEN DATAID(&AUACCESS) OPTION(INPUT)
SET LMOPEN_AUACCESS_RC = &RETURN_CODE
IF &RETURN_CODE NE 0 THEN DO
  WRITE &PGMNAME LMOPEN_AUACCESS_RC &RETURN_CODE  &ZERRSM
  GOTO ERR_EXIT
  END
 
/* *************************************** */
/* PUT VARS IN POOL                        */
/* *************************************** */
 
ISPEXEC VPUT ( +
  PDIDD        +
  TEMP4        +
  CNTL         +
  DIALOG       +
  AUACCESS     +
  AUACCCNT     +
  CACT0000     +
  CACT0008     +
  ) ASIS
 
/* *************************************** */
/* GET TABLE VALUES                        */
/* *************************************** */
 
SET RETURN_CODE = 0
 
ISPEXEC VIEW DATAID(&CNTL) MACRO(&CACM000T) MEMBER(&CACT0000)
 
SET VIEW_CACT0000_RC = &RETURN_CODE
IF &RETURN_CODE GT 4 THEN DO
  WRITE &PGMNAME VIEW_CACT0000_RC &RETURN_CODE  &ZERRSM
  GOTO ERR_EXIT
  END
 
ISPEXEC VGET (TBLMBR) ASIS
 
/*SET TBLMBR = &NRSTR(&TBLMBR.#)
SET TBLMBR = &NRSTR(&TBLMBR)
 
SET RETURN_CODE = 0
 
/* *************************************** */
/* EDIT ACF2  REPORTS                      */
/* *************************************** */
 
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
  IF .&PDIMBR EQ . THEN GOTO DO_END
 
  SET RETURN_CODE = 0
 
  SET LOCATE = &STR(&SYSDSN('&ODSNAME(&RPTMBR)'))
 
  IF &NRSTR(&LOCATE) NE OK THEN DO
    SET RETURN_CODE = 8
    WRITE &PGMNAME SYSDSN_RPTMBR_RC = &RETURN_CODE +
      MEMBER = &RPTMBR for &RPTMBR  &LOCATE
    END
 
  IF &RETURN_CODE EQ 0 THEN DO
    /* *************************************** */
    /* PUT VARS IN POOL                        */
    /* *************************************** */
    SET RESTYPE = &STR(DSN)
 
    ISPEXEC VPUT ( +
      PDIMBR       +
      RPTMBR       +
      ODSNAME      +
      RESTYPE      +
      ) ASIS
 
    /* *************************************** */
    /* Get authorized users                    */
    /* *************************************** */
 
    ISPEXEC EDIT DATAID(&AUACCESS) MACRO(&CACM0422) MEMBER(&RPTMBR)
 
    SET RETURN_CODE = 0
 
 
    ISPEXEC EDIT DATAID(&TEMP4) MACRO(&CAAM0421) MEMBER(&RPTMBR)
 
    IF &RETURN_CODE GT 4 THEN +
     WRITE &PGMNAME DATA_EDIT_RPTMBR_RC = &RETURN_CODE  MEMBER = &RPTMBR
    END
  ELSE +
    IF &NRSTR(&PDIMBR) NE &NRSTR( ) THEN +
      DO
      SET AC = &NRSTR(Not a Finding)
      ISPEXEC LMPUT DATAID(&PDIDD) MODE(INVAR) DATALOC(AC) -
        DATALEN(&LENGTH(&NRSTR(&AC))) MEMBER(&PDIMBR)
      SET AC = &NRSTR( )
      ISPEXEC LMPUT DATAID(&PDIDD) MODE(INVAR) DATALOC(AC) +
        DATALEN(&LENGTH(&NRSTR(&AC)))
      SET AC = &NRSTR(The datasets in this category are not listed +
           for one of the following reasons: )
      ISPEXEC LMPUT DATAID(&PDIDD) MODE(INVAR) DATALOC(AC) +
        DATALEN(&LENGTH(&NRSTR(&AC)))
      SET AC = &NRSTR(1&RP Datasets have been listed previously in +
           other reports.  Therefore, to avoid duplication, they have +
           been omitted from this report. )
      ISPEXEC LMPUT DATAID(&PDIDD) MODE(INVAR) DATALOC(AC) +
        DATALEN(&LENGTH(&NRSTR(&AC)))
      SET AC = &NRSTR(2&RP Datasets were not collected for this +
           category. )
      ISPEXEC LMPUT DATAID(&PDIDD) MODE(INVAR) DATALOC(AC) +
        DATALEN(&LENGTH(&NRSTR(&AC)))
      SET AC = &NRSTR(3&RP A security violation or error occurred +
           with the ACP command used in the collecting of information +
           for datasets. )
      ISPEXEC LMPUT DATAID(&PDIDD) MODE(INVAR) DATALOC(AC) +
        DATALEN(&LENGTH(&NRSTR(&AC)))
 
      SET RETURN_CODE = 0
 
      ISPEXEC LMMADD DATAID(&PDIDD) MEMBER(&PDIMBR)
 
      IF &RETURN_CODE EQ 4 THEN DO          /* MEMBER ALREADY EXISTS
        SET RETURN_CODE = 0
 
        ISPEXEC LMMREP DATAID(&PDIDD) MEMBER(&PDIMBR)
 
        IF &RETURN_CODE NE 0 THEN +
          WRITE &PGMNAME LMMREP_PDIDD_RCODE = &RETURN_CODE &PDIMBR   &ZERRSM
        END
      ELSE +
        IF &RETURN_CODE GT 0 THEN +
          WRITE &PGMNAME LMMADD_PDIDD_RCODE = &RETURN_CODE &PDIMBR   &ZERRSM
      END
DO_END: END
 
/* *************************************** */
/* CLOSE OUTPUT                            */
/* *************************************** */
 
CLOSEUP: +
SET RETURN_CODE = 0
 
ISPEXEC LMCLOSE DATAID(&PDIDD)
SET LMCLOSE_PDIDD_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMCLOSE DATAID(&AUACCESS)
SET LMCLOSE_AUACCESS_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMCLOSE DATAID(&CNTL)
SET LMCLOSE_CNTL_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMCLOSE DATAID(&DIALOG)
SET LMCLOSE_DIALOG_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMCOMP DATAID(&AUACCESS)
SET LMCOMP_AUACCESS_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
SET LMCOMP_PDIDD_RC = &RETURN_CODE
 
/* *************************************** */
/* FREE FILES                              */
/* *************************************** */
 
SET RETURN_CODE = 0
 
ISPEXEC LMFREE DATAID(&PDIDD)
SET LMFREE_PDIDD_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMFREE DATAID(&AUACCESS)
SET LMFREE_AUACCESS_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMFREE DATAID(&CNTL)
SET LMFREE_CNTL_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMFREE DATAID(&DIALOG)
SET LMFREE_DIALOG_RC = &RETURN_CODE
SET RETURN_CODE = 0
 
ISPEXEC LMFREE DATAID(&TEMP4)
SET LMFREE_TEMP4_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 ( +
  AM21VGET     +
  CM0TVGET     +
  CM0TVPUT     +
  ) ASIS
 
IF &TERMMSGS = ON THEN DO
WRITE ===============================================================
WRITE &PGMNAME VPUT                     &AC20VPUT
WRITE &PGMNAME LMINIT_PDIDD_RC          &LMINIT_PDIDD_RC
WRITE &PGMNAME LMINIT_TEMP4_RC          &LMINIT_TEMP4_RC
WRITE &PGMNAME LMINIT_CNTL_RC           &LMINIT_CNTL_RC
WRITE &PGMNAME LMINIT_DIALOG_RC         &LMINIT_DIALOG_RC
WRITE &PGMNAME LMINIT_AUACCESS_RC       &LMINIT_AUACCESS_RC
WRITE ===============================================================
WRITE &PGMNAME LMOPEN_PDIDD_RC          &LMOPEN_PDIDD_RC
WRITE &PGMNAME LMOPEN_CNTL_RC           &LMOPEN_CNTL_RC
WRITE &PGMNAME LMOPEN_DIALOG_RC         &LMOPEN_DIALOG_RC
WRITE &PGMNAME LMOPEN_AUACCESS_RC       &LMOPEN_AUACCESS_RC
WRITE ===============================================================
WRITE &PGMNAME VIEW_CACT0000_RC         &VIEW_CACT0000_RC
WRITE &PGMNAME &CACM000T VGET            &CM0TVGET
WRITE &PGMNAME &CACM000T VPUT            &CM0TVPUT
WRITE &PGMNAME &CAAM0421 VGET            &AM21VGET
WRITE ===============================================================
WRITE &PGMNAME LMCOMP_AUACCESS_RC       &LMCOMP_AUACCESS_RC
WRITE ===============================================================
WRITE &PGMNAME LMCLOSE_PDIDD_RC         &LMCLOSE_PDIDD_RC
WRITE &PGMNAME LMCLOSE_CNTL_RC          &LMCLOSE_CNTL_RC
WRITE &PGMNAME LMCLOSE_DIALOG_RC        &LMCLOSE_DIALOG_RC
WRITE &PGMNAME LMCLOSE_AUACCESS_RC      &LMCLOSE_AUACCESS_RC
WRITE ===============================================================
WRITE &PGMNAME LMFREE_PDIDD_RC          &LMFREE_PDIDD_RC
WRITE &PGMNAME LMFREE_TEMP4_RC          &LMFREE_TEMP4_RC
WRITE &PGMNAME LMFREE_CNTL_RC           &LMFREE_CNTL_RC
WRITE &PGMNAME LMFREE_DIALOG_RC         &LMFREE_DIALOG_RC
WRITE &PGMNAME LMFREE_AUACCESS_RC       &LMFREE_AUACCESS_RC
WRITE ===============================================================
END
EXIT CODE(0)
END
