From f09c184786313c85616985fe2a6cfabf53f06777 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Wed, 19 Oct 2011 11:56:20 -0400 Subject: [PATCH] Add (experimental) support for some extendted PHP LDAP functions when querying VLV enabled directories --- program/include/rcube_ldap.php | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-) diff --git a/program/include/rcube_ldap.php b/program/include/rcube_ldap.php index 1f03e15..21fd601 100644 --- a/program/include/rcube_ldap.php +++ b/program/include/rcube_ldap.php @@ -1151,7 +1151,7 @@ $this->vlv_count += $counts[$j]['numsubordinates'][0]; $this->_debug("D: total numsubordinates = " . $this->vlv_count); } - else // ...or by fetching all records dn and count them + else if (!function_exists('ldap_parse_virtuallist_control')) // ...or by fetching all records dn and count them $this->vlv_count = $this->_exec_search(true); $this->vlv_active = $this->_vlv_set_controls($this->prop, $this->list_page, $this->page_size); @@ -1162,9 +1162,17 @@ if ($this->ldap_result = @$function($this->conn, $this->base_dn, $filter, $attrs, 0, (int)$this->prop['sizelimit'], (int)$this->prop['timelimit'])) { + // when running on a patched PHP we can use the extended functions to retrieve the total count from the LDAP search result + if ($this->vlv_active && function_exists('ldap_parse_virtuallist_control') && + ldap_parse_result($this->conn, $this->ldap_result, $errcode, $matcheddn, $errmsg, $referrals, $serverctrls)) { + ldap_parse_virtuallist_control($this->conn, $serverctrls, $last_offset, $this->vlv_count, $vresult); + $this->_debug("S: VLV result: last_offset=$last_offset; content_count=$this->vlv_count"); + } + $this->_debug("S: ".ldap_count_entries($this->conn, $this->ldap_result)." record(s)"); if ($err = ldap_errno($this->conn)) $this->_debug("S: Error: " .ldap_err2str($err)); + return $count ? ldap_count_entries($this->conn, $this->ldap_result) : true; } else -- Gitblit v1.9.1