3ae90dbb

Операция Search


Операция Search позволяет клиенту запрашивать выполнение поиска на сервере. Это может использоваться для чтения атрибутов из единственной записи, из записей, непосредственно следующих за конкретной записью, или из целого поддерева записей.

SearchRequest определяется следующим образом:

SearchRequest ::= [APPLICATION 3] SEQUENCE { baseObject LDAPDN, scope ENUMERATED { baseObject (0), singleLevel (1), wholeSubtree (2) }, derefAliases ENUMERATED { neverDerefAliases (0), derefInSearching (1), derefFindingBaseObj (2), derefAlways (3) }, sizeLimit INTEGER (0 .. maxInt), timeLimit INTEGER (0 .. maxInt), typesOnly BOOLEAN, filter Filter, attributes AttributeDescriptionList } Filter ::= CHOICE { and [0] SET SIZE (1..MAX) OF Filter, or [1] SET SIZE (1..MAX) OF Filter, not [2] Filter, equalityMatch [3] AttributeValueAssertion, substrings [4] SubstringFilter, greaterOrEqual [5] AttributeValueAssertion, lessOrEqual [6] AttributeValueAssertion, present [7] AttributeDescription, approxMatch [8] AttributeValueAssertion, extensibleMatch [9] MatchingRuleAssertion } SubstringFilter ::= SEQUENCE { type AttributeDescription, -- по крайней мере один должен -- присутствовать, initial и final могут -- быть только один раз substrings SEQUENCE OF CHOICE { initial [0] AssertionValue, any [1] AssertionValue, final [2] AssertionValue } } MatchingRuleAssertion ::= SEQUENCE { matchingRule [1] MatchingRuleId OPTIONAL, type [2] AttributeDescription OPTIONAL, matchValue [3] AssertionValue, dnAttributes [4] BOOLEAN DEFAULT FALSE }

Перечислим параметры SearchRequest:

  • BaseObject: LDAPDN, являющееся записью базового объекта, относительно которого будет выполняться поиск.
  • Scope: индикатор области выполняемого поиска.

    Может существовать три типа области поиска:

    • baseObject: ограничивается только базовым объектом.
    • singleLevel: ограничивается только непосредственно подчиненными объектами.
    • wholeSubtree: поиск во всем поддереве данной записи.

  • DerefAliases: индикатор того, как alias объектов обрабатываются при поиске.


    Семантика возможных значений данного поля следующая:
    • NeverDerefAliases: не выполняются переходы по ссылкам для aliases при поиске или при размещении базового объекта поиска.
    • DerefInSearching: выполняется переход по ссылкам aliases, подчиненных базовому объекту поиска.
    • DerefFindingBaseObj: выполняется переход по ссылкам aliases, размещенных в базовом объекте поиска, но не в подчиненных базовому объекту.
    • DerefAlways: выполняется переход по ссылкам aliases как при поиске, так и при размещении базового объекта поиска.


  • SizeLimit: ограничение размера максимального количества записей, возвращаемых в качестве результата поиска. Значение 0 в данном поле указывает, что при поиске нет ограничения размера пользовательского запроса. Серверы могут определять максимальное количество возвращаемых записей.
  • TimeLimit: ограничение, определяющее максимальное время поиска (в секундах). Значение 0 в данном поле указывает, что ограничений по времени при запросах клиента не существует.
  • TypesOnly: индикатор того, что результаты поиска содержат и типы, и значения атрибутов или только типы атрибутов. При установке данного значения в TRUE будут возвращаться только типы атрибутов. При установке данного значения в FALSE будут возвращаться и типы, и значения атрибутов.
  • Filter: фильтр определяет условия, которые должны быть выполнены.

    and, or и not используются для комбинирования фильтров. По крайней мере, один элемент фильтра должен присутствовать.



Сервер должен вычислить фильтры. Результатом вычисления фильтра должно быть либо TRUE, либо FALSE, либо Undefined. Если фильтр вычисляет TRUE для конкретной записи, то атрибуты данной записи возвращаются как часть результата поиска. Если фильтр вычисляет FALSE или Undefined, то данная запись при поиске игнорируется.

Правило соответствия для элемента фильтра equalityMatch определяется правилом соответствия EQUALITY для типа атрибута.


15.1.  Область baseObject


15.2.  Область singleLevel


15.3.  Область wholeSubtree

