Skip to main content

External Interfaces

This section describes external interfaces that either provide functionality beyond the scope of Mainframe Connector and its interfaces to the security products "new password" exits, or provide extensions to how the Mainframe Connector user exits (PSNCUX01 or PSNCUX02 ) can be used.

Requesting Mainframe Connector validation external to new password exits

Up to this point, any reference to establishing a dialogue between Mainframe Connector and the Bravura Pass server for password strength validation and synchronization has used a security product "new password" exit as the trigger. This section discusses an external application programming interface (API) that can be used to invoke Mainframe Connector outside the scope of the z/OS security product. This external API is PSNCSSC , the Mainframe Connector SubSystem Call.

PSNCSSC is an assembler based API and is invoked from an assembler program through a macro interface. It can be used from a stand-alone application or program to determine the validity of a potential new password value. This may be appropriate if an application uses its own internal validation method rather then making use of the installed security product.

Member EXAMPL1 in the Mainframe Connector INSTLIB dataset provides an example assembler program for invoking the PSNCSSC service as well as the linkedit information required. Member PSNCSSC in the Mainframe Connector INSTLIB provides the PSNCSSC macro used to generate the call to the PSNCSSC service. The following are some example PSNCSSC macro calls:

*   Determine if PWD1 passes Bravura Pass strength
*   rules for USRID1
         PSNCSSC USERID=USRID1,                                        X
               NPWD=PWD1,                                              X
               RQSTTYPE=TEST,                                          X
               WORKAREA=WORKA
         B     BRTBL1(R15)
BRTBL1   DS    0H
         B     TESTOK            PSNCSSC RC=0
         B     TESTFAIL          PSNCSSC RC=4
         B     TIMEOUT           PSNCSSC RC=8
         B     CONNFAIL          PSNCSSC RC=12
         B     UNKNOWN           PSNCSSC RC=16
         B     STORFAIL          PSNCSSC RC=20
         B     NOPSYNCH          PSNCSSC RC=24
         B     BADPARMS          PSNCSSC RC=28
         B     BADRQSTT          PSNCSSC RC=32
         .
         .
*   Check PWD1 for Bravura Pass strength rules and
*   synchronize if it does
         PSNCSSC USERID=USRID2,                                        X
               NPWD=PWD2,                                              X
               RQSTTYPE=CHNG,                                          X
               WORKAREA=WORKA
         B     BRTBL2(R15)
BRTBL2   DS    0H
         B     CHNGOK            PSNCSSC RC=0
         B     CHNGFAIL          PSNCSSC RC=4
         B     TIMEOUT           PSNCSSC RC=8
         B     CONNFAIL          PSNCSSC RC=12
         B     UNKNOWN           PSNCSSC RC=16
         B     STORFAIL          PSNCSSC RC=20
         B     NOPSYNCH          PSNCSSC RC=24
         B     BADPARMS          PSNCSSC RC=28
         B     BADRQSTT          PSNCSSC RC=32
         .
         .
USRID1   DC    CL8'TEST01'
PWD1     DC    CL8'GOODPWD'
USRID2   DC    CL8'TEST02'
PWD2     DC    CL8'BADPWD'
WORKA    DC    8F

Any program that uses the PSNCSSC services must be linkedited AC(1).

Using RQSTTYPE=TEST on the macro call requires READ access to the FACILITY class PSYNCAPI profile. Using RQSTTYPE=CHNG on the macro call requires update access to the FACILITY class PSYNCAPI profile. For RACF environments, the following commands would be required to create the PSYNCAPI profile and grant RQSTTYPE=CHNG access to user MTECH01 :

  RDEFINE FACILITY (PSYNCAPI) UACC(NONE)
  PERMIT PSYNCAPI ACCESS(UPDATE) CLASS(FACILITY) ID(MTECH01)
  SETROPTS RACLIST(FACILITY) REFRESH

If multiple Mainframe Connector started tasks were being used and the PSNCUIDT table had been created, the following FACILITY class changes would be required:

  RDEFINE FACILITY (PSYNCAPI.ssn) UACC(NONE)
   
  PERMIT PSYNCAPI.ssn ACCESS(UPDATE) CLASS(FACILITY) ID(MTECH01)
   
  SETROPTS RACLIST(FACILITY) REFRESH

where ssn is the subsystem name of the Mainframe Connector subsystem that is to be used by this requester.

