Forum Programmation.php Script php pour communication MySQL/LDAP

Posté par  .
Étiquettes : aucune
0
25
août
2008
Bonjour,
J'administre un serveur LDAP dans le cadre d'un stage en entreprise, sur une machine red hat.
Je cherche à faire communiquer une base de données MySQL avec OpenLDAP: en gros, que des modifications dans OpenLDAP entraine des modifications dans MySQL. On m'a dit qu'un script en php pouvait gerer ceci. Comme c'est un langage que je ne maitrise pas, j'aurais aimé obtenir quelques pistes pour la conception d'un script, pas sur le langage en lui-même, mais plutôt sur la manière d'utiliser le php pour permettre dans ce script le log dans ldap et dans la bdd (ça, pas très compliqué), la comparaison des entrées dans ldap ET dans la bdd, puis les modifications à faire le cas échéant...
Merci d'avance.
  • # temps réel ou pas ?

    Posté par  (site web personnel) . Évalué à 1.

    Si tu veux le faire en temps réel, il faudrait un backend mysql pour ton serveur ldap.

    Sinon un script en python, shell ,perl ,php peut faire l'affaire.

    C'est pas trés clair.
    Qu'entends-tu par logguer dans ldap ?
    je comprends => enregistrer les infos dans l'annuaire

    En shell tu as ldapsearch, ldapmodify ...
    Tout depend ce que tu cherches à réaliser.

    Système - Réseau - Sécurité Open Source

    • [^] # Re: temps réel ou pas ?

      Posté par  . Évalué à 1.

      De ce que j'ai lu, le backend sql était plutôt difficile à configurer, si quelqu'un a sous la main un bon tuto que je n'aurais pas trouvé, je ne suis pas contre, sinon j'aurais preferé quelque chose de plus simple, d'où que je me tourne vers php.

      En fait, tout simplement, je souhaiterais que lorsque je modifie les attributs des entrées dans mon ldap, qui sont communes aux entrées de la base de données (liées par le cn par exemple), les modifications s'effectuent dans la base de données.

      Donc à priori, mais je peux me tromper, dans le script, il faudra definir des instructions pour se connecter à la base LDAP et à la base MySQL, puis des instructions pour faire le traitement que je recherche sur la base de données mysql.

      Donc pas forcement en temps réel si la synchronisation est assez reguliere.
      • [^] # Re: temps réel ou pas ?

        Posté par  (site web personnel) . Évalué à 1.

        Ldap est une belle usine à gaz. ( schema, syntaxe des fichiers ldif,
        tuning du backend sous jacent, performance, optimisation,
        indexation des attributs, montée en charge ( si ssl/tls )...

        A priori faire une requete mysql est plus simple qu'une requete ldap.
        Je vois bien faire les requetes l'une après l'autre.

        Bon courage.

        Système - Réseau - Sécurité Open Source

    • [^] # Re: temps réel ou pas ?

      Posté par  . Évalué à 1.

      Disons que je n'ai pas vraiment besoin que la synchronisation se fasse en temps réel, du moment que cela peut être fait regulierement.

      Je m'étais documentée sur le backend mysql, mais j'ai trouvé des choses très brumeuses et incomplètes sur des configurations difficiles à faire...Si quelqu'un connaitrait un bon tutorial pour la configuration basique d'un ldap avec bdd mysql je serais plutôt contente de l'avoir.

      En gros, je voudrais lier les données communes de mon annuaire LDAP et de la base de données.
      Exemple bête et méchant: Je modifie le numero de telephone de monsieur Machin dans l'annuaire LDAP. Mais je voudrais donc que l'entrée "monsieur Machin", qui est dans la base de données MySQL, soit aussi modifié automatiquement, d'où mes interrogations sur un script PHP.

      Donc, je suppose que dans ce script, il faudrait faire quelque chose du genre:
      -Connexion au ldap
      -Connexion à la bdd
      -Requete de comparaison
      -Traitement des données en fonction du resultat (en gros rien si les données se correspondent, ajout ou modification dans le cas contraire)

      Comme je ne connais rien au PHP (mais je sais qu'il y a des instructions déjà créees pour traiter avec LDAP et SQL) j'aurais voulu des pistes pour créer ce script, dans les commandes, le mode de fonctionnement etc...

      Bien sûr, le plus simple aurait été que mon annuaire LDAP attaque directement la base de données via un backend, mais vu que ca me semble plus compliqué qu'un script...
      • [^] # Re: temps réel ou pas ?

        Posté par  . Évalué à 1.

        Hum, j'ai quasiment double posté la même chose parceque je ne voyais pas mon propre message navrée :x
        Enfin j'ai plus détaillé mon problème dans ce post-ci, et ma demande d'aide pour un peu plus de détails tient toujours, merci d'avance.
      • [^] # Re: temps réel ou pas ?

        Posté par  (site web personnel) . Évalué à 1.

        Tu as cherché au moins !!!
        au pif ???
        recherche sur google: 1 er lien
        php ldap

        tu n'as pas besoin de comparer puisque tu mets à jour ldap,
        donc de facto l'entree sql doit l'etre aussi.

        Système - Réseau - Sécurité Open Source

        • [^] # Re: temps réel ou pas ?

          Posté par  . Évalué à 1.

          J'ai ce lien, je l'ai déjà étudié, mais je ne pense pas me tromper en disant qu'il s'agit là d'une utilisation de PHP avec purement LDAP: il n'y ait pas question de MySQL.

          A l'heure actuelle, si je met à jour mon annuaire ldap via un script, comme expliqué sur commentcamarche, il ne va pas du tout s'occuper de faire des modifications dans une base de données SQL avec laquelle l'annuaire ne communique même pas!
          • [^] # Re: temps réel ou pas ?

            Posté par  (site web personnel) . Évalué à 1.

            Tout à fait.

            => google : php + mysql
            et un peu d'imagination et ton pb sera résolu.

            Si tu cherches une solution toute faite,sans bosser dessus c'est mal
            parti !

            Système - Réseau - Sécurité Open Source

  • # Faisable

    Posté par  (site web personnel) . Évalué à 2.

    C'est tout à fait jouable en utilisant les logs de réplication. Tu les actives sur le serveur ldap (man slapd.conf, section loglevel) :

    Ensuite tu les parse avec un script perl / php / le langage que tu veux pour le transformer en requête sql. C'est assez facile, le format c'est du ldiff documenté ici http://www.openldap.org/software/man.cgi?query=slapd.replog&(...) par contre ça peut être un peu laborieux selon la structure de ta base.
    • [^] # Re: Faisable

      Posté par  . Évalué à 1.

      Je viens de me documenter un peu, et effectivement, les log de réplications ont l'air très complets. Donc cela parait faisable sans problème de transformer cela en requête sql directement.
      Le problème c'est qu'alors j'ai nécéssairement besoin de créer un serveur esclave rien que pour cela, vu que justement, les loglevel simples ne permettent pas de voir les modifications faites exactement, j'ai essayé les niveaux 256 et 512: ils voient les modifications, les indiquent, mais ne les décrivent pas.

      Je vais toutefois essayé de faire ça comme ça avec le serveur esclave faute de mieux.
      Merci beaucoup.
      • [^] # Re: Faisable

        Posté par  (site web personnel) . Évalué à 1.

        Essayes 16384 de mémoire
        attention c'est verbose...

        1+2+4+8+16+32+....

        En activant les bits corespondants et les additionnant
        tu dois trouver ton bonheur.

        Système - Réseau - Sécurité Open Source

        • [^] # Re: Faisable

          Posté par  . Évalué à 1.

          Ah oui, dans le man, ils ont la bonne idée de s'arrêter à 2048...
          J'essaie ça, merci.
      • [^] # Re: Faisable

        Posté par  (site web personnel) . Évalué à 2.

        Non, tu ne crée pas de serveur esclave. Tu active simplement les logs sur le serveur. Il sont en théorie destiné à un esclave, mais rien ne t'oblige à en mettre un, d'ailleurs on n'utilise plus cette méthode pour faire des esclaves maintenant.
        • [^] # Re: Faisable

          Posté par  . Évalué à 1.

          Hmm, j'ai eu beau les essayer un par un et tester des combinaisons, aucun des loglevel ne m'a fait recuperer quelque chose qui ressemblerait à une entrée en format ldif.
          (et 16384 ne me ressort carrément rien, nul part, ou alors pas dans les fichiers de log que je lui ai indiqué)
          J'ai essayé d'activer le replogfile, mais il me dit justement qu'il ne peut pas parce que je n'ai crée aucun replica...
          • [^] # Re: Faisable

            Posté par  (site web personnel) . Évalué à 1.

            il faut declarer les aussi le(s) replica(s) dans le slapd.conf

            man slapd.conf ( debian )

            1 (0x1 trace) trace function calls
            2 (0x2 packet) debug packet handling
            4 (0x4 args) heavy trace debugging (function args)
            8 (0x8 conns) connection management
            16 (0x10 BER) print out packets sent and received
            32 (0x20 filter) search filter processing
            64 (0x40 config) configuration file processing
            128 (0x80 ACL) access control list processing
            256 (0x100 stats) stats log
            connections/operations/results
            512 (0x200 stats2) stats log entries sent
            1024 (0x400 shell) print communication with shell
            backends
            2048 (0x800 parse) entry parsing
            4096 (0x1000 cache) caching (unused)
            8192 (0x2000 index) data indexing (unused)
            16384 (0x4000 sync) LDAPSync replication
            32768 (0x8000 none) only messages that get logged


            => 256, et voire 64 pour mettre au point le fichier de conf

            Système - Réseau - Sécurité Open Source

            • [^] # Re: Faisable

              Posté par  . Évalué à 1.

              Bonjour,
              Ayant reçu de nouvelles instructions sur la manière de m'y prendre, je dois abandonner l'idée de scripts php et de récuperation de log pour l'heure, et plutôt me tourner vers le C.

              Merci quand même de votre aide.
              • [^] # Re: Faisable

                Posté par  (site web personnel) . Évalué à 1.

                Comme l'a indique Peck c'est tout à fait jouable en parsant le fichier
                de replication.
                En c, mis à par le changement du langage, qu'est-ce que cela va t'apporter ?

                Système - Réseau - Sécurité Open Source

                • [^] # Changement de programme

                  Posté par  . Évalué à 1.

                  C'est surtout une décision qui ne m'appartient pas, pour le changement de langage. Mais disons que je dois maintenant utiliser les librairies LDAP existantes en C pour pouvoir recuperer la totalité des entrées de l'annuaire, sous forme de ldif et faire le formatage de texte pour donner du sql. Donc plus de question de temps réel, ou de log cette fois, mon script en C sera sûrement executé via une cron de temps à autre...
                  Personnellement pour moi c'est plus simple, le C étant un langage que j'ai étudié, après, c'est sûr que pour le traitement du texte, utiliser php ou perl aurait été plus approprié :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.