/* REXX */ /*---------------------------------------------------------------*/ /* */ /* VALUE OF P WILL ROUTE THE OUTPUT TO THE */ /* PRINTER. ANYTHING ELSE WILL DEFAULT TO */ /* THE SCREEN. */ /* ¦ */ /* V */ PARSE UPPER ARG $DEST . say ; say ; say /*--- GET REQUIRED RACF PROFILE VALUE TO PROCESS ------------*/ SAY ; SAY "ENTER THE PROFILE NAME TO LIST -OR-TO EXIT" PULL $prof ; $prof = strip($prof) IF $PROF = '' THEN DO SAY 'EXITING.....' EXIT END /* IF $PROF = ''.... */ /*--- GET THE RACF CLASS THE PROFILE IS IN --------------------*/ say ; SAY 'ENTER THE RACF CLASS THE PROFILE IS IN:' PULL $CLASS ; $CLASS = STRIP($CLASS) ; UPPER $CLASS IF $CLASS = '' THEN DO SAY 'EXITING.....' EXIT END /* IF $class = ''.... */ IF $CLASS = 'DATASET' THEN DO SAY 'USE "TSO RPTdsn" FOR DATASET CLASS PROFILES' SAY 'EXITING.....' EXIT END /* IF $class = ''.... */ SAY /*--- PROMPT TO SCREEN ASKING IF ADDITIONAL RACF GROUP --------*/ /*--- CONNECT LISTINGS ARE WANTED --------*/ $EXPLODE = 'N' SAY 'DO YOU WANT TO EXPLODE THE GROUP CONNECT LISTING? (Y OR N)' SAY ' (THIS WILL RUN A LITTLE LONGER)' PULL $ANSWER ; $answer = strip($answer) ; UPPER $ANSWER IF $ANSWER = 'Y' THEN $EXPLODE = 'Y' IF $ANSWER = 'y' THEN $EXPLODE = 'Y' SAY ; SAY 'WORKING. . . . . . .' /*---DETERMINE WHERE TO ROUTE OUTPUT -------*/ $PRINT_FLAG = 'N' IF $DEST = 'P' THEN $PRINT_FLAG = 'Y' /*------------------------------------------------------------------*/ /* ALLOCATE THE TEMP FILE FOR DISPLAYING THE OUTPUT DATA */ /*------------------------------------------------------------------*/ OUTPUT = "L"RANDOM(99999) SELECT WHEN $PRINT_FLAG = 'Y' THEN /*--- SEND TO PRINTER --------------------------*/ "ALLOC FI("OUTPUT") SYSOUT(A) DEST(U0022) FORMS(STD) , COPIES(1) RECFM(F,B) LRECL(80)" OTHERWISE /*--- SEND TO SCREEN ---------------------------*/ "ALLOC FI("OUTPUT") DELETE TRACK , SPACE (5,5) LRECL(133) RECFM(F B) BLKSIZE(0) UNIT(SYSDA)" END /* SELECT */ /*-------- GET RACF PROFILE INFO --------------*/ Z = OUTTRAP('LIST.') "RLIST" $CLASS $PROF "AUTHUSER" Z = OUTTRAP('OFF') QUEUE QUEUE '***************************************************' QUEUE ' PROFILE:' $PROF ' CLASS:' $CLASS QUEUE ' AS OF:' DATE() QUEUE '***************************************************' QUEUE 'EXECIO 5 DISKW' OUTPUT /*----- PROCESS EACH RECORD FROM THE RACF COMMAND ISSUED --------*/ DO $LOOP1 = 1 TO LIST.0 /*--- CHECK THE FIRST TWO WORDS -----*/ PARSE VAR LIST.$LOOP1 $USERID $ACCESS . /*--- FIND THE ACCESS LIST SECTION -------*/ IF $USERID = 'USER' THEN DO /*--- SECTION FOUND. SKIP SECTION HEADER RECORDS ------*/ $LOOP1 = $LOOP1 +2 /*--- GET THE USERIDS AND ACCESS LEVELS ------*/ DO $LOOP2 = $LOOP1 TO LIST.0 /* DO $LOOP2 = $LOOP1 TO 120 */ $GROUP_FLAG = ' ' PARSE VAR LIST.$LOOP2 $USERID $ACCESS . /*--- THE LAST USERID WAS JUST PROCESSED. EXIT LOOP ----*/ IF $USERID = '' THEN LEAVE $LOOP1 /*-------- GET RACF USERID PROFILE INFO --------------*/ L = OUTTRAP('LU.',1) "LISTUSER" $USERID $RC = RC L = OUTTRAP('OFF') IF $RC = 0 THEN PARSE VAR LU.1 . 'NAME=' $NAME 'OWNER=' . ELSE $NAME = ' ' /*--- ENTITY IN ACCESS LIST NOT A VALID USERID ----*/ IF $RC <> 0 THEN DO /*-------- GET RACF USERID PROFILE INFO --------------*/ G = OUTTRAP('LG.') "LG" $USERID $RC = RC G = OUTTRAP('OFF') /*--- IF A RACF GROUP THEN SET FLAG VALUE ---------*/ IF $RC = 0 THEN $GROUP_FLAG = '*** RACF GROUP ***' ELSE $GROUP_FLAG = '=== INVALID USERID ===' END /* IF $RC <>0... */ QUEUE LEFT($USERID,9) , LEFT($ACCESS,9) , $NAME , $GROUP_FLAG 'EXECIO 1 DISKW' OUTPUT /*--- LIST RACF USERIDS CONNECTED TO THIS RACF GROUP ----*/ IF $GROUP_FLAG = '*** RACF GROUP ***' & $EXPLODE = 'Y' THEN CALL GET_GROUP_MEMBERS END /* DO $LOOP2... */ END /* IF $USER... */ END /*------------------------------------------------------------------*/ /* CLOSE THE 'DISPLAY' FILE */ /*------------------------------------------------------------------*/ QUEUE '' "EXECIO * DISKW "OUTPUT" (FINIS" /*------------------------------------------------------------------*/ /* CLEANUP */ /*------------------------------------------------------------------*/ IF $PRINT_FLAG = 'N' THEN DO /*--------------------------------------------------------------*/ /* DISPLAY RESULTS TO SCREEN */ /*--------------------------------------------------------------*/ ADDRESS ISPEXEC "LMINIT DATAID(DATAID) DDNAME("OUTPUT")" ADDRESS ISPEXEC "BROWSE DATAID("DATAID")" END /* IF PRINT_FLAG... */ "FREE F("OUTPUT")" DROPBUF 0 EXIT /******************************************************************/ GET_GROUP_MEMBERS: /*--- SKIP DOWN UNTIL YOU GET TO THE USERIDS --------*/ DO $R = 4 TO LG.0 UNTIL $USER_HEADER = 'USER(S)=' $USER_HEADER = SUBSTR(LG.$R,5,8) END /* $R */ /*--- GET THE USERID -------------------------------*/ DO $Y = $R+1 TO LG.0 IF SUBSTR(LG.$Y,7,1) = ' ' THEN ITERATE $Y $GR_USERID = SUBSTR(LG.$Y,7,8) /*--- SKIP DOWN TO NEXT LINE TO GET CONNECTION STATUS -----*/ $Y = $Y +1 PARSE VAR LG.$Y . 'ATTRIBUTES=' $STATUS . IF $STATUS = 'NONE' THEN $STATUS = ' ' IF $STATUS = 'REVOKED' THEN $STATUS = 'CONNECT IS REVOKED' IF $GR_USERID <> 'IBPRODPR' & $GR_USERID <> 'IBPRODP1' THEN DO /*-------- GET RACF USERID PROFILE INFO --------------*/ L = OUTTRAP('LU.',1) "LISTUSER" $GR_USERID $RC = RC L = OUTTRAP('OFF') /*--- IF A RACF GROUP THEN SET FLAG VALUE ---------*/ IF $RC = 0 THEN DO $GROUP_FLAG = ' ' PARSE VAR LU.1 . 'NAME=' $NAME 'OWNER=' . END /* IF $RC=0... */ ELSE DO $GROUP_FLAG = 'INVALID USERID' $NAME = ' ' END /* ELSE DO... */ END /* IF $GR_USERID... */ ELSE $GROUP_FLAG = 'TOO MANY IDS TO LIST INDIVIDUALLY' /*--- WRITE OUTPUT RECORD ------------*/ QUEUE ' ' LEFT($GR_USERID,9) $NAME LEFT($STATUS,20) $GROUP_FLAG 'EXECIO 1 DISKW' OUTPUT /*--- SKIP NEXT LINE ---------------------------------------*/ $Y = $Y +1 END /* $Y */ RETURN