Ни как не получается вытащить данные объекта SID (objectSid), выводит только два байта и всё А на самом деле хранит значение: типа S-1-5-21-2632739157-143559459-4228453542-3530 Как всё же получить sn или cn, или sAMAccountName, по имеющемуся SID или наоборот.
Вообще с Active Directory кто нибудь работает? LDAP запросы меня уже доканали Уже со всем разобрался, а с SID всё никак.
TheSingle PHP: <? //Here are two small functions that enables you to convert a binary objectSID from Microsoft AD into a more usefull text version (formatted (S-1-5.....)). // Converts a little-endian hex-number to one, that 'hexdec' can convert function littleEndian($hex) { for ($x=strlen($hex)-2; $x >= 0; $x=$x-2) { $result .= substr($hex,$x,2); } return $result; } // Returns the textual SID function binSIDtoText($binsid) { $hex_sid=bin2hex($binsid); $rev = hexdec(substr($hex_sid,0,2)); // Get revision-part of SID $subcount = hexdec(substr($hex_sid,2,2)); // Get count of sub-auth entries $auth = hexdec(substr($hex_sid,4,12)); // SECURITY_NT_AUTHORITY $result = "$rev-$auth"; for ($x=0;$x < $subcount; $x++) { $subauth[$x] = hexdec(littleEndian(substr($hex_sid,16+($x*8),8))); // get all SECURITY_NT_AUTHORITY $result .= "-".$subauth[$x]; } return $result; } echo binSIDtoText($bin_sid); ?>
Сколько здесь хексов используется, жуть. В общем не работает, из двух квадратиков objectSID (), получается следующее: Код (Text): hex_sid: 0105 rev: 1 subcount: 5 auth: 0 result: 1-0-0-0-0-0-0 Возможно у меня не правильный запрос PHP: <? $person = "Пользователь"; $dn = "OU=Moscow Users,OU=USERS,DC=domen,DC=ru"; $filter="(|(sn=$person*)(givenname=$person*))"; $justthese = array("ou", "sn", "givenname", "mail", "cn", "samaccountname", "objectsid"); $sr=ldap_search($ldapconn, $dn, $filter, $justthese); $info = ldap_get_entries($ldapconn, $sr); echo $info["count"]." entries returned\n<br><br>"; for ($i=0; $i < $info["count"]; $i++) { echo $info[$i]["objectsid"][0]."<br />"; // выводим содержимое объекта SID, получаем квадратики () } echo $info[0]["mail"][0]."<br>"; // выводим email, получаем мыло пользователя $binsid = $info[0]["objectsid"][0]; // сохраняем в переменную содержимое объекта SID echo binSIDtoText($binsid); // выводим преобразованный SID, получаем 1-0-0-0-0-0-0 ?>