Sample SAC table


The following example shows how a SAC table for TSO might look for your installation.

In this hypothetical installation, they have the following situation:

  • Three LPARS.
  • They are known to JES2 as SYS1, SYS2, and SYS3.
  • For historical reasons, users know these systems as the OLD system, the PRODUCTION system, and the TEST system, respectively.
  • The COBOL compiler is licensed on SYS1 .
  • New implementations of COBOL are tested on SYS2. If SYS1 is not available then SYS2 runs as backup for SYS1. When this happens, no testing is allowed.
  • Licensed product PRODX is to run on SYS1 and SYS2 for batch, and only on SYS1 for TSO.
  • Licensed product PRODY is only available on SYS3.
  • Product PRODZ is licensed for all LPARS, but the administrator wants to see its usage pattern to see if he can reduce the number of licenses.
  • Product GONE is to be replaced by a PC-based offering and will not be available after November 30th.
  • There are a number of user IDs for administration purposes that are to be exempted.
  • This list for SYS3, the TEST system, is expanded to include the user IDs for the development team.

The following example shows an implementation of the SAC table to handle the above requirements.

/* SOFTWARE ACCESS CONTROL TABLE */

TYPE(MSGID)
     MSG1(‘USR001I &PRODUCT not licensed for system &CURRENT’)
     MSG2(‘USR002I &PRODUCT cannot be used on system &CURRENT’)
     MSG3(‘USR003I Please use one of the following systems: &SYSTEMS’)
     MSG4(‘USR004I COBOL testing is available on: &SYSTEMS’)
     MSG5(‘USR005I Licensed Software routing in effect for: &PRODUCT’)
     MSG6(‘USR006I Invocation via TSO command not allowed’)
     MSG7(‘USR007I This product will not be available after Nov 30th’)
     MSG8(‘USR008I For a PC-based replacement contact your LAN admin’)
     MSG9(‘USR009I &JOBNUMBER &JOBNAME REFERS TO &PRODUCT’)

  /* PRODUCT DEFINITION SECTION - MUST FOLLOW THE MESSAGE SECTION */

TYPE(PRODUCT)
 COBOL /* IDENTIFIES PRODUCTION COBOL */ +
     NOTES(‘COBOL PRODUCTION’) +
     AGENT(COBOL.PRIMARY,COBOL.SECOND) +
     FAIL_MSG(MSG1) /* MESSAGE FOR TSO USERS */
 COBOL_NEW /* IDENTIFIES NEW VERSION OF COBOL TO TEST */ +
     NOTES(‘COBOL TEST’) +
     AGENT(COBOLT.PRIMARY) +
     FAIL_MSG(MSG2,MSG4)
 PRODXB /* IDENTIFIES PRODUCT X RULES FOR BATCH */ +
     NOTES(‘PRODUCTX BATCH’) +
     AGENT(PRODXB.PRIMARY,PRODXB.SECOND)

 PRODXTSO /* IDENTIFIES PRODUCT X RULES FOR TSO */ +
     NOTES(‘PRODUCTX FOR TSO’) +
     AGENT(PRODXTSO.PRIMARY) +
     FAIL_MSG(MSG2,MSG3)
 PRODY +
     NOTES(‘PRODUCTY’) +
     AGENT(PRODY.PRIMARY) +
     FAIL_MSG(MSG1)

 PRODZ /* FOR THIS PRODUCT ONLY LOGGING FOR USAGE IS IN EFFECT */ +
     NOTES(‘PRODUCTZ’) +
     AGENT($DUMMY) +
     LOG_MSG(MSG9)
 GONE +
     AGENT($DUMMY) +
     WARN_MSG(MSG7,MSG8)

/* THIS SECTION PROVIDES SYSTEM NAME MAPPING */
TYPE(JES2_NAMES)
     SYS1(OLD)
     SYS2(PRODUCTION)
     SYS3(TEST)

/* THIS SECTION ASSOCIATES PANELS, COMMANDS AND PROGRAMS WITH PRODUCTS */
         /* THE TYPE STATEMENTS CAN BE IN ANY ORDER */
         /* EACH PARTICULAR TYPE CAN APPEAR ONLY ONCE */
TYPE(BATCH_PGM)
 IGYCRCTL PRODUCT(COBOL) JOBLOG_MSG(MSG5)
 IGYNEW   PRODUCT(COBOL_NEW) JOBLOG_MSG(MSG5)
 STATS*   PRODUCT(PRODXB) JOBLOG_MSG(MSG5) +
          DDNAME(STAT*)
 RMS*     PRODUCT(PRODY) JOBLOG_MSG(MSG5) +
          DDNAME(RMS*) +
          DSNAME(RMS*.*)
 AAWW*    PRODUCT(PRODZ) SYSLOG_MSG(MSG9)
 GONE*    PRODUCT(GONE) JOBLOG_MSG(MSG7,MSG8)

TYPE(ISPF_PANEL)
 IGYFP02  PRODUCT(COBOL) FAIL
 IGYFP02T PRODUCT(COBOL_NEW) FAIL
 GONE*    PRODUCT(GONE)
 STATP02  PRODUCT(PRODXTSO) FAIL
 RMS?P01  PRODUCT(PRODY) FAIL
 AAWW?P03 PRODUCT(PRODZ) LOG

TYPE(ISPF_PGM)
 IGYCRCTL PRODUCT(COBOL) FAIL
 IGYNEW   PRODUCT(COBOL_NEW) FAIL
 STATS*   PRODUCT(PRODXTSO) FAIL
 RMS*     PRODUCT(PRODY) FAIL
 AAWW*    PRODUCT(PRODZ) LOG

TYPE(ISPF_COMMAND)
 STATCALC PRODUCT(PRODXTSO) FAIL

TYPE(READY_COMMAND)
 STATCALC PRODUCT(PRODXTSO) NOT_ALLOWED(MSG6)

TYPE(COMMAND)
 COBOL    PRODUCT(COBOL) FAIL
 COBOLNEW PRODUCT(COBOL_NEW) FAIL
 RMSCALL  PRODUCT(PRODY) FAIL
 AAWWLOAD PRODUCT(PRODZ) LOG

TYPE(EXEMPT_USERS) /* IDENTIFY SPECIAL USER ID’S THAT ARE EXEMPT */
 FOR JES2_NAME(SYS3)
   DEV*
 ENDFOR
   USER01,BACKUP*,APP??XY

 

Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*