RFC 2255 PROPOSED STANDARD DIRECTORY · URLS · LDAP

The LDAP URL Format

A link format that names an LDAP directory entry, or a whole search, the way a web address names a page.

On rfc-editor.org ↗
PUBLISHED
December 1997
AUTHORS
T. Howes, M. Smith
STREAM
IETF
BUILDS ON
RFC 1959 — LDAP URL
OBSOLETED BY
RFC 4510 — LDAP road map, RFC 4516 — LDAP URL
UPDATED BY
RFC 3377 — LDAPv3 specification
URL SCHEME
ldap
DEFAULT PORT
TCP 389
DEFAULT SCOPE
base
DEFAULT FILTER
(objectClass=*)
DEFAULT ATTRIBUTES
All user attributes
DEFINED EXTENSION
bindname
DOI
10.17487/RFC2255

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                         T. Howes
Request for Comments: 2255                                    M. Smith
Category: Standards Track                Netscape Communications Corp.
                                                         December 1997


                          The LDAP URL Format

1. 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 (1997).  All Rights Reserved.

IESG NOTE

   This document describes a directory access protocol that provides
   both read and update access.  Update access requires secure
   authentication, but this document does not mandate implementation of
   any satisfactory authentication mechanisms.

   In accordance with RFC 2026, section 4.4.1, this specification is
   being approved by IESG as a Proposed Standard despite this
   limitation, for the following reasons:

   a. to encourage implementation and interoperability testing of
      these protocols (with or without update access) before they
      are deployed, and

   b. to encourage deployment and use of these protocols in read-only
      applications.  (e.g. applications where LDAPv3 is used as
      a query language for directories which are updated by some
      secure mechanism other than LDAP), and

   c. to avoid delaying the advancement and deployment of other Internet
      standards-track protocols which require the ability to query, but
      not update, LDAPv3 directory servers.

   Readers are hereby warned that until mandatory authentication
   mechanisms are standardized, clients and servers written according to
   this specification which make use of update functionality are
   UNLIKELY TO INTEROPERATE, or MAY INTEROPERATE ONLY IF AUTHENTICATION
   IS REDUCED TO AN UNACCEPTABLY WEAK LEVEL.

   Implementors are hereby discouraged from deploying LDAPv3 clients or
   servers which implement the update functionality, until a Proposed
   Standard for mandatory authentication in LDAPv3 has been approved and
   published as an RFC.

2. Abstract

   LDAP is the Lightweight Directory Access Protocol, defined in [1],
   [2] and [3].  This document describes a format for an LDAP Uniform
   Resource Locator.  The format describes an LDAP search operation to
   perform to retrieve information from an LDAP directory. This document
   replaces RFC 1959. It updates the LDAP URL format for version 3 of
   LDAP and clarifies how LDAP URLs are resolved. This document also
   defines an extension mechanism for LDAP URLs, so that future
   documents can extend their functionality, for example, to provide
   access to new LDAPv3 extensions as they are defined.

   The key words "MUST", "MAY", and "SHOULD" used in this document are
   to be interpreted as described in [6].

