Aller au contenu principal

2. Conversion d'un DistinguishedName d'ASN.1 vers une chaîne

X.501 [X.501] définit la structure ASN.1 [X.680] du nom distingué. Voici une variante fournie à titre de discussion :

DistinguishedName ::= RDNSequence

RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

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

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

Cette section définit l'algorithme recommandé (RECOMMENDED) pour convertir un nom distingué d'une représentation structurée ASN.1 en une chaîne de caractères Unicode [Unicode] encodée en UTF-8 [RFC3629]. D'autres documents peuvent décrire d'autres algorithmes de conversion d'un nom distingué en chaîne, mais seules les chaînes conformes à la grammaire définie à la section 3 DOIVENT (SHALL) être produites par les implémentations LDAP.

2.1. Conversion du RDNSequence​

Si le RDNSequence est une séquence vide, le résultat est la chaîne vide (de longueur nulle).

Sinon, la sortie est constituée des encodages sous forme de chaîne de chaque RelativeDistinguishedName du RDNSequence (selon la section 2.2), en commençant par le dernier élément de la séquence et en remontant vers le premier.

Les encodages de RelativeDistinguishedName adjacents sont séparés par une virgule (',' U+002C).

2.2. Conversion d'un RelativeDistinguishedName​

Lors de la conversion d'un RelativeDistinguishedName ASN.1 en chaîne, la sortie est constituée des encodages sous forme de chaîne de chaque AttributeTypeAndValue (selon la section 2.3), dans n'importe quel ordre.

Lorsqu'il s'agit d'un RDN à valeurs multiples, les sorties des AttributeTypeAndValue adjacents sont séparées par un signe plus ('+' U+002B).

2.3. Conversion d'un AttributeTypeAndValue​

L'AttributeTypeAndValue est encodé comme la représentation sous forme de chaîne de l'AttributeType, suivie d'un signe égal ('=' U+003D), suivi de la représentation sous forme de chaîne de l'AttributeValue. L'encodage de l'AttributeValue est donné à la section 2.4.

Si l'AttributeType est défini comme ayant un nom court (descripteur) [RFC4512] et que ce nom court est connu comme étant enregistré [REGISTRY][RFC4520] pour identifier l'AttributeType, ce nom court, un , est utilisé. Sinon, l'AttributeType est encodé comme la notation décimale pointée, un , de son OBJECT IDENTIFIER. Les et sont définis dans [RFC4512].

Il n'est pas attendu des implémentations qu'elles mettent à jour dynamiquement leur connaissance des noms courts enregistrés. Toutefois, les implémentations DEVRAIENT (SHOULD) fournir un mécanisme permettant de mettre à jour leur connaissance des noms courts enregistrés.

2.4. Conversion d'un AttributeValue d'ASN.1 vers une chaîne​

Si l'AttributeType est de forme décimale pointée, l'AttributeValue est représenté par un signe numérique ('#' U+0023) suivi de l'encodage hexadécimal de chacun des octets de l'encodage BER de l'AttributeValue X.500. Cette forme est également utilisée lorsque la syntaxe de l'AttributeValue n'a pas d'encodage sous forme de chaîne spécifique à LDAP ([RFC4517], section 3.1) défini pour elle, ou lorsque cet encodage sous forme de chaîne spécifique à LDAP n'est pas limité à des caractères Unicode encodés en UTF-8. Cette forme peut aussi être utilisée dans d'autres cas, par exemple lorsqu'une représentation sous forme de chaîne réversible est souhaitée (voir la section 5.2).

Sinon, si l'AttributeValue est d'une syntaxe disposant d'un encodage sous forme de chaîne spécifique à LDAP, la valeur est d'abord convertie en une chaîne Unicode encodée en UTF-8 selon la spécification de sa syntaxe (voir [RFC4517], section 3.3, pour des exemples). Si cette chaîne Unicode encodée en UTF-8 ne contient aucun des caractères suivants devant être échappés, alors cette chaîne peut être utilisée comme représentation sous forme de chaîne de la valeur.

  • une espace (' ' U+0020) ou un signe numérique ('#' U+0023) au début de la chaîne ;

  • une espace (' ' U+0020) à la fin de la chaîne ;

  • l'un des caractères '"', '+', ',', ';', '<', '>' ou '' (U+0022, U+002B, U+002C, U+003B, U+003C, U+003E ou U+005C respectivement) ;

  • le caractère nul (U+0000).

D'autres caractères peuvent être échappés.

Chaque octet du caractère à échapper est remplacé par une barre oblique inverse et deux chiffres hexadécimaux, qui forment un seul octet dans le code du caractère. Sinon, si et seulement si le caractère à échapper est l'un des suivants :

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

il peut être précédé d'une barre oblique inverse ('' U+005C).

Des exemples du mécanisme d'échappement sont présentés à la section 4.