home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / drafts / draft_ietf_a_c / draft-ietf-asid-ldap-java-controls-00.txt < prev    next >
Text File  |  1997-09-30  |  23KB  |  837 lines

  1.  
  2.  
  3. Network Working Group                                         Rob Weltman
  4. INTERNET-DRAFT                              Netscape Communications Corp.
  5.                                                        September 26, 1997
  6.  
  7.  
  8.                            Java LDAP Controls
  9.                draft-ietf-asid-ldap-java-controls-00.txt
  10.  
  11.  
  12. Status of this Memo
  13.  
  14. This document is an Internet-Draft.  Internet-Drafts are working docu-
  15. ments of the Internet Engineering Task Force (IETF), its areas, and its
  16. working groups.  Note that other groups may also distribute working
  17. documents as Internet-Drafts.
  18.  
  19. Internet-Drafts are draft documents valid for a maximum of six months
  20. and may be updated, replaced, or obsoleted by other documents at any
  21. time.  It is inappropriate to use Internet-Drafts as reference material
  22. or to cite them other than as ``work in progress.''
  23.  
  24. To learn the current status of any Internet-Draft, please check the
  25. ``1id-abstracts.txt'' listing contained in the Internet-Drafts Shadow
  26. Directories on ds.internic.net (US East Coast), nic.nordu.net (Europe),
  27. ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific Rim).
  28.  
  29. Abstract
  30.  
  31. This document defines support for the Preferred Language Control, the
  32. Server Sorting Control, and the Virtual List Control in the java LDAP
  33. API.  Controls are an LDAP protocol version 3 extension, to allow pass-
  34. ing arbitrary control information along with a standard request to a
  35. server, and to receive arbitrary information back with a standard
  36. result.
  37.  
  38.  
  39. 1.  Introduction
  40.  
  41. Version 3 of the LDAP protocol provides a means of supplying arbitrary
  42. additional information along with a request to an LDAP server, and
  43. receiving arbitrary additional response information. A few applications
  44. of the Control mechanism have been identified as having general
  45. interest, and the protocol defined for their transmission [5] and [6].
  46. This document defines how support for the Preferred Language Control,
  47. the Server Sorting Control, and the Virtual List Control are supported
  48. in the java LDAP API. The java LDAP API in general is described in [2].
  49. The Control protocol extension is described in [1], section 4.1.12, and
  50. applications of it in [5] and [6].
  51.  
  52.  
  53.  
  54. Expires 3/98                                                    [Page 1]
  55.  
  56.  
  57.  
  58.  
  59.  
  60. JAVA LDAP CONTROLS                                        September 1997
  61.  
  62.  
  63. 2.  Overview of the LDAP Control classes
  64.  
  65. LDAPControl is part of a basic LDAP class package. Specific
  66. applications/implementations of Controls are in a subpackage called
  67. "controls".
  68.  
  69. The base class LDAPControl is defined in [2] as:
  70.  
  71.    public class LDAPControl implements Cloneable
  72.  
  73.    An LDAPControl encapsulates optional additional parameters or con-
  74.    straints to be applied to LDAP operations. If set as a Server Con-
  75.    trol, it is sent to the server along with operation requests. If set
  76.    as a Client Control, it is not sent to the server, but rather inter-
  77.    preted locally by the client. LDAPControl is an LDAPv3 extension, and
  78.    is not supported in an LDAPv2 environment.
  79.  
  80.    Constructors
  81.  
  82.       public LDAPControl(String id,
  83.                          boolean critical,
  84.                          byte vals[])
  85.  
  86.       Parameters are:
  87.  
  88.       id              The type of the Control, as a string.
  89.  
  90.       critical        True if the LDAP operation should be discarded if
  91.                       the server does not support this Control.
  92.  
  93.       vals            Control-specific data.
  94.  
  95.    getID
  96.  
  97.       public String getID()
  98.  
  99.       Returns the identifier of the control.
  100.  
  101.    isCritical
  102.  
  103.       public boolean isCritical()
  104.  
  105.       Returns true if the control must be supported for an associated
  106.       operation to be executed.
  107.  
  108.    getValue
  109.  
  110.       public byte[] getValue()
  111.  
  112.  
  113.  
  114. Expires 3/98                                                    [Page 2]
  115.  
  116.  
  117.  
  118.  
  119.  
  120. JAVA LDAP CONTROLS                                        September 1997
  121.  
  122.  
  123.       Returns the control-specific data of the object.
  124.  
  125.  
  126. The following Controls are defined for the controls subpackage:
  127.  
  128.  
  129. LDAPLanguageControl   Is used to set a preferred language for results
  130.                       from the server.
  131.  
  132.  
  133. LDAPVirtualListControlEncapsulates requests for a subset of a virtual
  134.                       list of search results, and the response of a
  135.                       server to such a request.
  136.  
  137.  
  138. LDAPSortControl       Encapsulates a requested sorting order for search
  139.                       results returned by a server, and the server's
  140.                       response to the request.
  141.  
  142.  
  143. 3.  The java LDAP Control classes
  144.  
  145.  
  146. 3.1.  public class LDAPLanguageControl extends LDAPControl
  147.  
  148. The LDAPLanguageControl class represents control data for setting a pre-
  149. ferred language for results returned by a Directory Server.
  150.  
  151.  
  152. 3.1.1.  Constructors
  153.  
  154.    public LDAPLanguageControl(String lang)
  155.  
  156.    Constructs a new LDAPLanguageControl object using a a string specifi-
  157.    cation of language and optionally also country and a variant.
  158.  
  159.  
  160.  
  161.    public LDAPLanguageControl(Locale locale)
  162.  
  163.    Constructs a new LDAPLanguageControl object using a Locale object to
  164.    select language.
  165.  
  166.    Parameters are:
  167.  
  168.    lang            A string of the form "en" or "ja-JP-kanji". The syn-
  169.                    tax is defined in [3] and [4]. The first two charac-
  170.                    ters are a language specification (as defined in ISO
  171.  
  172.  
  173.  
  174. Expires 3/98                                                    [Page 3]
  175.  
  176.  
  177.  
  178.  
  179.  
  180. JAVA LDAP CONTROLS                                        September 1997
  181.  
  182.  
  183.                    639); they may be followed by a dash and a two char-
  184.                    acter country specification (as defined in ISO 3166);
  185.                    the latter may be followed by a dash and a language
  186.                    variant.  Examples:
  187.                       "lang-en"
  188.                       "lang-en-us"
  189.                       "lang-ja-JP-kanji"
  190.  
  191.    locale          A Locale object to be used to define the preferred
  192.                    language. A control for the default locale language
  193.                    may be created with
  194.                       LDAPLanguageControl lc = new LDAPLanguageControl(
  195.                       Locale.getDefault() );
  196.  
  197.  
  198. 3.1.2.  public class LDAPVirtualListControl extends LDAPControl
  199.  
  200. LDAPVirtualListControl is a Server Control to specify that results from
  201. a search are to be returned in pages, subsets of the entire virtual
  202. result set. On success, an updated LDAPVirtualList object is returned as
  203. a response Control, containing information on the virtual list size and
  204. the actual first index. This object can then be updated by the client
  205. with a new requested position or length and sent to the server to obtain
  206. a different segment of the virtual list.
  207.  
  208.  
  209. 3.1.2.1.  Constructors
  210.  
  211.    public LDAPVirtualListControl( String subFilter,
  212.                                   int beforeCount,
  213.                                   int afterCount )
  214.  
  215.    Constructs a virtual list control using the specified filter expres-
  216.    sion, which defines the extent of the virtual search results, and the
  217.    number of entries before and after a located index to be returned.
  218.  
  219.    Parameters are:
  220.  
  221.    subFilter       A search expression that defines the extent of the
  222.                    virtual search results. The filter expression in the
  223.                    search operation itself may be, for example,
  224.                    "objectclass=person" and the subFilter expression in
  225.                    the virtual list control may be "cn=m*", to retrieve
  226.                    a subset of entries starting at or centered around
  227.                    those with a common name beginning with the letter
  228.                    "M".
  229.  
  230.    beforeCount     The number of entries before "listIndex" to be
  231.  
  232.  
  233.  
  234. Expires 3/98                                                    [Page 4]
  235.  
  236.  
  237.  
  238.  
  239.  
  240. JAVA LDAP CONTROLS                                        September 1997
  241.  
  242.  
  243.                    returned.
  244.  
  245.    afterCount      The number of entries after "listIndex" to be
  246.                    returned.
  247.  
  248.  
  249. 3.1.2.2.  getAfterCount
  250.  
  251.    public int getAfterCount()
  252.  
  253.    Returns the number of entries after the top/center one to return per
  254.    page of results.
  255.  
  256.  
  257. 3.1.2.3.  getBeforeCount
  258.  
  259.    public int getBeforeCount()
  260.  
  261.    Returns the number of entries before the top/center one to return per
  262.    page of results.
  263.  
  264.  
  265. 3.1.2.4.  getListSize
  266.  
  267.    public int getListSize()
  268.  
  269.    Returns the size of the virtual search results list. For a newly con-
  270.    structed control - one which is not the result of parseResponse on a
  271.    control returned by a server - the method returns -1.
  272.  
  273.  
  274. 3.1.2.5.  setRange
  275.  
  276.    public void setRange( int listIndex,
  277.                          int beforeCount,
  278.                          int afterCount )
  279.  
  280.    Sets the center or starting list index to return, and the number of
  281.    results before and after.
  282.  
  283.    Parameters are:
  284.  
  285.    listIndex       The center or starting list index to be returned.
  286.  
  287.    beforeCount     The number of entries before "listIndex" to be
  288.                    returned.
  289.  
  290.    afterCount      The number of entries after "listIndex" to be
  291.  
  292.  
  293.  
  294. Expires 3/98                                                    [Page 5]
  295.  
  296.  
  297.  
  298.  
  299.  
  300. JAVA LDAP CONTROLS                                        September 1997
  301.  
  302.  
  303.                    returned.
  304.  
  305.  
  306. 3.1.2.6.  parseResult
  307.  
  308.    public LDAPVirtualListControl parseResponse()
  309.  
  310.    public static LDAPVirtualListControl parseResponse(
  311.                                          LDAPControl[] controls )
  312.  
  313.    When applied to a virtual list control returned by a server, par-
  314.    seResponse returns a new virtual list control which can be used for
  315.    subsequent searches using the same substringFilter. The second form
  316.    processes a list of controls, one of which may or may not be an LDAP-
  317.    VirtualListControl. The input is typically provided with the
  318.    LDAPConnection.getResponseControls method.
  319.  
  320.    Parameters are:
  321.  
  322.    controls        An array of  controls. It may be null.
  323.  
  324.  
  325. 3.1.3.  public class LDAPSortControl extends LDAPControl
  326.  
  327. LDAPSortControl is a Server Control to specify how search results are to
  328. be sorted by the server (see [5]). If a server does not support sorting
  329. in general or for a particular query, the results will be returned
  330. unsorted, along with a control indicating why they were not sorted (or
  331. that sort controls are not supported). If the control was marked "criti-
  332. cal", the whole search operation will fail if the sort control is not
  333. supported.
  334.  
  335.  
  336. 3.1.3.1.  Constructors
  337.  
  338.    public LDAPSortControl( LDAPSortKey key, boolean critical)
  339.  
  340.    Constructs a sort control with a single key.
  341.  
  342.  
  343.  
  344.    public LDAPSortControl( LDAPSortKey[] keys, boolean critical)
  345.  
  346.    Constructs a sort control with multiple sort keys.
  347.  
  348.    Parameters are:
  349.  
  350.    key             A sort key object, which specifies attribute, order,
  351.  
  352.  
  353.  
  354. Expires 3/98                                                    [Page 6]
  355.  
  356.  
  357.  
  358.  
  359.  
  360. JAVA LDAP CONTROLS                                        September 1997
  361.  
  362.  
  363.                    and optional matching rule.
  364.  
  365.    keys            An array of sort key objects, to be processed in
  366.                    order.
  367.  
  368.    critical        True if the search operation is to fail if the server
  369.                    does not support this control.
  370.  
  371.  
  372.    3.1.3.2.  parseResponse
  373.  
  374.    public static String parseResponse( LDAPControl[] controls,
  375.                                        int results[] )
  376.  
  377.    Processes an array of Server Controls to determine if sorting was
  378.    rejected, and if so, why. If sorting was rejected, the return value
  379.    is the attribute name which caused sorting to fail. results[0] con-
  380.    tains the result code on return. The result code is one defined in
  381.    [1], section 4.1.10.
  382.  
  383.    Parameters are:
  384.  
  385.  
  386.    controls        An array of Server Controls, typically obtained with
  387.                    LDAPConnection.getResponseControls(). It may be null,
  388.                    which is equivalent to no error.
  389.  
  390.  
  391. 4.  Security Considerations
  392.  
  393. See [2] for security considerations in the java LDAP API.
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414. Expires 3/98                                                    [Page 7]
  415.  
  416.  
  417.  
  418.  
  419.  
  420. JAVA LDAP CONTROLS                                        September 1997
  421.  
  422.  
  423. 5.  Bibliography
  424.  
  425. [1]  M. Wahl, T. Howes, S. Kille, "Lightweight Directory Access Protocol
  426.      (v3)", Internet Draft draft-ietf-asid-ldapv3-protocol-06.txt, July
  427.      1997.
  428.  
  429. [2]  R. Weltman, T. Howes, M. Smith, "The Java LDAP Application Program
  430.      Interface", Internet Draft draft-ietf-asid-ldap-java-api-01.txt,
  431.      September 1997.
  432.  
  433. [3]  H. Alvestrans, "Tags for the Identification of Languages", Request
  434.      for Comments 1766, March 1995.
  435.  
  436. [4]  M. Wahl, T. Howes, "Use of Language Codes in LDAPv3", Internet
  437.      Draft draft-ietf-asid-ldapv3-lang-02.txt, June 1997.
  438.  
  439. [5]  A. Herron, T. Howes, M. Wahl, "LDAP Control Extension for Server
  440.      Side Sorting of Search Results", Internet Draft draft-ietf-asid-
  441.      ldapv3-sorting-00.txt, April 1997.
  442.  
  443. [6]  D. Boreham, "LDAP Control Extension for Virtual List View Browsing
  444.      of Search Results", Internet Draft draft-ietf-asid-ldapv3-
  445.      virtuallistview-01.txt, October 1997.
  446.  
  447. [7]  C. Weider, A Herron, T. Howes, "LDAP Control Extension for Simple
  448.      Paged Results Manipulation", Internet Draft draft-ietf-asid-
  449.      ldapv3-simple-paged-01.txt, March 1997.
  450.  
  451. 6.  Author's Address
  452.  
  453.    Rob Weltman
  454.    Netscape Communications Corp.
  455.    501 E. Middlefield Rd.
  456.    Mountain View, CA 94043
  457.    USA
  458.    +1 650 937-3301
  459.    rweltman@netscape.com
  460.  
  461.  
  462. 7.  Appendix A - Sample usage of the java LDAP controls
  463.  
  464.    Doing a search with results sorted on the server
  465.  
  466.    import netscape.ldap.*;
  467.    import netscape.ldap.controls.*;
  468.    import java.util.*;
  469.  
  470.    public class SearchJensenSorted {
  471.  
  472.  
  473.  
  474. Expires 3/98                                                    [Page 8]
  475.  
  476.  
  477.  
  478.  
  479.  
  480. JAVA LDAP CONTROLS                                        September 1997
  481.  
  482.  
  483.        public static void main( String[] args )
  484.        {
  485.            try {
  486.                LDAPConnection ld = new LDAPConnection();
  487.                /* Connect to server */
  488.                String MY_HOST = "localhost";
  489.                int MY_PORT = 389;
  490.                ld.connect( MY_HOST, MY_PORT );
  491.  
  492.                /* search for all entries with surname of Jensen */
  493.                String MY_FILTER = "sn=Jensen";
  494.                String MY_SEARCHBASE = "o=Ace Industry, c=US";
  495.  
  496.                /* Get the common name, uid, and telephone number */
  497.                String[] attrs = new String[3];
  498.                attrs[0] = "cn";
  499.                attrs[1] = "telephonenumber";
  500.                attrs[2] = "uid";
  501.  
  502.                /* Sort by lastname, firstname */
  503.                LDAPSortKey[] keys = new LDAPSortKey[2];
  504.                keys[0] = new LDAPSortKey( "sn" );
  505.                keys[1] = new LDAPSortKey( "givenname" );
  506.                LDAPSortControl sort = new LDAPSortControl( keys, true );
  507.                ld.setOption( LDAPConnection.SERVERCONTROLS, sort );
  508.  
  509.                LDAPSearchResults res = ld.search( MY_SEARCHBASE,
  510.                                                   LDAPConnection.SCOPE_ONE,
  511.                                                   MY_FILTER,
  512.                                                   attrs,
  513.                                                   false );
  514.  
  515.                /* Loop on results until finished */
  516.                while ( res.hasMoreElements() ) {
  517.  
  518.                    /* Next directory entry */
  519.                    LDAPEntry findEntry = (LDAPEntry)res.nextElement();
  520.                    System.out.println( findEntry.getDN() );
  521.  
  522.                    /* Get the attributes of the entry */
  523.                    LDAPAttributeSet findAttrs = findEntry.getAttributeSet();
  524.                    Enumeration enumAttrs = findAttrs.getAttributes();
  525.                    System.out.println( "Attributes: " );
  526.  
  527.                    /* Loop on attributes */
  528.                    while ( enumAttrs.hasMoreElements() ) {
  529.                        LDAPAttribute anAttr =
  530.                            (LDAPAttribute)enumAttrs.nextElement();
  531.  
  532.  
  533.  
  534. Expires 3/98                                                    [Page 9]
  535.  
  536.  
  537.  
  538.  
  539.  
  540. JAVA LDAP CONTROLS                                        September 1997
  541.  
  542.  
  543.                        String attrName = anAttr.getName();
  544.                        System.out.println( "" + attrName );
  545.                        /* Loop on values for this attribute */
  546.                        Enumeration enumVals = anAttr.getStringValues();
  547.                        while ( enumVals.hasMoreElements() ) {
  548.                            String aVal = ( String )enumVals.nextElement();
  549.                            System.out.println( "" + aVal );
  550.                        }
  551.                    }
  552.                }
  553.  
  554.                /* Check if the server had something to say about the
  555.                   sort request */
  556.                LDAPControl[] controls = ld.getResponseControls();
  557.                if ( controls != null ) {
  558.                    int[] results = new int[1];
  559.                    String bad = LDAPSortControl.parseResponse( controls,
  560.                                                                results );
  561.                    if ( results[0] != 0 ) {
  562.                        System.out.println( "Error code: " + results[0] );
  563.                        if ( bad != null )
  564.                            System.out.println( "Offending attribute: " +
  565.                                                bad );
  566.                        else
  567.                            System.out.println( "No offending attribute +
  568.                                                "returned" );
  569.                    }
  570.                }
  571.            }
  572.            catch( LDAPException e ) {
  573.                System.out.println( "Error: " + e.toString() );
  574.            }
  575.            /* Done, so disconnect */
  576.            if ( ld.isConnected() )
  577.                ld.disconnect();
  578.        }
  579.    }
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594. Expires 3/98                                                   [Page 10]
  595.  
  596.  
  597.  
  598.  
  599.  
  600. JAVA LDAP CONTROLS                                        September 1997
  601.  
  602.  
  603.    Using virtual list controls - excerpts from an application
  604.  
  605.    import netscape.ldap.*;
  606.    import netscape.ldap.controls.*;
  607.  
  608.        // Call this to initialize the list box, whenever the search
  609.        // conditions change.
  610.        // "filter" may be "objectclass=person", for example, and
  611.        // "subFilter" might be "cn>=m*"
  612.        void initListBox( String base, int scope, String filter,
  613.                          String attrs, String subFilter ) {
  614.            // Record the virtual list box settings
  615.            beforeCount = 2;
  616.            afterCount = getScrollVisibleSize() - beforeCount - 1;
  617.            this.base = base;
  618.            this.scope = scope;
  619.            this.filter = filter;
  620.            this.attrs = attrs;
  621.            // Create the initial virtual list control
  622.            pageControls = new LDAPControl[2];
  623.            pageControls[0] = new LDAPVirtualListControl( subFilter,
  624.                                                          beforeCount,
  625.                                                          afterCount );
  626.            // virtual list also require a sort control
  627.            pageControls[1] = new LDAPSortControl( new LDAPSortKey("cn"),
  628.                                                   true );
  629.            // We have no idea yet how big the virtual list is, so just
  630.            // hint that there is more than what is visible
  631.            setScrollRange( 0, 100 );
  632.            // Do an initial update of the scroll box
  633.            onScrollListBox();
  634.        }
  635.  
  636.        // This is called any time the list box needs to be updated. It
  637.        // fetches an appropriate page of results from the server.
  638.        void onScrollListBox() {
  639.            // Where is the list scrolled to now?
  640.            int topOfList = getScrollTop();
  641.            // Check if we have a control returned from a previous search
  642.            LDAPVirtualListControl nextCont =
  643.                           LDAPVirtualListControl.parseResponse(
  644.                                                  ld.getResponseControls() );
  645.            // If this is the first search, use the initial settings;
  646.            // otherwise use the just-retrieved control
  647.            if ( nextCont != null ) {
  648.                nextCont.setRange( topOfList, beforeCount, afterCount );
  649.                pageControls[0] = nextCont;
  650.                // Now we know the total size of the virtual list box
  651.  
  652.  
  653.  
  654. Expires 3/98                                                   [Page 11]
  655.  
  656.  
  657.  
  658.  
  659.  
  660. JAVA LDAP CONTROLS                                        September 1997
  661.  
  662.  
  663.                setScrollRange( 0, nextCont.getListSize() );
  664.            }
  665.            ld.setControls( pageControls );
  666.            // Fetch a page of results
  667.            LDAPSearchResults res = ld.search( base, scope, filter,
  668.                                               attrs, false );
  669.            // and display them in the list box
  670.            showResults( res );
  671.        }
  672.  
  673.        private int beforeCount, afterCount;
  674.        private String base, filter, attrs;
  675.        private int scope;
  676.        private LDAPControl[] pageControls;
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714. Expires 3/98                                                   [Page 12]
  715.  
  716.  
  717.  
  718.  
  719.  
  720. JAVA LDAP CONTROLS                                        September 1997
  721.  
  722.  
  723. 8.  Appendix D - Outstanding issues
  724.  
  725.  
  726. 8.1.  Virtual List Control
  727.  
  728. The described LDAPVirtualListControl does not correspond to the Paged
  729. Results Control described in [7], which was found to be less useful than
  730. the one described in this document.
  731.  
  732.  
  733.  
  734.  
  735.  
  736.  
  737.  
  738.  
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774. Expires 3/98                                                   [Page 13]
  775.  
  776.  
  777.  
  778.  
  779.  
  780. 1.     Introduction...................................................1
  781. 2.     Overview of the LDAP Control classes...........................2
  782. 3.     The java LDAP Control classes..................................3
  783. 3.1.     LDAPLanguageControl..........................................3
  784. 3.1.1.       Constructors.............................................3
  785. 3.1.2.      LDAPVirtualListControl....................................4
  786. 3.1.2.1.        Constructors..........................................4
  787. 3.1.2.2.        getAfterCount.........................................5
  788. 3.1.2.3.        getBeforeCount........................................5
  789. 3.1.2.4.        getListSize...........................................5
  790. 3.1.2.5.        setRange..............................................5
  791. 3.1.2.6.        parseResult...........................................6
  792. 3.1.3.      LDAPSortControl...........................................6
  793. 3.1.3.1.        Constructors..........................................6
  794. 4.     Security Considerations........................................7
  795. 5.     Bibliography...................................................8
  796. 6.     Author's Address...............................................8
  797. 7.     Appendix A - Sample usage of the java LDAP controls............8
  798. 8.     Appendix D - Outstanding issues................................13
  799. 8.1.      Virtual List Control........................................13
  800.  
  801.  
  802.  
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.