3. URL Definition

   An LDAP URL begins with the protocol prefix "ldap" and is defined by
   the following grammar.

       ldapurl    = scheme "://" [hostport] ["/"
                    [dn ["?" [attributes] ["?" [scope]
                    ["?" [filter] ["?" extensions]]]]]]
       scheme     = "ldap"
       attributes = attrdesc *("," attrdesc)
       scope      = "base" / "one" / "sub"
       dn         = distinguishedName from Section 3 of [1]
       hostport   = hostport from Section 5 of RFC 1738 [5]
       attrdesc   = AttributeDescription from Section 4.1.5 of [2]
       filter     = filter from Section 4 of [4]
       extensions = extension *("," extension)
       extension  = ["!"] extype ["=" exvalue]
       extype     = token / xtoken
       exvalue    = LDAPString from section 4.1.2 of [2]
       token      = oid from section 4.1 of [3]
       xtoken     = ("X-" / "x-") token

   The "ldap" prefix indicates an entry or entries residing in the LDAP
   server running on the given hostname at the given portnumber. The
   default LDAP port is TCP port 389. If no hostport is given, the
   client must have some apriori knowledge of an appropriate LDAP server
   to contact.

   The dn is an LDAP Distinguished Name using the string format
   described in [1]. It identifies the base object of the LDAP search.

   ldapurl    = scheme "://" [hostport] ["/"
                    [dn ["?" [attributes] ["?" [scope]
                    ["?" [filter] ["?" extensions]]]]]]
       scheme     = "ldap"
       attributes = attrdesc *("," attrdesc)
       scope      = "base" / "one" / "sub"
       dn         = distinguishedName from Section 3 of [1]
       hostport   = hostport from Section 5 of RFC 1738 [5]
       attrdesc   = AttributeDescription from Section 4.1.5 of [2]
       filter     = filter from Section 4 of [4]
       extensions = extension *("," extension)
       extension  = ["!"] extype ["=" exvalue]
       extype     = token / xtoken
       exvalue    = LDAPString from section 4.1.2 of [2]
       token      = oid from section 4.1 of [3]
       xtoken     = ("X-" / "x-") token

   The "ldap" prefix indicates an entry or entries residing in the LDAP
   server running on the given hostname at the given portnumber. The
   default LDAP port is TCP port 389. If no hostport is given, the
   client must have some apriori knowledge of an appropriate LDAP server
   to contact.

   The dn is an LDAP Distinguished Name using the string format
   described in [1]. It identifies the base object of the LDAP search.

   The attributes construct is used to indicate which attributes should
   be returned from the entry or entries.  Individual attrdesc names are
   as defined for AttributeDescription in [2].  If the attributes part
   is omitted, all user attributes of the entry or entries should be
   requested (e.g., by setting the attributes field
   AttributeDescriptionList in the LDAP search request to a NULL list,
   or (in LDAPv3) by requesting the special attribute name "*").

   The scope construct is used to specify the scope of the search to
   perform in the given LDAP server.  The allowable scopes are "base"
   for a base object search, "one" for a one-level search, or "sub" for
   a subtree search.  If scope is omitted, a scope of "base" is assumed.

   The filter is used to specify the search filter to apply to entries
   within the specified scope during the search.  It has the format
   specified in [4].  If filter is omitted, a filter of
   "(objectClass=*)" is assumed.

   The extensions construct provides the LDAP URL with an extensibility
   mechanism, allowing the capabilities of the URL to be extended in the
   future. Extensions are a simple comma-separated list of type=value
   pairs, where the =value portion MAY be omitted for options not
   requiring it. Each type=value pair is a separate extension. These
   LDAP URL extensions are not necessarily related to any of the LDAPv3
   extension mechanisms. Extensions may be supported or unsupported by
   the client resolving the URL. An extension prefixed with a '!'
   character (ASCII 33) is critical. An extension not prefixed with a '
   !'  character is non-critical.

   If an extension is supported by the client, the client MUST obey the
   extension if the extension is critical. The client SHOULD obey
   supported extensions that are non-critical.

   If an extension is unsupported by the client, the client MUST NOT
   process the URL if the extension is critical.  If an unsupported
   extension is non-critical, the client MUST ignore the extension.

   If a critical extension cannot be processed successfully by the
   client, the client MUST NOT process the URL. If a non-critical
   extension cannot be processed successfully by the client, the client
   SHOULD ignore the extension.

   Extension types prefixed by "X-" or "x-" are reserved for use in
   bilateral agreements between communicating parties. Other extension
   types MUST be defined in this document, or in other standards-track
   documents.

   One LDAP URL extension is defined in this document in the next
   section.  Other documents or a future version of this document MAY
   define other extensions.

   Note that any URL-illegal characters (e.g., spaces), URL special
   characters (as defined in section 2.2 of RFC 1738) and the reserved
   character '?' (ASCII 63) occurring inside a dn, filter, or other
   element of an LDAP URL MUST be escaped using the % method described
   in RFC 1738 [5]. If a comma character ',' occurs inside an extension
   value, the character MUST also be escaped using the % method.

