pause-café
destinée aux informaticiens sur plateforme IBM i.
Pause-café #44
Microsoft Vista et les produits pour iSeries
Compatibilité des produits IBM avec Vista ©
De nombreux problèmes sont liés au nouveau fonctionnement de Vista
en ce qui concerne la gestion des droits, les UAC
en bref, un utilisateur du groupe Administrateur possède 2 jetons de sécurité
- un jeton restreint, utilisé par défaut, qui fait que, parceque
cet utilisateur est administrateur, certaines actions lui sont interdites
- un jeton complet, utilisé par l'option "Exécuter en tant
qu'administateur"
- un utilisateur "lamda", ne possède qu'un seul
jeton, s'il demande l'exécution en tant qu'administrateur, il doit
se signer.
Vous pouvez enlever les UAC, mais vous retrouverez certains risques des versions précédentes,
en cliquant sur votre portrait (dans le menu démarrer), puis
- Operation Console ne fonctionne pas !
- le drag&drop de spool dans iseries navigator
- AFP workbench viewer, fonctionne de manière aléatoire
- la vérification du niveau de service pack ne fonctionne pas au
démarrage (il faut l'enlever dans le paramétrage)
- le gestionnaire d'aide (winhlp32.exe) n'est plus disponible, le système
d'aide ayant changé.
Or les pages d'aide d'iSeries Access, sont écrites dans cette vieille version, particulièrement la page d'accueil qui s'affiche au démarrage.
Vous pouvez télécharger l'ancienne version du gestionnaire d'aide sur le site de Microsoft
- voyez les prochains services
pack pour la résolution de ces problèmes
- PC5250
Sur les versions précédentes, les fichiers de configuration (.ws) sont enregistrés par défaut dans "\Program Files\IBM\Client Access\Emulator\Private" et cet arborescence n'est plus autorisée sans des droits élevés.
la version 5.4 avec SI25949, propose comme chemin (Application Data)\IBM\Client Access\Emulator\Private, ce qui est recommandé par Microsoft. (c'est à dire en fait C:\Users\(nom de user)\AppData\Roaming) ou bien "Mes Documents".
cela peut être précisé par la commande cwbcfg /pc5250path :- *ALLUSERSAPPDATA
- *MYAPPDATA
- *MYDOCUMENT
ou bien dans le paramétrage de iSeries Access (dans le panneau de configuration)
- WDSc
- seule la version 7 est compatible avec Vista
(en fait la version 6 s'installe, mais il ny a pas de support)
- il faut lancer la première fois en tant qu'administratreur (prb
à la création du workspace, sinon)
- seule la version 7 est compatible avec Vista
- Zend Studio
- pas de problème particulier d'installation, ni d'utilisation
- pas de problème particulier d'installation, ni d'utilisation
- Client Notes
- Attention "Support for Windows Vista with Notes 6.5.6 is not currently planned"
- la version 7.0.2 est annoncée compatible, la prochaine (V8) sera
pleinement testée sous Vista
- Divers
- les autres produits que nous utilisons (Dreamweaver,
The Gimp, Squirrel, Eclipse, puTTY, VNC, ..) se sont installés
sans problèmes.
- les autres produits que nous utilisons (Dreamweaver,
The Gimp, Squirrel, Eclipse, puTTY, VNC, ..) se sont installés
sans problèmes.
Quelques annonces pendant les vacances
Après l'annonce des modèles 515, 525
-> voyez
la présentation
générale, si vous avez passé le dernier trimestre
hors du système solaire.
Quelques rectifications par
rapport à l'annonce initiale
-
la facturation par utilisateur (hors utilisateur Web) est en fait au nombre d'utilisateurs concurrents
- la limite de 40 utilisateurs pour le 515 disparaît (annonce en fait annulée au dernier moment)
et des nouveautés, fin Août :
-
-
la version 6 de i5/OS est prévue pour début 2008
-
elle intègrera un cryptage des données sur disque ou sur bande, à la volée.
-
elle implique une ré-encapsulation des programmes (comme au passege CISC/RISC)
Voyez le redbook Getting ready for I5/OS V6R1, pour vous y préparer. -
IBM Director viendrait,à terme, remplacer iSeries navigator
-
-
DB2 Web QUERY, sera disponible à la fin de l'année.
(voyez le "product preview" mais aussi la présentation en Flash)
-
MYSQL ON I5/OS est disponible
- la version open source fonctionne déja et fait tourner notre forum
- cette annonce concerne la version officielle avec support , code 5639-MYS
-
Enfin, DB2 storage engine for MySQL est annoncé et doit permettre à une application écrite pour MYSQL, d'utiliser DB2 for I5/OS.
Utilitaire, un écran de veille 5250
MAIN i5/OS - Menu principal Système: AS400 Choisissez l'une des options suivantes : ########################### 1. Tâches utilisateur # But: # 2. Tâches bureautiques # ---- # 3. Tâches générales du système # Affichage d'un écran # 4. Fichiers, bibliothèques et dossiers # de veille automatique # 5. Programmation # # 6. Communications ########################### ........................................................... : Ecran de veille : : Mot de passe ( QSECOFR ) ______________________ : :.........................................................: 11. Tâches d'iSeries Access |
Voyez les sources ici
- STRVEILLE (CMD) démarrage du processus
- STRVEILLEC(CLP) CPP de la commande STRVEILLE
- VEILLEWCH (CLLE) WATCH sur INACT_MSGQ pour mise en veille
- SNDVEILLE (CMD) Envoi écran de veille
- SNDVEILLEC(CLP) CPP de la commande SNDVEILLE
- VEILLEITP (CLP) interruption du JOB pour mise en veille
- VEILLE (CMD) Cmd veille
- VEILLECPP (CLP) CPP de la cde veille
- VEILLEDSPF(DSPF) Ecran pour VEILLE
- Cet outil utilise plusieurs nouveautés :
1/ la notion de WATCH (espion), ici sur le message CPI1126 arrivant dans la MSGQ associé à QINACTMSGQ, détectant
une inactivité écran
- PGM de lancement
/* MISE EN PLACE */
CRTMSGQ MSGQ(QGPL/INACT_MSGQ)
CHGSYSVAL SYSVAL(QINACTITV) VALUE(15)
CHGSYSVAL SYSVAL(QINACTMSGQ) VALUE('QGPL/INACT_MSGQ')
/* LANCEMENT */
WATCH: STRWCH SSNID(VEILLE) WCHPGM(AF4TOOL/VEILLEWCH) +
WCHMSG((CPI1126)) WCHMSGQ((INACT_MSGQ))
ENDPGM
-
PGM (WATCH) appellé automatiquement par le système PGM PARM(&wchoption &session &error &event) DCL VAR(&WCHOPTION) TYPE(*CHAR) LEN(10) DCL VAR(&session) TYPE(*CHAR) LEN(10) DCL VAR(&error) TYPE(*CHAR) LEN(10) DCL VAR(&DATA) TYPE(*CHAR) LEN(1024) DCL VAR(&event) TYPE(*CHAR) LEN(1024) DCL VAR(&DATALG) TYPE(*INT) STG(*DEFINED) LEN(4) + DEFVAR(&EVENT) DCL VAR(&OFFSET) TYPE(*INT) STG(*DEFINED) LEN(4) + DEFVAR(&DATA 441) DCL VAR(&MSGLG) TYPE(*INT) STG(*DEFINED) LEN(4) + DEFVAR(&DATA 445) DCL VAR(&MSG) TYPE(*CHAR) LEN(256) DCL VAR(&JOB) TYPE(*CHAR) STG(*DEFINED) LEN(10) + DEFVAR(&MSG) DCL VAR(&USER) TYPE(*CHAR) STG(*DEFINED) LEN(10) + DEFVAR(&MSG 11) DCL VAR(&JOBNBR) TYPE(*CHAR) STG(*DEFINED) + LEN(6) DEFVAR(&MSG 21)
IF COND(&MSGLG > 256) THEN(CHGVAR &MSGLG 256) chgvar &msg %sst(&data &offset &msglg)
SNDVEILLE JOB(&JOBNBR/&USER/&JOB) CHGVAR VAR(&ERROR) VALUE(' ')
ENDPGMchgvar &data %sst(&event 1 &datalg)
2/ l'interruption de travail (voir les nouveautés I5/OS,V5R4) permettant d'interrompre un travail, afin de lancer un
pgm (voir API QWCJBITP et la sysval QALWJOBITP)
-
Demande d'interruption
PGM PARM(&JOBQUAL &MISEABLANC) DCL VAR(&JOBQUAL) TYPE(*CHAR) LEN(26) DCL VAR(&MISEABLANC) TYPE(*CHAR) LEN(4)DCL VAR(&DATA) TYPE(*CHAR) LEN(64) DCL VAR(&DATALG) TYPE(*INT) LEN(4) VALUE(60) DCL VAR(&ERRCODE) TYPE(*INT) VALUE(0)
CHGVAR %SST(&DATA 1 10) 'VEILLEITP' CHGVAR %SST(&DATA 11 10) 'AF4TOOL' CHGVAR %SST(&DATA 21 26) &JOBQUAL /* JOB QUALIFIÉ */ CHGVAR %SST(&DATA 47 2) X'0000' /* ZONE RESERVÉE */ CHGVAR %BIN(&DATA 49 4) 56 /* OFFSET VERS DATA */ CHGVAR %BIN(&DATA 53 4) 4 /* LG DE DATA */ CHGVAR %SST(&DATA 57 4) &MISEABLANC /* DATA */
/* API d'interruption de travail , si QALWJOBITP=2 */
CALL PGM(QWCJBITP) PARM(&DATA 'JITP0100' &ERRCODE) ENDPGM
-
PGM lancé par l'interruption (VEILLEITP)
PGM PARM(&DATA &DATALG) DCL VAR(&DATA) TYPE(*CHAR) LEN(32) DCL VAR(&DATALG) TYPE(*INT) LEN(4) DCL VAR(&MISEABLANC) TYPE(*CHAR) LEN(4)CRTDTAARA DTAARA(QTEMP/VEILLE) TYPE(*LGL) MONMSG CPF1023 EXEC(RETURN) /* EXISTE DEJA */
CHGVAR VAR(&MISEABLANC) VALUE(%SST(&DATA 1 4))
VEILLE MISEABLANC(&MISEABLANC)
DLTDTAARA DTAARA(QTEMP/VEILLE)
ENDPGM
3/ la vérification du mot de passe, utilise une API (ancienne) et une astuce pour ne pas être interrompue par un appel système
-
PGM PARM(&MISEABLANC)
DCL VAR(&MISEABLANC) TYPE(*CHAR) LEN(4) DCL VAR(&PRF) TYPE(*CHAR) LEN(10) DCL VAR(&PRFCOD) TYPE(*CHAR) LEN(12) DCL VAR(&MDPL) TYPE(*INT) VALUE(32) DCL VAR(&ERRCOD) TYPE(*CHAR) LEN(15) VALUE(X'00000000') DCL VAR(&CCSID) TYPE(*INT) VALUE(-1)DCLF FILE(VEILLEDSPF)
/* GESTION DES ERREURS */ MONMSG MSGID(CPF1907) EXEC(GOTO AFFICHE) /* APP/SYS + 2 */ MONMSG MSGID(CPF0000) EXEC(GOTO ERREUR)/* PRISE D'UN NIVEAU D'EXECUTION POUR INTERCEPTER APP/SYS +2 */ SNDPGMMSG MSG('/* -----(écran de veille)------ */') + TOPGMQ(*EXT) MSGTYPE(*RQS) RCVMSG PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO)
/* C'EST PARTI */ RTVJOBA USER(&PRF) IF COND(&MISEABLANC = '*YES') THEN(SNDF + RCDFMT(EFFACE))
AFFICHE: SNDRCVF RCDFMT(FMT)
/* VALIDATION DU PROFIL DEMANDÉ */ CALL QSYGETPH PARM(&PRF &PWD &PRFCOD &ERRCOD &MDPL &CCSID) MONMSG CPF0000 EXEC(GOTO AFFICHE)
CALL QSYRLSPH PARM(&PRFCOD)
RETURN
Quelques détails techniques
QALWJOBITP : autorise ou non un job a être interrompu
- 0 les travaux ne peuvent pas etre interrompu
- 1 les travaux ne peuvent pas être interrompu, ce paramètre peut être modifié pour un job, par l'API QWCCJITP
- 2 les travaux peuvent être interrompu, ce paramètre peut être enlévé pour un job, par l'API QWCCJITP
L'interruption d'un job se réalise par l'API QWCJBITP, en lui passant, entre autre, le format JITP0100, contenant :
1/ CHAR(10) Program name
2/ CHAR(10) Program library
3/ CHAR(10) Target job name
4/ CHAR(10) Target job user
5/ CHAR(6) Target job number
6/ CHAR(2) (reservé)
7/ BINARY(4) Offset vers les données transmises au pgm
8/ BINARY(4) Lg des données transmises
9/ CHAR(*) Données transmises
10/ CHAR(*) (reservé)
Le programme appellé lors de l'interruption DOIT avoir été déclaré par la commande ADDEXITPGM (option 8 de WRKREGINF) pour le point d'exit QIBM_QWC_JOBITPPGM, format JITP0100.
Il recoit lui même les paramètres 8 ET 9 (données transmises et lg)
Les données transmise ne peuvent dépasser 2000 c. de long.
Quand un job est interrompu de cette manière :
1/ un enregistrement J JS est écrit dans le journal d'AUDIT pour le travail source (celui qui demande l'inetrruption)
2/ un message CPD1690 est enregistré dans la lOG du job interrompu et un enregistrement de type K JS est loggé dans l'AUDIT système
3/ si le pgm se termine normalement un message CPD1691 est enregistré dans la LOG et un enregistrement L JS est noté dans l'AUDIT système
4/ si le pgm se termine de manière Anormale, un message est enregistré dans la lOG (CPF18CE) et aucune trace n'est laissée dans l'AUDIT.
toujours dans la logique "freeware", quelques
exemples de duplication d'informations système sur une machine de Backup
:
1/ sauvegarde des mots de passe utilisateurs (cryptés)
2/ assignation
du mot de passe à partir des données cryptées
3/ création des unités à partir d'un source généré par RTVCFGSRC
4/ pour les autres infos, voyez RTVSYSINF et UPDSYSINF
Utiliser DB2 ET Mysql en PHP
Nous avons intégré notre forum avec la base des adhérents des clubs AS/400 Pays de Loire et Bretagne, pour cela nous voulions
1/ que chaque Adhérent soit enregistré en tant qu'utilisateur du forum (le lien se fait sur l'email)
2/ que chaque nouvelle question fasse l'objet d'un envoi de mail en masse aux adhérents
3/ que chaque adhérent puisse de "désinscrire" de cet envoi automatique (et non du forum)
Lors de la refonte des sites WEB (passage de Net.Data en PHP),
nous avons donc ajouté quelques lignes de code, ainsi qu'aux pages du
forum phpBB
Ajout d'une page d'administration des adhérents permettant de les enregistrer
sur le forum
Code :
// On se connecte à DB2 //Pour éviter de se reconnecter constament à Mysql, //On se connecte dès maintenant et on selectionne la //base de données stockant les données de phpBB $sql = mysql_connect("localhost","user","pwd") or die('erreur lors de la connexion'); $id_db = mysql_select_db("phpBB",$sql) or die("erreur lors de la selection de la base"); //on prépare la requete que l'on stocke dans $resultat $resultat= db2_prepare($db, $requete); $resul = db2_execute($resultat); $lignetab = db2_fetch_array($resultat); //on effectue une boucle pour chaque membre while ($lignetab != FALSE) { //pour chaque adresse e-mail (3 par société) for($i=0;$i<=2;$i++) { //si l'adresse n'est pas vide, i.e si sa taille est supérieure à 4 caractères if ((strlen($lignetab[$i])>4)&&($lignetab[$i][1]!=' ')) { $lignetab[$i]=rtrim($lignetab[$i]); // on écrit l'adresse e-mail et le membre du club correspondant echo("<tr> <td class='text-contenu'> $lignetab[$i] </td><td class='text-contenu'> $lignetab[3] </td>"); //requete avec la table de PhpBB // on détermine la correspondance ou non entre cette adresse et un membre du forum $reponse = mysql_query("select username from phpbb_users where user_email = '".$lignetab[$i]."'",$sql); //si il y a correspondance entre les adresses e-mail if ($donnees = mysql_fetch_array($reponse)) //on indique cette correspondance et on précise le nom d'utilisateur {echo("<td class='text-contenu' colspan='2'> <img src='icmemb.gif'/>". $donnees['username'] . " </td> </tr>");} //sinon else{echo("<td class='text-contenu' colspan='2'> <img src='icon_notmemb.gif'/> <a href='/forum/subscribe.php?id=".$lignetab[$i]."' target='subscribe'>inscrire </a> </td> </tr>");} echo("<tr> <td colspan='4'><hr size='1' color='CCCCC'></td></tr>"); } //end if : l'adresse e-mail n'était pas vide } //end for : on a traité les 3 adresses e-mail //on passe au membre du club suivant $lignetab = db2_fetch_array($resultat); } echo "</table> </div>"; // On se déconnecte de DB2 et de mysql DB2_close(); mysql_close(); |
sur le même modèle, sur la fiche adhérent,
il est possible de modifier ses paramètres d'utilisateur du forum
puis
Pour l'envoi de mail en masse aux adhérents à chaque nouveau post, nous avons créé une table, dans laquelle est insérée
une ligne
(modification des pages php du forum open source, phpBB). Sur cette
table il y a un Trigger qui soumet un travail de facon à rendre la main
très vite.
Dans le même temps, nous avons ajouté un module
"AntiBOT Question" au forum afin d'éviter les inscriptions
automatiques par des robots !
le meilleur des deux mondes, on vous dit ....
Copyright © 1995,2007 VOLUBIS