Управляющие объекты 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

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top