4. The Bindname Extension

   This section defines an LDAP URL extension for representing the
   distinguished name for a client to use when authenticating to an LDAP
   directory during resolution of an LDAP URL. Clients MAY implement
   this extension.

   The extension type is "bindname". The extension value is the
   distinguished name of the directory entry to authenticate as, in the
   same form as described for dn in the grammar above. The dn may be the
   NULL string to specify unauthenticated access. The extension may be
   either critical (prefixed with a '!' character) or non-critical (not
   prefixed with a '!' character).

   If the bindname extension is critical, the client resolving the URL
   MUST authenticate to the directory using the given distinguished name
   and an appropriate authentication method. Note that for a NULL
   distinguished name, no bind MAY be required to obtain anonymous
   access to the directory. If the extension is non-critical, the client
   MAY bind to the directory using the given distinguished name.

5. URL Processing

   This section describes how an LDAP URL SHOULD be resolved by a
   client.

   First, the client obtains a connection to the LDAP server referenced
   in the URL, or an LDAP server of the client's choice if no LDAP
   server is explicitly referenced.  This connection MAY be opened
   specifically for the purpose of resolving the URL or the client MAY
   reuse an already open connection. The connection MAY provide
   confidentiality, integrity, or other services, e.g., using TLS. Use
   of security services is at the client's discretion if not specified
   in the URL.

   Next, the client authenticates itself to the LDAP server.  This step
   is optional, unless the URL contains a critical bindname extension
   with a non-NULL value. If a bindname extension is given, the client
   proceeds according to the section above.

   If a bindname extension is not specified, the client MAY bind to the
   directory using a appropriate dn and authentication method of its own
   choosing (including NULL authentication).

   Next, the client performs the LDAP search operation specified in the
   URL. Additional fields in the LDAP protocol search request, such as
   sizelimit, timelimit, deref, and anything else not specified or
   defaulted in the URL specification, MAY be set at the client's
   discretion.

   Once the search has completed, the client MAY close the connection to
   the LDAP server, or the client MAY keep the connection open for
   future use.

6. Examples

   The following are some example LDAP URLs using the format defined
   above.  The first example is an LDAP URL referring to the University
   of Michigan entry, available from an LDAP server of the client's
   choosing:

     ldap:///o=University%20of%20Michigan,c=US

   The next example is an LDAP URL referring to the University of
   Michigan entry in a particular ldap server:

     ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US

   Both of these URLs correspond to a base object search of the
   "o=University of Michigan, c=US" entry using a filter of
   "(objectclass=*)", requesting all attributes.

   The next example is an LDAP URL referring to only the postalAddress
   attribute of the University of Michigan entry:

     ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,
            c=US?postalAddress

   The corresponding LDAP search operation is the same as in the
   previous example, except that only the postalAddress attribute is
   requested.

   The next example is an LDAP URL referring to the set of entries found
   by querying the given LDAP server on port 6666 and doing a subtree
   search of the University of Michigan for any entry with a common name
   of "Babs Jensen", retrieving all attributes:

     ldap://host.com:6666/o=University%20of%20Michigan,
            c=US??sub?(cn=Babs%20Jensen)

   The next example is an LDAP URL referring to all children of the c=GB
   entry:

     ldap://ldap.itd.umich.edu/c=GB?objectClass?one

   The objectClass attribute is requested to be returned along with the
   entries, and the default filter of "(objectclass=*)" is used.

   The next example is an LDAP URL to retrieve the mail attribute for
   the LDAP entry named "o=Question?,c=US" is given below, illustrating
   the use of the escaping mechanism on the reserved character '?'.

     ldap://ldap.question.com/o=Question%3f,c=US?mail

   The next example illustrates the interaction between LDAP and URL
   quoting mechanisms.

     ldap://ldap.netscape.com/o=Babsco,c=US??(int=%5c00%5c00%5c00%5c04)

   The filter in this example uses the LDAP escaping mechanism of \ to
   encode three zero or null bytes in the value. In LDAP, the filter
   would be written as (int=\00\00\00\04). Because the \ character must
   be escaped in a URL, the \'s are escaped as %5c in the URL encoding.

   The final example shows the use of the bindname extension to specify
   the dn a client should use for authentication when resolving the URL.

     ldap:///??sub??bindname=cn=Manager%2co=Foo
     ldap:///??sub??!bindname=cn=Manager%2co=Foo

   The two URLs are the same, except that the second one marks the
   bindname extension as critical. Notice the use of the % encoding
   method to encode the comma in the distinguished name value in the
   bindname extension.

