php ldap操作属性

时间:2013-10-02 15:16:42

标签: php active-directory ldap

如果没有被问过一百万次但是我还没有找到解决方案,我会感到惊讶。

我正在使用PHP“ldap_search”列出Active Directory用户,并希望使用以下方法显示某些“操作属性”,例如创建用户的日期(createTimeStamp):

$filter = "CN=*";
$result = ldap_search($ldap, $ldap_dn, $filter) or exit("Unable to search LDAP server");

这有效,我得到一个用户列表,但不返回 createTimeStamp 。我已经读过这是因为它被归类为“操作属性”,它不属于正常结果集。显然,只有在特别要求时才会返回这些属性。所以我接着尝试了这个:

$filter = "CN=*";
$attr = array("samaccountname","createTimeStamp");
$result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server");

这仍然不会返回 createTimeStamp 的值。所以我的问题是:Active Directory是否可能以某种方式配置为不返回这些值,如果是这样,是否可以更改?


编辑:如果有帮助我们可以检索 lastLogon 格式,而不是 createTimeStamp >以 UTC编码时间格式;我不确定这是多么相关,因为我们遇到的问题是根本没有返回数据。


编辑2 :我使用LDIFDE(http://support.microsoft.com/kb/237677)使用此行搜索Active Directory:

ldifde -f ldaptest.txt -s myServer -d "DC=domain,DC=com" -p subtree -r "(sAMAccountName=*BWayne*)" -l "createTimeStamp"

...它会返回:

dn: CN=Wayne Bruce,OU=Section....
changetype: add
createTimeStamp: 20100406101951.0Z

因此,如果它是一个访问问题,那么它似乎只会影响PHP脚本。

1 个答案:

答案 0 :(得分:0)

条目和属性可以通过访问控制进行保护。使用已知的好工具尝试检索createTimestamp以确定访问控制是否到位。在已知具有createTimestamp属性的条目和测试条目上尝试此操作:

ldapsearch -h hostname -p port -D bindDN -w bindPassword \
    -b baseObject -s base '(&)' createTimestamp

确保在每种情况下使用相同的DN来验证测试。