IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

LDAP et perl


Sujet :

Modules Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 11
    Points : 7
    Points
    7
    Par défaut LDAP et perl
    Bonjour à tous . Comme je l'ai déja traité ici , mon objectif est le suivant :

    1 - me connecter à une base SQLite distante
    2 - récupérer certaine valeurs
    3 - envoyer ces valeurs dans le LDAP

    Actuellement , les 2 premières étapes sont franchies et je planche actuellement sur l'utilisation du module Net::LDAP.

    Afin de me familiariser avec , j'ai tenté de faire des listages etc etc et tout marche à merveille. Cependant , je n'arrive pas à écrire dans le LDAP.

    Tout d'abord voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #!/usr/bin/perl
     
    use warnings;
    use strict;
    use Net::LDAP;
    use DBI;
     
    ############# DB ################
     my $BaseDeDonnees = "astsqlite";
     my $NomHote       = "localhost";
     my $login         = "";
     my $MotDePass     = "";
    #################################
     
    ############LDAP################
    my $ldap = Net::LDAP->new("x",port =>389, version => 3) or die "$@";
    my $mesg = $ldap->bind("x",password => "toto");
    $mesg->code && die $mesg->error;
    ################################
     
    my $dbh=DBI->connect( "dbi:SQLite2:dbname=$BaseDeDonnees;host=$NomHote;",,)
        or die "Connection impossible à la base de donnees $BaseDeDonnees !";
     
    my @row;
     
    my $sth = $dbh->prepare("SELECT callerid FROM usersip ");
    $sth->execute();
      print "\n## Debut de la recuperation des utilisateurs Asterisk ##\n\n";
      while ( @row = $sth->fetchrow_array ) {
     
     
      $mesg = $ldap->add( "uid=@row,ou=asterisk,dc=x,dc=fr",
        attr => [
            uid           => '@row',
            cn            => '@row',
            objectClass   =>
                [ 'top', 'organizationalUnit', 'AsteriskSIPUser'],
     
        ]
      );
          print "@row\n";
     
     
            }
      print "\n## Fin de la recuperation ##\n";
    $ldap->unbind;
    Je vais éclaircir un peu mon code.

    Via une interfance web , un admin crée des utilisateurs qui sont entrées dans une base sqlite. Ma mission est de récupéré le callerid de chaque utilisateurs ( de la forme Nom Prénom <n°detel> ) et de l'envoyer dans mon LDAP , dans une OU prédéfinie.

    Cependant , je n'arrive pas à écrire dans mon LDAP ( mes credentials sont bons ) , mais je récupère bien les données SQLite. Donc je penche vers une erreur de syntaxe de ma part.

    Avez vous des idées?

    Best regard,

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Points : 211
    Points
    211
    Par défaut
    Bonjour,

    Dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      while ( @row = $sth->fetchrow_array ) {
     
     
      $mesg = $ldap->add( "uid=@row,ou=asterisk,dc=x,dc=fr",
        attr => [
            uid           => '@row',
            cn            => '@row',
            objectClass   =>
                [ 'top', 'organizationalUnit', 'AsteriskSIPUser'],
     
        ]
      );
    @row est un tableau (car tu le déclare comme tel), et @row te retourne le nombre d'élément du tableua.
    Tu dois utiliser $row[0] pour accéder au premier élément de ton tableau.
    http://perl.enstimac.fr/DocFr/perlin...riables%20perl

    Poste aussi ton erreur ça aidera à comprendre ce qui se passe exactement.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    my $dbh=DBI->connect( "dbi:SQLite2:dbname=$BaseDeDonnees;host=$NomHote;",,)
        or die "Connection impossible à la base de donnees $BaseDeDonnees !";
     
    my $sth = $dbh->prepare("SELECT callerid FROM usersip ");
     
    $sth->execute();
    my @row=$sth->fetchrow_array;
     
      print "\n## Debut de la recuperation des utilisateurs Asterisk ##\n\n";
     
     while (@row = $sth->fetchrow_array)
     {
            print "$row[0]";
     
     
    $mesg = $ldap->add("cn=$row[0],ou=asterisk,dc=x,dc=fr",
            attr => [
     
                        cn => '$row[0]',
                        sn => '$row[0]',
                        uid => '6000',
                        uidNumber => '6000',
                        gidNumber => '500',
                        objectClass => ['posixAccount','top','AsteriskSIPUser','inetOrgPerson'],
                        homedirectory => '/home/users/Account Operators/',
            ]
                            );
     
      }
      print "\n## Fin de la recuperation ##\n";
    Mes questions :

    1 - Les valeurs récupérer par ma requetes sql sont toutes stockée dans 1 seule case de mon tableau , à savoir $row[0]. Comment faire pour récupérer une donnée = 1 case . Ces données sont de la forme "Nom Prenom <n°detel>"

    2 - Pourquoi avec ce code je n'arrive pas à écrire dans mon LDAP.Lorsque j'utilise le même code mais en écrivant moi meme un user ( donc pas de cn=$row[0] ) celà fonctionne comme désiré ? Celà doit être un problème indirectement lié à ma question 1 , j'imagine que vu que le $row[0] est trés trés long je ne peut pas écrire son contenu dans mon LDAP.


    EDIT : je me suis amusé avec les @row[1..2] et tout marche à merveille

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requeteur LDAP en Perl
    Par yiwen dans le forum Langage
    Réponses: 7
    Dernier message: 24/12/2010, 08h15
  2. perl et php pour une connexion ldap
    Par youssef147 dans le forum SGBD
    Réponses: 0
    Dernier message: 23/04/2010, 12h38
  3. Perl soap ldap
    Par nablaaa dans le forum Langage
    Réponses: 0
    Dernier message: 28/02/2009, 12h02
  4. Perl, LDAP et userPassword
    Par Le Mage dans le forum SGBD
    Réponses: 0
    Dernier message: 26/09/2007, 15h05
  5. [PERL] NET::LDAP : Mise en cache des requêtes
    Par ricomervin dans le forum Modules
    Réponses: 1
    Dernier message: 17/04/2007, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo