Управляющие объекты - это специальные объекты, которые могут быть переданы совместно с запросом к 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 должен содержать массив, содержащий массив для каждого посылаемого управляющего объекта со следующими ключами:
false
.
Большинство значений отсылаются на сервер закодированными 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