From 4287c9a2f9dfd14c9d5e29388059bdeed8bc6e85 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Tue, 13 Aug 2013 03:16:48 -0400
Subject: [PATCH] Fix replacement variables in user-specific base_dn in some LDAP requests (#1489279)

---
 CHANGELOG                            |    1 +
 program/lib/Roundcube/rcube_ldap.php |   13 ++++++++-----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 7691a53..ea09502 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Fix replacement variables in user-specific base_dn in some LDAP requests (#1489279)
 - Fix purge action in folder manager (#1489280)
 - Fix image scaling issues when image has only one dimension smaller than the limit (#1489274)
 - Fix issue where uploaded photo was lost when contact form did not validate (#1489274)
diff --git a/program/lib/Roundcube/rcube_ldap.php b/program/lib/Roundcube/rcube_ldap.php
index 555a564..cb7fa84 100644
--- a/program/lib/Roundcube/rcube_ldap.php
+++ b/program/lib/Roundcube/rcube_ldap.php
@@ -514,7 +514,8 @@
             $this->result = new rcube_result_set($entries['count'], ($this->list_page-1) * $this->page_size);
         }
         else {
-            $prop = $this->group_id ? $this->group_data : $this->prop;
+            $prop    = $this->group_id ? $this->group_data : $this->prop;
+            $base_dn = $this->group_id ? $this->group_base_dn : $this->base_dn;
 
             // use global search filter
             if (!empty($this->filter))
@@ -522,7 +523,7 @@
 
             // exec LDAP search if no result resource is stored
             if ($this->ready && !$this->ldap_result)
-                $this->ldap_result = $this->ldap->search($prop['base_dn'], $prop['filter'], $prop['scope'], $this->prop['attributes'], $prop);
+                $this->ldap_result = $this->ldap->search($base_dn, $prop['filter'], $prop['scope'], $this->prop['attributes'], $prop);
 
             // count contacts for this user
             $this->result = $this->count();
@@ -841,12 +842,13 @@
         }
         // We have a connection but no result set, attempt to get one.
         else if ($this->ready) {
-            $prop = $this->group_id ? $this->group_data : $this->prop;
+            $prop    = $this->group_id ? $this->group_data : $this->prop;
+            $base_dn = $this->group_id ? $this->group_base_dn : $this->base_dn;
 
             if (!empty($this->filter)) {  // Use global search filter
                 $prop['filter'] = $this->filter;
             }
-            $count = $this->ldap->search($prop['base_dn'], $prop['filter'], $prop['scope'], array('dn'), $prop, true);
+            $count = $this->ldap->search($base_dn, $prop['filter'], $prop['scope'], array('dn'), $prop, true);
         }
 
         return new rcube_result_set($count, ($this->list_page-1) * $this->page_size);
@@ -1584,6 +1586,7 @@
 
         $base_dn    = $this->groups_base_dn;
         $filter     = $this->prop['groups']['filter'];
+        $scope      = $this->prop['groups']['scope'];
         $name_attr  = $this->prop['groups']['name_attr'];
         $email_attr = $this->prop['groups']['email_attr'] ? $this->prop['groups']['email_attr'] : 'mail';
         $sort_attrs = $this->prop['groups']['sort'] ? (array)$this->prop['groups']['sort'] : array($name_attr);
@@ -1604,7 +1607,7 @@
         }
 
         $attrs     = array_unique(array('dn', 'objectClass', $name_attr, $email_attr, $sort_attr));
-        $ldap_data = $ldap->search($base_dn, $filter, $this->prop['groups']['scope'], $attrs, $this->prop['groups']);
+        $ldap_data = $ldap->search($base_dn, $filter, $scope, $attrs, $this->prop['groups']);
 
         if ($ldap_data === false) {
             return array();

--
Gitblit v1.9.1