7. Security Considerations

   General URL security considerations discussed in [5] are relevant for
   LDAP URLs.

   The use of security mechanisms when processing LDAP URLs requires
   particular care, since clients may encounter many different servers
   via URLs, and since URLs are likely to be processed automatically,
   without user intervention. A client SHOULD have a user-configurable
   policy about which servers to connect to using which security
   mechanisms, and SHOULD NOT make connections that are inconsistent
   with this policy.

   Sending authentication information, no matter the mechanism, may
   violate a user's privacy requirements.  In the absence of specific
   policy permitting authentication information to be sent to a server,
   a client should use an anonymous connection.  (Note that clients
   conforming to previous LDAP URL specifications, where all connections
   are anonymous and unprotected, are consistent with this
   specification; they simply have the default security policy.)

   Some authentication methods, in particular reusable passwords sent to
   the server, may reveal easily-abused information to the remote server
   or to eavesdroppers in transit, and should not be used in URL
   processing unless explicitly permitted by policy.  Confirmation by
   the human user of the use of authentication information is
   appropriate in many circumstances.  Use of strong authentication
   methods that do not reveal sensitive information is much preferred.

   The LDAP URL format allows the specification of an arbitrary LDAP
   search operation to be performed when evaluating the LDAP URL.
   Following an LDAP URL may cause unexpected results, for example, the
   retrieval of large amounts of data, the initiation of a long-lived
   search, etc.  The security implications of resolving an LDAP URL are
   the same as those of resolving an LDAP search query.

8. Acknowledgements

   The LDAP URL format was originally defined at the University of
   Michigan. This material is based upon work supported by the National
   Science Foundation under Grant No. NCR-9416667. The support of both
   the University of Michigan and the National Science Foundation is
   gratefully acknowledged.

   Several people have made valuable comments on this document.  In
   particular RL "Bob" Morgan and Mark Wahl deserve special thanks for
   their contributions.

9. References

   [1] Wahl, M., Kille, S., and T. Howes, "Lightweight Directory Access
   Protocol (v3): UTF-8 String Representation of Distinguished Names",
   RFC 2253, December 1997.

   [2] Wahl, M., Howes, T., and S. Kille, "Lightweight Directory Access
   Protocol (v3)", RFC 2251, December 1997.

   [3] Wahl, M., Coulbeck, A., Howes, T. and S. Kille, "Lightweight
   Directory Access Protocol (v3): Attribute Syntax Definitions", RFC
   2252, December 1997.

   [4] Howes, T., "A String Representation of LDAP Search Filters", RFC
   2254, December 1997.

   [5] Berners-Lee, T., Masinter, L. and M. McCahill, "Uniform Resource
   Locators (URL)," RFC 1738, December 1994.

   [6] Bradner, S., "Key Words for use in RFCs to Indicate Requirement
   Levels," RFC 2119, March 1997.

