Zum Hauptinhalt springen

2. Umwandlung eines DistinguishedName von ASN.1 in eine Zeichenkette

X.501 [X.501] definiert die ASN.1-Struktur [X.680] des Distinguished Name. Es folgt eine zur Erläuterung angegebene Variante:

DistinguishedName ::= RDNSequence

RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
AttributeTypeAndValue

AttributeTypeAndValue ::= SEQUENCE {
type AttributeType,
value AttributeValue }

Dieser Abschnitt definiert den empfohlenen (RECOMMENDED) Algorithmus zur Umwandlung eines Distinguished Name aus einer ASN.1-strukturierten Darstellung in eine UTF-8- [RFC3629] kodierte Unicode- [Unicode] Zeichenkettendarstellung. Andere Dokumente mögen andere Algorithmen zur Umwandlung eines Distinguished Name in eine Zeichenkette beschreiben, doch LDAP-Implementierungen SOLLEN (SHALL) nur Zeichenketten erzeugen, die der in Abschnitt 3 definierten Grammatik entsprechen.

2.1. Umwandlung der RDNSequence​

Ist die RDNSequence eine leere Sequenz, so ist das Ergebnis die leere bzw. Zeichenkette der Länge null.

Andernfalls besteht die Ausgabe aus den Zeichenkettenkodierungen jedes RelativeDistinguishedName in der RDNSequence (gemäß Abschnitt 2.2), beginnend mit dem letzten Element der Sequenz und rückwärts bis zum ersten.

Die Kodierungen benachbarter RelativeDistinguishedName werden durch ein Komma (',' U+002C) getrennt.

2.2. Umwandlung von RelativeDistinguishedName​

Bei der Umwandlung eines ASN.1-RelativeDistinguishedName in eine Zeichenkette besteht die Ausgabe aus den Zeichenkettenkodierungen jedes AttributeTypeAndValue (gemäß Abschnitt 2.3), in beliebiger Reihenfolge.

Bei einem mehrwertigen RDN werden die Ausgaben benachbarter AttributeTypeAndValue durch ein Pluszeichen ('+' U+002B) getrennt.

2.3. Umwandlung von AttributeTypeAndValue​

Das AttributeTypeAndValue wird als Zeichenkettendarstellung des AttributeType kodiert, gefolgt von einem Gleichheitszeichen ('=' U+003D), gefolgt von der Zeichenkettendarstellung des AttributeValue. Die Kodierung des AttributeValue ist in Abschnitt 2.4 angegeben.

Wenn für den AttributeType ein Kurzname (Deskriptor) [RFC4512] definiert ist und dieser Kurzname als den AttributeType identifizierend registriert [REGISTRY][RFC4520] bekannt ist, wird dieser Kurzname, ein , verwendet. Andernfalls wird der AttributeType als punktierte Dezimaldarstellung, ein , seines OBJECT IDENTIFIER kodiert. und sind in [RFC4512] definiert.

Von Implementierungen wird nicht erwartet, dass sie ihre Kenntnis registrierter Kurznamen dynamisch aktualisieren. Implementierungen SOLLTEN (SHOULD) jedoch einen Mechanismus bereitstellen, der die Aktualisierung ihrer Kenntnis registrierter Kurznamen erlaubt.

2.4. Umwandlung eines AttributeValue von ASN.1 in eine Zeichenkette​

Ist der AttributeType von punktierter Dezimalform, so wird das AttributeValue durch ein Nummernzeichen ('#' U+0023) dargestellt, gefolgt von der hexadezimalen Kodierung jedes Oktetts der BER-Kodierung des X.500-AttributeValue. Diese Form wird auch verwendet, wenn für die Syntax des AttributeValue keine LDAP-spezifische Zeichenkettenkodierung ([RFC4517], Abschnitt 3.1) definiert ist oder diese LDAP-spezifische Zeichenkettenkodierung nicht auf UTF-8-kodierte Unicode-Zeichen beschränkt ist. Diese Form darf auch in anderen Fällen verwendet werden, etwa wenn eine umkehrbare Zeichenkettendarstellung gewünscht ist (siehe Abschnitt 5.2).

Andernfalls, wenn das AttributeValue zu einer Syntax gehört, für die eine LDAP-spezifische Zeichenkettenkodierung existiert, wird der Wert zunächst gemäß seiner Syntaxspezifikation in eine UTF-8-kodierte Unicode-Zeichenkette umgewandelt (Beispiele siehe [RFC4517], Abschnitt 3.3). Enthält diese UTF-8-kodierte Unicode-Zeichenkette keines der folgenden Zeichen, die maskiert werden müssen, so kann diese Zeichenkette als Zeichenkettendarstellung des Wertes verwendet werden.

  • ein Leerzeichen (' ' U+0020) oder Nummernzeichen ('#' U+0023) am Anfang der Zeichenkette;

  • ein Leerzeichen (' ' U+0020) am Ende der Zeichenkette;

  • eines der Zeichen '"', '+', ',', ';', '<', '>' oder '' (U+0022, U+002B, U+002C, U+003B, U+003C, U+003E bzw. U+005C);

  • das Nullzeichen (U+0000).

Andere Zeichen dürfen maskiert werden.

Jedes Oktett des zu maskierenden Zeichens wird durch einen Backslash und zwei Hexadezimalziffern ersetzt, die ein einzelnes Oktett im Code des Zeichens bilden. Alternativ kann, und nur dann, wenn das zu maskierende Zeichen eines der folgenden ist:

' ', '"', '#', '+', ',', ';', '<', '=', '>', oder '\'
(U+0020, U+0022, U+0023, U+002B, U+002C, U+003B,
U+003C, U+003D, U+003E bzw. U+005C)

ihm ein Backslash ('' U+005C) vorangestellt werden.

Beispiele für den Maskierungsmechanismus sind in Abschnitt 4 zu finden.