Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony 3.4]$ldap->bind() ne renvoie rien

Sujet résolu
    15 octobre 2020 à 14:56:17

    Bonjour,

    N'existant pas de connexion ldap dans prestashop (symfony 3.4.26, php7), je suis la doc de symfony pour tester une connexion avec ldap : https://symfony.com/doc/3.4/components/ldap.html

    J'ai bien le répertoire Ldap dans vendor/.../Symfony/Component/.

    J'ai bien mis 

    use Symfony\Component\Ldap\Ldap;

    avant ma classe.

    Je crée une fonction dans la classe qui va tenter de se connecter au ldap

    public function testLdap() 
    { 
        //l'HTTP_USER_AGENT est de la forme "FedPol-Portal/2.0 44123456F" 
        $sso = $_SERVER['HTTP_USER_AGENT']; 
        $ssoPart = array_pop(explode(' ', $sso)); 
        $langue=substr($ssoPart,9,1); 
        $uid = substr($ssoPart, 0, 9); 
        $container = $this->buildContainer(); 
        $host = $container->getParameter('ldap_host'); 
        $port = $container->getParameter('ldap_port'); 
        $proto = $container->getParameter('ldap_proto');
        $base = $container->getParameter('ldap_base'); 
        $classeObject = $container->getParameter('ldap_classe'); 
        $ldap = Ldap::create('ext_ldap', [ 'host' => $host, 'port' => $port, 'protocol_version' => $proto, ]); 
        //$ldap->bind(); 
        var_dump($ldap); 
    }

    Jusque-là, tout va bien. Le var_dump($ldap) me renvoie 

    object(Symfony\Component\Ldap\Ldap)#236 (1) { ["adapter":"Symfony\Component\Ldap\Ldap":private]=> object(Symfony\Component\Ldap\Adapter\ExtLdap\Adapter)#242 (3) { ["config":"Symfony\Component\Ldap\Adapter\ExtLdap\Adapter":private]=> array(3) { ["host"]=> string(11) "monHost" ["port"]=> string(3) "389" ["protocol_versionprotocol_version"]=> string(1) "3" } ["connection":"Symfony\Component\Ldap\Adapter\ExtLdap\Adapter":private]=> NULL ["entryManager":"Symfony\Component\Ldap\Adapter\ExtLdap\Adapter":private]=> NULL } }

    J'appelle la fonction avant de faire header('Login: true'); (qui va afficher le formulaire pour se logger).

    Si je ne met pas $ldap->bind, le var_dump se fait et le formulaire de connexion est bien affiché (mais je veux, au final, retirer se formulaire et faire la connexion avec ldap à la place)header('Login: true');header('Login: true');.

    Mais, si je rajoute $ldap->bind(); avant le var_dump pour faire un bind en anonymous, là, je n'ai plus rien et pas de message dans la console non plus.

    Pourquoi le bind en anonymous ne fonctionne pas? N'ayant pas de user/password pour la connexion, je ne sais pas tester si ça fonctionne avec.

    Mais, en php7, ça fonctionne parfaitement

    $this->ldap_connect = ldap_connect(LDAP_HOST); 
    if ($this->ldap_connect) 
    { 
       ldap_set_option($this->ldap_connect, LDAP_OPT_PROTOCOL_VERSION, LDAP_PROTO); 
       $ldap_bind = ldap_bind($this->ldap_connect); /* bind au ldap en anonymous */
    }

    Et est-ce normal que ces 2 parties renvoient NULL (peut-être parce que le bind n'a pas encore été fait)? 

    ["connection":"Symfony\Component\Ldap\Adapter\ExtLdap\Adapter":private]=> NULL

    ["entryManager":"Symfony\Component\Ldap\Adapter\ExtLdap\Adapter":private]=> NULL

    Merci

    Edito : Finalement, en retirant le protocole, ça fonctionne (je l'ai aussi retiré des paramètres).

    Voilà ce qui fonctionne :

    public function testLdap()
    	{
    		//l'HTTP_USER_AGENT est de la forme "FedPol-Portal/2.0 44123456F"
    		$sso = $_SERVER['HTTP_USER_AGENT'];
    		$ssoPart = array_pop(explode(' ', $sso));
    		$langue=substr($ssoPart,9,1);
    		$uid = substr($ssoPart, 0, 9);
    		$container = $this->buildContainer();
    		$host = $container->getParameter('ldap_host');
    		$port = intval($container->getParameter('ldap_port'));
    		$base = $container->getParameter('ldap_base');
    		$classeObject = $container->getParameter('ldap_classe');
    		$ldap = Ldap::create('ext_ldap', [
    		'host' => $host,
    		'port' => $port
    		]);
    		$ldap->bind();
    		var_dump($ldap);
    		//$query = $ldap->query($base, '(&(uid='.$uid.')(objectclass='.$classeObject.'))');
    		//$results = $query->execute()->toArray();
    	}




    -
    Edité par TitietMatt 16 octobre 2020 à 12:29:55

    • Partager sur Facebook
    • Partager sur Twitter

    [Symfony 3.4]$ldap->bind() ne renvoie rien

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown