Как я могу управлять ошибкой операций ldap_search ()?

#php #active-directory #ldap #ldap-query #active-directory-group

#php #active-directory #ldap #ldap-запрос #active-directory-group

Вопрос:

Я пытаюсь использовать запрос LDAP для получения моих групп объявлений одного из моих подразделений, я написал это на данный момент:

 <?php
    session_start();
//::::::::DEBUG::::::::\
    //echo $_SESSION['login_session'];
    //echo "<br>";
    //echo $_SESSION['password_session'];
    //echo "<br>";
    //echo $_SESSION['AD_session'];
    //$_SESSION['AD_session']=ldap_conect(XXX.XXX.XXX,389) but i apparently cannot conserve this function in a $_SESSION var...
    //echo "<br>";
    //echo $_SESSION['DN_SESSION'];
    //"OU=XXX,DC=XXX,DC=XXX"
    //echo "<br>";
//::::::::DEBUG::::::::\ 

//----------------------------------------------------------------------------------------------------

//::::::::SECURITY FUNCTION::::::::\
    if (NULL!==($_SESSION['login_session']amp;amp;$_SESSION['password_session'])){
//::::::::SECURITY FUNCTION::::::::\

//----------------------------------------------------------------------------------------------------

//::::::::VARIABLES::::::::\
        $filter = "(CN=*)";
        $attr = array("OU","CN","DC");
//::::::::VARIABLES::::::::\

//----------------------------------------------------------------------------------------------------

//::::::::LDAP's setting::::::::\

        ldap_set_option(ldap_connect("XXX.XXX.XXX",389), LDAP_OPT_PROTOCOL_VERSION, 3);
        ldap_set_option(ldap_connect("XXX.XXX.XXX",389), LDAP_OPT_REFERRALS, 0);

//::::::::LDAP's setting::::::::\

//----------------------------------------------------------------------------------------------------

//::::::::LDAP BIND::::::::\

        ldap_bind(ldap_connect("XXX.XXX.XXX",389),"CN=".$_SESSION['login_session'].",OU=XXX,OU=XXX,DC=XXX,DC=XXX", $_SESSION['password_session']);

//::::::::LDAP BIND::::::::\ 

//----------------------------------------------------------------------------------------------------

//::::::::REQUESTS VARIABLES::::::::\      
        $result = ldap_search(ldap_connect("XXX.XXX.XXX",389),$_SESSION['DN_SESSION'], $filter, $attr);

        $rescount = ldap_count_entries(ldap_connect("XXX.XXX.XXX",389),$result);

        $data = ldap_get_entries(ldap_connect("XXX.XXX.XXX",389),$result);
//::::::::REQUESTS VARIABLES::::::::\

//----------------------------------------------------------------------------------------------------

//::::::::RESULTS DISPLAY::::::::\      
        echo '<pre>';

        foreach($data as $row) {

        print_r($row);

        }
//::::::::RESULTS DISPLAY::::::::\

//----------------------------------------------------------------------------------------------------
    ?>

  

Функция привязки работает хорошо, и я использую действительного пользователя для запроса моих групп объявлений. Но я получаю сообщение «ldap_search (): Search: Operations error» в моем запросе ldap_search. Я некоторое время искал на разных форумах и увидел несколько решений: настройка протокола и направление AD, что я сделал в части настроек моего LDAP, я также видел, что некоторые люди получают эту ошибку, потому что они использовали DN вместо DC в отличительном имени, которое они хотели изменить.reach но это не мой случай…

У кого-нибудь есть представление о том, в чем проблема в моем коде? Большое спасибо.

Ответ №1:

Operations Error означает, что есть ошибка в последовательности операций. LDAP — это подключенный протокол, что означает, что сначала вы подключаетесь к нему, а затем выполняете несколько операций над этим соединением, первая из которых — привязка для аутентификации пользователя.

В вашем коде вы создаете новое соединение для каждой операции ldap_connect("XXX.XXX.XXX",389) . Сделайте это один раз, передайте соединение всем другим вызовам в качестве переменной, и все должно работать.