Programs and code

Over many years I have written hundreds of thousands of lines of code. Most of this was for clients and employers, including IBM. (I was part of the project that wrote the first z/OS healthchecker, and also worked for a short while on zSecure development.) I think a lot of code I wrote is still in use.

The following programs and code are examples of which may be of use to you. All of these programs are supplied without absolute guarantees 😊. But they can be used entirely at your discretion.

CONCATTSO command for dynamic concatenation.
RACFREETSO command to free in-storage RACF resources.
TICKETTSO command to tag RACF SMF records with change id.
ICHRCX02 for Erase On ScratchExit to selectively erase temporary data sets.
CSIREXXREXX interface to read detailed catalog information.
CSFXFERREXX routines to move a key from one CKDS to another CKDS.
REXXENQ0Program to invoke a REXX routine while holding a global ENQ.
RACF SnoopTSO commands and ISPF application to examine RACF security for multiple address spaces

Please contact me if,
– you find problems or bugs in the code,
– you need further information about them,
– you make any enhancements to the code or fix problems yourself. I would also appreciate the opportunity to incorporate your enhancements and/or fixes.

Before providing you access to the code, the links below ask you to provide me a couple of contact details. Then I can contact you if new versions or bug fixes become available or if I have new programs available here.

If you wish, please use the ‘Contact Me‘ page to comment on these programs.

Final note: Many of these packages use files in XMIT format. These files can be viewed on a Windows PC using various software packages. I like the V file viewer. I have no connection with the makers of this software except that I find the software really useful and not expensive.


CONCAT

CONCAT is a TSO command. It is used to dynamically concatenate a data set with an existing DDname. The new data set can be added before or after the existing set. Duplicate data set names can be added. It can also delete a data set from within an existing concatenated set. If the data set to be added is not catalogued then a volume and unit can be supplied. The search for the data set can start from the top or bottom of the concatenated set. CONCAT can also be used to test for the existence of a data set within the concatenation. CONCAT runs without APF authorisation and is very suitable for dynamically manipulating concatenated data sets for use with ISPF.

Enter email to download CONCAT


RACFREE

RACFREE is an APF-authorised TSO command. It can be used to free all the RACF dataset profiles associated with a TSO address space. This means that any changes made to the profiles used by the address space can be actioned without destroying the address space and without affecting all other address spaces, as would be needed if a SETROPTS command was used. The RACF command LISTDSD can be used to perform this action for data set profiles. RACFREE will work for all other classes of profile.

Enter email to download RACFREE


TICKET

TICKET is used to associate a local change identifer with RACF commands.
When RACF change requests are made they are frequently made via a local change request system. Usually multiple commands are needed to fulfil a single request. However, it is often difficult to determine which RACF commands were used to fulfill a given request. SMF records are written for each RACF command, yet they have nothing within them to identify the change request. RACF commands have no way to associate such a change identifier with the command such that the SMF record for the command is tagged with the identifer. Ticket provides a way to resolve this issue.
The TICKET command is supplied with a very small program called TKTU834. This is to be installed at SMF exit point IEFU83 and IEFU84. This can be installed dynamically if required. TKTU834 is required for Ticket to work.
TICKET is an APF-authorised TSO command.

Enter email to download TICKET


ICHRCX02 for Erase On Scratch

This version of the RACF checking post-processing exit ICHRCX02 can be used to implement selective erasure of temporary data sets.

On a standard RACF system the option to erase data sets when they are scratched (or space is partially released) is available with various controls. Data sets can be erased or not erased using selective flags in each RACF generic profile. However, the only way to ensure that temporary data sets are erased is to set your system so that ALL data sets are erased on scratch. Many shops are reluctant to use such a setting. More granularity is required.

When dealing with applications which are to used encrypted data sets, there are issues with temporary data set which are not capable of encryption. This is especially relevant to the SORT program which uses work areas that are not encrypted and that SORT insists are temporary data sets.

One way to at least partially resolve this is to use this version of the RACF ICHRCX02 exit to selectively request data set erasure. I normally recommend this exit is used in conjunction with the setting,
SETROPTS CLASSACT(TEMPDSN)

Enter email to download ICHRCX02 for EOS


CSIREXX

CSIREXX can be used to extract information from the system catalogs using the standard interface IGGCSI00. CSIREXX uses a method similar to the RACF extract program IRRXUTIL. Each value from a catalog is placed into a separate REXX variable.

CSIREXX can be used to search the catalog using the default generic search/locate functions and can extract almost all information needed for the redefinition of data sets or VSAM clusters.

CSIREXX is a very powerful program that can be used to report on data set and cluster details and can be used to build JCL and IDCAMS statements to redefine data sets and clusters.

Enter email for CSIREXX download


CSFXFER

CSFXFER is a REXX program which is used to move DES encryption keys from one site to another. The original use case for this program was a company that was divesting itself of part of its business. The divested business set up a new computer system and moved the data and programs into it. The original company supplied data but would not pass anything over which was not part of the divested business. When it came to encryption keys we needed to agree a process to extract encryption keys from one ICSF system and install them in another. CSFXFER provides a means to handle this situation. It uses a common transport key which is used to export operational keys from one ICSF keystore and them import them into a subsequent keystore.

Enter email for CSFXFER download


REXXENQ0

REXXENQ0 can be used within a REXX routine to invoke another REXX routine, but while the second routine is executing a systems wide ENQ is held. This enables serialised access to a single object which might normally be updated by multiple users across a sysplex. Typically this resource would be a data set. Thus corruptions to that data set due to concurrent updates can be avoided. In addition, the REXX routine invoked can control the nature of those updates.

Enter email for REXXENQ0 download


RACF Snoop

RACF Snoop is an ISPF application which enables the user to examine the RACF environment for multiple address spaces. It is possible see what RACF user ids are in use, current connect group, various attributes and the programs being executed. RACF Snoop requires two APF-authorised TSO commands to work. These will need to be installed into a linklist library.

Included in this package is a manual for RACF Snoop and an older document explaining details of how RACF generic profiles are handled in storage and how to avoid some pitfalls.

Enter email for RACF Snoop download