Appropriate security definitions for ACF2 or TopSecret environments would also be required if the PSNCSSC service were invoked under those security products' control.

Determining password value acceptability for RACF environments

Under certain circumstances it would be nice to know whether or not a proposed new password value for a given userid passes the rules for a valid RACF password. These rules include:

  • Is the password value different from the userid

  • Is the password value different from the current password

  • Is the password value different from all password values in the password history list

  • Does the password value pass one of the RACF password rules regarding length and character content

  • Does the current day and time fall within the RACF WHEN day and time for the userid

  • Does the password value successfully pass the ICHPWX01 new password exit rules

The PSNCRCFR API provides this capability for RACF environments.

PSNCRCFR is an assembler based API and is invoked from an assembler program through a macro interface. It can be used from a stand-alone application or program to determine if a password value would pass the selected RACF password rule requirements. By default, all of the rules described above are checked. The PSNCRCFR macro call can disable any of the defined rule checks as necessary for any particular request. The default macro parameter settings for rule checking are:

OLDNEWCHK=YES   - check new password against old
HISTCHK=YES     - check new password against history list
RULECHK=YES     - check new password against RACF
                  length & content requirments
WHENCHK=YES     - check current day and time against RACF
                  WHEN day and time
UIDPWDCHK=YES   - check new password against userid
ICHPWX01CHK=YES - check new password against ICHPWX01
                  requirements

Any of these checks can be disabled by specifying NO for the corresponding parameter.

A useful application of this API is in the PSNCUX01 user exit. By default, Mainframe Connector considers any reset or resetexpire request that has been made from the Bravura Pass server as valid and will proceed in performing a RACF administrative reset of the password value. This reset will bypass any of the RACF rule checks. If this is not appropriate for your site, the PSNCRCFR API could be invoke from PSNCUX01 to determine the appropriateness of the proposed password value for the given userid. If the password value were deemed unacceptable, PSNCUX01 could return a return code of 8 and the reset would be rejected on that target z/OS system.

Member EXAMPL2 in the Mainframe Connector INSTLIB dataset provides an example assembler program for invoking the PSNCRCFR service as well as the linkedit information required. Member PSNCRCFR in the Mainframe Connector INSTLIB provides the PSNCRCFR macro used to generate the call to the PSNCRCFR service. Following are some example PSNCRCFR macro calls:

*   Determine if PWD1 for USRID1 passes the RACF password rules
*   but bypass the WHEN day time check
         PSNCRCFR USERID=USRID1,                                       X
               NPWD=PWD1,                                              X
               WHENCHK=NO,                                             X
               WORKAREA=WORKA
         B     BRTBL1(R15)
BRTBL1   DS    0H
         B     GOODPWD1          PSNCRCFR RC=0
         B     BADPARMS          PSNCRCFR RC=4
         B     OLDNEW            PSNCRCFR RC=8
         B     HISTFAIL          PSNCRCFR RC=12
         B     RULEFAIL          PSNCRCFR RC=16
         B     WHENFAIL          PSNCRCFR RC=20
         B     NOUSERID          PSNCRCFR RC=24
         B     USRIDPWD          PSNCRCFR RC=28
         B     PWX01BAD          PSNCRCFR RC=32
         .
         .
*   Determine if PWD2 for USRID2 passes the RACF password
*   rules but bypass the RACF ICHPWX01 new password exit check
         PSNCRCFR USERID=USRID2,                                       X
               NPWD=PWD2,                                              X
               ICHPWX01CHK=NO,                                         X
               WORKAREA=WORKA
         B     BRTBL2(R15)
BRTBL2   DS    0H
         B     GOODPWD2          PSNCRCFR RC=0
         B     BADPARMS          PSNCRCFR RC=4
         B     OLDNEW            PSNCRCFR RC=8
         B     HISTFAIL          PSNCRCFR RC=12
         B     RULEFAIL          PSNCRCFR RC=16
         B     WHENFAIL          PSNCRCFR RC=20
         B     NOUSERID          PSNCRCFR RC=24
         B     USRIDPWD          PSNCRCFR RC=28
         B     PWX01BAD          PSNCRCFR RC=32
         .
         .
USRID1   DC    CL8'TEST01'
PWD1     DC    CL8'GOODPWD'
USRID2   DC    CL8'TEST02'
PWD2     DC    CL8'BADPWD'
WORKA    DC    8F