home *** CD-ROM | disk | FTP | other *** search
/ Handbook of Infosec Terms 2.0 / Handbook_of_Infosec_Terms_Version_2.0_ISSO.iso / text / rfcs / rfc1777.txt < prev    next >
Text File  |  1996-05-07  |  46KB  |  580 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                           W. Yeong Request for Comments: 1777             Performance Systems International Obsoletes: 1487                                                 T. Howes Category: Standards Track                         University of Michigan                                                                 S. Kille                                                         ISODE Consortium                                                               March 1995 
  8.  
  9.                   Lightweight Directory Access Protocol 
  10.  
  11. Status of this Memo 
  12.  
  13.    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. 
  14.  
  15. Abstract 
  16.  
  17.    The protocol described in this document is designed to provide access    to the X.500 Directory while not incurring the resource requirements    of the Directory Access Protocol (DAP). This protocol is specifically    targeted at simple management applications and browser applications    that provide simple read/write interactive access to the X.500    Directory, and is intended to be a complement to the DAP itself. 
  18.  
  19.    Key aspects of LDAP are: 
  20.  
  21.    - Protocol elements are carried directly over TCP or other transport,      bypassing much of the session/presentation overhead. 
  22.  
  23.    - Many protocol data elements are encoding as ordinary strings (e.g.,      Distinguished Names). 
  24.  
  25.    - A lightweight BER encoding is used to encode all protocol elements. 
  26.  
  27. 1.  History 
  28.  
  29.    The tremendous interest in X.500 [1,2] technology in the Internet has    lead to efforts to reduce the high "cost of entry" associated with    use of the technology, such as the Directory Assistance Service [3]    and DIXIE [4]. While efforts such as these have met with success,    they have been solutions based on particular implementations and as    such have limited applicability.  This document continues the efforts    to define Directory protocol alternatives but departs from previous    efforts in that it consciously avoids dependence on particular 
  30.  
  31.  
  32.  
  33. Yeong, Howes & Kille                                            [Page 1] 
  34.  RFC 1777                          LDAP                        March 1995 
  35.  
  36.     implementations. 
  37.  
  38. 2.  Protocol Model 
  39.  
  40.    The general model adopted by this protocol is one of clients    performing protocol operations against servers. In this model, this    is accomplished by a client transmitting a protocol request    describing the operation to be performed to a server, which is then    responsible for performing the necessary operations on the Directory.    Upon completion of the necessary operations, the server returns a    response containing any results or errors to the requesting client.    In keeping with the goal of easing the costs associated with use of    the Directory, it is an objective of this protocol to minimize the    complexity of clients so as to facilitate widespread deployment of    applications capable of utilizing the Directory. 
  41.  
  42.    Note that, although servers are required to return responses whenever    such responses are defined in the protocol, there is no requirement    for synchronous behavior on the part of either client or server    implementations: requests and responses for multiple operations may    be exchanged by client and servers in any order, as long as clients    eventually receive a response for every request that requires one. 
  43.  
  44.    Consistent with the model of servers performing protocol operations    on behalf of clients, it is also to be noted that protocol servers    are expected to handle referrals without resorting to the return of    such referrals to the client. This protocol makes no provisions for    the return of referrals to clients, as the model is one of servers    ensuring the performance of all necessary operations in the    Directory, with only final results or errors being returned by    servers to clients. 
  45.  
  46.    Note that this protocol can be mapped to a strict subset of the    directory abstract service, so it can be cleanly provided by the DAP. 
  47.  
  48. 3.  Mapping Onto Transport Services 
  49.  
  50.    This protocol is designed to run over connection-oriented, reliable    transports, with all 8 bits in an octet being significant in the data    stream.  Specifications for two underlying services are defined here,    though others are also possible. 
  51.  
  52. 3.1.  Transmission Control Protocol (TCP) 
  53.  
  54.    The LDAPMessage PDUs are mapped directly onto the TCP bytestream.    Server implementations running over the TCP should provide a protocol    listener on port 389. 
  55.  
  56.  
  57.  
  58.  Yeong, Howes & Kille                                            [Page 2] 
  59.  RFC 1777                          LDAP                        March 1995 
  60.  
  61.  3.2.  Connection Oriented Transport Service (COTS) 
  62.  
  63.    The connection is established.  No special use of T-Connect is made.    Each LDAPMessage PDU is mapped directly onto T-Data. 
  64.  
  65. 4.  Elements of Protocol 
  66.  
  67.    For the purposes of protocol exchanges, all protocol operations are    encapsulated in a common envelope, the LDAPMessage, which is defined    as follows: 
  68.  
  69.      LDAPMessage ::=          SEQUENCE {               messageID      MessageID,               protocolOp     CHOICE {                                   bindRequest         BindRequest,                                   bindResponse        BindResponse,                                   unbindRequest       UnbindRequest,                                   searchRequest       SearchRequest,                                   searchResponse      SearchResponse,                                   modifyRequest       ModifyRequest,                                   modifyResponse      ModifyResponse,                                   addRequest          AddRequest,                                   addResponse         AddResponse,                                   delRequest          DelRequest,                                   delResponse         DelResponse,                                   modifyRDNRequest    ModifyRDNRequest,                                   modifyRDNResponse   ModifyRDNResponse,                                   compareDNRequest    CompareRequest,                                   compareDNResponse   CompareResponse,                                   abandonRequest      AbandonRequest                              }          } 
  70.  
  71.      MessageID ::= INTEGER (0 .. maxInt) 
  72.  
  73.    The function of the LDAPMessage is to provide an envelope containing    common fields required in all protocol exchanges. At this time the    only common field is a message ID, which is required to have a value    different from the values of any other requests outstanding in the    LDAP session of which this message is a part. 
  74.  
  75.    The message ID value must be echoed in all LDAPMessage envelopes    encapsulting responses corresponding to the request contained in the    LDAPMessage in which the message ID value was originally used. 
  76.  
  77.    In addition to the LDAPMessage defined above, the following    definitions are also used in defining protocol operations: 
  78.  
  79.  
  80.  
  81. Yeong, Howes & Kille                                            [Page 3] 
  82.  RFC 1777                          LDAP                        March 1995 
  83.  
  84.       LDAPString ::= OCTET STRING 
  85.  
  86.    The LDAPString is a notational convenience to indicate that, although    strings of LDAPString type encode as OCTET STRING types, the legal    character set in such strings is limited to the IA5 character set. 
  87.  
  88.      LDAPDN ::= LDAPString 
  89.  
  90.      RelativeLDAPDN ::= LDAPString 
  91.  
  92.    An LDAPDN and a RelativeLDAPDN are respectively defined to be the    representation of a Distinguished Name and a Relative Distinguished    Name after encoding according to the specification in [5], such that 
  93.  
  94.      <distinguished-name> ::= <name> 
  95.  
  96.      <relative-distinguished-name> ::= <name-component> 
  97.  
  98.    where <name> and <name-component> are as defined in [5]. 
  99.  
  100.      AttributeValueAssertion ::=          SEQUENCE {               attributeType       AttributeType,               attributeValue      AttributeValue          } 
  101.  
  102.    The AttributeValueAssertion type definition  is similar to the one in    the X.500 Directory standards. 
  103.  
  104.      AttributeType ::= LDAPString 
  105.  
  106.      AttributeValue ::= OCTET STRING 
  107.  
  108.    An AttributeType value takes on as its value the textual string    associated with that AttributeType in the X.500 Directory standards.    For example, the AttributeType 'organizationName' with object    identifier 2.5.4.10 is represented as an AttributeType in this    protocol by the string "organizationName".  In the event that a    protocol implementation encounters an Attribute Type with which it    cannot associate a textual string, an ASCII string encoding of the    object identifier associated with the Attribute Type may be    subsitituted.  For example, the organizationName AttributeType may be    represented by the ASCII string "2.5.4.10" if a protocol    implementation is unable to associate the string "organizationName"    with it. 
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  Yeong, Howes & Kille                                            [Page 4] 
  115.  RFC 1777                          LDAP                        March 1995 
  116.  
  117.     A field of type AttributeValue takes on as its value an octet string    encoding of a Directory AttributeValue type. The definition of these    string encodings for different Directory AttributeValue types may be    found in companions to this document that define the encodings of    various attribute syntaxes such as [6]. 
  118.  
  119.      LDAPResult ::=          SEQUENCE {              resultCode    ENUMERATED {                              success                      (0),                              operationsError              (1),                              protocolError                (2),                              timeLimitExceeded            (3),                              sizeLimitExceeded            (4),                              compareFalse                 (5),                              compareTrue                  (6),                              authMethodNotSupported       (7),                              strongAuthRequired           (8),                              noSuchAttribute              (16),                              undefinedAttributeType       (17),                              inappropriateMatching        (18),                              constraintViolation          (19),                              attributeOrValueExists       (20),                              invalidAttributeSyntax       (21),                              noSuchObject                 (32),                              aliasProblem                 (33),                              invalidDNSyntax              (34),                              isLeaf                       (35),                              aliasDereferencingProblem    (36),                              inappropriateAuthentication  (48),                              invalidCredentials           (49),                              insufficientAccessRights     (50),                              busy                         (51),                              unavailable                  (52),                              unwillingToPerform           (53),                              loopDetect                   (54),                              namingViolation              (64),                              objectClassViolation         (65),                              notAllowedOnNonLeaf          (66),                              notAllowedOnRDN              (67),                              entryAlreadyExists           (68),                              objectClassModsProhibited    (69),                              other                        (80)                            },              matchedDN     LDAPDN,              errorMessage  LDAPString          } 
  120.  
  121.  
  122.  
  123.  Yeong, Howes & Kille                                            [Page 5] 
  124.  RFC 1777                          LDAP                        March 1995 
  125.  
  126.     The LDAPResult is the construct used in this protocol to return    success or failure indications from servers to clients. In response    to various requests, servers will return responses containing fields    of type LDAPResult to indicate the final status of a protocol    operation request.  The errorMessage field of this construct may, at    the servers option, be used to return an ASCII string containing a    textual, human-readable error diagnostic. As this error diagnostic is    not standardized, implementations should not rely on the values    returned.  If the server chooses not to return a textual diagnostic,    the errorMessage field of the LDAPResult type should contain a zero    length string. 
  127.  
  128.    For resultCodes of noSuchObject, aliasProblem, invalidDNSyntax,    isLeaf, and aliasDereferencingProblem, the matchedDN field is set to    the name of the lowest entry (object or alias) in the DIT that was    matched and is a truncated form of the name provided or, if an alias    has been dereferenced, of the resulting name.  The matchedDN field    should be set to NULL DN (a zero length string) in all other cases. 
  129.  
  130. 4.1.  Bind Operation 
  131.  
  132.    The function of the Bind Operation is to initiate a protocol session    between a client and a server, and to allow the authentication of the    client to the server. The Bind Operation must be the first operation    request received by a server from a client in a protocol session.    The Bind Request is defined as follows: 
  133.  
  134.      BindRequest ::=          [APPLICATION 0] SEQUENCE {                              version   INTEGER (1 .. 127),                              name      LDAPDN,                              authentication CHOICE {                                   simple        [0] OCTET STRING,                                   krbv42LDAP    [1] OCTET STRING,                                   krbv42DSA     [2] OCTET STRING                              }          } 
  135.  
  136.    Parameters of the Bind Request are: 
  137.  
  138.    - version: A version number indicating the version of the protocol to      be used in this protocol session.  This document describes version      2 of the LDAP protocol.  Note that there is no version negotiation,      and the client should just set this parameter to the version it      desires. 
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  Yeong, Howes & Kille                                            [Page 6] 
  145.  RFC 1777                          LDAP                        March 1995 
  146.  
  147.     - name: The name of the Directory object that the client wishes to      bind as.  This field may take on a null value (a zero length      string) for the purposes of anonymous binds. 
  148.  
  149.    - authentication: information used to authenticate the name, if any,      provided in the Bind Request. The "simple" authentication option      provides minimal authentication facilities, with the contents of      the authentication field consisting only of a cleartext password.      This option should also be used when unauthenticated or anonymous      binds are to be performed, with the field containing a zero length      string in such cases. Kerberos version 4 [7] authentication to the      LDAP server and the DSA is accomplished by using the "krbv42LDAP"      and "krbv42DSA" authentication options, respectively.  Note that      though they are referred to as separate entities here, there is no      requirement these two entities be distinct (i.e., a DSA could speak      LDAP directly).  Two separate authentication options are provided      to support all implementations.  Each octet string should contain      the kerberos ticket (e.g., as returned by krb_mk_req()) for the      appropriate service.  The suggested service name for authentication      to the LDAP server is "ldapserver".  The suggested service name for      authentication to the DSA is "x500dsa".  In both cases, the      suggested instance name for the service is the name of the host on      which the service is running.  Of course, the actual service names      and instances will depend on what is entered in the local kerberos      principle database. 
  150.  
  151.    The Bind Operation requires a response, the Bind Response, which is    defined as: 
  152.  
  153.      BindResponse ::= [APPLICATION 1] LDAPResult 
  154.  
  155.    A Bind Response consists simply of an indication from the server of    the status of the client's request for the initiation of a protocol    session. 
  156.  
  157.    Upon receipt of a Bind Request, a protocol server will authenticate    the requesting client if necessary, and attempt to set up a protocol    session with that client. The server will then return a Bind Response    to the client indicating the status of the session setup request. 
  158.  
  159. 4.2.  Unbind Operation 
  160.  
  161.    The function of the Unbind Operation is to terminate a protocol    session.  The Unbind Operation is defined as follows: 
  162.  
  163.      UnbindRequest ::= [APPLICATION 2] NULL 
  164.  
  165.  
  166.  
  167.  
  168.  
  169. Yeong, Howes & Kille                                            [Page 7] 
  170.  RFC 1777                          LDAP                        March 1995 
  171.  
  172.     The Unbind Operation has no response defined. Upon transmission of an    UnbindRequest, a protocol client may assume that the protocol session    is terminated. Upon receipt of an UnbindRequest, a protocol server    may assume that the requesting client has terminated the session and    that all outstanding requests may be discarded. 
  173.  
  174. 4.3.  Search Operation 
  175.  
  176.    The Search Operation allows a client to request that a search be    performed on its behalf by a server. The Search Request is defined as    follows: 
  177.  
  178.      SearchRequest ::=          [APPLICATION 3] SEQUENCE {              baseObject    LDAPDN,              scope         ENUMERATED {                                 baseObject            (0),                                 singleLevel           (1),                                 wholeSubtree          (2)                            },              derefAliases  ENUMERATED {                                         neverDerefAliases     (0),                                         derefInSearching      (1),                                         derefFindingBaseObj   (2),                                         derefAlways           (3)                                    },              sizeLimit     INTEGER (0 .. maxInt),              timeLimit     INTEGER (0 .. maxInt),              attrsOnly     BOOLEAN,              filter        Filter,              attributes    SEQUENCE OF AttributeType      } 
  179.  
  180.      Filter ::=          CHOICE {              and                [0] SET OF Filter,              or                 [1] SET OF Filter,              not                [2] Filter,              equalityMatch      [3] AttributeValueAssertion,              substrings         [4] SubstringFilter,              greaterOrEqual     [5] AttributeValueAssertion,              lessOrEqual        [6] AttributeValueAssertion,              present            [7] AttributeType,              approxMatch        [8] AttributeValueAssertion          } 
  181.  
  182.      SubstringFilter          SEQUENCE { 
  183.  
  184.  
  185.  
  186. Yeong, Howes & Kille                                            [Page 8] 
  187.  RFC 1777                          LDAP                        March 1995 
  188.  
  189.               type               AttributeType,              SEQUENCE OF CHOICE {                  initial        [0] LDAPString,                  any            [1] LDAPString,                  final          [2] LDAPString              }          } 
  190.  
  191.    Parameters of the Search Request are: 
  192.  
  193.    - baseObject: An LDAPDN that is the base object entry relative to      which the search is to be performed. 
  194.  
  195.    - scope: An indicator of the scope of the search to be performed. The      semantics of the possible values of this field are identical to the      semantics of the scope field in the Directory Search Operation. 
  196.  
  197.    - derefAliases: An indicator as to how alias objects should be      handled in searching.  The semantics of the possible values of      this field are, in order of increasing value: 
  198.  
  199.              neverDerefAliases: do not dereference aliases in searching              or in locating the base object of the search; 
  200.  
  201.              derefInSearching: dereference aliases in subordinates of              the base object in searching, but not in locating the              base object of the search; 
  202.  
  203.              derefFindingBaseObject: dereference aliases in locating              the base object of the search, but not when searching              subordinates of the base object; 
  204.  
  205.              derefAlways: dereference aliases both in searching and in              locating the base object of the search. 
  206.  
  207.    - sizelimit: A sizelimit that restricts the maximum number of entries      to be returned as a result of the search. A value of 0 in this      field indicates that no sizelimit restrictions are in effect for      the search. 
  208.  
  209.    - timelimit: A timelimit that restricts the maximum time (in seconds)      allowed for a search. A value of 0 in this field indicates that no      timelimit restrictions are in effect for the search. 
  210.  
  211.    - attrsOnly: An indicator as to whether search results should contain      both attribute types and values, or just attribute types.  Setting      this field to TRUE causes only attribute types (no values) to be      returned.  Setting this field to FALSE causes both attribute types 
  212.  
  213.  
  214.  
  215. Yeong, Howes & Kille                                            [Page 9] 
  216.  RFC 1777                          LDAP                        March 1995 
  217.  
  218.       and values to be returned. 
  219.  
  220.    - filter: A filter that defines the conditions that must be fulfilled      in order for the search to match a given entry. 
  221.  
  222.    - attributes: A list of the attributes from each entry found as a      result of the search to be returned. An empty list signifies that      all attributes from each entry found in the search are to be      returned. 
  223.  
  224.    The results of the search attempted by the server upon receipt of a    Search Request are returned in Search Responses, defined as follows: 
  225.  
  226.   Search Response ::=       CHOICE {            entry          [APPLICATION 4] SEQUENCE {                                objectName     LDAPDN,                                attributes     SEQUENCE OF SEQUENCE {                                                    AttributeType,                                                    SET OF AttributeValue                                               }                           },            resultCode     [APPLICATION 5] LDAPResult        } 
  227.  
  228.    Upon receipt of a Search Request, a server will perform the necessary    search of the DIT. 
  229.  
  230.    The server will return to the client a sequence of responses    comprised of: 
  231.  
  232.    - Zero or more Search Responses each consisting of an entry found      during the search; with the response sequence terminated by 
  233.  
  234.    - A single Search Response containing an indication of success, or      detailing any errors that have occurred. 
  235.  
  236.    Each entry returned will contain all attributes, complete with    associated values if necessary, as specified in the 'attributes'    field of the Search Request. 
  237.  
  238.    Note that an X.500 "list" operation can be emulated by a one-level    LDAP search operation with a filter checking for the existence of the    objectClass attribute, and that an X.500 "read" operation can be    emulated by a base object LDAP search operation with the same filter. 
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  Yeong, Howes & Kille                                           [Page 10] 
  245.  RFC 1777                          LDAP                        March 1995 
  246.  
  247.  4.4.  Modify Operation 
  248.  
  249.    The Modify Operation allows a client to request that a modification    of the DIB be performed on its behalf by a server.  The Modify    Request is defined as follows: 
  250.  
  251. ModifyRequest ::=     [APPLICATION 6] SEQUENCE {          object         LDAPDN,          modification   SEQUENCE OF SEQUENCE {                              operation      ENUMERATED {                                                  add       (0),                                                  delete    (1),                                                  replace   (2)                                             },                              modification   SEQUENCE {                                                type    AttributeType,                                                values  SET OF                                                          AttributeValue                                             }                         }     } 
  252.  
  253.    Parameters of the Modify Request are: 
  254.  
  255.    - object: The object to be modified. The value of this field should      name the object to be modified after all aliases have been      dereferenced. The server will not perform any alias dereferencing      in determining the object to be modified. 
  256.  
  257.    - A list of modifications to be performed on the entry to be modified.      The entire list of entry modifications should be performed      in the order they are listed, as a single atomic operation.  While      individual modifications may violate the Directory schema, the      resulting entry after the entire list of modifications is performed      must conform to the requirements of the Directory schema. The      values that may be taken on by the 'operation' field in each      modification construct have the following semantics respectively: 
  258.  
  259.              add: add values listed to the given attribute, creating              the attribute if necessary; 
  260.  
  261.              delete: delete values listed from the given attribute, 
  262.  
  263.      removing the entire attribute if no values are listed, or      if all current values of the attribute are listed for      deletion; 
  264.  
  265.  
  266.  
  267.  Yeong, Howes & Kille                                           [Page 11] 
  268.  RFC 1777                          LDAP                        March 1995 
  269.  
  270.       replace: replace existing values of the given attribute      with the new values listed, creating the attribute if      necessary. 
  271.  
  272.    The result of the modify attempted by the server upon receipt of a    Modify Request is returned in a Modify Response, defined as follows: 
  273.  
  274.      ModifyResponse ::= [APPLICATION 7] LDAPResult 
  275.  
  276.    Upon receipt of a Modify Request, a server will perform the necessary    modifications to the DIB. 
  277.  
  278.    The server will return to the client a single Modify Response    indicating either the successful completion of the DIB modification,    or the reason that the modification failed. Note that due to the    requirement for atomicity in applying the list of modifications in    the Modify Request, the client may expect that no modifications of    the DIB have been performed if the Modify Response received indicates    any sort of error, and that all requested modifications have been    performed if the Modify Response indicates successful completion of    the Modify Operation. 
  279.  
  280. 4.5.  Add Operation 
  281.  
  282.    The Add Operation allows a client to request the addition of an entry    into the Directory. The Add Request is defined as follows: 
  283.  
  284.      AddRequest ::=          [APPLICATION 8] SEQUENCE {               entry          LDAPDN,               attrs          SEQUENCE OF SEQUENCE {                                   type          AttributeType,                                   values        SET OF AttributeValue                              }          } 
  285.  
  286.    Parameters of the Add Request are: 
  287.  
  288.    - entry: the Distinguished Name of the entry to be added. Note that      all components of the name except for the last RDN component must      exist for the add to succeed. 
  289.  
  290.    - attrs: the list of attributes that make up the content of the entry      being added. 
  291.  
  292.    The result of the add attempted by the server upon receipt of a Add    Request is returned in the Add Response, defined as follows: 
  293.  
  294.  
  295.  
  296.  Yeong, Howes & Kille                                           [Page 12] 
  297.  RFC 1777                          LDAP                        March 1995 
  298.  
  299.       AddResponse ::= [APPLICATION 9] LDAPResult 
  300.  
  301.    Upon receipt of an Add Request, a server will attempt to perform the    add requested. The result of the add attempt will be returned to the    client in the Add Response. 
  302.  
  303. 4.6.  Delete Operation 
  304.  
  305.    The Delete Operation allows a client to request the removal of an    entry from the Directory. The Delete Request is defined as follows: 
  306.  
  307.      DelRequest ::= [APPLICATION 10] LDAPDN 
  308.  
  309.    The Delete Request consists only of the Distinguished Name of the    entry to be deleted.  The result of the delete attempted by the    server upon receipt of a Delete Request is returned in the Delete    Response, defined as follows: 
  310.  
  311.      DelResponse ::= [APPLICATION 11] LDAPResult 
  312.  
  313.    Upon receipt of a Delete Request, a server will attempt to perform    the entry removal requested. The result of the delete attempt will be    returned to the client in the Delete Response. Note that only leaf    objects may be deleted with this operation. 
  314.  
  315. 4.7.  Modify RDN Operation 
  316.  
  317.    The Modify RDN Operation allows a client to change the last component    of the name of an entry in the Directory. The Modify RDN Request is    defined as follows: 
  318.  
  319.      ModifyRDNRequest ::=          [APPLICATION 12] SEQUENCE {               entry          LDAPDN,               newrdn         RelativeLDAPDN,               deleteoldrdn   BOOLEAN          } 
  320.  
  321.    Parameters of the Modify RDN Request are: 
  322.  
  323.    - entry: the name of the entry to be changed. 
  324.  
  325.    - newrdn: the RDN that will form the last component of the new name. 
  326.  
  327.    - deleteoldrdn: a boolean parameter that controls whether the old RDN      attribute values should be retained as attributes of the entry or      deleted from the entry. 
  328.  
  329.  
  330.  
  331.  Yeong, Howes & Kille                                           [Page 13] 
  332.  RFC 1777                          LDAP                        March 1995 
  333.  
  334.     The result of the name change attempted by the server upon receipt of    a Modify RDN Request is returned in the Modify RDN Response, defined    as follows: 
  335.  
  336.      ModifyRDNResponse ::= [APPLICATION 13] LDAPResult 
  337.  
  338.    Upon receipt of a Modify RDN Request, a server will attempt to    perform the name change. The result of the name change attempt will    be returned to the client in the Modify RDN Response. The attributes    that make up the old RDN are deleted from the entry, or kept,    depending on the setting of the deleteoldrdn parameter. 
  339.  
  340. 4.8.  Compare Operation 
  341.  
  342.    The Compare Operation allows a client to compare an assertion    provided with an entry in the Directory. The Compare Request is    defined as follows: 
  343.  
  344.      CompareRequest ::=          [APPLICATION 14] SEQUENCE {               entry          LDAPDN,               ava            AttributeValueAssertion          } 
  345.  
  346.    Parameters of the Compare Request are: 
  347.  
  348.    - entry: the name of the entry to be compared with. 
  349.  
  350.    - ava: the assertion with which the entry is to be compared. 
  351.  
  352.    The result of the compare attempted by the server upon receipt of a    Compare Request is returned in the Compare Response, defined as    follows: 
  353.  
  354.      CompareResponse ::= [APPLICATION 15] LDAPResult 
  355.  
  356.    Upon receipt of a Compare Request, a server will attempt to perform    the requested comparison. The result of the comparison will be    returned to the client in the Compare Response. Note that errors and    the result of comparison are all returned in the same construct. 
  357.  
  358. 6.9.  Abandon Operation 
  359.  
  360.    The function of the Abandon Operation is to allow a client to request    that the server abandon an outstanding operation.  The Abandon    Request is defined as follows: 
  361.  
  362.      AbandonRequest ::= [APPLICATION 16] MessageID 
  363.  
  364.  
  365.  
  366. Yeong, Howes & Kille                                           [Page 14] 
  367.  RFC 1777                          LDAP                        March 1995 
  368.  
  369.     There is no response defined in the Abandon Operation. Upon    transmission of an Abandon Operation, a client may expect that the    operation identityfied by the Message ID in the Abandon Request has    been abandoned. In the event that a server receives an Abandon    Request on a Search Operation in the midst of transmitting responses    to that search, that server should cease transmitting responses to    the abandoned search immediately. 
  370.  
  371. 5.  Protocol Element Encodings 
  372.  
  373.    The protocol elements of LDAP are encoded for exchange using the    Basic Encoding Rules (BER) [12] of ASN.1 [11]. However, due to the    high overhead involved in using certain elements of the BER, the    following additional restrictions are placed on BER-encodings of LDAP    protocol elements: 
  374.  
  375.    (1)  Only the definite form of length encoding will be used. 
  376.  
  377.    (2)  Bitstrings and octet strings and all character string types         will be encoded in the primitive form only. 
  378.  
  379. 6.  Security Considerations 
  380.  
  381.    This version of the protocol provides facilities only for simple    authentication using a cleartext password, and for kerberos version 4    authentication.  Future versions of LDAP will likely include support    for other authentication methods. 
  382.  
  383. 7.  Bibliography 
  384.  
  385.    [1] The Directory: Overview of Concepts, Models and Service.  CCITT        Recommendation X.500, 1988. 
  386.  
  387.    [2] Information Processing Systems -- Open Systems Interconnection --        The Directory: Overview of Concepts, Models and Service.  ISO/IEC        JTC 1/SC21; International Standard 9594-1, 1988 
  388.  
  389.    [3] Rose, M., "Directory Assistance Service", RFC 1202, Performance        Systems International, Inc., February 1991. 
  390.  
  391.    [4] Howes, T., Smith, M., and B. Beecher, "DIXIE Protocol        Specification, RFC 1249, University of Michigan, August 1991. 
  392.  
  393.    [5] Kille, S., "A String Representation of Distinguished Names", RFC        1779, ISODE Consortium, March 1995. 
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  Yeong, Howes & Kille                                           [Page 15] 
  400.  RFC 1777                          LDAP                        March 1995 
  401.  
  402.     [6] Howes, T., Kille, S., Yeong, W., and C. Robbins, "Lightweight        Directory Access Protocol", RFC 1488, University of Michigan,        ISODE Consortium, Performance Systems International, NeXor Ltd.,        July 1993. 
  403.  
  404.    [7] Kerberos Authentication and Authorization System.  S.P. Miller,        B.C. Neuman, J.I. Schiller, J.H. Saltzer; MIT Project Athena        Documentation Section E.2.1, December 1987. 
  405.  
  406.    [8] The Directory: Models.  CCITT Recommendation X.501 ISO/IEC JTC        1/SC21; International Standard 9594-2, 1988. 
  407.  
  408.   [10] The Directory: Abstract Service Definition.  CCITT Recommendation        X.511, ISO/IEC JTC 1/SC21; International Standard 9594-3, 1988. 
  409.  
  410.   [11] Specification of Abstract Syntax Notation One (ASN.1).  CCITT        Recommendation X.208, 1988. 
  411.  
  412.   [12] Specification of Basic Encoding Rules for Abstract Syntax        Notation One (ASN.1).  CCITT Recommendation X.209, 1988. 
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444. Yeong, Howes & Kille                                           [Page 16] 
  445.  RFC 1777                          LDAP                        March 1995 
  446.  
  447.  10.  Authors' Addresses 
  448.  
  449.        Wengyik Yeong        PSI Inc.        510 Huntmar Park Drive        Herndon, VA 22070        USA 
  450.  
  451.        Phone:  +1 703-450-8001        EMail:  yeongw@psilink.com 
  452.  
  453.         Tim Howes        University of Michigan        ITD Research Systems        535 W William St.        Ann Arbor, MI 48103-4943        USA 
  454.  
  455.        Phone:  +1 313 747-4454        EMail:   tim@umich.edu 
  456.  
  457.         Steve Kille        ISODE Consortium        PO Box 505        London        SW11 1DX        UK 
  458.  
  459.        Phone:  +44-71-223-4062        EMail:  S.Kille@isode.com 
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479. Yeong, Howes & Kille                                           [Page 17] 
  480.  RFC 1777                          LDAP                        March 1995 
  481.  
  482.  Appendix A - Complete ASN.1 Definition 
  483.  
  484. Lightweight-Directory-Access-Protocol DEFINITIONS IMPLICIT TAGS ::= 
  485.  
  486. BEGIN 
  487.  
  488. LDAPMessage ::=     SEQUENCE {          messageID      MessageID,                         -- unique id in request,                         -- to be echoed in response(s)          protocolOp     CHOICE {                              searchRequest       SearchRequest,                              searchResponse      SearchResponse,                              modifyRequest       ModifyRequest,                              modifyResponse      ModifyResponse,                              addRequest          AddRequest,                              addResponse         AddResponse,                              delRequest          DelRequest,                              delResponse         DelResponse,                              modifyDNRequest     ModifyDNRequest,                              modifyDNResponse    ModifyDNResponse,                              compareDNRequest    CompareRequest,                              compareDNResponse   CompareResponse,                              bindRequest         BindRequest,                              bindResponse        BindResponse,                              abandonRequest      AbandonRequest,                              unbindRequest       UnbindRequest                         }     } 
  489.  
  490. BindRequest ::=     [APPLICATION 0] SEQUENCE {          version        INTEGER (1 .. 127),                         -- current version is 2          name           LDAPDN,                         -- null name implies an anonymous bind          authentication CHOICE {                              simple        [0] OCTET STRING,                                        -- a zero length octet string                                        -- implies an unauthenticated                                        -- bind.                              krbv42LDAP    [1] OCTET STRING,                              krbv42DSA     [2] OCTET STRING                                        -- values as returned by                                        -- krb_mk_req()                                        -- Other values in later versions                                        -- of this protocol. 
  491.  
  492.  
  493.  
  494. Yeong, Howes & Kille                                           [Page 18] 
  495.  RFC 1777                          LDAP                        March 1995 
  496.  
  497.                          }     } 
  498.  
  499. BindResponse ::= [APPLICATION 1] LDAPResult 
  500.  
  501. UnbindRequest ::= [APPLICATION 2] NULL 
  502.  
  503. SearchRequest ::=     [APPLICATION 3] SEQUENCE {          baseObject     LDAPDN,          scope          ENUMERATED {                              baseObject            (0),                              singleLevel           (1),                              wholeSubtree          (2)                         },          derefAliases   ENUMERATED {                              neverDerefAliases     (0),                              derefInSearching      (1),                              derefFindingBaseObj   (2),                              alwaysDerefAliases    (3)                         },          sizeLimit      INTEGER (0 .. maxInt),                         -- value of 0 implies no sizelimit          timeLimit      INTEGER (0 .. maxInt),                         -- value of 0 implies no timelimit          attrsOnly     BOOLEAN,                         -- TRUE, if only attributes (without values)                         -- to be returned.          filter         Filter,          attributes     SEQUENCE OF AttributeType     } 
  504.  
  505. SearchResponse ::=     CHOICE {          entry          [APPLICATION 4] SEQUENCE {                              objectName     LDAPDN,                              attributes     SEQUENCE OF SEQUENCE {                                               AttributeType,                                               SET OF                                                 AttributeValue                                             }                         },          resultCode     [APPLICATION 5] LDAPResult     } 
  506.  
  507. ModifyRequest ::=     [APPLICATION 6] SEQUENCE {          object         LDAPDN, 
  508.  
  509.  
  510.  
  511. Yeong, Howes & Kille                                           [Page 19] 
  512.  RFC 1777                          LDAP                        March 1995 
  513.  
  514.           modifications  SEQUENCE OF SEQUENCE {                              operation     ENUMERATED {                                              add      (0),                                              delete   (1),                                              replace  (2)                                            },                              modification  SEQUENCE {                                              type     AttributeType,                                              values   SET OF                                                         AttributeValue                                            }                         }     } 
  515.  
  516.  ModifyResponse ::= [APPLICATION 7] LDAPResult 
  517.  
  518. AddRequest ::=     [APPLICATION 8] SEQUENCE {          entry          LDAPDN,          attrs          SEQUENCE OF SEQUENCE {                              type          AttributeType,                              values        SET OF AttributeValue                         }     } 
  519.  
  520. AddResponse ::= [APPLICATION 9] LDAPResult 
  521.  
  522. DelRequest ::= [APPLICATION 10] LDAPDN 
  523.  
  524. DelResponse ::= [APPLICATION 11] LDAPResult 
  525.  
  526. ModifyRDNRequest ::=     [APPLICATION 12] SEQUENCE {          entry          LDAPDN,          newrdn         RelativeLDAPDN -- old RDN always deleted     } 
  527.  
  528. ModifyRDNResponse ::= [APPLICATION 13] LDAPResult 
  529.  
  530. CompareRequest ::=     [APPLICATION 14] SEQUENCE {          entry          LDAPDN,          ava            AttributeValueAssertion     } 
  531.  
  532. CompareResponse ::= [APPLICATION 15] LDAPResult 
  533.  
  534.  
  535.  
  536.  Yeong, Howes & Kille                                           [Page 20] 
  537.  RFC 1777                          LDAP                        March 1995 
  538.  
  539.  AbandonRequest ::= [APPLICATION 16] MessageID 
  540.  
  541. MessageID ::= INTEGER (0 .. maxInt) 
  542.  
  543. LDAPDN ::= LDAPString 
  544.  
  545. RelativeLDAPDN ::= LDAPString 
  546.  
  547. Filter ::=     CHOICE {         and            [0] SET OF Filter,         or             [1] SET OF Filter,         not            [2] Filter,         equalityMatch  [3] AttributeValueAssertion,         substrings     [4] SubstringFilter,         greaterOrEqual [5] AttributeValueAssertion,         lessOrEqual    [6] AttributeValueAssertion,         present        [7] AttributeType,         approxMatch    [8] AttributeValueAssertion     } 
  548.  
  549. LDAPResult ::=     SEQUENCE {         resultCode    ENUMERATED {                         success                      (0),                         operationsError              (1),                         protocolError                (2),                         timeLimitExceeded            (3),                         sizeLimitExceeded            (4),                         compareFalse                 (5),                         compareTrue                  (6),                         authMethodNotSupported       (7),                         strongAuthRequired           (8),                         noSuchAttribute              (16),                         undefinedAttributeType       (17),                         inappropriateMatching        (18),                         constraintViolation          (19),                         attributeOrValueExists       (20),                         invalidAttributeSyntax       (21),                         noSuchObject                 (32),                         aliasProblem                 (33),                         invalidDNSyntax              (34),                         isLeaf                       (35),                         aliasDereferencingProblem    (36),                         inappropriateAuthentication  (48),                         invalidCredentials           (49),                         insufficientAccessRights     (50),                         busy                         (51), 
  550.  
  551.  
  552.  
  553. Yeong, Howes & Kille                                           [Page 21] 
  554.  RFC 1777                          LDAP                        March 1995 
  555.  
  556.                          unavailable                  (52),                         unwillingToPerform           (53),                         loopDetect                   (54),                         namingViolation              (64),                         objectClassViolation         (65),                         notAllowedOnNonLeaf          (66),                         notAllowedOnRDN              (67),                         entryAlreadyExists           (68),                         objectClassModsProhibited    (69),                         other                        (80)                       },         matchedDN     LDAPDN,         errorMessage  LDAPString     } 
  557.  
  558. AttributeType ::= LDAPString                 -- text name of the attribute, or dotted                 -- OID representation 
  559.  
  560. AttributeValue ::= OCTET STRING 
  561.  
  562. AttributeValueAssertion ::=     SEQUENCE {         attributeType        AttributeType,         attributeValue       AttributeValue     } 
  563.  
  564. SubstringFilter ::=     SEQUENCE {         type               AttributeType,         SEQUENCE OF CHOICE {           initial          [0] LDAPString,           any              [1] LDAPString,           final            [2] LDAPString       }     } 
  565.  
  566. LDAPString ::= OCTET STRING 
  567.  
  568. maxInt INTEGER ::= 65535 END 
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  Yeong, Howes & Kille                                           [Page 22] 
  579.  
  580.