Contrôle du mot de passe d'un utilisateur

18-12-2006 à 12:56:06
Bonjour,

J'ai une application sur Windown qui va acceder sur Iserie pour recuperer des donnees, donc je dois controler le user et le password comme j'accede sur Iserie.... (j'ecris le programme de controle) mais je ne sais pas quel fichier qui contiens les users et les passwords. Connaissez-vous des pistes ou des conseils.

Merci d'avance.


Bonjour Phillipe,

J'ai trouve un programme sur ton site (je pense) (http://www.psoriano.freesurf.fr/modele/chkusrpwd.htm). Apres des tentatives, je n'arrive pas, c'est a dire quand j'ai rentre le user et le password (bon ou mauvais) il display tousjour err_id = CPF3C3C. ??? Je ne sais pas si j'ai loupe quelque chose ?? et quand je regarde sur les dumps (mauvais password et bon password) je ne vois pas le different entre les deux.

Peux tu m'expliques pourquoi je n'arrive pas faire marcher ce programme???

Merci a ton aide.

Nguyen.
  • Liens sponsorisés



15-12-2006 à 11:10:28
Bonjour,

peut-on avoir plus de détail sur la façon dont est appelé le programme de contrôle http://www.psoriano.freesurf.fr/modele/chkusrpwd.htm
Car il semble que tu ais un problème concernant le passage de paramètres.
As tu testé l'appel du programme à partir d'une ligne de commande as400 du genre 'CALL mabib/CLTUSRPWD PARM('user ' 'pwd ') ?

15-12-2006 à 13:16:04
Bonjour Wilfrid,
Si, j'ai teste ce programme a partir d'une ligne de commande As400 par CALL mabib/CLTUSRPWD PARM('user ' 'pwd '), et j'obtiens tousjours le meme resultat, donc je ne sais pas pourquoi??

15-12-2006 à 14:14:42
Effectivement, je n'avais pas fait attention mais le programme génère volontairement un dump.
Sinon pour aller plus vite, voici un CLP que j'avais fait il y a longtemps basé sur la même API :

PGM PARM(&USER &PASSWORD &VALIDE &MESSAGE &MSGID)

DCL VAR(&USER) TYPE(*CHAR) LEN(10)
DCL VAR(&PASSWORD) TYPE(*CHAR) LEN(10)
DCL VAR(&VALIDE) TYPE(*CHAR) LEN(1)
DCL VAR(&MESSAGE) TYPE(*CHAR) LEN(80)
DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)

DCL VAR(&HANDLE) TYPE(*CHAR) LEN(12)

/*ÀInitialisation */
CHGVAR VAR(&VALIDE) VALUE(' ')
CHGVAR VAR(&MESSAGE) VALUE(' ')
CHGVAR VAR(&MSGID) VALUE(' ')

/*ÀAppel de l'API de contr“le */
CALL PGM(QSYGETPH) PARM(&USER &PASSWORD &HANDLE)

/*ÀProfil utilisateur d‚sactiv‚ */
MONMSG MSGID(CPF22E3) EXEC(DO)
CHGVAR VAR(&MESSAGE) VALUE('Profil utilisateur' +
*BCAT &USER *BCAT 'd‚sactiv‚')
CHGVAR VAR(&MSGID) VALUE('CPF22E3')
ENDDO

/*ÀMot de passe incorrect */
MONMSG MSGID(CPF22E2) EXEC(DO)
CHGVAR VAR(&MESSAGE) VALUE('Mot de passe +
incorrect pour le profil utilisateur' +
*BCAT &USER)
CHGVAR VAR(&MSGID) VALUE('CPF22E2')
ENDDO

/*ÀProfil inexistant */
MONMSG MSGID(CPF2204) EXEC(DO)
CHGVAR VAR(&MESSAGE) VALUE('Profil utilisateur' +
*BCAT &USER *BCAT 'inexistant')
CHGVAR VAR(&MSGID) VALUE('CPF2204')
ENDDO

