2. Conversione di un DistinguishedName da ASN.1 a stringa
X.501 [X.501] definisce la struttura ASN.1 [X.680] del nome distinto. Di seguito è riportata una variante fornita a scopo di discussione:
DistinguishedName ::= RDNSequence
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
type AttributeType,
value AttributeValue }
Questa sezione definisce l'algoritmo raccomandato (RECOMMENDED) per convertire un nome distinto da una rappresentazione strutturata ASN.1 a una rappresentazione in formato stringa di caratteri Unicode [Unicode] codificati in UTF-8 [RFC3629]. Altri documenti possono descrivere altri algoritmi per convertire un nome distinto in una stringa, ma le implementazioni LDAP DEVONO (SHALL) produrre solo stringhe conformi alla grammatica definita nella sezione 3.
2.1. Conversione del RDNSequence
Se il RDNSequence è una sequenza vuota, il risultato è la stringa vuota (di lunghezza zero).
In caso contrario, l'output è costituito dalle codifiche in formato stringa di ciascun RelativeDistinguishedName nel RDNSequence (secondo la sezione 2.2), partendo dall'ultimo elemento della sequenza e procedendo a ritroso verso il primo.
Le codifiche di RelativeDistinguishedName adiacenti sono separate da una virgola (',' U+002C).
2.2. Conversione di un RelativeDistinguishedName
Quando si converte un RelativeDistinguishedName ASN.1 in una stringa, l'output è costituito dalle codifiche in formato stringa di ciascun AttributeTypeAndValue (secondo la sezione 2.3), in qualsiasi ordine.
Nel caso di un RDN con più valori, gli output degli AttributeTypeAndValue adiacenti sono separati da un segno più ('+' U+002B).
2.3. Conversione di un AttributeTypeAndValue
L'AttributeTypeAndValue è codificato come la rappresentazione in formato stringa dell'AttributeType, seguita da un segno di uguale ('=' U+003D), seguito dalla rappresentazione in formato stringa dell'AttributeValue. La codifica dell'AttributeValue è fornita nella sezione 2.4.
Se per l'AttributeType è definito un nome breve (descrittore) [RFC4512] e tale nome breve è noto come registrato [REGISTRY][RFC4520] per identificare l'AttributeType, viene usato quel nome breve, un
Non ci si aspetta che le implementazioni aggiornino dinamicamente la loro conoscenza dei nomi brevi registrati. Tuttavia, le implementazioni DOVREBBERO (SHOULD) fornire un meccanismo che consenta di aggiornare la loro conoscenza dei nomi brevi registrati.
2.4. Conversione di un AttributeValue da ASN.1 a stringa
Se l'AttributeType è in forma decimale puntata, l'AttributeValue è rappresentato da un segno numerico ('#' U+0023) seguito dalla codifica esadecimale di ciascun ottetto della codifica BER dell'AttributeValue X.500. Questa forma è utilizzata anche quando per la sintassi dell'AttributeValue non è definita una codifica in formato stringa specifica di LDAP ([RFC4517], sezione 3.1), oppure quando tale codifica in formato stringa specifica di LDAP non è limitata a caratteri Unicode codificati in UTF-8. Questa forma può essere usata anche in altri casi, ad esempio quando si desidera una rappresentazione in formato stringa reversibile (vedere la sezione 5.2).
In caso contrario, se l'AttributeValue appartiene a una sintassi per cui esiste una codifica in formato stringa specifica di LDAP, il valore viene dapprima convertito in una stringa Unicode codificata in UTF-8 secondo la specifica della sua sintassi (per esempi vedere [RFC4517], sezione 3.3). Se tale stringa Unicode codificata in UTF-8 non contiene nessuno dei seguenti caratteri che devono essere sottoposti a escape, allora tale stringa può essere usata come rappresentazione in formato stringa del valore.
-
uno spazio (' ' U+0020) o un segno numerico ('#' U+0023) all'inizio della stringa;
-
uno spazio (' ' U+0020) alla fine della stringa;
-
uno dei caratteri '"', '+', ',', ';', '<', '>' o '' (rispettivamente U+0022, U+002B, U+002C, U+003B, U+003C, U+003E o U+005C);
-
il carattere nullo (U+0000).
Altri caratteri possono essere sottoposti a escape.
Ogni ottetto del carattere da sottoporre a escape è sostituito da una barra rovesciata e due cifre esadecimali, che formano un singolo ottetto nel codice del carattere. In alternativa, se e solo se il carattere da sottoporre a escape è uno dei seguenti:
' ', '"', '#', '+', ',', ';', '<', '=', '>' o '\'
(rispettivamente U+0020, U+0022, U+0023, U+002B, U+002C, U+003B,
U+003C, U+003D, U+003E o U+005C)
può essergli anteposta una barra rovesciata ('' U+005C).
Esempi del meccanismo di escape sono mostrati nella sezione 4.