From eff92498631f1f341513bb0d6e85702fc6d547e6 Mon Sep 17 00:00:00 2001 From: Eric Lippmann Date: Thu, 17 Sep 2015 13:01:58 +0200 Subject: [PATCH] lib: Don't provide LDAP server-side sort request if the query has no order refs #10147 --- .../Icinga/Protocol/Ldap/LdapConnection.php | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/library/Icinga/Protocol/Ldap/LdapConnection.php b/library/Icinga/Protocol/Ldap/LdapConnection.php index ed93ecf7e..ca83c4ff7 100644 --- a/library/Icinga/Protocol/Ldap/LdapConnection.php +++ b/library/Icinga/Protocol/Ldap/LdapConnection.php @@ -667,17 +667,20 @@ class LdapConnection implements Selectable, Inspectable $ds = $this->getConnection(); $serverSorting = $this->getCapabilities()->hasOid(LdapCapabilities::LDAP_SERVER_SORT_OID); - 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) { - if (! in_array($rule[0], $fields)) { - $fields[] = $rule[0]; + + if ($query->hasOrder()) { + if ($serverSorting) { + ldap_set_option($ds, LDAP_OPT_SERVER_CONTROLS, array( + array( + 'oid' => LdapCapabilities::LDAP_SERVER_SORT_OID, + 'value' => $this->encodeSortRules($query->getOrder()) + ) + )); + } else { + foreach ($query->getOrder() as $rule) { + if (! in_array($rule[0], $fields)) { + $fields[] = $rule[0]; + } } } } @@ -778,7 +781,7 @@ class LdapConnection implements Selectable, Inspectable // server to return results even if the paged search request cannot be satisfied ldap_control_paged_result($ds, $pageSize, false, $cookie); - if ($serverSorting) { + if ($serverSorting && $query->hasOrder()) { ldap_set_option($ds, LDAP_OPT_SERVER_CONTROLS, array( array( 'oid' => LdapCapabilities::LDAP_SERVER_SORT_OID,