В некоторых ситуациях ldap_get_entries возвращает массив с количеством элементов = ноль, поэтому у меня есть массив, подобный массиву ('count' => 0) без каких-либо дополнительных записей.
Каковы условия для этого?
PS:
- Если OU, в котором я ищу, пусто, я получаю другую ошибку (Неверное базовое DN)
- если у пользователя нет прав доступа к OU, я получаю ту же ошибку, что и выше
EDIT:
- код PHP не имеет значения, поскольку я могу выполнять все виды поиска с ним, и вышеупомянутая проблема возникает только в некоторых странных конфигурациях Active Directory
- если вы все еще настаиваете ...
$entries = ldap_get_entries($this->ldap_connection, $search_result);
- ldap_get_entries возвращает в большинстве случаев то, что я ожидаю, что он вернется с правильными ошибками
Итак, чтобы повторить мой вопрос, при каких условиях ldap_get_entries возвращает массив с count = 0 без каких-либо ошибок. Под условием я подразумеваю:
- Права и разрешения Active Directory
- разрешения пользователя
- Разрешения OU (он же вкладка Безопасность)
- любая связанная с PHP информация о том, когда это может произойти
Спасибо
EDIT2 - по запросу, вот остаток кода:
public function connect() {
// connect to the server
$this->ldap_connection = ldap_connect($this->ldap_server);
if (!$this->ldap_connection){
$error_message= "LDAP-Connect-Error: " . ldap_error($this->ldap_connection) . ".";
throw new RuntimeErrorException($error_message);
}
// set protocol version
if (!ldap_set_option($this->ldap_connection, LDAP_OPT_PROTOCOL_VERSION, $this->ldap_protocol_version)){
$error_message= "LDAP-SetProtocolVersion-Error: " . ldap_error($this->ldap_connection) . ".";
throw new RuntimeErrorException($error_message);
}
// set with/without referrals (limit/do not limit search on current server)
if (!ldap_set_option($this->ldap_connection, LDAP_OPT_REFERRALS, $this->ldap_protocol_referrals)){
$error_message= "LDAP-SetReferrals-Error: " . ldap_error($this->ldap_connection) . ".";
throw new RuntimeErrorException($error_message);
}
// binding to ldap server
if (!@ldap_bind($this->ldap_connection, $this->ldap_auth_rdn, $this->ldap_auth_pass)){
$error_message= "LDAP-Bind-Error: " . ldap_error($this->ldap_connection) . ".";
throw new RuntimeErrorException($error_message);
}
}
public function search($filter,$fields){
if (!$this->ldap_connection) {
$this->connect();
}
// search the ldap
$search_result = @ldap_search($this->ldap_connection, $this->ldap_base_distinguished_name, $filter,$fields);
if ($search_result===false){
$error_message= "LDAP-Error: " . ldap_error($this->ldap_connection) . ".";
throw new RuntimeErrorException($error_message);
}
//Create result set
$entries = ldap_get_entries($this->ldap_connection, $search_result);
if ($entries === false ){
$error_message= "LDAP-Error: " . ldap_error($this->ldap_connection) . ".";
throw new RuntimeErrorException($error_message);
}
return (is_null($entries) ? array() : $entries); // http://bugs.php.net/48469
}