За последние 24 часа нас посетили 23618 программистов и 1712 роботов. Сейчас ищут 1728 программистов ...

PHP и LDAP (SID)

Тема в разделе "PHP и базы данных", создана пользователем TheSingle, 28 апр 2008.

  1. TheSingle

    TheSingle Активный пользователь

    С нами с:
    26 ноя 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Moscow
    Ни как не получается вытащить данные объекта SID (objectSid), выводит только два байта и всё:(
    А на самом деле хранит значение: типа S-1-5-21-2632739157-143559459-4228453542-3530

    Как всё же получить sn или cn, или sAMAccountName, по имеющемуся SID или наоборот.
     
  2. TheSingle

    TheSingle Активный пользователь

    С нами с:
    26 ноя 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Moscow
    Хелп плиззз
     
  3. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    телепаты дороги.
     
  4. TheSingle

    TheSingle Активный пользователь

    С нами с:
    26 ноя 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Moscow
    Не понял!
     
  5. TheSingle

    TheSingle Активный пользователь

    С нами с:
    26 ноя 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Moscow
    Вообще с Active Directory кто нибудь работает? LDAP запросы меня уже доканали:( Уже со всем разобрался, а с SID всё никак.
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    и какие проблемы-то?
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    TheSingle

    PHP:
    1.  
    2. <?
    3. //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.....)).
    4.  
    5. // Converts a little-endian hex-number to one, that 'hexdec' can convert
    6. function littleEndian($hex) {
    7.     for ($x=strlen($hex)-2; $x >= 0; $x=$x-2) {
    8.         $result .= substr($hex,$x,2);
    9.     }
    10.     return $result;
    11. }
    12.  
    13. // Returns the textual SID
    14. function binSIDtoText($binsid) {
    15.     $hex_sid=bin2hex($binsid);
    16.     $rev = hexdec(substr($hex_sid,0,2));          // Get revision-part of SID
    17.     $subcount = hexdec(substr($hex_sid,2,2));    // Get count of sub-auth entries
    18.     $auth = hexdec(substr($hex_sid,4,12));      // SECURITY_NT_AUTHORITY
    19.     $result = "$rev-$auth";
    20.     for ($x=0;$x < $subcount; $x++) {
    21.         $subauth[$x] = hexdec(littleEndian(substr($hex_sid,16+($x*8),8)));  // get all SECURITY_NT_AUTHORITY
    22.         $result .= "-".$subauth[$x];
    23.     }
    24.     return $result;
    25. }
    26.  
    27. echo binSIDtoText($bin_sid);
    28.  
    29. ?>
    30.  
     
  8. TheSingle

    TheSingle Активный пользователь

    С нами с:
    26 ноя 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Moscow
    Сколько здесь хексов используется, жуть.

    В общем не работает, из двух квадратиков objectSID (), получается следующее:
    Код (Text):
    1. hex_sid: 0105
    2. rev: 1
    3. subcount: 5
    4. auth: 0
    5. result: 1-0-0-0-0-0-0
    Возможно у меня не правильный запрос:(
    PHP:
    1. <?
    2. $person = "Пользователь";
    3. $dn = "OU=Moscow Users,OU=USERS,DC=domen,DC=ru";
    4. $filter="(|(sn=$person*)(givenname=$person*))";
    5. $justthese = array("ou", "sn", "givenname", "mail", "cn", "samaccountname", "objectsid");
    6.  
    7. $sr=ldap_search($ldapconn, $dn, $filter, $justthese);
    8.  
    9. $info = ldap_get_entries($ldapconn, $sr);
    10.  
    11. echo $info["count"]." entries returned\n<br><br>";
    12.  
    13.     for ($i=0; $i < $info["count"]; $i++)
    14.     {
    15.         echo $info[$i]["objectsid"][0]."<br />"; // выводим содержимое объекта SID, получаем квадратики ()
    16.     }
    17.  
    18. echo $info[0]["mail"][0]."<br>"; // выводим email, получаем мыло пользователя
    19. $binsid = $info[0]["objectsid"][0]; // сохраняем в переменную содержимое объекта SID
    20.  
    21. echo binSIDtoText($binsid); // выводим преобразованный SID, получаем 1-0-0-0-0-0-0
    22. ?>
    23.  
     
  9. TheSingle

    TheSingle Активный пользователь

    С нами с:
    26 ноя 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Moscow
    Хелп, пробовал менять код, но так и не продвинулся.
     
  10. TheSingle

    TheSingle Активный пользователь

    С нами с:
    26 ноя 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Moscow
    Так ни кто и не может помочь? По какой то причине LDAP запрос вытаскивает только два бита.