From c1db483cd5578704ffc49ec98686c0e061db9c50 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 09 Jun 2011 21:34:34 -0400
Subject: [PATCH] Only select dn for count queries

---
 program/include/rcube_ldap.php |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/program/include/rcube_ldap.php b/program/include/rcube_ldap.php
index e4c3d49..6cab6db 100644
--- a/program/include/rcube_ldap.php
+++ b/program/include/rcube_ldap.php
@@ -860,7 +860,7 @@
     *
     * @access private
     */
-    private function _exec_search($all = false)
+    private function _exec_search($count = false)
     {
         if ($this->ready)
         {
@@ -870,14 +870,16 @@
             $this->_debug("C: Search [".$filter."]");
 
             // when using VLV, we need to issue listing command first in order to get the full count
-            if (!$all && $function != 'ldap_read' && $this->prop['vlv']) {
-                $this->_exec_search(true);
-                $this->vlv_count = ldap_count_entries($this->conn, $this->ldap_result);
+            if (!$count && $function != 'ldap_read' && $this->prop['vlv']) {
+                if ($this->_exec_search(true))
+                    $this->vlv_count = ldap_count_entries($this->conn, $this->ldap_result);
                 $this->vlv_active = $this->_vlv_set_controls();
             }
 
+            // only fetch dn for count (should keep the payload low)
+            $attrs = $count ? array('dn') : array_values($this->fieldmap);
             if ($this->ldap_result = @$function($this->conn, $this->base_dn, $filter,
-                array_values($this->fieldmap), 0, (int) $this->prop['sizelimit'], (int) $this->prop['timelimit']))
+                $attrs, 0, (int)$this->prop['sizelimit'], (int)$this->prop['timelimit']))
             {
                 $this->_debug("S: ".ldap_count_entries($this->conn, $this->ldap_result)." record(s)");
                 return true;

--
Gitblit v1.9.1