Правило соответствия для AssertionValues фильтра определяется правилом соответствия SUBSTR для типа атрибута.



Правило соответствия для элементов фильтра greaterOrEqual и lessOrEqual определяется правилом соответствия ORDERING для типа атрибута.

Семантика соответствия для элементов фильтра approxMatch определяется реализацией.

  • Attributes: список атрибутов, возвращаемый для каждой записи, которая соответствует фильтру поиска. Могут использоваться два специальных значения: пустой список без атрибутов и атрибут, описываемый строкой "*". Оба значения говорят о том, что возвращаются все атрибуты пользователя.


Атрибуты должны быть поименованы самое большее один раз в списке и возвращаться самое большее один раз в записи. Если в списке существуют описания атрибутов, которые не распознаны, они игнорируются сервером.

Если клиент не хочет, чтобы возвращались какие-либо атрибуты, он может указать список, содержащий только атрибут с OID "1.1". Этот OID был выбран произвольно и не соответствует никакому используемому атрибуту.

Следует заметить, что если запрошены все атрибуты пользователя, некоторые атрибуты записи могут не включаться в результаты поиска в соответствии с политикой управления доступом или другими ограничениями. Более того, серверы не будут возвращать атрибуты выполнения, такие как objectClasses или attributeTypes, если они явно не перечислены, т.к. эти атрибуты могут иметь большое число значений.

Результаты поиска вычисляются сервером после получения им SearchRequest и возвращаются в SearchResponses, которые являются сообщениями LDAP, содержащими типы данных SearchResultEntry, либо SearchResultReference, либо SearchResultDone.

SearchResultEntry ::= [APPLICATION 4] SEQUENCE { objectName LDAPDN, attributes PartialAttributeList } PartialAttributeList ::= SEQUENCE OF SEQUENCE { type AttributeDescription, vals SET OF AttributeValue } -- следует заметить, что PartialAttributeList -- может иметь ноль элементов (если ни один -- из атрибутов затребованной записи не может -- быть возвращен) и что множество vals может -- также иметь ноль элементов (если запрошены -- только типы или все значения были -- исключены из результата) SearchResultReference ::= [APPLICATION 19] SEQUENCE OF LDAPURL -- по крайней мере один элемент LDAPURL -- должен присутствовать SearchResultDone ::= [APPLICATION 5] LDAPResult



После получения SearchRequest сервер будет выполнять необходимый поиск в DIT.

Сервер может возвращать как найденные записи (SearchResultEntry), так и ссылки на другие серверы для продолжения поиска (SearchResultReference).

Для завершения поиска клиент может создать новую операцию поиска для каждого полученного SearchResultReference.

Например, предположим, что сервер (hosta), с которым соединяются, имеет запись DC=Example, DC=NET и запись CN=Manager, DC=Example, DC=NET. Он знает, что один из LDAP-серверов, hostb или hostc, имеет поддерево OU=People, DC=Example, DC=NET и что LDAP-сервер hostd имеет поддерево OU=Roles, DC=Example, DC=NET. Если сделан запрос поиска по поддереву DC=Example, DC=NET, он может возвратить следующее:

SearchResultEntry for DC=Example,DC=NET SearchResultEntry for CN=Manager,DC=Example, DC=NET SearchResultReference { ldap://hostb/OU=People,DC=Example,DC=NET ldap://hostc/OU=People,DC=Example,DC=NET } SearchResultReference { Lightweight Directory Access Protocol Version 3 ldap://hostd/OU=Roles,DC=Example,DC=NET } SearchResultDone (success)

В качестве продолжения примера, если клиент соединяется с сервером hostb и создает запрос для поддерева "OU=People, DC=Example, DC=NET", сервер может вернуть следующее:

SearchResultEntry for OU=People,DC=Example,DC=NET SearchResultReference { ldap://hoste/OU=Managers,OU=People, DC=Example,DC=NET } SearchResultReference { ldap://hostf/OU=Consultants,OU=People, DC=Example,DC=NET } SearchResultDone (success)

Если сервер, с которым установлено соединение, не имеет базового объекта для поиска, то он возвращает клиенту ссылку (referral). Например, если клиент запросил у hosta поиск поддерева DC=Example, DC=ORG, сервер может вернуть только SearchResultDone, содержащий referral.

SearchResultDone (referral) { ldap://hostg/DC=Example,DC=ORG??sub }


Содержание раздела