【问题标题】:ldap ObjectSID string to hexldap ObjectSID 字符串转十六进制
【发布时间】:2014-08-28 10:32:45
【问题描述】:

我不知道如何通过 objectid 字符串在 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 过滤器,我会得到所有结果,所以我知道查询正在工作:)。

谢谢!

【问题讨论】:

  • 我在某处找到了一个piece of code,它将字节数组转换为 SID 字符串。如果您可以反转该过程,那么您很高兴(也请分享代码)。:) 此外,如果您可以选择,请使用 ObjectGUID 而不是 SID。 Here's why.

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


【解决方案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 可以改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2012-08-15
    • 2017-03-22
    • 1970-01-01
    • 2019-07-27
    • 2018-01-22
    • 2013-09-20
    相关资源
    最近更新 更多