lib/ldap: Set server side sorting after calling ldap_control_paged_result()

ldap_control_paged_result() seems to override already set server controls.

refs #9364
This commit is contained in:
Eric Lippmann 2015-09-03 17:50:24 +02:00
parent 9e11d539fd
commit fa25ce7f2f

View File

@ -742,14 +742,7 @@ class LdapConnection implements Selectable, Inspectable
$ds = $this->getConnection(); $ds = $this->getConnection();
$serverSorting = $this->capabilities->hasOid(LdapCapabilities::LDAP_SERVER_SORT_OID); $serverSorting = $this->capabilities->hasOid(LdapCapabilities::LDAP_SERVER_SORT_OID);
if ($serverSorting && $query->hasOrder()) { if (! $serverSorting && $query->hasOrder()) {
ldap_set_option($ds, LDAP_OPT_SERVER_CONTROLS, array(
array(
'oid' => LdapCapabilities::LDAP_SERVER_SORT_OID,
'value' => $this->encodeSortRules($query->getOrder())
)
));
} elseif ($query->hasOrder()) {
foreach ($query->getOrder() as $rule) { foreach ($query->getOrder() as $rule) {
if (! in_array($rule[0], $fields)) { if (! in_array($rule[0], $fields)) {
$fields[] = $rule[0]; $fields[] = $rule[0];
@ -765,6 +758,15 @@ class LdapConnection implements Selectable, Inspectable
// server to return results even if the paged search request cannot be satisfied // server to return results even if the paged search request cannot be satisfied
ldap_control_paged_result($ds, $pageSize, false, $cookie); ldap_control_paged_result($ds, $pageSize, false, $cookie);
if ($serverSorting) {
ldap_set_option($ds, LDAP_OPT_SERVER_CONTROLS, array(
array(
'oid' => LdapCapabilities::LDAP_SERVER_SORT_OID,
'value' => $this->encodeSortRules($query->getOrder())
)
));
}
$results = @ldap_search( $results = @ldap_search(
$ds, $ds,
$base, $base,