/*ÀAutre erreur */
MONMSG MSGID(CPF0000) EXEC(DO)
CHGVAR VAR(&MESSAGE) VALUE('Une erreur est survenue +
lors du programme de contr“le du profil +
utilisateur')
CHGVAR VAR(&MSGID) VALUE('*ERREUR')
ENDDO

/*ÀRenvoi des paramŠtres */
IF COND(&MESSAGE *NE ' ') THEN(CHGVAR +
VAR(&VALIDE) VALUE('N'))
ELSE CMD(CHGVAR VAR(&VALIDE) VALUE('O'))

/*ÀFin du programme */
ENDPGM
15-12-2006 à 14:33:03
Bonjour,

Je viens justement de régler ce problème pour un autre utilisateur.
Jusqu'à la V5R2, ce que j'ai publié sur mon site est OK, mais depuis la 5.3, IBM a rendu obligatoires les paramètres 5 et 6 jusque là facultatifs, ces 2 paramètres étant placés après le paramètre facultatif api_error. Donc, outre :

D getprofile pr extpgm( 'QSYGETPH' )
D userid 10a const
D password 10a const
D handle 12a
Db like( api_error )

ajoutez les 2 paramètres en rouge ci-dessous:

DGetProfile pr extPgm('QSYGETPH')
D userid 10a const
D password 10a const
D Handle 12a
Db like( api_error )
D PassLength 10i 0 options(*nopass) Const
D PassCCSID 10i 0 options(*nopass) Const


puis appelez l'API comme suit, en y ajoutant ces 2 paramètres :

/free
callp GetProfile(userid: password:
handle: api_error:
%len(%trim(password):
0 )
;

De cette façon, l'API fonctionnera en 5.2 et au-delà.

Notez que je vais modifier la page de mon site pour na pas renouveler cette erreur à l'avenir.

Voir l'API en 5.2 :
http://publib.boulder.ibm.com/iseries/v5r2/ic2924/index.htm?info/apis/QSYGETPH.htm
Voir l'API en 5.3 :
http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/QSYGETPH.htm



--Message édité par philippe le 15-12-06 à 14:50:56--

--Message édité par philippe le 15-12-06 à 14:53:09--
15-12-2006 à 15:17:52
Bonjour,

Merci Wilfrid et Philippe pour votre réponse rapidement, je vais tester celà lundi prochaine.
Apres lu le CL de Wilfrid et le programme de Phillipe, j'en suis sur que ça marchera!
Je vous informerai du résultat.

Merci encore à votre aide.

Nguyen
15-12-2006 à 16:03:53
Bien vu Philippe, et ceci est valable pour mon exemple de CLP qui à l'époque était fait pour une version <= V5R2
18-12-2006 à 09:39:23
Bonjour Wilfrid et Phillipe,
Aujourd'hui j'ai teste 2 programmes : le CL et RPGLE
Le CL ne marche pas, il entre tousjours dans "Une erreur est survenue lors du programme de contrle du profill utilisateur" je ne sais pas pourquoi ??
Le RPGLE ca marche tres bien. .
Merci encore a votre aide Wilfrid et Phillipe

Remarque : Dand RPGLE il y a 1 petit erreur de syntaxe
--------------------------------------------------------
/free
callp GetProfile(userid: password:
handle: api_error:
%len(%trim(password):
0 );
---------------------------------------------------------
Il faut ecrire comme

/free
callp GetProfile(userid: password:
handle: api_error:
%len(%trim(password)):0);
/end-free

----------------------------------------------------------
Phillipe,
Si tu peut modifier la page de ton site pour corriger cette faute, parce que si quel qu'un ne connais pas bien le RPGLE (comme moi par exemple , il va perde beaucoup de temps et il va douter que le programme ne marche pas) Comme moi ce matin j'ai compile le programme il y a 2 erreurs :
*RNF0312 20 1 A right parenthesis is expected but is not found.
*RNF0317 20 1 Too many parameters are specified for this built-in function
Donc j'ai ajoute 1 ')' j'ai recompile le programme il reste une erreur : *RNF0317 20 Too many parameters are specified for this built-in function.
ET comme il ya trop parameter j'ai enleve le 0, j'ai recompile le programme et ca passe a la compile, mais quand j'ai lance le programme, quelle surprise: Tousjours le meme code erreur CPF3C36 E Number of parameters, &1, entered for this API was not valid. Donc j'ai du cherche, chercher et rechercher encore jusqu'a j'ai trouve le systaxe exacte et le programme marche impeccable.
Merci encore a vous.

18-12-2006 à 12:51:33
Nguyen,
J'ai fait le nécessaire sur la page de mon site et ai ajouté la parenthèse absente (un copier-coller un peu trop rapide sans doute ). Je te remercie de me l'avoir signalé et suis désolé de t'avoir fait chercher si longtemps une erreur de compil malgré tout simple à corriger...

Wilfrid,
En regardant de plus près ton programme CL, j'ai constaté que la gestion des erreurs en retour de l'appel à l'API QSYGETPH ne pouvait pas fonctionner de la façon dont tu l'as programmé. En effet, tu ne peux pas monitorer les erreurs de façon standard avec MONMSG. Lorsque tu veux gérer les erreurs en retour d'une API qui utilise le paramètre standard API_ERROR, il faut que tu extraies les valeurs de &msgid et de &msgdta de la zone &apierror ( voir le programme RPG IV CHKUSRPWD sur mon site pour connaître les sous-définitions de la zone &apierror ) et que tu affiches l'erreur avec la commande SNDPGMMSG comme l'illustre l'exemple ci-dessous :

dcl &apierror *char 144
dcl &passlen *char 4 x'00000000'
dcl &passccsid *char 4 x'00000000'
dcl &zerobin *char 4 x'00000000'

/* Récupération astucieuse de la longueur du password */
RTVMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&password) MSGLEN(&len)

/* Conversion longueur password récupérée en binaire */
CHGVAR %bin(&passlen) &len

/* Appel de l'API de contrôle */
CALL PGM(QSYGETPH) PARM(&USER &PASSWORD &HANDLE &apierror +
&passlen &passccsid)
if ( %sst(&apierror 5 4) *ne &zerobin ) do
chgvar &msgid %sst( &apierror 9 7 )
chgvar &msgdta %sst( &apierror 17 128 )
sndpgmmsg msgid( &msgid ) msgdta( &msgdta ) msgf( qcpfmsg )
enddo



--Message édité par philippe le 18-12-06 à 12:53:11--
18-12-2006 à 12:56:06
Merci Philippe pour cette mise au point !
  • Liens sponsorisés