/************************* REXX **************************************/ /* */ /* Generate the report criteria with date for the unused lid */ /* reports. */ /* */ /*********************************************************************/ Signal On NoValue Call On Error Signal On Failure Signal On Syntax Parse source opsys . exec_name . /*********************************************************************/ /* Change summary: */ /* 2016/10/12 CL Fenton initial creation of script to generate */ /* the unused active, unused canceled, and unused */ /* suspend lid reports, STS-015856. */ /* 2019/10/18 CL Fenton Changes made to automate ACP00310 and */ /* generate finding details, STS-023407. */ /*********************************************************************/ PGMNAME = 'CAAC0005 10/18/19' COMLIST = 'OFF' CONSLIST = 'OFF' SYMLIST = 'OFF' TERMMSGS = 'OFF' TRACE = 'OFF' CACC1000 = "CACC1000" /* Security check program */ maxcc = 0 return_code = 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 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 Address ISPEXEC "VPUT (CONSLIST COMLIST SYMLIST", "TERMMSGS) ASIS" Address ISPEXEC "SELECT CMD("cacc1000 "ACP)" /*********************************************************************/ /* */ /* Obtain the data set name for the ACF2CMDS.RPT. */ /* */ /*********************************************************************/ tst = listdsi("ACF2CMDS" "FILE") outdsn = sysdsname tst = listdsi("PDIDD" "FILE") pdidsn = sysdsname /*********************************************************************/ /* */ /* This section of code calculates the data in the correct format. */ /* */ /*********************************************************************/ minus35_date = DATE("U",DATE("B") - 36,"B") /*********************************************************************/ /* */ /* This section of code uses the date to build the report criteria,*/ /* Write it to a temporary data set, and call the ACFRPTCL program.*/ /* */ /*********************************************************************/ Address TSO "alloc fi(sysprint) dsn('"outdsn"(UNUSD35A)') old reuse" "NEWSTACK" QUEUE "INPUT(ACF2)" QUEUE "REPORT(SHORT) DTCFIELD(NO)" QUEUE "TITLE(ACTIVE UNUSED 35 DAYS)" QUEUE "SFLDS(ACC-DATE ACC-CNT PSWD-TOD)" QUEUE "IF(((ACC-DATE LE D'"minus35_date"') AND - " /*QUEUE "(ACC-CNT GT 0) AND NOT(STC) AND - "*/ QUEUE "(ACC-CNT GT 0) AND NOT(STC) AND NOT(RESTRICT) AND - " QUEUE "NOT(SUSPEND) AND NOT(CANCEL) ) OR ((ACC-CNT EQ 0) AND - " /*QUEUE " (PSWD-TOD LE D'"minus35_date"' ) AND - "*/ QUEUE " (PSWD-TOD LE D'"minus35_date"' ) AND NOT(RESTRICT) AND - " QUEUE " NOT(STC) AND NOT(SUSPEND) AND NOT(CANCEL)))" QUEUE "" "EXECIO * DISKW SYSIN (FINIS" Address ISPEXEC "SELECT PGM(ACFRPTSL)" "execio * diskr SYSPRINT (finis stem out." Address TSO "FREE FI(SYSPRINT)" "DELSTACK" say pgmname "Created the unused active lid report." if out.0 < 11 then, queue "Not a Finding " else do queue "Userids found inactive for more than 35 days and not", "suspended." queue " " do x = 1 to out.0 if out.x = " " then iterate if left(out.x,5) <> " " then iterate if left(out.x,19) = " LOGONID NAME" then iterate queue strip(out.x,"t") end queue "" end say pgmname queued() "records written for ACP00310 PDI finding." Address TSO "alloc fi(pdiout) dsn('"pdidsn"(ACP00310)') old reuse" "execio * diskw PDIOUT (finis" "DELSTACK" Address TSO "alloc fi(sysprint) dsn('"outdsn"(UNUSD35C)') old reuse" "NEWSTACK" QUEUE "INPUT(ACF2)" QUEUE "REPORT(SHORT) DTCFIELD(NO)" QUEUE "TITLE(CANCELLED UNUSED 35 DAYS)" QUEUE "SFLDS(ACC-DATE ACC-CNT PSWD-TOD)" QUEUE "IF(((ACC-DATE LE D'"minus35_date"') AND - " QUEUE "(ACC-CNT GT 0) AND NOT(STC) AND - " QUEUE "NOT(SUSPEND) AND (CANCEL) ) OR ((ACC-CNT EQ 0) AND - " QUEUE " (PSWD-TOD LE D'"minus35_date"' ) AND - " QUEUE " NOT(STC) AND NOT(SUSPEND) AND (CANCEL)))" QUEUE "" "EXECIO * DISKW SYSIN (FINIS" Address ISPEXEC "SELECT PGM(ACFRPTSL)" Address TSO "FREE FI(SYSPRINT)" "DELSTACK" say pgmname "Created the unused canceled lid report." Address TSO "alloc fi(sysprint) dsn('"outdsn"(UNUSD35S)') old reuse" "NEWSTACK" QUEUE "INPUT(ACF2)" QUEUE "REPORT(SHORT) DTCFIELD(NO)" QUEUE "TITLE(SUSPENDED UNUSED 35 DAYS)" QUEUE "SFLDS(ACC-DATE ACC-CNT PSWD-TOD)" QUEUE "IF(((ACC-DATE LE D'"minus35_date"') AND - " QUEUE "(ACC-CNT GT 0) AND NOT(STC) AND - " QUEUE "(SUSPEND) AND NOT(CANCEL) ) OR ((ACC-CNT EQ 0) AND - " QUEUE " (PSWD-TOD LE D'"minus35_date"' ) AND - " QUEUE " NOT(STC) AND (SUSPEND) AND NOT(CANCEL)))" QUEUE "" "EXECIO * DISKW SYSIN (FINIS" Address ISPEXEC "SELECT PGM(ACFRPTSL)" Address TSO "FREE FI(SYSPRINT)" "DELSTACK" say pgmname "Created the unused suspend lid report." exit 0 NoValue: Failure: Syntax: say pgmname 'REXX error' rc 'in line' sigl':' strip(ERRORTEXT(rc)) say SOURCELINE(sigl) exit 4 Error: return_code = RC if RC > 4 & RC <> 8 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