Bonjourà tous,

Je rencontre un petit soucis avec la bibliothèque LDAP de php.

Je me connecte sans problème mais quand j'utilise la fonction ldap_search, il me sort mes attributs mais avec un problème d'encodage concernant les champs objectGUID et objectSID :

- ce qu'il me sort : n.C(�9�G�f����

- en hexa : 6e2e4328c539b547971b66958282dc14 (qui correspond à ce que j'ai dans ma console de l'AD (au format hexedécimal))

La valeur en hexa, je la stocke dans une bdd mysql et il joue de rôle de clé étrangère entre la bdd et l'AD.

mais lorsque j'utilise ma fonction hexa2bin() le GUID est égale au premier que j'ai sorti mais lorsque je l'utilise dans le filtre de ldap_search, j'ai une erreur "Bad search filter".

voici mon code qui me permet de sortir mon profil via mon CN puis de refaire une requête avec le GUID que je viens d'extraire de la première requête :

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
<?php
$ldap_connect=ldap_connect($adresse_ad, $port_ad);
if ($ldap_connect)
{
    ldap_set_option($ldap_connect, LDAP_OPT_PROTOCOL_VERSION, 3) or die ("Could not set ldap protocol");
    $r=ldap_bind($ldap_connect, $user, $passwd);
    if ($r)
    {
        $filtre='cn=SAINT MARTIN Brice';
 
        $result = ldap_search($ldap_connect, $base_dn, $filtre,['sn', 'givenname', 'objectGUID', 'objectSID']) or exit ("impossible de trouver");
        $entries=ldap_get_entries($ldap_connect, $result);
        echo 'Le nombre d\'entrées ou annuaire retournées est '.ldap_count_entries($ldap_connect,$result).'<br />';
        print '<pre>';
        print_r ($entries);
        print '</pre>';
 
        $guid_ad=$entries[0]['objectguid'][0];
        $guid_ad_hex=bin2hex($guid_ad);
        $guid_ad_bin=hex2bin($guid_ad_hex);
 
        echo '<br/>guid_ad : '.$guid_ad;
        echo '<br/>guid_ad_hex : '.$guid_ad_hex;
        echo '<br/>guid_ad_bin : '.$guid_ad_bin;
 
        echo '<br/>';
 
        //------------
        //fonction SQL
        $objectGUID="guid en hexa enregistré dans la bdd";
        //------------
        echo '<br/>guid_bdd_hex : '.$objectGUID;
        echo '<br/>guid_bdd_bin : '.hex2bin($objectGUID);
 
        echo '<br/>';
 
 
        $filtre="(objectGUID=".$entries[0]['objectguid'][0].")";
        $result = ldap_search($ldap_connect, $base_dn, $filtre,['sn', 'givenname', 'objectGUID']) or die ("Error in search query: ".ldap_error($ldap_connect));
        $entries=ldap_get_entries($ldap_connect, $result);
    }
}
?>


qui me sort :

Nom : tBaF6gXa3e.png
Affichages : 362
Taille : 29,4 Ko

Mais ce problème ne m'arrive qu'avec certains profil, d'autre s'affiche correctement après la deuxième requete avec un GUID :

guid_ad : B�7��VA���_�� �
guid_ad_hex : 428a37b0807f56418a84aa5ffba80a89
guid_ad_bin : B�7��VA���_�� �

P.S. : le résultat en hexadécimal correspond bien à celui que j’obtiens dans la console d'administration de l'Active Directory puis que je double clique sur l'attribut objectGUID.

Merci d'avance car je sèche pas mal.

Brice