If you’re making an LDAP search against a large directory you may potentially get a huge result set that you may rather wish to consume in chunks or “pages”. You may need this if you have a UI where results should be displayed, say, in portions of 10 or 20 at a time; also, if the LDAP server is configured with a max limit (typically in the order of 1000) on the number of entries a client may receive in a single search response.
To handle search results paging two LDAP extensions come to the rescue:
- The Simple Paged Results control. It breaks the result set into pages of a specified size which the client fetches through a series of search requests. It is formally defined in RFC 2696. I have written an article in the past that lists the LDAP servers which support the Simple Paged Results control. This control is also supported by the Json2Ldap gateway / proxy as of version 1.7.
- The Virtual List View control. It is the more featureful of the two as it allows clients to request an arbitrary “view” into the result set, by specifying a target offset, entry count, and even a “before” and “after” entry count. It is defined in an IETF Internet Draft, which for some reason still unknown to me hasn’t made it to standard status yet (as opposed to the Simple Paged Results control).
Note that the Virtual List View requires the results of the request to be sorted by a specified key on the server side using the Server Side Sort control (defined in RFC 2891). With the Simple Paged Results control sorting is optional.
The following screenshot, from the Json2Ldap online demo, shows an web app widget that uses the Simple Paged Result control.
Here is a list of the directory servers that support the Virtual List View (VLV) control, in alphabetical order:
- 389 Directory Server
- IBM Tivoli Directory Server (since version 6.2)
- Microsoft Active Directory (since Windows Server 2003)
- Novell eDirectory (see note)
- OpenDS / OpenDJ
Directory servers that don’t support the VLV control:
- Apache DS
- Oracle Internet Directory
The VLV control is perhaps not as widely supported by the various directory server vendors as the Simple Paged Results, but if you have an application that has to be able page up and down through the search results, it is indispensable.
Support for VLV in Json2Ldap from NimbusDS is planned for the next 1.10 release.