PHP LDAP 操作属性


php ldap operational attributes

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

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

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

这有效,我得到了一个用户列表,但是没有返回创建时间戳。我读过这是因为它被归类为不属于正常结果集的"操作属性"。显然,只有在特别请求时才会返回这些属性。所以我然后尝试了这个:

$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,但不能检索UTC编码时间格式的createTimeStamp;我不确定这有多重要,因为我们遇到的问题是数据根本没有返回。


编辑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 脚本。

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

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

确保在每种情况下使用相同的 DN 对测试进行身份验证。