How to set up the profile exit facility to process passwords for your users?
The VISION:Inform Profile Exit facility can be set up to process passwords for your users. This is especially useful if you require password validation processes to interface with your in-house security system (ACF2, Top Secret, RACF, and so on).
To activate the password validation function of the Profile Exit facility, you must specify the PASSWDX=YES keyword in the VISION:Inform parameter module, PARMBLK. With this option specified, the Profile Exit will be invoked one additional time during the VISION:Inform logon process, just before it processes the user-entered password.
The user exit password verification can either completely replace the VISION:Inform password checking or can be done in addition to VISION:Inform password checking. The parameters passed to the profile exit routine for password verification are:
The user exit for the PASSWD call communicates its results by setting the contents of Register 15 to one of the following values prior to returning to VISION:Inform:
This feature, available now with Release 4.0, contains the same functionality provided by the previously issued RSMs: RSM 2.0/2.1-112, and RSM 3.1-101. If you are running an earlier release of the product with one of these RSM's applied, you now have available, in Release 4.0, the same functionality without the need for applying a Restricted System Modification. Additional information on the VISION:Inform Profile Exit facility is located in the Advantage VISION:Inform Installation Guide, Appendix B.
Sample Assembler code for an exit that passes the VISION:Inform password to RACF for processing is shown below:
PX TITLE 'PROEXITR -- VISION:INFORM R4.0' PROEXITR CSECT * * PROEXITR IS A USER-WRITTEN INTERFACE PROGRAM USED THAT * RECEIVES CONTROL WHEN A USER SIGNS ON (LOGON) AND SIGNS OFF * OFF (LOGOFF) OF INFORM. OPTIONALLY, THIS PROGRAM CAN * RECEIVE CONTROL FOR PASSWORD CHECKING PROVIDED A SPECIAL * SYSTEM MODIFICATION IS APPLIED. * * FOR LOGON, THIS EXIT IS CALLED FOR EACH DATABASE THAT THE * USER CAN ACCESS. * FOR LOGOFF OR PASSWORD CHECKING, THE EXIT IS CALLED ONCE. * * PARAMETER LIST DESCRIPTION * -------------------------- * THE FIRST PARAMETER CONTAINS THE TYPE OF CALL AS FOLLOWS: * * PXTYPE DS CL6 INPUT TYPE OF CALL. CONTAINS THE * VALUE 'LOGON ', 'LOGOFF', * OR 'PASSWD'. * * THE REMAINING PARAMETERS DEPEND ON THE TYPE OF CALL. * * FOR A CALL TYPE OF 'LOGON ' OR 'LOGOFF': * PXUSERID DS CL8 INPUT USERID * PXDBNAME DS CL8 INPUT DATABASE NAME (LOGON ONLY) * PXSELECT DS 10CL79 OUTPUT SELECT STMT (LOGON ONLY) * PXID DS CL30 OUTPUT ID FIELD (LOGON ONLY) * * FOR A CALL TYPE OF 'PASSWD': * PXUSERID DS CL8 INPUT USERID * PXPASSWD DS CL8 INPUT PASSWORD ENTERED * PXCLIENT DS FL1 INPUT CLIENT TYPE FLAG * PXINTACC EQU X'80' INTRACCESS CLIENT * PXBATCH EQU X'40' BATCH SIMULATOR (GORAZ) * PX3270 EQU X'20' 3270 (CICS/IMS) CLIENT * PXJRNY17 EQU X'10' JOURNEY REL 1.7 OR LOWER * PXJRNY20 EQU X'08' JOURNEY REL 2.0 OR HIGHER * * *P REGISTER 15 = 0 OUTPUT PASSWORD ACCEPTABLE *P = 4 VISION:INFORM CHECKS PASSWD *P = ANYTHING ELSE ISSUE PASSWD ERROR MESSAGE * USING *,R12 ESTABLISH ADDRESSABILITY STM R14,R12,12(R13) SAVE REGISTERS LR R12,R15 BASE REGISTER LR R2,R1 GET ADDR OF RETURN AREAS USING PXPRMLST,R2 PARM LIST DSECT L R3,PXTYPEAD LOCATE TYPE FROM INPUT CLC 0(6,R3),=CL6'LOGON' IS THIS A LOGON? BNE PX100 NO - KEEP GOING LA R15,4 LET VISION:INFORM PROCESS IT B PX950 GO RETURN PX100 DS 0H CLC 0(6,R3),=CL6'LOGOFF' IS THIS A LOGOFF? BNE PX200 NO - KEEP GOING LA R15,4 LET VISION:INFORM PROCESS IT B PX950 AND EXIT PX200 DS 0H CLC 0(6,R3),=CL6'PASSWD' IS THIS A PASSWORD? BNE PX800 NO - INVALID ENTRY INTO EXIT L R4,=A(PXDSASIZ) GET SIZE OF WORK AREA (DSA) GETMAIN RU,LV=(R4),LOC=BELOW GET WORK AREA (DSA) ST R13,4(,R1) SET BKWD SAVE AREA LINK ST R1,8(,R13) SET FWD SAVE AREA LINK USING PXDSA,R13 ##### - PXDSA LR R13,R1 SAVE AREA BASE REG L R5,PXCLNTAD GET ADDR OF CLIENT ID FLAG MVC PXCLIENT,0(R5) MOVE CLIENT ID TO WORK AREA TM PXCLIENT,PXBATCH BATCH RUN ? BNO PX300 NO -- DO INFORM CHECKING MVC RACLISTD(RACLSTLN),RACLST ELSE COPY TO DYNAMIC STORAGE L R3,PXUSERAD ADDR OF USERID L R4,PXPSWDAD ADDR OF PASSWORD RACROUTE REQUEST=VERIFY,ENVIR=CREATE,ACEE=PXACEE, X USERID=(R3),PASSWRD=(R4),WORKA=PXRACWRK, X MF=(E,RACLISTD) LTR R15,R15 RETURN CODE OKAY? BNZ PX280 NO - ERROR L R1,PXACEE LOAD ACEE ADDRESS LTR R1,R1 ZERO? BZ PX210 =ES - DELET RACROUTE REQUEST=VERIFY,ENVIR=DELETE,ACEE=PXACEE, X WORKA=PXRACWRK,MF=(E,RACLISTD) PX210 DS 0H LA R15,0 TELL INFORM OKAY - B PX900 (NO INFORM CHECK) PX280 DS 0H LA R15,8 ERROR - BAD PASSWORD B PX900 PX300 DS 0H LA R15,4 LET INFORM CHECK IT B PX900 PX800 DC F'0' INVALID ENTRY INTO EXIT PX900 DS 0H LR R1,R13 GET ADDR OF WORK AREA (DSA) L R4,=A(PXDSASIZ) GET SIZE OF WORK AREA (DSA) L R13,4(R13) RESTORE CALLER'S SAVE AREA FREEMAIN RU,LV=(R4),A=(R1) FREE WORK AREA PX950 DS 0H L R14,12(,R13) RESTORE ALL REGS EXCEPT R15 LM R0,R12,20(R13) {R15 HAS THE RETURN CODE) BR R14 RETURN TO CALLER LTORG R0 EQU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 * RACLST RACROUTE REQUEST=VERIFY,ENVIR=CREATE,ACEE=0, X USERID=0,PASSWRD=0,WORKA=0,MF=L RACLSTLN EQU *-RACLST * PXDSA DSECT PXSAV DS 9D REGISTER SAVE AREA PXCLIENT DS FL1 INPUT CLIENT TYPE FLAG PXINTACC EQU X'80' INTRACCESS CLIENT PXBATCH EQU X'40' BATCH SIMULATOR (GORAZ) PX3270 EQU X'20' 3270 (CICS/IMS) CLIENT PXJRNY17 EQU X'10' JOURNEY REL 1.7 OR LOWER PXJRNY20 EQU X'08' JOURNEY REL 2.0 OR HIGHER * PXACEE DS F ACEE ADDRESS * PXRACWRK DS CL512 MVS ROUTER AND RACF WORK AREA * RACLISTD DS XL(RACLSTLN) RACROUTE PARM LIST * PXDSASIZ EQU *-PXDSA PXPRMLST DSECT PXTYPEAD DS A ADDR OF EXIT TYPE PXUSERAD DS A ADDR OF USERID PXPSWDAD DS A ADDR OF PASSWD PXCLNTAD DS A ADDR OF CLIENT ID END