Authors' Addresses

   Tim Howes
   Netscape Communications Corp.
   501 E. Middlefield Rd.
   Mountain View, CA 94043
   USA

   Phone: +1 415 937-3419
   EMail: howes@netscape.com


   Mark Smith
   Netscape Communications Corp.
   501 E. Middlefield Rd.
   Mountain View, CA 94043
   USA

   Phone: +1 415 937-3477
   EMail: mcs@netscape.com

Full Copyright Statement

   Copyright (C) The Internet Society (1997).  All Rights Reserved.

   This document and translations of it may be copied and furnished to
   others, and derivative works that comment on or otherwise explain it
   or assist in its implementation may be prepared, copied, published
   and distributed, in whole or in part, without restriction of any
   kind, provided that the above copyright notice and this paragraph are
   included on all such copies and derivative works.  However, this
   document itself may not be modified in any way, such as by removing
   the copyright notice or references to the Internet Society or other
   Internet organizations, except as needed for the purpose of
   developing Internet standards in which case the procedures for
   copyrights defined in the Internet Standards process must be
   followed, or as required to translate it into languages other than
   English.

   The limited permissions granted above are perpetual and will not be
   revoked by the Internet Society or its successors or assigns.

   This document and the information contained herein is provided on an
   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
   TASK FORCE DISCLAIMS 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.

ISO Plain Language

On this page
PROBLEMLDAP directory entries and searches had no standard way to be written down as a link that a person or program could pass around.
MECHANISMAn LDAP URL starts with ldap:// and packs a server, a base distinguished name, attributes, a scope, a filter and optional extensions into one string, separated by question marks.
STATUS TODAYRFC 2255 has been obsoleted by RFC 4510 and RFC 4516. It updated the LDAP URL format for version 3 of LDAP and replaced RFC 1959, and it added an extension mechanism so later documents could add features.

§1Introduction

LDAP is the Lightweight Directory Access Protocol. This document describes a format for an LDAP Uniform Resource Locator. The format describes an LDAP search operation to perform to retrieve information from an LDAP directory. It replaces RFC 1959, updates the LDAP URL format for version 3 of LDAP, and clarifies how LDAP URLs are resolved. It also defines an extension mechanism for LDAP URLs, so that future documents can extend their functionality, for example to provide access to new LDAPv3 extensions as they are defined.

The note at the top of the document warns that until mandatory authentication mechanisms are standardized, clients and servers written to this specification that use update functionality are unlikely to interoperate, or may interoperate only if authentication is reduced to an unacceptably weak level. Implementors are discouraged from deploying LDAPv3 clients or servers that implement update functionality until a Proposed Standard for mandatory authentication in LDAPv3 has been approved and published as an RFC.

An LDAP URL is a way to write down a directory lookup as a single line of text, so it can be pasted into a message or a program. It says which server to ask, which entry to start from, how widely to search, what to look for, and what to bring back.

§3The URL Grammar

THE THREE SEARCH SCOPES
  • baseBase object — Search only the named entry. This is the default when scope is omitted.
  • oneOne level — Search the entries one level below the named entry.
  • subSubtree — Search the named entry and everything beneath it.

An LDAP URL begins with the protocol prefix ldap and is defined by the following grammar.

ldapurl    = scheme "://" [hostport] ["/"
             [dn ["?" [attributes] ["?" [scope]
             ["?" [filter] ["?" extensions]]]]]]
scheme     = "ldap"
attributes = attrdesc *("," attrdesc)
scope      = "base" / "one" / "sub"
extensions = extension *("," extension)
extension  = ["!"] extype ["=" exvalue]

The ldap prefix indicates an entry or entries residing in the LDAP server running on the given hostname at the given port number. The default LDAP port is TCP port 389. If no host and port are given, the client must have some prior knowledge of an appropriate LDAP server to contact.

The dn is an LDAP Distinguished Name using the string format of RFC 2253. It identifies the base object of the LDAP search.

The attributes construct indicates which attributes should be returned from the entry or entries. If it is omitted, all user attributes of the entry or entries should be requested, by setting the attributes field of the search request to a null list, or in LDAPv3 by requesting the special attribute name *.

