#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)
. Сделайте это один раз, передайте соединение всем другим вызовам в качестве переменной, и все должно работать.