привел к общедоступному виду. пользуйтесь:
скрипт выводит членов заданной группы в домене
<?php
$ldapServer = 'ourldapserver';
$user = 'superuser';
$password = 'password';
$userGroup = 'My Group';
$dn = 'CN=Users,DC=intranet,DC=company,DC=ru';
// Set connection
$ds = @ldap_connect('ldap://'.$ldapServer) or die('Cannot connect');
@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die('LDAP does not support protocol version 3');
@ldap_bind($ds, $user.'@intranet.company.ru', $password) or die('Cannot bind to server');
// Fetch info
$sr = ldap_search($ds, $dn, '(&(objectClass=user)(memberOf=CN='.$userGroup.','.$dn.'))',array('displayname','cn','mail'));
$entry = ldap_get_entries($ds, $sr);
ldap_unbind($ds);
if ($entry['count'])
{
// Print result
echo 'Found entries: '.$entry['count']."<br /><br />\n";
foreach ($entry as $id => &$e)
{
if (is_integer($id))
{
echo 'Name: '.$e['displayname'][0]."<br />\n";
echo 'Login: '.$e['cn'][0]."<br />\n";
echo 'Mail: '.(isset($e['mail'][0])?$e['mail'][0]:'<unknown>')."<br /><br />\n";
}
}
}
else
echo 'Group have no member'."<br />\n";
?>
мне это понадобилось чтобы отладить авторизацию пользователей-членов определенной группы.
соответственно в таком скрипте будет попытка забиндиться из-под целевого пользователя.
если бинд не обломался, то следом должна быть проверка "состоит ли юзер с именем $user в группе $userGroup: в ldap_search фильтр усложняем ещё одним условием "(cn='.$user.')".
если в итоге $entry['count'] != 1 то пошел в жопу
больше всего времени было потрачено на осознание т.н. "distinguished names"
ιιlllιlllι унц-унц