The scope construct specifies the scope of the search to perform in the given LDAP server. The allowable scopes are base for a base object search, one for a one-level search, or sub for a subtree search. If scope is omitted, a scope of base is assumed.

The filter specifies the search filter to apply to entries within the specified scope during the search, in the format of RFC 2254. If it is omitted, a filter of (objectClass=*) is assumed.

Any URL-illegal characters, such as spaces, URL special characters as defined in RFC 1738, and the reserved character ? (ASCII 63) occurring inside a dn, filter, or other element of an LDAP URL MUST be escaped using the percent method described in RFC 1738. If a comma occurs inside an extension value, the character MUST also be escaped that way.

The link is built like an address with optional extras: which phone book, which entry, which details you want, how widely to look, and any special conditions. Leave out the extras and the computer uses sensible defaults.

LDAP URL ABNF (RFC 2255 SECTION 3)
LDAP URL grammar
ldapurl    = scheme "://" [hostport] ["/"
             [dn ["?" [attributes] ["?" [scope]
             ["?" [filter] ["?" extensions]]]]]]
scheme     = "ldap"
attributes = attrdesc *("," attrdesc)
scope      = "base" / "one" / "sub"
extensions = extension *("," extension)
extension  = ["!"] extype ["=" exvalue]

§4Extensions and the Bindname Extension

The extensions construct provides the LDAP URL with an extensibility mechanism, allowing the capabilities of the URL to be extended in the future. Extensions are a simple comma-separated list of type=value pairs, where the value portion MAY be omitted for options that do not require it, and each pair is a separate extension. These LDAP URL extensions are not necessarily related to any of the LDAPv3 extension mechanisms. Extensions may be supported or unsupported by the client resolving the URL. An extension prefixed with a ! character, ASCII 33, is critical; one without it is non-critical.

The rules are explicit. If an extension is supported by the client, the client MUST obey the extension if it is critical, and SHOULD obey supported extensions that are non-critical. If an extension is unsupported by the client, the client MUST NOT process the URL if the extension is critical, and MUST ignore the extension if it is unsupported and non-critical. If a critical extension cannot be processed successfully by the client, the client MUST NOT process the URL; if a non-critical extension cannot be processed successfully, the client SHOULD ignore the extension.

Extension types prefixed by X- or x- are reserved for use in bilateral agreements between communicating parties. Other extension types MUST be defined in this document, or in other standards-track documents.

One extension is defined in this document. The bindname extension represents the distinguished name for a client to use when authenticating to an LDAP directory during resolution of an LDAP URL, and clients MAY implement it. Its value is the distinguished name of the directory entry to authenticate as, in the same form as the dn in the grammar above, and the dn may be the empty string to specify unauthenticated access. The extension may be either critical or non-critical.

If the bindname extension is critical, the client resolving the URL MUST authenticate to the directory using the given distinguished name and an appropriate authentication method. Note that for an empty distinguished name, no bind may be required to obtain anonymous access to the directory. If the extension is non-critical, the client MAY bind to the directory using the given distinguished name.

Extensions are optional notes on the link. A note marked with an exclamation mark means: follow this or do not open the link at all. Unmarked notes can be skipped if you do not understand them. The one note defined here is the identity to authenticate as.

WHAT EACH PART OF THE URL DOES
  • hostportWhich server to ask. The default is TCP port 389.
  • dnThe distinguished name of the entry the search starts from.
  • attributesWhich attributes to bring back. Omitted means all user attributes.
  • scopeHow widely to search: base, one or sub. Omitted means base.
  • filterWhat to match. Omitted means (objectClass=*).
  • extensionsExtra conditions, such as the identity to authenticate as.

§5Resolving an LDAP URL

First, the client obtains a connection to the LDAP server referenced in the URL, or to an LDAP server of the client's choice if no server is explicitly referenced. The connection MAY be opened specifically for the purpose of resolving the URL, or the client MAY reuse an already open connection. The connection MAY provide confidentiality, integrity or other services, for example using TLS, and the use of security services is at the client's discretion if not specified in the URL.

