summaryrefslogtreecommitdiff
path: root/program/lib
diff options
context:
space:
mode:
Diffstat (limited to 'program/lib')
-rw-r--r--program/lib/Roundcube/rcube_ldap.php49
1 files changed, 27 insertions, 22 deletions
diff --git a/program/lib/Roundcube/rcube_ldap.php b/program/lib/Roundcube/rcube_ldap.php
index 29da13c13..555a56471 100644
--- a/program/lib/Roundcube/rcube_ldap.php
+++ b/program/lib/Roundcube/rcube_ldap.php
@@ -27,7 +27,7 @@
*/
class rcube_ldap extends rcube_addressbook
{
- /** public properties */
+ // public properties
public $primary_key = 'ID';
public $groups = false;
public $readonly = true;
@@ -35,7 +35,7 @@ class rcube_ldap extends rcube_addressbook
public $group_id = 0;
public $coltypes = array();
- /** private properties */
+ // private properties
protected $ldap;
protected $prop = array();
protected $fieldmap = array();
@@ -46,6 +46,21 @@ class rcube_ldap extends rcube_addressbook
protected $mail_domain = '';
protected $debug = false;
+ /**
+ * Group objectclass (lowercase) to member attribute mapping
+ *
+ * @var array
+ */
+ private static $group_types = array(
+ 'group' => 'member',
+ 'groupofnames' => 'member',
+ 'kolabgroupofnames' => 'member',
+ 'groupofuniquenames' => 'uniqueMember',
+ 'kolabgroupofuniquenames' => 'uniqueMember',
+ 'univentiongroup' => 'uniqueMember',
+ 'groupofurls' => null,
+ );
+
private $base_dn = '';
private $groups_base_dn = '';
private $group_url;
@@ -831,7 +846,6 @@ class rcube_ldap extends rcube_addressbook
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);
}
@@ -1444,11 +1458,11 @@ class rcube_ldap extends rcube_addressbook
{
// list of known attribute aliases
static $aliases = array(
- 'gn' => 'givenname',
+ 'gn' => 'givenname',
'rfc822mailbox' => 'email',
- 'userid' => 'uid',
- 'emailaddress' => 'email',
- 'pkcs9email' => 'email',
+ 'userid' => 'uid',
+ 'emailaddress' => 'email',
+ 'pkcs9email' => 'email',
);
list($name, $limit) = explode(':', $namev, 2);
@@ -1462,11 +1476,9 @@ class rcube_ldap extends rcube_addressbook
*/
private static function is_group_entry($entry)
{
- return array_intersect(
- array('group', 'groupofnames', 'kolabgroupofnames', 'groupofuniquenames',
- 'kolabgroupofuniquenames', 'groupofurls', 'univentiongroup'),
- array_map('strtolower', (array)$entry['objectclass'])
- );
+ $classes = array_map('strtolower', (array)$entry['objectclass']);
+
+ return count(array_intersect(array_keys(self::$group_types), $classes)) > 0;
}
/**
@@ -1863,6 +1875,7 @@ class rcube_ldap extends rcube_addressbook
$name_attr = $this->prop['groups']['name_attr'] ? $this->prop['groups']['name_attr'] : 'cn';
$member_attr = $this->get_group_member_attr();
$add_filter = '';
+
if ($member_attr != 'member' && $member_attr != 'uniqueMember')
$add_filter = "($member_attr=$contact_dn)";
$filter = strtr("(|(member=$contact_dn)(uniqueMember=$contact_dn)$add_filter)", array('\\' => '\\\\'));
@@ -1895,16 +1908,8 @@ class rcube_ldap extends rcube_addressbook
if (!empty($object_classes)) {
foreach ((array)$object_classes as $oc) {
- switch (strtolower($oc)) {
- case 'group':
- case 'groupofnames':
- case 'kolabgroupofnames':
- return 'member';
-
- case 'groupofuniquenames':
- case 'kolabgroupofuniquenames':
- case 'univentiongroup':
- return 'uniqueMember';
+ if ($attr = self::$group_types[strtolower($oc)]) {
+ return $attr;
}
}
}