Управляющие объекты LDAP
Управляющие объекты - это специальные объекты, которые могут быть переданы совместно с запросом к LDAP для изменения его поведения на время исполнения запроса. Также это могут быть объекты присылаемые сервером совместно с ответом на запрос, обычно в качестве ответов на управляющие объекты пришедшие с запросом, для предоставления дополнительной информации.
Замечание:
Не все управляющие оъекты поддерживаются всеми серверами LDAP. Для определения, какие из них поддерживаются вашим сервером, выполните запрос корневого DSE путем чтения пустого dn с фильтром (objectClass=*).
Пример #1 Тестирование поддержки управления пагинацией результата
<?php
// $ds - корректный идентификатор соединения с сервером каталогов
$result = ldap_read($ds, '', '(objectClass=*)', ['supportedControl']);
if (!in_array(LDAP_CONTROL_PAGEDRESULTS, ldap_get_entries($ds, $result)[0]['supportedcontrol'])) {
die("Этот сервер не поддерживает управление пагинацией");
}
?>
Начиная с PHP 7.3, вы можете посылать управляющие объекты параллельно с запросом для всех функций запросов, принимающих параметр serverctrls. Если существует "ext" версия функции, то, для получения полного доступа ко всем объектам ответа и возможности разобрать ответ с помощью ldap_parse_result(), используйте именно ее.
Параметр serverctrls должен содержать массив, содержащий массив для каждого посылаемого управляющего объекта со следующими ключами:
- oid (string)
- OID управляющего объекта. Используйте константы LDAP_CONTROL_. Смотрите константы LDAP.
- iscritical (bool)
-
Если управляющий оъект должен быть помечен как критичный.
Запрос завершится ошибкой, если подобный управляющий объект
не поддерживается сервером, либо если его невозможно применить.
Обратите внимание, что некоторые объекты всегда должны быть
помечены как критичные, как описано в соответствующем RFC.
По умолчанию
false
. - value (mixed)
- Если применимо, то значение управляющего объекта. Более подробно читайте далее.
Большинство значений отсылаются на сервер закодированными BER. Вы можете заниматься кодированием самостоятельно, либо использовать массивы с корректными ключами и тогда все произойдет автоматически. Поддерживаемые управляющие объекты:
-
LDAP_CONTROL_PAGEDRESULTS
Ожидаемые ключи [size] и [cookie] -
LDAP_CONTROL_ASSERT
Ожидаемый ключ - filter -
LDAP_CONTROL_VALUESRETURNFILTER
Ожидаемый ключ - filter -
LDAP_CONTROL_PRE_READ
Ожидаемый ключ - attrs -
LDAP_CONTROL_POST_READ
Ожидаемый ключ - attrs -
LDAP_CONTROL_SORTREQUEST
Ожидается массив массивов с ключами: attr, [oid], [reverse]. -
LDAP_CONTROL_VLVREQUEST
Ожидаемые ключи: before, after, attrvalue|(offset, count), [context]
Для следующих управляющих объектов значения не нужны:
-
LDAP_CONTROL_PASSWORDPOLICYREQUEST
-
LDAP_CONTROL_MANAGEDSAIT
-
LDAP_CONTROL_DONTUSECOPY
Объект LDAP_CONTROL_PROXY_AUTHZ
- уникальный случай, так
как его значение не нужно кодировать BER, так что вы можете использовать обыкновенную строку.
Если управляющие объекты переданы в функцию ldap_parse_result(), значения будут преобразованы в массив, если поддерживаются. Поддерживается следующее:
-
LDAP_CONTROL_PASSWORDPOLICYRESPONSE
Ключи: expire, grace, [error] -
LDAP_CONTROL_PAGEDRESULTS
Ключи: size, cookie -
LDAP_CONTROL_PRE_READ
Ключи: dn и имена аттрибутов LDAP -
LDAP_CONTROL_POST_READ
Ключи: dn и имена аттрибутов LDAP -
LDAP_CONTROL_SORTRESPONSE
Ключи: errcode, [attribute] -
LDAP_CONTROL_VLVRESPONSE
Ключи: target, count, errcode, context