Pause-Café Volubis

pause-café

rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 à 4 fois par an : en Bretagne et sur internet.

Pause-café #44

Septembre 2007

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é

  1. un jeton restreint, utilisé par défaut, qui fait que, parceque cet utilisateur est administrateur, certaines actions lui sont interdites
  2. un jeton complet, utilisé par l'option "Exécuter en tant qu'administateur"

  3. 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


    • ISeries Access (ex Client Access)

      - Seule la version 5.4 avec le service pack SI25949 est compatible (voyez les APAR II14239 et II14247 )

      - certaines fonctionnalités ne marchent pas :
    • 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)



  • Zend Studio
    • 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.

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 :

  • Premier modèle system i à base de power6, le I570 délivre 72000 CPW

  • 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

     90. Fin de session
 Option ou commande  ===> _____________________________________________________________________  F3=Exit   F4=Invite   F9=Rappel   F12=Annuler   F13=Informations techniques  F23=Définir menu initial

Voyez les sources ici

 

  • 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(' ')
    ENDPGM
           chgvar &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
$db = DB2_connect("AS400", "", "");
 //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 ....

Top


Copyright © 1995,2007 VOLUBIS