4.1.11. Элементы управления (Controls)
Элементы управления предоставляют механизм, с помощью которого семантика и аргументы существующих операций LDAP могут быть расширены. К одному сообщению LDAP могут быть присоединены один или несколько элементов управления. Действие элемента управления распространяется только на семантику того сообщения, к которому он присоединён.
Элементы управления, посылаемые клиентом, называются "элементами управления запроса" ("request controls"), а посылаемые сервером — "элементами управления ответа" ("response controls").
Controls ::= SEQUENCE OF control Control Control ::= SEQUENCE { controlType LDAPOID, criticality BOOLEAN DEFAULT FALSE, controlValue OCTET STRING OPTIONAL }
Поле controlType представляет собой точечно-цифровое представление идентификатора объекта OBJECT IDENTIFIER, уникально идентифицирующего данный элемент управления. Таким образом обеспечивается однозначность именования элементов управления. Часто элемент (элементы) управления ответа, предоставляемые в ответ на элемент управления запроса, разделяют с этим элементом управления запроса значения controlType.
Поле criticality имеет смысл только в элементах управления, присоединяемых к сообщениям запроса (за исключением UnbindRequest). Для элементов управления, присоединяемых к сообщениям ответа и UnbindRequest, поле criticality должно (SHOULD) быть установлено в FALSE, и должно (MUST) быть проигнорировано принимающей стороной протокола. Значение TRUE указывает на то, что выполнение операции без применения семантики элемента управления является неприемлемым. Конкретнее, обработка поля criticality выполняется следующим образом:
Если сервер не распознаёт тип элемента управления, определяет, что тот не соответствует выполняемой операции, или по какой-то другой причине не желает исполнять операцию с элементом управления, и если поле criticality установлено в TRUE, сервер не должен (MUST NOT) выполнять эту операцию и, для операций, у которых есть ответное сообщение, он должен (MUST) вернуть сообщение с результирующим кодом resultCode, установленным в unavailableCriticalExtension.
Если сервер не распознаёт тип элемента управления, определяет, что тот не соответствует выполняемой операции, или по какой-то другой причине не желает исполнять операцию с элементом управления, и если поле criticality установлено в FALSE, сервер должен (MUST) проигнорировать этот элемент управления.
Независимо от критичности, если элемент управления применяется к операции, он применяется последовательно и без исключений ко всей операции целиком.