[Tickets #5258] Make use of LDAP pagination if available

bugs at bugs.horde.org bugs at bugs.horde.org
Mon Apr 16 04:54:15 UTC 2007


DO NOT REPLY TO THIS MESSAGE. THIS EMAIL ADDRESS IS NOT MONITORED.

Ticket URL: http://bugs.horde.org/ticket/?id=5258
-----------------------------------------------------------------------
 Ticket             | 5258
 Created By         | Chuck Hagenbuch <chuck at horde.org>
 Summary            | Make use of LDAP pagination if available
 Queue              | Turba
 Version            | HEAD
 Type               | Enhancement
 State              | Accepted
 Priority           | 2. Medium
 Owners             | 
-----------------------------------------------------------------------


Chuck Hagenbuch <chuck at horde.org> (2007-04-15 21:54) wrote:

>From the nyphp-talk list:

The below code demonstrates how to use the pagedResultsControl. The PHP
LDAP API is somewhat course but it should work.

Mike

$continue = true;
while ($continue) {
    $paged_control = array(
                        array(
                            'oid' => PAGED_CONTROL_OID,
                            'iscritical' => true,
                            'value' => ldap_ber_printf ('{iO}',
                                                        PAGE_SIZE,
$cookie)
                        )
                     );
    if (!ldap_set_option($l, LDAP_OPT_SERVER_CONTROLS, $paged_control)) {
        echo "Not OK: ldap_set_option (controls)\n";
        exit;
    }    

    $sr = ldap_search($l, $query, $query_filter, $query_attribs, 0, 0, 0,
                      LDAP_DEREF_NEVER);

    if ($sr === FALSE) {
        echo "Not OK: ldap_search\n";
        exit;
    }

    if (!ldap_parse_result ($l, $sr, &$errcode, &$matcheddn, &$errmsg,
                            &$referrals, &$serverctrls)) {
        echo "Not OK: ldap_parse_result\n";
        exit;
    }

    $paged_control_found = FALSE;
    if (isset($serverctrls)) {
        foreach ($serverctrls as $i) {
            if ($i['oid'] == PAGED_CONTROL_OID) {
                ldap_ber_scanf($i['value'], '{iO}', &$pagesize,
&$cookie);
                $paged_control_found = TRUE;
                break;
            }
        }
    }
    if (!$paged_control_found) {
        echo "Not OK: paged control not found in response \n";
        exit;
    }

    // process entries as usual here ...

    if ($cookie == '') {
        $continue = false;
    }
}



More information about the bugs mailing list