ldap将ObjectSID字符串转换为十六进制

时间:2014-08-28 10:32:46

标签: php ldap hex data-conversion ldap-query

我无法弄清楚如何通过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!

1 个答案:

答案 0 :(得分:1)

我使用二进制值的转义十六进制代码搜索了objectGUIDobjectSID

如果您可以将值放在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可以改变。