Contrôle d’un profil et son mot de passe
Ce CL donne un exemple d’utilisation de l’API iSeries QSYGETPH
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* VERIFICATION D'UN PROFIL ET MOT DE PASSE */
/* ACHTUNG BITTE !!!!!!!!!!!!!! */
/* Les profils concernés doivent avoir le droit : */
/* PUBLIC *USE (utiliser WRKOBJ option 2) */
/* API QSYGETPH, cf : http://publib.boulder.ibm.com/iseires/v5r2/ */
/* ic2924/index.htm?info/apis/QSYGETPH.htm */
/* PARAMETRES : */
/* - &NEWUSR : USERID */
/* - &NEWPWD : mot de passe */
/* - &STS : Statut retourné (' '=OK ; 'X'=PROBLEME) */
PGM PARM(&NEWUSR &NEWPWD &STS)
DCL &NEWUSR *CHAR 10
DCL &NEWPWD *CHAR 10
DCL &STS *CHAR 01
DCL VAR(&ERRORCODE) TYPE(*CHAR) LEN(272)
DCL VAR(&USERID) TYPE(*CHAR) LEN(10)
DCL VAR(&PASSWRD) TYPE(*CHAR) LEN(10)
DCL VAR(&HANDLE) TYPE(*CHAR) LEN(12)
DCL &ECRAN *CHAR 10
CHGVAR VAR(&STS) VALUE('X')
RTVJOBA JOB(&ECRAN)
/* Récupère le "handle" du nouvel utilisateur */
CHGVAR VAR(&ERRORCODE) VALUE(X'0110')
CHGVAR VAR(&USERID) VALUE(&NEWUSR)
CHGVAR VAR(&PASSWRD) VALUE(&NEWPWD)
/* V5R3 : faut donner longueur 10 (A en hexadecimal) */
/* et CCSID 65535 (FFFFFFFF) */
CALL QSYGETPH +
(&USERID &PASSWRD &HANDLE &ERRORCODE X'0000000A' X'FFFFFFFF')
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF22E2') THEN(DO)
SNDBRKMSG MSG('Mot de passe incorrect') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF22E3') THEN(DO)
SNDBRKMSG MSG('Profil ' !! &USERID !! ' désactivé') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF22E4') THEN(DO)
SNDBRKMSG MSG('Mot de passe expiré ') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF22E5') THEN(DO)
SNDBRKMSG MSG('Pas de mot de passe pour ' !! &USERID) TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF22E6') THEN(DO)
SNDBRKMSG MSG('Trop de handle générés ') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF22E9') THEN(DO)
SNDBRKMSG MSG('Autorité *USE obligatoire sur le profil') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF2203') THEN(DO)
SNDBRKMSG MSG('Profil ' !! &USERID !! ' incorrect') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF2204') THEN(DO)
SNDBRKMSG MSG('Profil ' !! &USERID !! ' inconnu') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF2213') THEN(DO)
SNDBRKMSG MSG('Profil ' !! &USERID !! ' indisponible') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF2225') THEN(DO)
SNDBRKMSG MSG('Objet système interne indisponible ') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF3BC7') THEN(DO)
SNDBRKMSG MSG('CCSID impossible ') TOMSGQ(&ECRAN )
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF3BDE') THEN(DO)
SNDBRKMSG MSG('CCSID non supporté ') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF3C1D') THEN(DO)
SNDBRKMSG MSG('Problème longueur paramètre 1 ' !! &USERID) TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF3C90') THEN(DO)
SNDBRKMSG MSG('Paramètre code erreur non valable ') TOMSGQ(&ECRAN)
MONMSG CPF0000
GOTO FINPGM
ENDDO
IF COND(%SST(&ERRORCODE 9 7) *EQ 'CPF9872') THEN(DO)
SNDBRKMSG MSG('Plantage programme de service, voir le dump') TOMSGQ(&ECRAN)
MONMSG CPF0000
DMPCLPGM
GOTO FINPGM
ENDDO
/** - - - - - OK : TRAITEMENT POSSIBLE - - - - - - - - - - - - - **/
CHGVAR &STS VALUE(' ')
IF COND(%SST(&ERRORCODE 9 7) *EQ ' ') THEN(DO)
/* SNDBRKMSG MSG('Profil ' !! &USERID !! ' OK !') TOMSGQ(&ECRAN)*/
/* MONMSG CPF0000 */
GOTO FINPGM
ENDDO
/** - - - - - - - - - - - - - - - - - - **/
FINPGM: ENDPGM