/* REXX */ /* CLS2REXXed by UMLA01S on 1 Sep 2020 at 14:36:10 */ /*trace r?*/ Signal On NoValue Call On Error Signal On Failure Signal On Syntax Parse source opsys . exec_name . /*********************************************************************/ /* 05/06/2004 JL Nelson Changed to display new findings. */ /* 06/18/2004 JL Nelson Added exit code. */ /* 06/23/2004 JL Nelson Added code to check security system. */ /* 11/03/2004 JL Nelson Skip RACF table - not used. */ /* 01/19/2005 JL Nelson Changed lmmfind error message */ /* 02/24/2005 JL Nelson Changed constants to variables before */ /* rename. */ /* 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. */ /* 07/18/2005 JL Nelson Added typerun check for fso code. */ /* 09/10/2007 CL Fenton Added resource collection. Chgd several */ /* variables and routines being executed by process. */ /* 11/30/2007 CL Fenton Corrected substr for resources. */ /* 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. */ /* 09/01/2020 CL Fenton Converted script from CLIST to REXX. */ /* */ /* */ /* */ /*********************************************************************/ pgmname = "CARC0003 09/01/20" CONSLIST = "OFF" /* DEFAULT IS OFF */ COMLIST = "OFF" /* DEFAULT IS OFF */ SYMLIST = "OFF" /* DEFAULT IS OFF */ TERMMSGS = "OFF" /* DEFAULT IS OFF */ TRACE = "OFF" /* TRACE ACTIONS AND ERRORS */ TYPERUN = "FSO" /* Run for SRRAUDIT | FSO */ CACC1000 = "CACC1000" /* SELECT SECURITY CHECK PGM */ CACT0000 = "CACT0000" /* SELECT MVS REPORT TABLE */ CACT0008 = "CACT0008" /* SELECT RESOURCE REPORT TABLE */ CART0002 = "CART0002" /* SELECT RACF REPORT TABLE */ CACM000T = "CACM000T" /* SELECT edit macro/CACT0000 */ CACM042R = "CACM042R" /* SELECT edit macro/CACT0008 */ CARM0004 = "CARM0004" /* SELECT edit macro/temp4 */ CARM0104 = "CARM0104" /* SELECT edit macro/temp4 */ CARM0005 = "CARM0005" /* SELECT edit macro/RACFRPT */ LISTGRP = "LGT" /* Member in RACFCMDS.RPT */ NOULST = "OFF" /* TURN NO USER LIST OFF */ rc03vput = 0 lminit_temp4_rc = 0 lminit_temp5_rc = 0 lminit_racfrpt_rc = 0 lminit_cntl_rc = 0 lmopen_temp4_rc = 0 lmopen_temp5_rc = 0 lmopen_racfrpt_rc = 0 view_cact0000_rc = 0 cm00trc = 0 cm0tvget = 0 cm0tvput = 0 view_cact0008_rc = 0 view_cart0002_rc = 0 rm004rc = 0 rm005rc = 0 lmclose_temp4_rc = 0 lmclose_temp5_rc = 0 lmclose_racfrpt_rc = 0 lmfree_temp4_rc = 0 lmfree_temp5_rc = 0 lmfree_temp4_rc = 0 lmfree_temp5_rc = 0 lmfree_racfrpt_rc = 0 lmfree_cntl_rc = 0 sysprompt = "OFF" /* CONTROL NOPROMPT */ sysflush = "OFF" /* CONTROL NOFLUSH */ sysasis = "ON" /* CONTROL ASIS - caps off */ Numeric digits 10 /* default of 9 not enough */ maxcc = 0 Arg OPTION do until OPTION = "" parse var OPTION key"("val")" OPTION val = strip(val,"b","'") val = strip(val,"b",'"') optcmd = key '= "'val'"' interpret optcmd end return_code = 0 If trace = "ON" then do /* TURN messages on */ termmsgs = "ON" /* CONTROL MSG */ comlist = "ON" /* CONTROL LIST */ conslist = "ON" /* CONTROL CONLIST */ symlist = "ON" /* CONTROL SYMLIST */ end If CONSLIST = "ON" | COMLIST = "ON" | SYMLIST = "ON" | TRACE = "ON", then Trace ?r syssymlist = symlist /* CONTROL SYMLIST/NOSYMLIST */ sysconlist = conslist /* CONTROL CONLIST/NOCONLIST */ syslist = comlist /* CONTROL LIST/NOLIST */ sysmsg = termmsgs /* CONTROL MSG/NOMSG */ Address ISPEXEC "CONTROL NONDISPL ENTER" "CONTROL ERRORS RETURN" zispfrc = 0 "VPUT (ZISPFRC) SHARED" edit_cart0002_rc = "n/a" "VPUT (CONSLIST COMLIST SYMLIST TERMMSGS) ASIS" /* Determine which security system is running */ return_code = 0 "SELECT CMD("cacc1000 "ACP)" "VGET (ACPNAME ACPVERS) ASIS" If acpname <> "RACF" then do Say pgmname "RACF Job running on the wrong system" Say pgmname acpname acpvers return_code = 20 SIGNAL ERR_EXIT end /*******************************************/ /* INITIALIZE LIBRARY MANAGEMENT */ /*******************************************/ return_code = 0 "LMINIT DATAID(TEMP4) DDNAME(TEMP4)" lminit_temp4_rc = return_code If return_code <> 0 then do Say pgmname "LMINIT TEMP4 RC =" return_code zerrsm return_code = return_code + 16 SIGNAL ERR_EXIT end return_code = 0 "LMINIT DATAID(RACFRPT) DDNAME(RACFRPT)" lminit_racfrpt_rc = return_code If return_code <> 0 then do Say pgmname "LMINIT RACFRPT RC =" return_code zerrsm return_code = return_code + 16 SIGNAL ERR_EXIT end return_code = 0 "LMINIT DATAID(TEMP5) DDNAME(TEMP5)" lminit_temp5_rc = return_code If return_code <> 0 then do Say pgmname "LMINIT TEMP5 RC =" return_code zerrsm return_code = return_code + 16 SIGNAL ERR_EXIT end return_code = 0 "LMINIT DATAID(CNTL) DDNAME(CNTL)" lminit_cntl_rc = return_code If return_code <> 0 then do Say pgmname "LMINIT CNTL RC =" return_code zerrsm return_code = return_code + 16 SIGNAL ERR_EXIT end /*******************************************/ /* OPEN DATASETS */ /*******************************************/ return_code = 0 "LMOPEN DATAID("racfrpt") OPTION(INPUT)" lmopen_racfrpt_rc = return_code If return_code <> 0 then do Say pgmname "LMOPEN RACFRPT RC =" return_code zerrsm return_code = return_code + 16 SIGNAL ERR_EXIT end return_code = 0 "LMOPEN DATAID("temp4") OPTION(INPUT)" lmopen_temp4_rc = return_code If return_code <> 0 then do Say pgmname "LMOPEN TEMP4 RC =" return_code zerrsm return_code = return_code + 16 SIGNAL ERR_EXIT end return_code = 0 "LMOPEN DATAID("temp5") OPTION(OUTPUT)" lmopen_temp5_rc = return_code If return_code <> 0 then do Say pgmname "LMOPEN TEMP5 RC =" return_code zerrsm return_code = return_code + 16 SIGNAL ERR_EXIT end /*******************************************/ /* PUT VARS IN POOL */ /*******************************************/ return_code = 0 "VPUT (CARM0005 TYPERUN LISTGRP RACFRPT CNTL TEMP4 TEMP5 NOULST", "CACT0000) ASIS" rc03vput = return_code If return_code <> 0 then do Say pgmname "VPUT RC =" return_code zerrsm return_code = return_code + 16 SIGNAL ERR_EXIT end /*******************************************/ /* GET TABLE VALUES */ /*******************************************/ return_code = 0 "VIEW DATAID("cntl") MACRO("cacm000t") MEMBER("cact0000")" view_cact0000_rc = return_code return_code = 0 "VGET (CM0TVGET CM0TVPUT CM00TRC TBLMBR) ASIS" view_cact0000_rc = return_code If view_cact0000_rc > 4 then do Say pgmname "VIEW CNTL" cact0000 "RC =" cm00trc zerrsm return_code = return_code + 16 SIGNAL ERR_EXIT end /*******************************************/ /* EDIT RACF REPORTS */ /*******************************************/ tblmbr = strip(tblmbr,"T") Do X = 2 to length(tblmbr) parse var tblmbr . =(x) iter +2 . +1 rptmbr +8 . +1, pdimbr +8 . +1 title "@" . x = pos("#",tblmbr,x) rptmbr = strip(rptmbr,"T") pdimbr = strip(pdimbr,"T") /*Do X = 2 to length(tblmbr)*/ /*iter = substrc(tblmbr,x,2) rptmbr = substrc(tblmbr,x+3,8) pdimbr = substrc(tblmbr,x+12,8) y = pos("@",tblmbr,x) If y > 0 then, title = substrc(x+21,y-1,tblmbr) Else, title = ""*/ x = pos("#",tblmbr,x) rptmbr = strip(rptmbr) pdimbr = strip(pdimbr) return_code = 0 "LMMFIND DATAID("temp4") MEMBER("iter")" If return_code = 0 then do /*******************************************/ /* PUT VARS IN POOL */ /*******************************************/ "VPUT (RPTMBR TITLE) ASIS" return_code = 0 "EDIT DATAID("temp4") MACRO("carm0004") MEMBER("iter")" If return_code > 4 then, Say pgmname "EDIT_TEMP4_RC =" return_code "MEMBER" iter, rptmbr zerrsm end Else, Say pgmname "LMMFIND_TEMP4_RC =" return_code "MEMBER" iter, rptmbr zerrsm end return_code = 0 rectype = 1 pdiname = "" resname = "" "VPUT (RECTYPE PDINAME RESNAME) ASIS" return_code = 0 "VIEW DATAID("cntl") MEMBER("cact0008") MACRO("cacm042r")" view_cact0008_rc = return_code If view_cact0008_rc > 4 then do Say pgmname "VIEW CNTL" cact0008 "RC =" view_cact0008_rc return_code = return_code + 16 SIGNAL BYPASS_CACT0008 end "VGET (REC1TBL) ASIS" Do X = 1 to length(rec1tbl) by 18 rptmbr = substrc(x,x+7,rec1tbl) /* PDI ID*/ title = substrc(x+9,x+16,rec1tbl) /* RESOURCE NAME*/ return_code = 0 "LMMFIND DATAID("temp4") MEMBER("rptmbr")" If return_code <> 0 then, Say pgmname "LMMFIND_TEMP4_RC =" return_code "MEMBER =", rptmbr title zerrsm Else do /*******************************************/ /* PUT VARS IN POOL */ /*******************************************/ return_code = 0 "EDIT DATAID("temp4") MACRO("carm0104") MEMBER("rptmbr")" If return_code > 4 then, Say pgmname "EDIT_TEMP4_RC =" return_code "MEMBER =" rptmbr, title zerrsm end end BYPASS_CACT0008: return_code = 0 If typerun = "SRRAUDIT" then, SIGNAL END_EXIT /*******************************************/ /* GET TABLE VALUES */ /*******************************************/ return_code = 0 "VIEW DATAID("cntl") MACRO(CARM0008) MEMBER("cart0002")" view_cart0002_rc = return_code If return_code > 4 then do Say pgmname "VIEW CNTL" cart0002 "RC =" return_code zerrsm SIGNAL ERR_EXIT end "VGET (RM8VGE ICNT) ASIS" /*******************************************/ /* EDIT RACF REPORTS */ /*******************************************/ Do CNT = 1 to icnt "VGET (ALPHA"cnt "BETA"cnt") ASIS" alpha = strip(value("ALPHA"cnt)) beta = value("BETA"cnt) return_code = 0 "LMMFIND DATAID("temp4") MEMBER("alpha")" If return_code = 0 then do /*******************************************/ /* PUT VARS IN POOL */ /*******************************************/ "VPUT (ALPHA BETA) ASIS" return_code = 0 "EDIT DATAID("temp4") MACRO(CARM0041) MEMBER("alpha")" If return_code > 4 then, Say pgmname "EDIT_TEMP4_RC =" return_code "MEMBER" alpha end Else, Say pgmname "LMMFIND_TEMP4_RC =" return_code "MEMBER =" alpha, zerrsm end /*******************************************/ /* CLOSE OUTPUT */ /*******************************************/ END_EXIT: return_code = 0 "LMCLOSE DATAID("temp4")" lmclose_temp4_rc = return_code return_code = 0 "LMCLOSE DATAID("racfrpt")" lmclose_racfrpt_rc = return_code return_code = 0 "LMCLOSE DATAID("temp5")" lmclose_temp5_rc = return_code /*******************************************/ /* FREE FILES */ /*******************************************/ return_code = 0 "LMFREE DATAID("temp4")" lmfree_temp4_rc = return_code return_code = 0 "LMFREE DATAID("racfrpt")" lmfree_racfrpt_rc = return_code return_code = 0 "LMFREE DATAID("temp5")" lmfree_temp5_rc = return_code return_code = 0 "LMFREE DATAID("cntl")" lmfree_cntl_rc = return_code return_code = 0 /*******************************************/ /* ERROR EXIT */ /*******************************************/ ERR_EXIT: If maxcc >= 16 | return_code > 0 then do "VGET (ZISPFRC) SHARED" If maxcc > zispfrc then, zispfrc = maxcc Else, zispfrc = return_code "VPUT (ZISPFRC) SHARED" Say pgmname "ZISPFRC =" zispfrc end "VGET (RM004RC RM005RC) ASIS" If termmsgs = "ON" then do Say "===============================================================" Say pgmname "VPUT " rc03vput Say pgmname "LMINIT_TEMP4_RC " lminit_temp4_rc Say pgmname "LMINIT_TEMP5_RC " lminit_temp5_rc Say pgmname "LMINIT_RACFRPT_RC " lminit_racfrpt_rc Say pgmname "LMINIT_CNTL_RC " lminit_cntl_rc Say pgmname "LMOPEN_TEMP4_RC " lmopen_temp4_rc Say pgmname "LMOPEN_TEMP5_RC " lmopen_temp5_rc Say pgmname "LMOPEN_RACFRPT_RC " lmopen_racfrpt_rc Say "===============================================================" Say pgmname "VIEW_CACT0000_RC " view_cact0000_rc Say pgmname cacm000t "CM00TRC " cm00trc If cm00trc <> 0 then do Say pgmname cacm000t "VGET " cm0tvget Say pgmname cacm000t "VPUT " cm0tvput end Say pgmname "VIEW_CACT0008_RC " view_cact0008_rc Say pgmname "VIEW_CART0002_RC " view_cart0002_rc Say pgmname carm0004 "RM004RC " rm004rc Say pgmname carm0005 "RM005RC " rm005rc Say "===============================================================" Say pgmname "LMCLOSE_TEMP4_RC " lmclose_temp4_rc Say pgmname "LMCLOSE_TEMP5_RC " lmclose_temp5_rc Say pgmname "LMCLOSE_RACFRPT_RC " lmclose_racfrpt_rc Say pgmname "LMFREE_TEMP4_RC " lmfree_temp4_rc Say pgmname "LMFREE_TEMP5_RC " lmfree_temp5_rc Say pgmname "LMFREE_RACFRPT_RC " lmfree_racfrpt_rc Say pgmname "LMFREE_CNTL_RC " lmfree_cntl_rc Say "===============================================================" end Exit substrc: Procedure If arg(3) = '' Then Do s = Arg(1) l = 1 v = arg(2) End Else Do s = arg(1) l = arg(2)-arg(1)+1 v = arg(3) End Return substr(v,s,l) NoValue: Failure: Syntax: say pgmname 'REXX error' rc 'in line' sigl':' strip(ERRORTEXT(rc)) say SOURCELINE(sigl) SIGNAL ERR_EXIT Error: return_code = RC if RC >= 16 then do say pgmname "LASTCC =" RC strip(zerrlm) say pgmname 'REXX error' rc 'in line' sigl':' ERRORTEXT(rc) say SOURCELINE(sigl) end if return_code > maxcc then maxcc = return_code return