mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
844 lines
31 KiB
Plaintext
844 lines
31 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group K. Zeilenga, Ed.
|
||
Request for Comments: 4514 OpenLDAP Foundation
|
||
Obsoletes: 2253 June 2006
|
||
Category: Standards Track
|
||
|
||
|
||
Lightweight Directory Access Protocol (LDAP):
|
||
String Representation of Distinguished Names
|
||
|
||
Status of This Memo
|
||
|
||
This document specifies an Internet standards track protocol for the
|
||
Internet community, and requests discussion and suggestions for
|
||
improvements. Please refer to the current edition of the "Internet
|
||
Official Protocol Standards" (STD 1) for the standardization state
|
||
and status of this protocol. Distribution of this memo is unlimited.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (C) The Internet Society (2006).
|
||
|
||
Abstract
|
||
|
||
The X.500 Directory uses distinguished names (DNs) as primary keys to
|
||
entries in the directory. This document defines the string
|
||
representation used in the Lightweight Directory Access Protocol
|
||
(LDAP) to transfer distinguished names. The string representation is
|
||
designed to give a clean representation of commonly used
|
||
distinguished names, while being able to represent any distinguished
|
||
name.
|
||
|
||
1. Background and Intended Usage
|
||
|
||
In X.500-based directory systems [X.500], including those accessed
|
||
using the Lightweight Directory Access Protocol (LDAP) [RFC4510],
|
||
distinguished names (DNs) are used to unambiguously refer to
|
||
directory entries [X.501][RFC4512].
|
||
|
||
The structure of a DN [X.501] is described in terms of ASN.1 [X.680].
|
||
In the X.500 Directory Access Protocol [X.511] (and other ITU-defined
|
||
directory protocols), DNs are encoded using the Basic Encoding Rules
|
||
(BER) [X.690]. In LDAP, DNs are represented in the string form
|
||
described in this document.
|
||
|
||
It is important to have a common format to be able to unambiguously
|
||
represent a distinguished name. The primary goal of this
|
||
specification is ease of encoding and decoding. A secondary goal is
|
||
to have names that are human readable. It is not expected that LDAP
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 1]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
implementations with a human user interface would display these
|
||
strings directly to the user, but that they would most likely be
|
||
performing translations (such as expressing attribute type names in
|
||
the local national language).
|
||
|
||
This document defines the string representation of Distinguished
|
||
Names used in LDAP [RFC4511][RFC4517]. Section 2 details the
|
||
RECOMMENDED algorithm for converting a DN from its ASN.1 structured
|
||
representation to a string. Section 3 details how to convert a DN
|
||
from a string to an ASN.1 structured representation.
|
||
|
||
While other documents may define other algorithms for converting a DN
|
||
from its ASN.1 structured representation to a string, all algorithms
|
||
MUST produce strings that adhere to the requirements of Section 3.
|
||
|
||
This document does not define a canonical string representation for
|
||
DNs. Comparison of DNs for equality is to be performed in accordance
|
||
with the distinguishedNameMatch matching rule [RFC4517].
|
||
|
||
This document is a integral part of the LDAP technical specification
|
||
[RFC4510], which obsoletes the previously defined LDAP technical
|
||
specification, RFC 3377, in its entirety. This document obsoletes
|
||
RFC 2253. Changes since RFC 2253 are summarized in Appendix B.
|
||
|
||
This specification assumes familiarity with X.500 [X.500] and the
|
||
concept of Distinguished Name [X.501][RFC4512].
|
||
|
||
1.1. Conventions
|
||
|
||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
||
document are to be interpreted as described in BCP 14 [RFC2119].
|
||
|
||
Character names in this document use the notation for code points and
|
||
names from the Unicode Standard [Unicode]. For example, the letter
|
||
"a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>.
|
||
|
||
Note: a glossary of terms used in Unicode can be found in [Glossary].
|
||
Information on the Unicode character encoding model can be found in
|
||
[CharModel].
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 2]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
2. Converting DistinguishedName from ASN.1 to a String
|
||
|
||
X.501 [X.501] defines the ASN.1 [X.680] structure of distinguished
|
||
name. The following is a variant provided for discussion purposes.
|
||
|
||
DistinguishedName ::= RDNSequence
|
||
|
||
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
|
||
|
||
RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
|
||
AttributeTypeAndValue
|
||
|
||
AttributeTypeAndValue ::= SEQUENCE {
|
||
type AttributeType,
|
||
value AttributeValue }
|
||
|
||
This section defines the RECOMMENDED algorithm for converting a
|
||
distinguished name from an ASN.1-structured representation to a UTF-8
|
||
[RFC3629] encoded Unicode [Unicode] character string representation.
|
||
Other documents may describe other algorithms for converting a
|
||
distinguished name to a string, but only strings that conform to the
|
||
grammar defined in Section 3 SHALL be produced by LDAP
|
||
implementations.
|
||
|
||
2.1. Converting the RDNSequence
|
||
|
||
If the RDNSequence is an empty sequence, the result is the empty or
|
||
zero-length string.
|
||
|
||
Otherwise, the output consists of the string encodings of each
|
||
RelativeDistinguishedName in the RDNSequence (according to Section
|
||
2.2), starting with the last element of the sequence and moving
|
||
backwards toward the first.
|
||
|
||
The encodings of adjoining RelativeDistinguishedNames are separated
|
||
by a comma (',' U+002C) character.
|
||
|
||
2.2. Converting RelativeDistinguishedName
|
||
|
||
When converting from an ASN.1 RelativeDistinguishedName to a string,
|
||
the output consists of the string encodings of each
|
||
AttributeTypeAndValue (according to Section 2.3), in any order.
|
||
|
||
Where there is a multi-valued RDN, the outputs from adjoining
|
||
AttributeTypeAndValues are separated by a plus sign ('+' U+002B)
|
||
character.
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 3]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
2.3. Converting AttributeTypeAndValue
|
||
|
||
The AttributeTypeAndValue is encoded as the string representation of
|
||
the AttributeType, followed by an equals sign ('=' U+003D) character,
|
||
followed by the string representation of the AttributeValue. The
|
||
encoding of the AttributeValue is given in Section 2.4.
|
||
|
||
If the AttributeType is defined to have a short name (descriptor)
|
||
[RFC4512] and that short name is known to be registered [REGISTRY]
|
||
[RFC4520] as identifying the AttributeType, that short name, a
|
||
<descr>, is used. Otherwise the AttributeType is encoded as the
|
||
dotted-decimal encoding, a <numericoid>, of its OBJECT IDENTIFIER.
|
||
The <descr> and <numericoid> are defined in [RFC4512].
|
||
|
||
Implementations are not expected to dynamically update their
|
||
knowledge of registered short names. However, implementations SHOULD
|
||
provide a mechanism to allow their knowledge of registered short
|
||
names to be updated.
|
||
|
||
2.4. Converting an AttributeValue from ASN.1 to a String
|
||
|
||
If the AttributeType is of the dotted-decimal form, the
|
||
AttributeValue is represented by an number sign ('#' U+0023)
|
||
character followed by the hexadecimal encoding of each of the octets
|
||
of the BER encoding of the X.500 AttributeValue. This form is also
|
||
used when the syntax of the AttributeValue does not have an LDAP-
|
||
specific ([RFC4517], Section 3.1) string encoding defined for it, or
|
||
the LDAP-specific string encoding is not restricted to UTF-8-encoded
|
||
Unicode characters. This form may also be used in other cases, such
|
||
as when a reversible string representation is desired (see Section
|
||
5.2).
|
||
|
||
Otherwise, if the AttributeValue is of a syntax that has a LDAP-
|
||
specific string encoding, the value is converted first to a UTF-8-
|
||
encoded Unicode string according to its syntax specification (see
|
||
[RFC4517], Section 3.3, for examples). If that UTF-8-encoded Unicode
|
||
string does not have any of the following characters that need
|
||
escaping, then that string can be used as the string representation
|
||
of the value.
|
||
|
||
- a space (' ' U+0020) or number sign ('#' U+0023) occurring at
|
||
the beginning of the string;
|
||
|
||
- a space (' ' U+0020) character occurring at the end of the
|
||
string;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 4]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
- one of the characters '"', '+', ',', ';', '<', '>', or '\'
|
||
(U+0022, U+002B, U+002C, U+003B, U+003C, U+003E, or U+005C,
|
||
respectively);
|
||
|
||
- the null (U+0000) character.
|
||
|
||
Other characters may be escaped.
|
||
|
||
Each octet of the character to be escaped is replaced by a backslash
|
||
and two hex digits, which form a single octet in the code of the
|
||
character. Alternatively, if and only if the character to be escaped
|
||
is one of
|
||
|
||
' ', '"', '#', '+', ',', ';', '<', '=', '>', or '\'
|
||
(U+0020, U+0022, U+0023, U+002B, U+002C, U+003B,
|
||
U+003C, U+003D, U+003E, U+005C, respectively)
|
||
|
||
it can be prefixed by a backslash ('\' U+005C).
|
||
|
||
Examples of the escaping mechanism are shown in Section 4.
|
||
|
||
3. Parsing a String Back to a Distinguished Name
|
||
|
||
The string representation of Distinguished Names is restricted to
|
||
UTF-8 [RFC3629] encoded Unicode [Unicode] characters. The structure
|
||
of this string representation is specified using the following
|
||
Augmented BNF [RFC4234] grammar:
|
||
|
||
distinguishedName = [ relativeDistinguishedName
|
||
*( COMMA relativeDistinguishedName ) ]
|
||
relativeDistinguishedName = attributeTypeAndValue
|
||
*( PLUS attributeTypeAndValue )
|
||
attributeTypeAndValue = attributeType EQUALS attributeValue
|
||
attributeType = descr / numericoid
|
||
attributeValue = string / hexstring
|
||
|
||
; The following characters are to be escaped when they appear
|
||
; in the value to be encoded: ESC, one of <escaped>, leading
|
||
; SHARP or SPACE, trailing SPACE, and NULL.
|
||
string = [ ( leadchar / pair ) [ *( stringchar / pair )
|
||
( trailchar / pair ) ] ]
|
||
|
||
leadchar = LUTF1 / UTFMB
|
||
LUTF1 = %x01-1F / %x21 / %x24-2A / %x2D-3A /
|
||
%x3D / %x3F-5B / %x5D-7F
|
||
|
||
trailchar = TUTF1 / UTFMB
|
||
TUTF1 = %x01-1F / %x21 / %x23-2A / %x2D-3A /
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 5]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
%x3D / %x3F-5B / %x5D-7F
|
||
|
||
stringchar = SUTF1 / UTFMB
|
||
SUTF1 = %x01-21 / %x23-2A / %x2D-3A /
|
||
%x3D / %x3F-5B / %x5D-7F
|
||
|
||
pair = ESC ( ESC / special / hexpair )
|
||
special = escaped / SPACE / SHARP / EQUALS
|
||
escaped = DQUOTE / PLUS / COMMA / SEMI / LANGLE / RANGLE
|
||
hexstring = SHARP 1*hexpair
|
||
hexpair = HEX HEX
|
||
|
||
where the productions <descr>, <numericoid>, <COMMA>, <DQUOTE>,
|
||
<EQUALS>, <ESC>, <HEX>, <LANGLE>, <NULL>, <PLUS>, <RANGLE>, <SEMI>,
|
||
<SPACE>, <SHARP>, and <UTFMB> are defined in [RFC4512].
|
||
|
||
Each <attributeType>, either a <descr> or a <numericoid>, refers to
|
||
an attribute type of an attribute value assertion (AVA). The
|
||
<attributeType> is followed by an <EQUALS> and an <attributeValue>.
|
||
The <attributeValue> is either in <string> or <hexstring> form.
|
||
|
||
If in <string> form, a LDAP string representation asserted value can
|
||
be obtained by replacing (left to right, non-recursively) each <pair>
|
||
appearing in the <string> as follows:
|
||
|
||
replace <ESC><ESC> with <ESC>;
|
||
replace <ESC><special> with <special>;
|
||
replace <ESC><hexpair> with the octet indicated by the <hexpair>.
|
||
|
||
If in <hexstring> form, a BER representation can be obtained from
|
||
converting each <hexpair> of the <hexstring> to the octet indicated
|
||
by the <hexpair>.
|
||
|
||
There is one or more attribute value assertions, separated by <PLUS>,
|
||
for a relative distinguished name.
|
||
|
||
There is zero or more relative distinguished names, separated by
|
||
<COMMA>, for a distinguished name.
|
||
|
||
Implementations MUST recognize AttributeType name strings
|
||
(descriptors) listed in the following table, but MAY recognize other
|
||
name strings.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 6]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
String X.500 AttributeType
|
||
------ --------------------------------------------
|
||
CN commonName (2.5.4.3)
|
||
L localityName (2.5.4.7)
|
||
ST stateOrProvinceName (2.5.4.8)
|
||
O organizationName (2.5.4.10)
|
||
OU organizationalUnitName (2.5.4.11)
|
||
C countryName (2.5.4.6)
|
||
STREET streetAddress (2.5.4.9)
|
||
DC domainComponent (0.9.2342.19200300.100.1.25)
|
||
UID userId (0.9.2342.19200300.100.1.1)
|
||
|
||
These attribute types are described in [RFC4519].
|
||
|
||
Implementations MAY recognize other DN string representations.
|
||
However, as there is no requirement that alternative DN string
|
||
representations be recognized (and, if so, how), implementations
|
||
SHOULD only generate DN strings in accordance with Section 2 of this
|
||
document.
|
||
|
||
4. Examples
|
||
|
||
This notation is designed to be convenient for common forms of name.
|
||
This section gives a few examples of distinguished names written
|
||
using this notation. First is a name containing three relative
|
||
distinguished names (RDNs):
|
||
|
||
UID=jsmith,DC=example,DC=net
|
||
|
||
Here is an example of a name containing three RDNs, in which the
|
||
first RDN is multi-valued:
|
||
|
||
OU=Sales+CN=J. Smith,DC=example,DC=net
|
||
|
||
This example shows the method of escaping of a special characters
|
||
appearing in a common name:
|
||
|
||
CN=James \"Jim\" Smith\, III,DC=example,DC=net
|
||
|
||
The following shows the method for encoding a value that contains a
|
||
carriage return character:
|
||
|
||
CN=Before\0dAfter,DC=example,DC=net
|
||
|
||
In this RDN example, the type in the RDN is unrecognized, and the
|
||
value is the BER encoding of an OCTET STRING containing two octets,
|
||
0x48 and 0x69.
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 7]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
1.3.6.1.4.1.1466.0=#04024869
|
||
|
||
Finally, this example shows an RDN whose commonName value consists of
|
||
5 letters:
|
||
|
||
Unicode Character Code UTF-8 Escaped
|
||
------------------------------- ------ ------ --------
|
||
LATIN CAPITAL LETTER L U+004C 0x4C L
|
||
LATIN SMALL LETTER U U+0075 0x75 u
|
||
LATIN SMALL LETTER C WITH CARON U+010D 0xC48D \C4\8D
|
||
LATIN SMALL LETTER I U+0069 0x69 i
|
||
LATIN SMALL LETTER C WITH ACUTE U+0107 0xC487 \C4\87
|
||
|
||
This could be encoded in printable ASCII [ASCII] (useful for
|
||
debugging purposes) as:
|
||
|
||
CN=Lu\C4\8Di\C4\87
|
||
|
||
5. Security Considerations
|
||
|
||
The following security considerations are specific to the handling of
|
||
distinguished names. LDAP security considerations are discussed in
|
||
[RFC4511] and other documents comprising the LDAP Technical
|
||
Specification [RFC4510].
|
||
|
||
5.1. Disclosure
|
||
|
||
Distinguished Names typically consist of descriptive information
|
||
about the entries they name, which can be people, organizations,
|
||
devices, or other real-world objects. This frequently includes some
|
||
of the following kinds of information:
|
||
|
||
- the common name of the object (i.e., a person's full name)
|
||
- an email or TCP/IP address
|
||
- its physical location (country, locality, city, street address)
|
||
- organizational attributes (such as department name or
|
||
affiliation)
|
||
|
||
In some cases, such information can be considered sensitive. In many
|
||
countries, privacy laws exist that prohibit disclosure of certain
|
||
kinds of descriptive information (e.g., email addresses). Hence,
|
||
server implementers are encouraged to support Directory Information
|
||
Tree (DIT) structural rules and name forms [RFC4512], as these
|
||
provide a mechanism for administrators to select appropriate naming
|
||
attributes for entries. Administrators are encouraged to use
|
||
mechanisms, access controls, and other administrative controls that
|
||
may be available to restrict use of attributes containing sensitive
|
||
information in naming of entries. Additionally, use of
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 8]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
authentication and data security services in LDAP [RFC4513][RFC4511]
|
||
should be considered.
|
||
|
||
5.2. Use of Distinguished Names in Security Applications
|
||
|
||
The transformations of an AttributeValue value from its X.501 form to
|
||
an LDAP string representation are not always reversible back to the
|
||
same BER (Basic Encoding Rules) or DER (Distinguished Encoding Rules)
|
||
form. An example of a situation that requires the DER form of a
|
||
distinguished name is the verification of an X.509 certificate.
|
||
|
||
For example, a distinguished name consisting of one RDN with one AVA,
|
||
in which the type is commonName and the value is of the TeletexString
|
||
choice with the letters 'Sam', would be represented in LDAP as the
|
||
string <CN=Sam>. Another distinguished name in which the value is
|
||
still 'Sam', but is of the PrintableString choice, would have the
|
||
same representation <CN=Sam>.
|
||
|
||
Applications that require the reconstruction of the DER form of the
|
||
value SHOULD NOT use the string representation of attribute syntaxes
|
||
when converting a distinguished name to the LDAP format. Instead,
|
||
they SHOULD use the hexadecimal form prefixed by the number sign ('#'
|
||
U+0023) as described in the first paragraph of Section 2.4.
|
||
|
||
6. Acknowledgements
|
||
|
||
This document is an update to RFC 2253, by Mark Wahl, Tim Howes, and
|
||
Steve Kille. RFC 2253 was a product of the IETF ASID Working Group.
|
||
|
||
This document is a product of the IETF LDAPBIS Working Group.
|
||
|
||
7. References
|
||
|
||
7.1. Normative References
|
||
|
||
[REGISTRY] IANA, Object Identifier Descriptors Registry,
|
||
<http://www.iana.org/assignments/ldap-parameters>.
|
||
|
||
[Unicode] The Unicode Consortium, "The Unicode Standard, Version
|
||
3.2.0" is defined by "The Unicode Standard, Version
|
||
3.0" (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-
|
||
61633-5), as amended by the "Unicode Standard Annex
|
||
#27: Unicode 3.1"
|
||
(http://www.unicode.org/reports/tr27/) and by the
|
||
"Unicode Standard Annex #28: Unicode 3.2"
|
||
(http://www.unicode.org/reports/tr28/).
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 9]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
[X.501] International Telecommunication Union -
|
||
Telecommunication Standardization Sector, "The
|
||
Directory -- Models," X.501(1993) (also ISO/IEC 9594-
|
||
2:1994).
|
||
|
||
[X.680] International Telecommunication Union -
|
||
Telecommunication Standardization Sector, "Abstract
|
||
Syntax Notation One (ASN.1) - Specification of Basic
|
||
Notation", X.680(1997) (also ISO/IEC 8824-1:1998).
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||
|
||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
|
||
10646", STD 63, RFC 3629, November 2003.
|
||
|
||
[RFC4234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
|
||
Specifications: ABNF", RFC 4234, October 2005.
|
||
|
||
[RFC4510] Zeilenga, K., Ed., "Lightweight Directory Access
|
||
Protocol (LDAP): Technical Specification Road Map", RFC
|
||
4510, June 2006.
|
||
|
||
[RFC4511] Sermersheim, J., Ed., "Lightweight Directory Access
|
||
Protocol (LDAP): The Protocol", RFC 4511, June 2006.
|
||
|
||
[RFC4512] Zeilenga, K., "Lightweight Directory Access Protocol
|
||
(LDAP): Directory Information Models", RFC 4512, June
|
||
2006.
|
||
|
||
[RFC4513] Harrison, R., Ed., "Lightweight Directory Access
|
||
Protocol (LDAP): Authentication Methods and Security
|
||
Mechanisms", RFC 4513, June 2006.
|
||
|
||
[RFC4517] Legg, S., Ed., "Lightweight Directory Access Protocol
|
||
(LDAP): Syntaxes and Matching Rules", RFC 4517, June
|
||
2006.
|
||
|
||
[RFC4519] Sciberras, A., Ed., "Lightweight Directory Access
|
||
Protocol (LDAP): Schema for User Applications", RFC
|
||
4519, June 2006.
|
||
|
||
[RFC4520] Zeilenga, K., "Internet Assigned Numbers Authority
|
||
(IANA) Considerations for the Lightweight Directory
|
||
Access Protocol (LDAP)", BCP 64, RFC 4520, June 2006.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 10]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
7.2. Informative References
|
||
|
||
[ASCII] Coded Character Set--7-bit American Standard Code for
|
||
Information Interchange, ANSI X3.4-1986.
|
||
|
||
[CharModel] Whistler, K. and M. Davis, "Unicode Technical Report
|
||
#17, Character Encoding Model", UTR17,
|
||
<http://www.unicode.org/unicode/reports/tr17/>, August
|
||
2000.
|
||
|
||
[Glossary] The Unicode Consortium, "Unicode Glossary",
|
||
<http://www.unicode.org/glossary/>.
|
||
|
||
[X.500] International Telecommunication Union -
|
||
Telecommunication Standardization Sector, "The
|
||
Directory -- Overview of concepts, models and
|
||
services," X.500(1993) (also ISO/IEC 9594-1:1994).
|
||
|
||
[X.511] International Telecommunication Union -
|
||
Telecommunication Standardization Sector, "The
|
||
Directory: Abstract Service Definition", X.511(1993)
|
||
(also ISO/IEC 9594-3:1993).
|
||
|
||
[X.690] International Telecommunication Union -
|
||
Telecommunication Standardization Sector,
|
||
"Specification of ASN.1 encoding rules: Basic Encoding
|
||
Rules (BER), Canonical Encoding Rules (CER), and
|
||
Distinguished Encoding Rules (DER)", X.690(1997) (also
|
||
ISO/IEC 8825-1:1998).
|
||
|
||
[RFC2849] Good, G., "The LDAP Data Interchange Format (LDIF) -
|
||
Technical Specification", RFC 2849, June 2000.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 11]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
Appendix A. Presentation Issues
|
||
|
||
This appendix is provided for informational purposes only; it is not
|
||
a normative part of this specification.
|
||
|
||
The string representation described in this document is not intended
|
||
to be presented to humans without translation. However, at times it
|
||
may be desirable to present non-translated DN strings to users. This
|
||
section discusses presentation issues associated with non-translated
|
||
DN strings. Issues with presentation of translated DN strings are
|
||
not discussed in this appendix. Transcoding issues are also not
|
||
discussed in this appendix.
|
||
|
||
This appendix provides guidance for applications presenting DN
|
||
strings to users. This section is not comprehensive; it does not
|
||
discuss all presentation issues that implementers may face.
|
||
|
||
Not all user interfaces are capable of displaying the full set of
|
||
Unicode characters. Some Unicode characters are not displayable.
|
||
|
||
It is recommended that human interfaces use the optional hex pair
|
||
escaping mechanism (Section 2.3) to produce a string representation
|
||
suitable for display to the user. For example, an application can
|
||
generate a DN string for display that escapes all non-printable
|
||
characters appearing in the AttributeValue's string representation
|
||
(as demonstrated in the final example of Section 4).
|
||
|
||
When a DN string is displayed in free-form text, it is often
|
||
necessary to distinguish the DN string from surrounding text. While
|
||
this is often done with whitespace (as demonstrated in Section 4), it
|
||
is noted that DN strings may end with whitespace. Careful readers of
|
||
Section 3 will note that the characters '<' (U+003C) and '>' (U+003E)
|
||
may only appear in the DN string if escaped. These characters are
|
||
intended to be used in free-form text to distinguish a DN string from
|
||
surrounding text. For example, <CN=Sam\ > distinguishes the string
|
||
representation of the DN composed of one RDN consisting of the AVA
|
||
(the commonName (CN) value 'Sam ') from the surrounding text. It
|
||
should be noted to the user that the wrapping '<' and '>' characters
|
||
are not part of the DN string.
|
||
|
||
DN strings can be quite long. It is often desirable to line-wrap
|
||
overly long DN strings in presentations. Line wrapping should be
|
||
done by inserting whitespace after the RDN separator character or, if
|
||
necessary, after the AVA separator character. It should be noted to
|
||
the user that the inserted whitespace is not part of the DN string
|
||
and is to be removed before use in LDAP. For example, the following
|
||
DN string is long:
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 12]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
CN=Kurt D. Zeilenga,OU=Engineering,L=Redwood Shores,
|
||
O=OpenLDAP Foundation,ST=California,C=US
|
||
|
||
So it has been line-wrapped for readability. The extra whitespace is
|
||
to be removed before the DN string is used in LDAP.
|
||
|
||
Inserting whitespace is not advised because it may not be obvious to
|
||
the user which whitespace is part of the DN string and which
|
||
whitespace was added for readability.
|
||
|
||
Another alternative is to use the LDAP Data Interchange Format (LDIF)
|
||
[RFC2849]. For example:
|
||
|
||
# This entry has a long DN...
|
||
dn: CN=Kurt D. Zeilenga,OU=Engineering,L=Redwood Shores,
|
||
O=OpenLDAP Foundation,ST=California,C=US
|
||
CN: Kurt D. Zeilenga
|
||
SN: Zeilenga
|
||
objectClass: person
|
||
|
||
Appendix B. Changes Made since RFC 2253
|
||
|
||
This appendix is provided for informational purposes only, it is not
|
||
a normative part of this specification.
|
||
|
||
The following substantive changes were made to RFC 2253:
|
||
|
||
- Removed IESG Note. The IESG Note has been addressed.
|
||
- Replaced all references to ISO 10646-1 with [Unicode].
|
||
- Clarified (in Section 1) that this document does not define a
|
||
canonical string representation.
|
||
- Clarified that Section 2 describes the RECOMMENDED encoding
|
||
algorithm and that alternative algorithms are allowed. Some
|
||
encoding options described in RFC 2253 are now treated as
|
||
alternative algorithms in this specification.
|
||
- Revised specification (in Section 2) to allow short names of any
|
||
registered attribute type to appear in string representations of
|
||
DNs instead of being restricted to a "published table". Removed
|
||
"as an example" language. Added statement (in Section 3)
|
||
allowing recognition of additional names but require recognition
|
||
of those names in the published table. The table now appears in
|
||
Section 3.
|
||
- Removed specification of additional requirements for LDAPv2
|
||
implementations which also support LDAPv3 (RFC 2253, Section 4)
|
||
as LDAPv2 is now Historic.
|
||
- Allowed recognition of alternative string representations.
|
||
- Updated Section 2.4 to allow hex pair escaping of all characters
|
||
and clarified escaping for when multiple octet UTF-8 encodings
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 13]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
are present. Indicated that null (U+0000) character is to be
|
||
escaped. Indicated that equals sign ('=' U+003D) character may
|
||
be escaped as '\='.
|
||
- Rewrote Section 3 to use ABNF as defined in RFC 4234.
|
||
- Updated the Section 3 ABNF. Changes include:
|
||
+ allowed AttributeType short names of length 1 (e.g., 'L'),
|
||
+ used more restrictive <oid> production in AttributeTypes,
|
||
+ did not require escaping of equals sign ('=' U+003D)
|
||
characters,
|
||
+ did not require escaping of non-leading number sign ('#'
|
||
U+0023) characters,
|
||
+ allowed space (' ' U+0020) to be escaped as '\ ',
|
||
+ required hex escaping of null (U+0000) characters, and
|
||
+ removed LDAPv2-only constructs.
|
||
- Updated Section 3 to describe how to parse elements of the
|
||
grammar.
|
||
- Rewrote examples.
|
||
- Added reference to documentations containing general LDAP
|
||
security considerations.
|
||
- Added discussion of presentation issues (Appendix A).
|
||
- Added this appendix.
|
||
|
||
In addition, numerous editorial changes were made.
|
||
|
||
Editor's Address
|
||
|
||
Kurt D. Zeilenga
|
||
OpenLDAP Foundation
|
||
|
||
EMail: Kurt@OpenLDAP.org
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 14]
|
||
|
||
RFC 4514 LDAP: Distinguished Names June 2006
|
||
|
||
|
||
Full Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (2006).
|
||
|
||
This document is subject to the rights, licenses and restrictions
|
||
contained in BCP 78, and except as set forth therein, the authors
|
||
retain all their rights.
|
||
|
||
This document and the information contained herein are provided on an
|
||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
|
||
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
|
||
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
|
||
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
Intellectual Property
|
||
|
||
The IETF takes no position regarding the validity or scope of any
|
||
Intellectual Property Rights or other rights that might be claimed to
|
||
pertain to the implementation or use of the technology described in
|
||
this document or the extent to which any license under such rights
|
||
might or might not be available; nor does it represent that it has
|
||
made any independent effort to identify any such rights. Information
|
||
on the procedures with respect to rights in RFC documents can be
|
||
found in BCP 78 and BCP 79.
|
||
|
||
Copies of IPR disclosures made to the IETF Secretariat and any
|
||
assurances of licenses to be made available, or the result of an
|
||
attempt made to obtain a general license or permission for the use of
|
||
such proprietary rights by implementers or users of this
|
||
specification can be obtained from the IETF on-line IPR repository at
|
||
http://www.ietf.org/ipr.
|
||
|
||
The IETF invites any interested party to bring to its attention any
|
||
copyrights, patents or patent applications, or other proprietary
|
||
rights that may cover technology that may be required to implement
|
||
this standard. Please address the information to the IETF at
|
||
ietf-ipr@ietf.org.
|
||
|
||
Acknowledgement
|
||
|
||
Funding for the RFC Editor function is provided by the IETF
|
||
Administrative Support Activity (IASA).
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zeilenga Standards Track [Page 15]
|
||
|