Api : QSYGETPH QWTSETP QSYRLSPH élévation de profil

RPG (3 et 4, free), CL, SQL, etc...
Répondre
BrigitteG
Messages : 109
Enregistré le : jeu. 20 sept. 2012, 08:56:38

Api : QSYGETPH QWTSETP QSYRLSPH élévation de profil

Message par BrigitteG »

Bonjour,

Devant utiliser les droits d'un utilisateur lors d'un traitement lancé par un autre utilisateur, j'utilise ces trois APIs.

Mon but étant de pouvoir utiliser deux commandes dans des CL. La première (Commande1) pour changer le profil d'exécution et la seconde (Commande2) revenir au profil d'origine.

Commande1 fait :

QSYGETPH --> pour le profil A en cours avec handle1 (Profile handle 12)
QSYGETPH --> pour le profil B avec droit avec handle2 (Profile handle 12)

QWTSETP --> handle2

Commande2 fait :

QWTSETP --> handle1
QSYRLSPH --> handle1
QSYRLSPH --> handle2

CL fait

Code : Tout sélectionner

Call CL parm(B) ---> profil d'élévation

Commande1    B handle1 handle2

Traitement ...

Commande2   handle1 handle2
L'élévation du profil fonctionne et mon traitement se fait bien.

Par contre la remise du profil d'origine ne marche pas, je reste sous profil élevé.

Après recherche, je trouve des exemples. Mais les trois apis sont toujours dans le même programme.

J'ai fait le test suivant :

Code : Tout sélectionner

 PGM   PARM(&SUUSER)                                     
                                   
DCL        VAR(&SUUSER) TYPE(*CHAR) LEN(10)             
DCL        VAR(&HCURUSER) TYPE(*CHAR) LEN(12)           
DCL        VAR(&HSUUSER) TYPE(*CHAR) LEN(12)            

CALL       PGM(QSYS/QSYGETPH) PARM('*CURRENT' +         
             '*NOPWDCHK' &HCURUSER)                     
                                                        
CALL       PGM(QSYS/QSYGETPH) PARM(&SUUSER '*NOPWDCHK' +
             &HSUUSER)                                  
                                                        
DSPJOB     OPTION(*STSA)                                
                                                        
CALL       PGM(QSYS/QWTSETP) PARM(&HSUUSER)             
                                                        
DSPJOB     OPTION(*STSA)                                
CALL PGM(STRSUGBT)                                
CALL       PGM(QSYS/QWTSETP) PARM(&HCURUSER) 
                                             
DSPJOB     OPTION(*STSA)                     
CALL       PGM(QSYS/QSYRLSPH) PARM(&HCURUSER)
CALL       PGM(QSYS/QSYRLSPH) PARM(&HSUUSER) 
                                             
DSPJOB     OPTION(*STSA)                     
ENDPGM                                       
Je change bien de profil, le traitement s'exécute et je reviens bien au profil d'origine.

Je me pose la question suivante : Est-il possible de séparer l'élévation du profil et le retour au profil d'origine en utilisant des programmes séparés ?

Pouvez-vous m'aider sur ce problème?

Je vous en remercie d'avance.

BrigitteG
Messages : 109
Enregistré le : jeu. 20 sept. 2012, 08:56:38

Api : QSYGETPH QWTSETP QSYRLSPH élévation de profil

Message par BrigitteG »

J'ai trouvé une solution.

A priori "le fait de passer les handle en paramètre ne permet pas de se remettre à l'état initial".

Dans la commande2, je fais

Code : Tout sélectionner

RTVJOBA USER et CURUSER   

CALL       PGM(QSYGETPH) PARM('user' '*NOPWDCHK' +
             &HCURUSER)

CALL       PGM(QWTSETP)  PARM(&HCURUSER)
CALL       PGM(QSYRLSPH) PARM(&HCURUSER)

CALL       PGM(QSYGETPH) PARM(CURUSER '*NOPWDCHK' &HSUUSER)
CALL       PGM(QSYRLSPH) PARM(&HSUUSER)                    
Au début du cl dans user j'ai le profil d'origine, dans curuser j'ai le profil élevé.
A la fin du cl dans user et curuser j'ai le profil d'origine

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

élévation en deux pgm distincts

Message par cmasse »

Sinon, je proposait ca :

1er pgm

Code : Tout sélectionner

/* VALIDATION DU  PROFIL ACTUEL */                                     
            CALL QSYGETPH  PARM('*CURRENT' ' ' &CURCOD)                
            CRTDTAARA  DTAARA(QTEMP/CURCOD) TYPE(*CHAR) LEN(12)        
             MONMSG CPF0000                                            
            CHGDTAARA  DTAARA(QTEMP/CURCOD *ALL) VALUE(&CURCOD)        
/* VALIDATION DU  PROFIL DEMANDÉ */                                    
            CALL QSYGETPH  PARM(&PRF &PWD &PRFCOD &ERRCOD &MDPL &CCSID )
                                                                       
/* CHANGEMENT DE PROFIL */                                             
            CALL QWTSETP  PARM(&PRFCOD)                                
            RETURN                                                     
dans le 2eme

Code : Tout sélectionner

             RTVDTAARA  DTAARA(QTEMP/CURCOD *ALL) RTNVAR(&CURCOD)     
 /* RETOUR AU PROFIL D'ORIGINE */                                     
             CALL QWTSETP  PARM(&CURCOD)                              
/* ANNULATION DES VALIDATIONS DE PROFIL */                            
             CALL QSYRLSPH  PARM(&CURCOD)                        
     
A priori ça marche !
Christian Massé (Volubis.fr)

BrigitteG
Messages : 109
Enregistré le : jeu. 20 sept. 2012, 08:56:38

élévation en deux pgm distincts

Message par BrigitteG »

Merci pour la solution

manae
Messages : 58
Enregistré le : mar. 21 juin 2011, 07:08:24

(sans texte)

Message par manae »

Bonjour,

solution intéressante dans le cas ou on ne peut pas recompiler les objets
en question.

cordialement

Répondre