Release 2.0 of OS/400 contains several new system values that can help with password management. One of the most useful is the Password Validation Program (QPWDVLDPGM). By specifying a program and it's library in this parameter, you can allow a program to process the information entered in the CHGPWD command. This can be very useful in refining your security. I have written my own password validation program, VLDPASSWRD (see Figures 1- 6 below). It has two functions: it checks for certain words that you do not want used as passwords (e.g., user name), and it captures the password information at the time it is being changed. By capturing password information, the security administrator can inquire into passwords - something OS/400 doesn't normally allow you to do.
Once you assign a validation program to QPWDVLDPGM system value, every time the CHGPWD command is called (explicitly or automatically at password expiration time), the validation program is executed.
The VLDPASSWRD program uses two files. File EXCLDPWDS contains passwords you want to exclude, and file PASSWORDS contains all passwords that have been changed, the date they were changed, and the new password. VLDPASSWRD first checks the EXCLDPWDS file to see if the new password is one to be excluded. If it is, CL program INVPWD is called in order to send the display file INVPWDDF which informs the user the password is not allowed. (I had to create a CL program to display the screen since one file was already declared in VLDPASSWRD.) If the new password makes it through the exclusion check, the RPG program PASSWORDR is called to store the password information in file PASSWORDS.
There are several things you should consider:
Only passwords changed through the CHGPWD command will be processed. Passwords created by CRTUSRPRF or changed by CHGUSRPRF will not be processed.
You must have special authority of *SECADM to update the QPWDVLDPGM system value.
The two files EXCLDPWDS and PASSWORDS should be owned by QSECOFR with *PUBLIC authority set to *EXCLUDE.
Jim Moran Auburn, Alabama
TechTalk: Password Management Made Easier
Figure 1 CL program VLDPASSWRD
VLDPASSWRD: + PGM PARM(&NEWPW &OLDPW &RTNCODE) DCL VAR(&NEWPW) TYPE(*CHAR) LEN(10) DCL VAR(&OLDPW) TYPE(*CHAR) LEN(10) DCL VAR(&RTNCODE) TYPE(*CHAR) LEN(1) DCL VAR(&USER) TYPE(*CHAR) LEN(10) DCL VAR(&DAT1) TYPE(*CHAR) LEN(6) DCLF FILE(EXCLDPWDS) RTVJOBA USER(&USER) DATE(&DAT1) CHGVAR VAR(&RTNCODE) VALUE('0') READ: + RCVF MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(NXTCHK)) IF COND(&NEWPW *EQ &EXCLDPWD) THEN(DO) CHGVAR VAR(&RTNCODE) VALUE('1') CALL PGM(INVPWD) RETURN ENDDO GOTO CMDLBL(READ) NXTCHK: + IF COND(&RTNCODE *EQ '0') THEN(DO) DSPOBJD OBJ(QSYS/&USER) OBJTYPE(*USRPRF) DETAIL(*FULL) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/WORK1) CHGDTAARA DTAARA(*LDA (1 10)) VALUE(&OLDPW) CHGDTAARA DTAARA(*LDA (11 10)) VALUE(&NEWPW) CHGDTAARA DTAARA(*LDA (21 10)) VALUE(&USER) CHGDTAARA DTAARA(*LDA (31 36)) VALUE(&DAT1) CALL PGM(MIDRANGE/PASSWORDR) CHGVAR VAR(&RTNCODE) VALUE('0') ENDDO ENDPGM
TechTalk: Password Management Made Easier
Figure 2 RPG program PASSWORDR
FPASSWORDUF E K DISK A FWORK1 IF E DISK I UDS I 1 10 OLDP1 I 11 20 NEWP1 I 21 30 USER1 I 31 360DATS C READ WORK1 99 C MOVE ODOBTX TEXT C USER1 CHAINPASSWORD 99 C MOVE USER1 USER C MOVE OLDP1 OLDPW C MOVE NEWP1 NEWPW C Z-ADDDATS DATE C *IN99 IFEQ '0' C UPDATPWORD C ELSE C WRITEPWORD C END C MOVE '1' *INLR C RETRN
TechTalk: Password Management Made Easier
Figure 3 Physical file PASSWORD
A R PWORD A USER 10 A OLDPW 10 A DATE 6P 0 A NEWPW 10 A TEXT 50 A K USER
TechTalk: Password Management Made Easier
Figure 4 Physical file EXCLDPWDS
A R EWORD A EXCLDPWD 10
TechTalk: Password Management Made Easier
Figure 5 CL program INVPWD
INVPWD: + PGM DCLF FILE(INVPWDDF) RCVF ENDPGM
TechTalk: Password Management Made Easier
Figure 6 Display file INVPWDDF
A DSPSIZ(24 80 *DS3) A R FMT01 A INZRCD A 10 30'Password not allowed!' A DSPATR(HI) A DSPATR(BL)
LATEST COMMENTS
MC Press Online