За последние 24 часа нас посетили 16866 программистов и 1641 робот. Сейчас ищет 981 программист ...

Active directory

Тема в разделе "Прочие вопросы по PHP", создана пользователем oODrAgoNOo, 6 апр 2006.

  1. oODrAgoNOo

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

    С нами с:
    6 апр 2006
    Сообщения:
    21
    Симпатии:
    0
    Народ, есть такая проблема... Которую надобно решить.
    А именно:
    При помощи каких функций можно получить список пользователей на контроллере домена. Операционка в роле контроллера: Windows 2003
     
  2. 440Hz

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

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

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

    С нами с:
    6 апр 2006
    Сообщения:
    21
    Симпатии:
    0
    Ldap?!
    ... Точно? Я так понимаю что лдап это адаптивные протоколы!
    Послушай, если не трудно привиди примерчик! из лдапов...

    А SNMP...? МОжет через эти порты брать?
     
  4. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    oODrAgoNOo
    SNMP совсем другое. Тебе нужен LDAP.

    вот просто кусок кода (метод класса) рабочего. он заводит нового юзера на сайте и сразу в домене.

    PHP:
    1. <?
    2.  
    3.     # вставить юзера в базу
    4.     function Insert($l) {
    5.         global $LDAP_SRV;
    6.         global $LDAP_XRDN;
    7.         global $LDAP_XPASS;
    8.  
    9.         $this->uid = $this->db->GetFreeID("OOPS_USERS");
    10.  
    11.         $this->db->Query("INSERT INTO OOPS_USERS (ID,DISPLAYNAME,ENGNAME,ENGFAM,PREFIX,LOGIN,FIRST,LAST,AUTHTYPE,MAIL,STATUS) VALUES ('".$this->uid."','".$this->displayname."','".$this->engname."','".$this->engfam."','".$this->prefix."','".$l."',".time().",".time().",".$this->type.",'".$this->mail."',".STATUS_ONLINE.")");
    12.  
    13.         $this->db->Query("INSERT INTO OOPS_USERS2GROUPS (GID,UID) VALUES ('6073da4az2bf8mte','".$this->uid."')");
    14.  
    15.         $ldap_con=@ldap_connect($LDAP_SRV);
    16.         if(!$ldap_con) {
    17.             OOPSCrash(3001,array("LDAP Server" => $LDAP_SRV));
    18.         }
    19.         ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);
    20.         ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0);
    21.  
    22.         $ldap_bind=@ldap_bind($ldap_con,$LDAP_XRDN,$LDAP_XPASS);
    23.         if(!$ldap_bind) {
    24.             OOPSCrash(3002,array("LDAP RDN" => $LDAP_XRDN));
    25.         }
    26.    
    27.         $justthese = array("dn", "givenname","sn","mail");
    28.         $search_result=ldap_search($ldap_con,"DC=mydomain,DC=ru", "(&(objectCategory=Person)(objectClass=user)(sAMAccountName=".$l."))", $justthese);
    29.  
    30.         $info = ldap_get_entries($ldap_con, $search_result);
    31.         $editdn = $info[0]["dn"];
    32.  
    33.         $update["extensionattribute7"] = $this->uid;
    34.  
    35.         if(!@ldap_modify($ldap_con, $editdn, $update)) {
    36.             OOPSCrash(3003,array_merge(array("LDAP RDN" => $LDAP_XRDN),$update));
    37.         }
    38.  
    39.         $TIT = "Создан новый LDAP пользователь";
    40.  
    41.         $TEXT = "";
    42.         $TEXT .= "Имя        : ".$this->displayname;
    43.         $TEXT .= "\nЛогин    : ".$l;
    44.         $TEXT .= "\nПочта    : ".$this->mail;
    45.  
    46.         OOPSMailNotify($TIT,$TEXT);
    47.  
    48.         OOPSSyslog(SYSLOG_USERS,"Автоматический импорт LDAP пользователя ".$this->displayname);
    49.  
    50.  
    51.     }
    52. ?>
    а это проверка логина

    PHP:
    1. <?
    2. # проверить доступ через LDAP
    3.     function LDAPLogin($l,$p,$uid="0") {
    4.         global $LDAP_SRV;
    5.         global $LDAP_RDN;
    6.         global $LDAP_PASS;
    7.    
    8.  
    9.         if($p == "") return LOGIN_P_ERROR;
    10.  
    11.         $USER = $l;
    12.         $PASS = win_utf8($p);
    13.  
    14.         $ldap_con=@ldap_connect($LDAP_SRV);
    15.         if(!$ldap_con) {
    16.             OOPSCrash(3001,array("LDAP Server" => $LDAP_SRV));
    17.         }
    18.         ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);
    19.         ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0);
    20.  
    21.         $ldap_bind=@ldap_bind($ldap_con,$LDAP_RDN,$LDAP_PASS);
    22.  
    23.         if(!$ldap_bind) {
    24.             OOPSCrash(3002,array("LDAP RDN" => $LDAP_RDN));
    25.         }
    26.  
    27.         $justthese = array("dn", "givenname","sn","mail");
    28.         $search_result=ldap_search($ldap_con,"DC=mydomain,DC=ru", "(&(objectCategory=Person)(objectClass=user)(sAMAccountName=".$USER."))", $justthese);
    29.  
    30.         $info = ldap_get_entries($ldap_con, $search_result);
    31.         ldap_close($ldap_con);  
    32.  
    33.         if(isset($info[0]["dn"]))
    34.             $identify = $info[0]["dn"];
    35.         else
    36.             return LOGIN_L_ERROR;
    37.  
    38.         if(strstr($info[0]["dn"],"OU=ex-workers")) {
    39.             return LOGIN_L_ERROR;
    40.         }
    41.  
    42.         $this->engname = $info[0]["givenname"][0];
    43.         $this->engfam = $info[0]["sn"][0];
    44.         $this->prefix = "PS";
    45.  
    46.         $this->BuildDisplayName();
    47.  
    48.         $this->type = USER_AUTH_LDAP;
    49.         if(!empty($info[0]["mail"][0]))
    50.             $this->mail = $info[0]["mail"][0];
    51.         else
    52.             $this->mail = "";
    53.  
    54.         $ldap_con=@ldap_connect($LDAP_SRV);
    55.         if(!$ldap_con) {
    56.             OOPSCrash(3001,array("LDAP Server" => $LDAP_SRV));
    57.         }
    58.  
    59.         ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);
    60.         ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0);
    61.  
    62.         $ldap_bind=@ldap_bind($ldap_con,$identify,$PASS);
    63.  
    64.         if(!$ldap_bind) {
    65.             return LOGIN_P_ERROR;
    66.         }
    67.  
    68.  
    69.        
    70.  
    71.         $this->uid = $uid;
    72.         ldap_close($ldap_con);  
    73.         return LOGIN_OK;
    74.     }?>
     
  5. oODrAgoNOo

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

    С нами с:
    6 апр 2006
    Сообщения:
    21
    Симпатии:
    0
    Офигеть :)
    Я я явно отстал от эизни :)
    Где такие классы брать? Звиздец полный :)
     
  6. oODrAgoNOo

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

    С нами с:
    6 апр 2006
    Сообщения:
    21
    Симпатии:
    0
    Не, срочно надо :)
    Да давно меня в интернет сообществе не было :)
    Открыли глаза на многое!
    Благодарен!
     
  7. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    где брать? да я сам писал ...
     
  8. oODrAgoNOo

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

    С нами с:
    6 апр 2006
    Сообщения:
    21
    Симпатии:
    0
    О великий и могучий :)
    Можит скинешь такой классик :)
    Я пока в пхп не то что не программист, но и не чайник :)
    Учимся :)
     
  9. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    oODrAgoNOo
    как такового класса работы с AD нет, т.к. есть просто PHP функции доступа к нему через ldap_. классы из которых я это выдернул просто обращаются к AD.

    япривел тебе куски кода что б ты имел представление как все работает. остальное напиши сам.
     
  10. oODrAgoNOo

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

    С нами с:
    6 апр 2006
    Сообщения:
    21
    Симпатии:
    0
    440hz
    Все конечно классно :)
    Но где почитать о данной прелести?
     
  11. 440Hz

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

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

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

    С нами с:
    6 апр 2006
    Сообщения:
    21
    Симпатии:
    0
    Блин спасибо!
    Я на дух не перенашу прогарммирование под ОС... А мне тут еще и хелп МС пихают! :(
    Да такого быть не может! Что бы про лдап инфы для php не было :(
     
  13. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    oODrAgoNOo
    ну я делал как в доках и немного поэксперемнтировал.
     
  14. oODrAgoNOo

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

    С нами с:
    6 апр 2006
    Сообщения:
    21
    Симпатии:
    0
    Тгда получается что ты до кучи еще знаешь и СИ++... Ну или VS...
    Или нет?!
    Коль нет то скажи какой MSDN... Буду смотреть :(
     
  15. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    oODrAgoNOo
    LDAP это протокол. Надо поискать доку по нему и почитать.
    есть примеры в пхп. что еще-то надо? не пойму?

    ты начни делать. будут вопросы - пиши, а так херня получается ...

    p.s. да. я еще пищу на C/C+, Dephi и многом другом ... но это к делу то же не относится
     
  16. oODrAgoNOo

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

    С нами с:
    6 апр 2006
    Сообщения:
    21
    Симпатии:
    0
    Это ты про примеры которые ты мне показал? Или как?
     
  17. 440Hz

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

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

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

    С нами с:
    4 сен 2007
    Сообщения:
    46
    Симпатии:
    0
    Здравствуйте.

    При выполнении функции ldap_search() выходит ошибка "Search: Operations error in .... "

    "My Company" заменяю на то название, которое мне сообщили администраторы компании. Соединяюсь по VPN-туннелю. Неужели и здесь проблема из-за VPN?

    Код (Text):
    1. $sr=ldap_search($ds, "o=My Company, c=RU", "sn=S*");
    Я так понимаю, что ошибка связана с указанными параметра. Но пока не могу решить эту проблему :(

    Не подскажите, в чём здесь проблема?
     
  19. denisKa

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

    С нами с:
    4 сен 2007
    Сообщения:
    46
    Симпатии:
    0
    Всё разобрался. Я связывался с LDAP-директорией анонимно, поэтому ничего и не было. После того как мне выдали логин и пароль в домене компании и я их прописал в ldap_bind всё заработало (получил какой-то список). Сейчас буду разбирать полученные данные.