Управляющие объекты LDAP

Управляющие объекты - это специальные объекты, которые могут быть переданы совместно с запросом к LDAP для изменения его поведения на время исполнения запроса. Также это могут быть объекты присылаемые сервером совместно с ответом на запрос, обычно в качестве ответов на управляющие объекты пришедшие с запросом, для предоставления дополнительной информации.

Замечание:

Не все управляющие оъекты поддерживаются всеми серверами LDAP. Для определения, какие из них поддерживаются вашим сервером, выполните запрос корневого DSE путем чтения пустого dn с фильтром (objectClass=*).

Пример #1 Тестирование поддержки управления пагинацией результата

<?php

// $ds - корректный идентификатор соединения с сервером каталогов

$result ldap_read($ds'''(objectClass=*)', ['supportedControl']);
if (!
in_array(LDAP_CONTROL_PAGEDRESULTSldap_get_entries($ds$result)[0]['supportedcontrol'])) {
  die(
"Этот сервер не поддерживает управление пагинацией");
}

?>

Начиная с PHP 7.3, вы можете посылать управляющие объекты параллельно с запросом для всех функций запросов, принимающих параметр serverctrls. Если существует "ext" версия функции, то, для получения полного доступа ко всем объектам ответа и возможности разобрать ответ с помощью ldap_parse_result(), используйте именно ее.

Параметр serverctrls должен содержать массив, содержащий массив для каждого посылаемого управляющего объекта со следующими ключами:

oid (string)
OID управляющего объекта. Используйте константы LDAP_CONTROL_. См. константы LDAP.
iscritical (boolean)
Если управляющий оъект должен быть помечен как критичный. Запрос завершится ошибкой, если подобный управляющий объект не поддерживается сервером, либо если его невозможно применить. Обратите внимание, что некоторые объекты всегда должны быть помечены как критичные, как описано в соответствующем 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