Forum Programmation.perl Utilisation de Net::LDAP

Posté par  .
Étiquettes : aucune
0
8
juil.
2005
Salut tout le monde , j'ai un petit problème: je suis en train d'écrire un logiciel en perl dans lequel j'ai besoin d'effectuer une recherche dans un annuaire Ldap;les résultats de cette recherche sont ensuite affichés sur une page web(use DBI).Malheureusement, lorsque je fais mon bind le script s'interrompt et je ne peux meme pas récupérer de message d'erreur avec msg->code ou msg->error.
Le pire c'est que si je sors ce passage ldap de mon script et que je le mets dans un autre, ca marche...je ne comprends pas;si qqn a une idée.Je ne mets pas tout le code(2000 lignes) mais juste les points stratégiques:
a chaque fois que ca ecrit
>
ca represente une fleche en fait, mais je n'ai pas réussi a les remettre telles quelles dans ce qui suit


#!/bin/perl
use DBI;
use Net::LDAP;
sub recherche_ldap
{
local($msg);
local ($serv) = 'irlin139';
local ($ldap) = Net::LDAP->new($serv,port=> 389 ,version=> 3 )|| die "erreur connect";
print "conn $ldap";
$msg = $ldap->bind(dn=>$login, password=> $motdepasse);
$msg->code && die $msg->error;
print " bind $msg1->code()";

local ($filtre)="(sn=user)";
print $filtre;
$msg = $ldap->search(
base => 'ou=personnes,o=machin',
filter => "$filtre",
attrs => ['id','sn','givenName','employeeNumber','categorieDePopulation']);

print " bind $msg";
$msg->code && die $msg->error;
print " bind $msg->error";
@entries = $msg->entries;

foreach $entry(@entries){
$user=$entry->get_value("uid");
$lastname=$entry->get_value("sn");
$name=$entry->get_value("givenName");
$matricule=$entry->get_value("employeeNumber");
$categ=$entry->get_value("categorieDePopulation");
print "$user";
print " $lastname";
print " $name";
print "$matricule";
print "$categ";
}

$ldap->unbind();
}
#pas mal d'autres sous fonctions
#
@INC=(".","/usr/local/expl/httpd-2.0.50/cgi-bin","/usr/lib/perl5");

require("cgi-lib+.pl");

# Affichage de l'en-tete HTML
print &PrintHeader ;

# Récupération des variables
&ReadParse;
# traitements
# ...
&recherche_ldap;
print"" ;



Si vous voyez qlq chose please help!!!
  • # Heu ...

    Posté par  . Évalué à 2.


    $msg = $ldap->bind(dn=>$login, password=> $motdepasse);


    Je me trompe ou $login et $motdepasse ne sont pas initialisés ??
    • [^] # Re: Heu ...

      Posté par  . Évalué à 1.

      si si ils le sont, c'est juste qu'ayant fait copier/coller, j'ai supprimé les parties "sensibles".
      • [^] # Re: Heu ...

        Posté par  . Évalué à 2.

        tu peux deja mettre :
        $msg = $ldap->bind(dn=>$login, password=> $motdepasse) || die "Bind error : $!";


        d'autre part, ne peux tu pas mettre le serveur ldap en mode debug pour voir ce qu'il recoit ?
        • [^] # Re: Heu ...

          Posté par  . Évalué à 1.

          non je ne peux pas, je n'y ai accès qu'en lecture...ensuite ce qu'il faut savoir c'est que le résultat doit être printé en html, et c'est là que le bat blesse car lorsque je fais un script test hors html tout marche bien...
  • # Commencer par nettoyer le source Perl

    Posté par  . Évalué à 2.

    Ajouter au début du script :


    use strict;
    use warnings;


    Puis soigner le source :
    s/local/my/ dans les sub
    s/&// dans les appels de sub

    Plus d'infos sur http://articles.mongueurs.net/magazines/linuxmag68.html.(...)

    Dernière question : c'est un CGI, ou un script simple ? ou autre chose encore ?
    • [^] # Re: Commencer par nettoyer le source Perl

      Posté par  . Évalué à 1.

      c'est bien un CGI:En fait c'est un gros script qui effectue plein de traitements, et qui en affiche ensuite les résultats dans une page html.

Suivre le flux des commentaires

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