Vous voulez protéger vos sessions 5250 de la possibilité de faire un Appel systéme
Vous devez mettre en place un programme d’exit (8 possibles)
QIBM_QWT_SYSREQPGMS
Vous devez ensuite indiquer sur chaque profil les programmes à utiliser
Schéma ci dessous
L’utilisateur quand il appuiera sur APP SYST le programme PGM1 sera appelé
Programme Exit ici le 1 , nom du programme APPSYS
**free
// programme QIBM_QWT_SYSREQPGMS contrôle d'accès à la touche
// ATTN REQUEST
// l'utilisateur à ce programme de contrôle son profil il s'exécute
// et il n'a pas le droit
ctl-opt
DFTACTGRP(*NO) ;
Dcl-Pi *N;
Reponse int(10);
// 1 ok
// 0 ko
data Char(128);
End-Pi;
//
Reponse = 0;
*inlr = *on ;
GDATA_QRPGLESRC_APPSYS.TXT
Affichage de GDATA_QRPGLESRC_APPSYS.TXT en cours...
Ce programme est simple , il interdit s’il est appelé
Pour ajouter ce programme :
ADDEXITPGM EXITPNT(QIBM_QWT_SYSREQPGMS)
FORMAT(SREQ0100)
PGMNBR(1)
PGM(Votrelib/APPSYS)
REPLACE(NO)
Dans ==>WRKREGINF pour contrôle
Programme de mise à jour des profils qui devront être concernés par le contrôle
**free
// Programme exit pour protéger appel système
// exit PGM QIBM_QWT_SYSREQPGMS
// Pour que ce programme ce déclenche il faut que vous
// l'indiquiez au niveau du profil
// 8 programmes possibles ici le 1 correspond au PGMNBR(1)
// vous devez utiliser l'API QWTSETPX
ctl-opt
DFTACTGRP(*NO) ;
// paramètre recu le profil à protéger
Dcl-Pi *N;
P_user char(10);
End-Pi;
// prototypage de l'API de mise à jour
Dcl-PR QWTSETPX ExtPgm( 'QWTSETPX');
nbrent int(10) ;
flags char(32) ;
format char(8) ;
user char(10) ;
erreur char(32) ;
End-PR;
// Variables de travail
dcl-s wnbrent int(10) ;
dcl-s wflags char(32) ;
dcl-s wformat char(8) ;
dcl-s werreur char(32) ;
// constantes figuratives
dcl-s inact char(04) inz(x'00000000') ;
dcl-s actif char(04) inz(x'00000001') ;
// Appel du programme
wformat = 'SREQ0100' ;
wnbrent = x'00000004' ;
%subst(wflags :1 : 4) = actif ; <<<<< ici
%subst(wflags :5 : 4) = inact ;
%subst(wflags :9 : 4) = inact ;
%subst(wflags :13 : 4) = inact ;
%subst(wflags :17 : 4) = inact ;
%subst(wflags :21 : 4) = inact ;
%subst(wflags :25 : 4) = inact ;
%subst(wflags :29 : 4) = inact ;
QWTSETPX(wnbrent:wflags:wformat:p_user:werreur) ;
*inlr = *on ;
Programme pour voir les programmes du profil
**free
//
// Lecture des informations sur les profils pour appel système
// sur exit pgm QIBM_QWT_SYSREQPGMS
// Rappel 8 possibilités qui correspondent au PGMNBR de l'exit PGM
//
ctl-opt
DFTACTGRP(*NO) ;
// paramétre le profil
Dcl-Pi *N;
P_user char(10);
End-Pi;
// API de lecture des postes
Dcl-PR QWTRTVPX ExtPgm( 'QWTRTVPX');
rcvvar char(40) ;
rcvlen char(4) ;
format char(8) ;
user char(10) ;
erreur char(32) ;
End-PR;
// déclaration des variables de travail
dcl-s wrcvlen char(4) inz(x'00000028') ;
dcl-s wrcvvar char(40) inz(' ') ;
dcl-s wformat char(8) ;
dcl-s werreur char(32) ;
dcl-s wflags char(32) ;
dcl-s wnbpos int(10) ;
// constantes figuratives
dcl-s inact char(04) inz(x'00000000') ;
dcl-s actif char(04) inz(x'00000001') ;
dcl-s msg char(50) inz(' ') ;
dcl-s i int(10) inz(0) ;
// Appel de l'API
wformat = 'SREQ0100' ;
QWTRTVPX(wrcvvar:wrcvlen:wformat:p_user:werreur) ;
wnbpos = 32; // 8 * 4
// extraction des informations pour les 8 programmes
wflags = %subst(wrcvvar : 9 : 32) ;
for i = 1 by 4 to wnbpos ;
if %subst(wflags : i : 4) = actif ;
msg = %trim(msg) + '*ON' ;
else ;
msg = %trim(msg) + '*OFF' ;
endif;
endfor ;
// affichage du résulat
dsply msg ;
*inlr = *on ;
Remarque :
L’utilisateur ne reçoit aucun message , mais rien ne se passe
Attention, il ne faut pas le mettre sur tous les profils, mais uniquement ceux qui le nécessitent.
Par exemple une fenêtre bloquante de ressaisie de mot de passe pour une option sensible.
Vous pouvez faire la même chose pour le programme ATTN …