Next, the client authenticates itself to the LDAP server. This step is optional, unless the URL contains a critical bindname extension with a non-empty value. If a bindname extension is given, the client proceeds as described earlier. If a bindname extension is not specified, the client MAY bind to the directory using a distinguished name and authentication method of its own choosing, including no authentication at all.

Next, the client performs the LDAP search operation specified in the URL. Additional fields in the LDAP protocol search request, such as sizelimit, timelimit, deref, and anything else not specified or defaulted in the URL specification, MAY be set at the client's discretion.

Once the search has completed, the client MAY close the connection to the LDAP server, or MAY keep it open for future use.

To follow the link, your computer connects to the directory, maybe shows an ID, asks the question written in the link, and then either hangs up or stays on the line for next time.

§6Examples

The document gives several worked URLs. ldap:///o=University%20of%20Michigan,c=US names an entry on a server of the client's choosing, and the same with ldap.itd.umich.edu after ldap:// names it on a particular server. Both correspond to a base object search of that entry using a filter of (objectclass=*), requesting all attributes.

The next example asks only for the postalAddress attribute of the same entry. A further example queries a server on port 6666 and does a subtree search of the University of Michigan for any entry with a common name of Babs Jensen, retrieving all attributes: ldap://host.com:6666/o=University%20of%20Michigan,c=US??sub?(cn=Babs%20Jensen). Another example refers to all children of the c=GB entry: ldap://ldap.itd.umich.edu/c=GB?objectClass?one, where the objectClass attribute is requested and the default filter is used.

One example illustrates the escaping mechanism on the reserved character, retrieving the mail attribute for the entry named o=Question?,c=US as ldap://ldap.question.com/o=Question%3f,c=US?mail. Another shows the interaction between LDAP and URL quoting: ldap://ldap.netscape.com/o=Babsco,c=US??(int=%5c00%5c00%5c00%5c04). The filter uses the LDAP escaping mechanism of the backslash to encode three zero bytes in the value, which in LDAP would be written as (int=\00\00\00\04); because the backslash must be escaped in a URL, each one becomes %5c.

The final examples show the bindname extension: ldap:///??sub??bindname=cn=Manager%2co=Foo and ldap:///??sub??!bindname=cn=Manager%2co=Foo. The two are the same except that the second marks the extension as critical, and the comma in the distinguished name value is escaped as %2c.

The examples show real-looking links, such as asking one university's directory for just its postal address, or asking a server on an unusual port for everything under one entry with a given name.

§7Security Considerations

The general URL security considerations of RFC 1738 are relevant for LDAP URLs.

The use of security mechanisms when processing LDAP URLs requires particular care, since clients may encounter many different servers via URLs, and since URLs are likely to be processed automatically, without user intervention. A client SHOULD have a user-configurable policy about which servers to connect to using which security mechanisms, and SHOULD NOT make connections that are inconsistent with this policy.

Sending authentication information, whatever the mechanism, may violate a user's privacy requirements. In the absence of specific policy permitting authentication information to be sent to a server, a client should use an anonymous connection. Some authentication methods, in particular reusable passwords sent to the server, may reveal easily abused information to the remote server or to eavesdroppers in transit, and should not be used in URL processing unless explicitly permitted by policy. Confirmation by the human user of the use of authentication information is appropriate in many circumstances, and the use of strong authentication methods that do not reveal sensitive information is much preferred.

The LDAP URL format allows the specification of an arbitrary LDAP search operation to be performed when evaluating the URL. Following an LDAP URL may cause unexpected results, for example the retrieval of large amounts of data or the initiation of a long-lived search. The security implications of resolving an LDAP URL are the same as those of resolving an LDAP search query.

A link can make your computer ask a stranger's directory a big question, so your computer should follow your own rules about whom to talk to and what to reveal.

§7References