2014-08-28 44 views
0

我無法弄清楚如何在LDAP目錄中的objectSID搜索字符串:LDAP的objectSID字符串爲十六進制

$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

我找到了一段[代碼](https://github.com/Alaneor/AD-X/blob/develop/ADX/Core/Converter.php#L319),它將字節數組轉換爲SID -串。如果你能逆轉這個過程,那麼你很好(並且也請分享代碼)。:) 另外,如果你有選擇,使用ObjectGUID而不是SID。 [這是爲什麼](http://technet.microsoft.com/en-us/library/cc961625.aspx)。 – 2014-08-28 16:49:40

回答

0

我已經使用二進制值的轉義十六進制代碼搜索了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可以改變。

相關問題