4 commits - lib/api lib/Auth lib/Auth.php
Jeroen van Meeuwen
vanmeeuwen at kolabsys.com
Thu Apr 5 22:21:46 CEST 2012
lib/Auth.php | 4 -
lib/Auth/LDAP.php | 96 ++++++++++++++++---------------
lib/api/kolab_api_service_form_value.php | 11 +++
lib/api/kolab_api_service_group.php | 6 +
4 files changed, 70 insertions(+), 47 deletions(-)
New commits:
commit 7c57a8b7011c580c33e004dac7b8f7c14dd9e524
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Thu Apr 5 22:21:17 2012 +0200
Allow a parameter $recurse to be passed along to group member listing
diff --git a/lib/Auth.php b/lib/Auth.php
index 544b066..fd34e97 100644
--- a/lib/Auth.php
+++ b/lib/Auth.php
@@ -245,9 +245,9 @@ class Auth {
return $this->_auth[$_SESSION['user']->get_domain()]->group_info($groupdata);
}
- public function group_members_list($groupdata)
+ public function group_members_list($groupdata, $recurse = true)
{
- return $this->_auth[$_SESSION['user']->get_domain()]->group_members_list($groupdata);
+ return $this->_auth[$_SESSION['user']->get_domain()]->group_members_list($groupdata, $recurse);
}
public function list_domains()
commit 9053dffb56c93ed9c1556b465913b142953886f2
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Thu Apr 5 22:20:18 2012 +0200
Do not attempt to recursively resolve group members for API service method group.members_list
diff --git a/lib/api/kolab_api_service_group.php b/lib/api/kolab_api_service_group.php
index f7c973f..f5e87ed 100644
--- a/lib/api/kolab_api_service_group.php
+++ b/lib/api/kolab_api_service_group.php
@@ -116,6 +116,8 @@ class kolab_api_service_group extends kolab_api_service
public function group_edit($getdata, $postdata)
{
+ //console("group_edit \$postdata", $postdata);
+
$group_attributes = $this->parse_input_attributes('group', $postdata);
$group = $postdata['id'];
@@ -150,6 +152,8 @@ class kolab_api_service_group extends kolab_api_service
// normalize result
$result = $this->parse_result_attributes('group', $result);
+ //console("group_info() \$result", $result);
+
if ($result) {
return $result;
}
@@ -173,7 +177,7 @@ class kolab_api_service_group extends kolab_api_service
//error_log("Empty \$getdata['group']");
return FALSE;
}
- $result = $auth->group_members_list($getdata['group']);
+ $result = $auth->group_members_list($getdata['group'], false);
return array(
'list' => $result,
commit 8a4a7225cc1f33dfee326f8baa217976157d4ddf
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Thu Apr 5 22:19:34 2012 +0200
List groups as options for uniquemember values too
diff --git a/lib/api/kolab_api_service_form_value.php b/lib/api/kolab_api_service_form_value.php
index 33850e3..b5371da 100644
--- a/lib/api/kolab_api_service_form_value.php
+++ b/lib/api/kolab_api_service_form_value.php
@@ -617,9 +617,20 @@ class kolab_api_service_form_value extends kolab_api_service
$result = $service->users_list(null, $data);
$list = $result['list'];
+ $service = $this->controller->get_service('groups');
+ $data['attributes'] = array('cn', 'mail');
+
+ $result = $service->groups_list(null, $data);
+ $list = array_merge($list, $result['list']);
+
// convert to key=>value array
foreach ($list as $idx => $value) {
$list[$idx] = $value['displayname'];
+
+ if (empty($list[$idx])) {
+ $list[$idx] = $value['cn'];
+ }
+
if (!empty($value['mail'])) {
$list[$idx] .= ' <' . $value['mail'] . '>';
}
commit f809f703545c4d928ba0352762ea5443a3c1f925
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Thu Apr 5 22:19:20 2012 +0200
Clean up listing group members
diff --git a/lib/Auth/LDAP.php b/lib/Auth/LDAP.php
index b4ccbb7..d8958df 100644
--- a/lib/Auth/LDAP.php
+++ b/lib/Auth/LDAP.php
@@ -660,7 +660,7 @@ class LDAP
return self::normalize_result($this->_search($group_dn, '(objectclass=*)', $attributes));
}
- public function group_members_list($group)
+ public function group_members_list($group, $recurse = true)
{
$group_dn = $this->entry_dn($group);
@@ -668,7 +668,7 @@ class LDAP
return false;
}
- return $this->_list_group_members($group_dn);
+ return $this->_list_group_members($group_dn, null, $recurse);
}
public function group_find_by_attribute($attribute)
@@ -1682,7 +1682,7 @@ class LDAP
}
- private function _list_group_members($dn, $entry = null)
+ private function _list_group_members($dn, $entry = null, $recurse = true)
{
$group_members = array();
@@ -1695,26 +1695,24 @@ class LDAP
}
}
- $entries = self::normalize_result($this->_search($dn));
+ $entry = self::normalize_result($this->_search($dn));
//console("ENTRIES for \$dn $dn", $entries);
- foreach ($entries as $entry_dn => $entry) {
- if (!isset($entry['objectclass'])) {
- continue;
- }
-
- foreach ($entry['objectclass'] as $objectclass) {
- switch (strtolower($objectclass)) {
- case "groupofnames":
- $group_members = array_merge($group_members, $this->_list_group_member($entry_dn, $entry));
- break;
- case "groupofuniquenames":
- $group_members = array_merge($group_members, $this->_list_group_uniquemember($entry_dn, $entry));
- break;
- case "groupofurls":
- $group_members = array_merge($group_members, $this->_list_group_memberurl($entry_dn, $entry));
- break;
+ foreach ($entry[$dn] as $attribute => $value) {
+ if ($attribute == "objectclass") {
+ foreach ($value as $objectclass) {
+ switch (strtolower($objectclass)) {
+ case "groupofnames":
+ $group_members = array_merge($group_members, $this->_list_group_member($dn, $entry[$dn]['member'], $recurse));
+ break;
+ case "groupofuniquenames":
+ $group_members = array_merge($group_members, $this->_list_group_uniquemember($dn, $entry[$dn]['uniquemember'], $recurse));
+ break;
+ case "groupofurls":
+ $group_members = array_merge($group_members, $this->_list_group_memberurl($dn, $entry[$dn]['memberurl'], $recurse));
+ break;
+ }
}
}
}
@@ -1722,18 +1720,18 @@ class LDAP
return array_filter($group_members);
}
- private function _list_group_member($dn, $entry)
+ private function _list_group_member($dn, $members, $recurse = true)
{
error_log("Called _list_group_member(" . $dn . ")");
$group_members = array();
- if (empty($entry['member'])) {
+ if (empty($members)) {
return $group_members;
}
// Use the member attributes to return an array of member ldap objects
// NOTE that the member attribute is supposed to contain a DN
- foreach ($entry['member'] as $member) {
+ foreach ($members as $member) {
$result = @ldap_read($this->conn, $member, '(objectclass=*)');
if (!$result) {
@@ -1741,35 +1739,38 @@ class LDAP
}
$member_entry = self::normalize_result(@ldap_get_entries($this->conn, $result));
+
$group_members[$member] = array_pop($member_entry);
- // Nested groups
-// $group_group_members = $this->_list_group_members($member, $member_entry);
-// if ($group_group_members) {
-// $group_members = array_merge($group_group_members, $group_members);
-// }
+ if ($recurse) {
+ // Nested groups
+ $group_group_members = $this->_list_group_members($member, $member_entry);
+ if ($group_group_members) {
+ $group_members = array_merge($group_group_members, $group_members);
+ }
+ }
}
return array_filter($group_members);
}
- private function _list_group_uniquemember($dn, $entry)
+ private function _list_group_uniquemember($dn, $uniquemembers, $recurse = true)
{
//console("Called _list_group_uniquemember(" . $dn . ")", $entry);
// Use the member attributes to return an array of member ldap objects
// NOTE that the member attribute is supposed to contain a DN
$group_members = array();
- if (empty($entry['uniquemember'])) {
+ if (empty($uniquemembers)) {
return $group_members;
}
- if (is_string($entry['uniquemember'])) {
+ if (is_string($uniquemembers)) {
//console("uniquemember for entry is not an array");
- $entry['uniquemember'] = Array( $entry['uniquemember'] );
+ $uniquemembers = (array)($uniquemembers);
}
- foreach ($entry['uniquemember'] as $member) {
+ foreach ($uniquemembers as $member) {
$result = @ldap_read($this->conn, $member, '(objectclass=*)');
if (!$result) {
@@ -1779,17 +1780,19 @@ class LDAP
$member_entry = self::normalize_result(@ldap_get_entries($this->conn, $result));
$group_members[$member] = array_pop($member_entry);
- // Nested groups
- $group_group_members = $this->_list_group_members($member, $member_entry);
- if ($group_group_members) {
- $group_members = array_merge($group_group_members, $group_members);
+ if ($recurse) {
+ // Nested groups
+ $group_group_members = $this->_list_group_members($member, $member_entry);
+ if ($group_group_members) {
+ $group_members = array_merge($group_group_members, $group_members);
+ }
}
}
return array_filter($group_members);
}
- private function _list_group_memberurl($dn, $entry)
+ private function _list_group_memberurl($dn, $memberurls, $recurse = true)
{
error_log("Called _list_group_memberurl(" . $dn . ")");
@@ -1798,17 +1801,22 @@ class LDAP
$group_members = array();
- foreach ((array)$entry['memberurl'] as $url) {
+ foreach ((array)$memberurls as $url) {
$ldap_uri_components = $this->_parse_memberurl($url);
+
$entries = self::normalize_result($this->_search($ldap_uri_components[3], $ldap_uri_components[6]));
+
foreach ($entries as $entry_dn => $_entry) {
$group_members[$entry_dn] = $_entry;
error_log("Found " . $entry_dn);
- // Nested group
-// $group_group_members = $this->_list_group_members($entry_dn, $_entry);
-// if ($group_group_members) {
-// $group_members = array_merge($group_members, $group_group_members);
-// }
+
+ if ($recurse) {
+ // Nested group
+ $group_group_members = $this->_list_group_members($entry_dn, $_entry);
+ if ($group_group_members) {
+ $group_members = array_merge($group_members, $group_group_members);
+ }
+ }
}
}
More information about the commits
mailing list