我无法弄清楚如何通过objectsid string搜索ldap目录:
$string = 'S-0-1-23-4567890123-4567890123-456789012-3456'
$ds = ldap_connect('xxxx', xxx);
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
$r = ldap_bind($ds, $bind_rdn, $bind_password);
$filter = "(objectSid=$string)";
$sr = ldap_search($ds, $dn, $filter);
$users = ldap_get_entries($ds, $sr);
然后我在某处读到你应该将其作为十六进制值传递: / 00/00 /....
$s = preg_replace('/../','\\\\$0',bin2hex($string));
但仍然没有结果。如果我通过objectSid = * ass过滤器,我得到所有结果,所以我知道查询正在运行:)。
THX!
答案 0 :(得分:1)
我使用二进制值的转义十六进制代码搜索了objectGUID
和objectSID
。
如果您可以将值放在16字节数组中并将其转换为十六进制编码字符,那么您可以执行以下操作...
(objectguid=\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00)
(objectsid=\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00)
其中\ 00表示字节数组中字节的实际十六进制值。这非常有效,速度非常快。您甚至可以在LDAP客户端中对其进行测试,以便您可以首先查看它。
正如上面的响应者所说,我会使用objectGUID,因为它不可变,而不像objectSID可以改变。