从Active Directory组中获取所有用户

时间:2011-12-08 13:29:13

标签: php active-directory ldap

我正在尝试从Active Directory中读取一些用户帐户。我可以连接和验证就好了。但无论我对这件事情进行什么样的搜索,我都会得到一个“操作错误”。任何想法可能是什么?

我在使用PHP 5.3.8 CLI的Windows 2k8服务器计算机上运行该脚本。 (我不是AD专家:) dsa.mcs告诉我AD主机有DC Type = GC和DC版本W2K8。

// $ds = ldap_connect($host, $port);
// $db = ldab_bind($ds, $user, $password);
// $ds and $db are verified, connected and authenticated!

$dn = "CN=All users in Some City,OU=Some Group,OU=Some City,OU=Company Name,DC=bar,DC=foo,DC=com";
//$filter = 'sAMAccountName=' . $username;
//$filter = "(&(&(&(objectCategory=person)(objectClass=user))))";
$filter = "(objectClass=user)";
$attributes = array('sn', 'givenName', 'memberOf');
$res = ldap_search($ds, $dn, $filter, $attributes);

// results in 
//   ldap_errno(): 1
//   ldap_error(): Operations error

在“终端”(即dos box thingie)中运行以下内容会返回用户列表。

dsget group "CN=All users in Some City,OU=Some Group,OU=Some City,OU=Company Name,DC=bar,DC=foo,DC=com" -members

WTF我在这里失踪了吗?

1 个答案:

答案 0 :(得分:1)

我可以在SBS 2003框中重复您的问题。

尝试在对ldap_connect()ldap_bind()的调用之间添加以下两行

// Use protocol version 3
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
// Don't follow referrals
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);

这解决了我的问题。