diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index b9d00fc78af385dcf34308a3777f64e6bab8eeb8..3b817c65b7610e6507bb8f890a49c1bb7c9c47a7 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -21,7 +21,7 @@ * */ - class OC_GROUP_LDAP extends OC_Group_Backend { +class OC_GROUP_LDAP extends OC_Group_Backend { // //group specific settings protected $ldapGroupFilter; protected $ldapGroupDisplayName; @@ -40,7 +40,20 @@ * Checks whether the user is member of a group or not. */ public function inGroup($uid, $gid) { - return array(); + $filter = OC_LDAP::combineFilterWithAnd(array( + $this->ldapGroupFilter, + LDAP_GROUP_MEMBER_ASSOC_ATTR.'='.$uid, + $this->ldapGroupDisplayName.'='.$gid + )); + $groups = OC_LDAP::search($filter, $this->ldapGroupDisplayName); + + if(count($groups) == 1) { + return true; + } else if(count($groups) < 1) { + return false; + } else { + throw new Exception('Too many groups of the same name!? – this excpetion should never been thrown :)'); + } } /** @@ -79,4 +92,4 @@ } } - } \ No newline at end of file +} \ No newline at end of file diff --git a/apps/user_ldap/lib_ldap.php b/apps/user_ldap/lib_ldap.php index 62e478597bd77124e069254d6d42b7380f0e4020..afb442e05f3afb0654542a54c610323d14bde2e6 100644 --- a/apps/user_ldap/lib_ldap.php +++ b/apps/user_ldap/lib_ldap.php @@ -21,7 +21,9 @@ * */ - class OC_LDAP { +define(LDAP_GROUP_MEMBER_ASSOC_ATTR,'memberUid'); + +class OC_LDAP { static protected $ldapConnectionRes = false; static protected $configured = false; @@ -64,6 +66,48 @@ return $findings; } + /** + * @brief combines the input filters with AND + * @param $filters array, the filters to connect + * @returns the combined filter + * + * Combines Filter arguments with AND + */ + static public function combineFilterWithAnd($filters) { + return self::combineFilter($filters,'&'); + } + + /** + * @brief combines the input filters with AND + * @param $filters array, the filters to connect + * @returns the combined filter + * + * Combines Filter arguments with AND + */ + static public function combineFilterWithOr($filters) { + return self::combineFilter($filters,'|'); + } + + /** + * @brief combines the input filters with given operator + * @param $filters array, the filters to connect + * @param $operator either & or | + * @returns the combined filter + * + * Combines Filter arguments with AND + */ + static private function combineFilter($filters, $operator) { + $combinedFilter = '('.$operator; + foreach($filters as $filter) { + if(substr($filter,0,1) != '(') { + $filter = '('.$filter.')'; + } + $combinedFilter.=$filter; + } + $combinedFilter.=')'; + return $combinedFilter; + } + /** * Returns the LDAP handler */ diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php index 277a234892585311f8679b75787fd6b1086a59d2..b328153b8b543f708ba6801725685969129498c9 100644 --- a/apps/user_ldap/tests/group_ldap.php +++ b/apps/user_ldap/tests/group_ldap.php @@ -31,6 +31,10 @@ class Test_Group_Ldap extends UnitTestCase { $this->assertIsA(OC_Group::getGroups(),gettype(array())); $this->assertIsA($group_ldap->getGroups(),gettype(array())); + + $this->assertFalse(OC_Group::inGroup('john','dosers'),gettype(false)); + $this->assertFalse($group_ldap->inGroup('john','dosers'),gettype(false)); + //TODO: check also for expected true result. This backend won't be able to do any modifications, maybe use a dummy for this. } }