Приложение A: LDAP — Руководство по выживанию в ASN.1

В этом разделе содержится краткий и поверхностный обзор синтаксиса ASN.1, достаточный для понимания выражений соответствия компонентов. Вообще-то, Вам редко когда придётся спускаться до такого уровня детализации, если, конечно, Вы генетически к этому не предрасположены. Существует множество прекрасных и свободных ASN.1-ресурсов, которые посвящённые читатели найдут бесконечно увлекательными и очень веселыми. Менее посвящённые читатели, возможно, упадут в обморок от одного только случайного взгляда на эти вещи.

Если обратиться к определению ASN.1 OID, то можно увидеть, что оно состоит из текстового описания и некоторого количества синтаксиса ASN.1 (или тарабарщины), формально определяющей данный объект. Синтаксис ASN.1 губительно сложен, и в данном руководстве по выживанию внимание сфокусировано на 5 типах, имеющих важное значение при поиске соответствия компонентов: SEQUENCE OF, SEQUENCE, SET OF, SET и CHOICE. Короткие рабочие определения этих элементов:

SEQUENCE OFУпорядоченный список элементов (вхождений) одинакового типа. Порядок фиксированный и содержит только один тип (или атрибут в контексте LDAP).
SET OFНеупорядоченный список элементов (вхождений) одинакового типа. Порядок нефиксированный (фиксируется только во время выполнения) и содержит только один тип (или атрибут в контексте LDAP).
SEQUENCEУпорядоченный список элементов (вхождений) разных типов. Порядок фиксированный и содержит несколько типов (или атрибутов в контексте LDAP).
SETНеупорядоченный список элементов (вхождений) разных типов. Порядок нефиксированный (фиксируется только во время выполнения) и содержит несколько типов (или атрибутов в контексте LDAP).
CHOICEОпределяет один элемент (вхождение). Этот элемент может быть одного из тех типов, которые определены в упорядоченном списке.

В этом руководстве соответствие компонентов разделено на две категории: простое и комплексное. Простое соответствие компонентов, как сказано в данном руководстве, используется только с атрибутами, определёнными с помощью конструкций SEQUENCE OF и SET OF — по существу, эти конструкции определяют несколько элементов (вхождений), из которых все одного и того же типа. Например, DistinguishedName определён с помощью SEQUENCE OF и имеет, согласно X.501, следующее определение ASN.1:

# Определение из X.501
DistinguishedName   ::= RDNSequence
# DistinguishedName является псевдонимом для RDNSequence
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
# Определяет RDNSequence как упорядоченный список (SEQUENCE OF)
# элементов (вхождений) RelativeDistinguishedName

RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
          AttributeTypeAndValue
# Определяет состав каждого RelativeDistinguishedName
# как SET (неупорядоченный список) AttributeTypeAndValue
# каждый из которых состоит из SEQUENCE (упорядоченного списка)
# типов и значений записей, как определено ниже
AttributeTypeAndValue ::= SEQUENCE {
  type        AttributeType ({SupportedAttributes}),
  value       AttributeValue ({SupportedAttributes}{@type}) }

  AttributeType ::= ATTRIBUTE.&id
  AttributeValue ::= ATTRIBUTE.&Type

Примечание: В определениях ASN.1 регистр символов имеет визуально существенное значение, так, например, distinguishedName — это имя атрибута, а DistinguishedName — это имя определения атрибута.

Поскольку все элементы (вхождения) имеют один и тот же тип, в любом выражении соответствия компонентов достаточно идентифицировать количество элементов. Например, при использовании положительных чисел при извлечении элементов в выражении соответствия компонентов, "1" будет соответствовать первому вхождению в списке элементов (в случае с DN и положительными числами номера элементам назначаются СПРАВА НАЛЕВО). Примеры атрибутов, использующих DistinguishedName: DistinguishedName (2.5.4.49), member ( 2.5.4.31 ), seeAlso (2.5.4.34), owner (2.5.4.32), roleOccupant (2.5.4.33).

Комплексное соответствие компонентов применяется к атрибутам, определённым с помощью конструкций SEQUENCE и SET. Эти конструкции определяют несколько значений, каждое из которых может быть разного типа. Например, uniqueMember (2.5.4.50) имеет следующую нотацию ASN.1:

# Определение из X.520
uniqueMember ATTRIBUTE ::= {
 WITH SYNTAX NameAndOptionalUID
 EQUALITY MATCHING RULE uniqueMemberMatch
 ID id-at-uniqueMember }

# указывает на ASN.1-определение NameAndOptionalUID,
# являющееся SEQUENCE
NameAndOptionalUID ::= SEQUENCE {
 dn DistinguishedName,
 uid UniqueIdentifier OPTIONAL }

# в свою очередь UniqueIdentifier определён в X.520 как
uniqueIdentifier ATTRIBUTE ::= {
 WITH SYNTAX UniqueIdentifier
 EQUALITY MATCHING RULE bitStringMatch
 ID id-at-uniqueIdentifier }
UniqueIdentifier ::= BIT STRING

# DistinguishedName определено в предыдущем примере

Поскольку все элементы (вхождения) в атрибуте различны, а в конструкции SET они могут ещё и появляться в каком угодно порядке, любое выражение извлечения компонента должно каким-то образом ссылаться на конкретный элемент, например, по имени его типа атрибута или какой-то другой характеристике.



Проблемы, комментарии, предположения, исправления (включая битые ссылки) или есть что добавить? Пожалуйста, выкроите время в потоке занятой жизни, чтобы написать нам, вебмастеру или в службу поддержки. Оставшийся день Вы проведёте с чувством удовлетворения.

Нашли ошибку в переводе? Сообщите переводчикам!

Copyright © 1994-2014 ZyTrax, Inc. Все права защищены. Последнее изменение страницы: 17 сентября 2013 г.
Переведено участниками проекта Pro-LDAP.ru в 2012 г.