Vincent DUPONT wrote:
> I need to get the LDAP groups a user is member of (memberof). The problem
> is that there are multiple levels of groups, and I need to get all levels.
> example
> userA is member of group A B and C
> group A is member of (included in) group D
>
> If I make a simple query on the LDAP server to fetch the memberof of
> userA, it returns A, B and C.
> I need to get also D because group A is in group D
>
> In PHP I use the statement :
> $list = ldap_search($conn, "$userdn,$basedn", "samaccountname=$name",
> array('memberof')); //samaccountname is the Windows login name
You're already way ahead of anything I've done with LDAP.
Hopefully, there *IS* some way to do what you want with built-in LDAP
commands.
If there is *NOT*, however, something like this:
function ldap_groups($conn, $userdn, $basend, $name){
$list = ldap_search($conn, "$userdn,$basedn", "samaccountname=$name",
array('memberof'));
//Now loop through all the groups:
while (list(, $group) = ldap_read_something($conn, $list)){
$groups[$group] = $group; //$group should be A, B, or C...
ldap_super_groups($conn, $group, $groups);
}
return $groups;
}
function ldap_super_groups($conn, $group, $groups){
$list = ldap_search($conn, $group, "somemicrosoftthing=$group",
array('memberof')); //Is 'memberof' what you want for A being in D?
//Loop through all the new groups:
while (list(, $g) = ldap_read_something($conn, $list)){
//This makes sure we don't spin our wheels forever,
//re-doing groups we've already done:
if (!isset[$groups[$g])){
ldap_super_groups($conn, $g, $groups);
}
$groups[$g] = $g;
}
return $groups;
}
--
Like Music?
http://l-i-e.com/artists.htm
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php