Python: LDAP в Python

Автор Неизвестен  // 20.05.2011
В этой статье Вы узнаете, как Ваши приложения могут взаимодействовать с LDAP серверами. Большинство основных языков программирования имеют API для работы с LDAP, но я выбрал Python, потому что это, возможно, самый простой и ясный язык для демонстрации. Для понимания этой статьи необходимы знания Python и LDAP.

Знакомство с python-ldap

Написания программ, которые работает с LDAP, становится очень простым с использованием Python и LDAP. Пакет python-ldap содержит модуль, который обёртывает OpenLDAP C API и предоставляет объектно-ориентированный API клиента LDAP серверов. Этот пакет также содержит модуль для других операций связанных с LDAP, таких как обработка LDIF, LDAPURL, LDAP3 схемы и другое.

В текущее время стандартная реализация Python не содержит python-ldap, но Вы можете скачать этот пакет отсюда.

Простое приложение

Лучший способ понять работу пакета — написать программу-пример. Давай напишем небольшой пример, который будет получать информацию о контакте от LDAP сервера.

Первое, что необходимо сделать это импортировать ldap модуль. И так откроем любимый текстовый редактор и введем import ldap. Для этой программы, нам понадобится создать две функции:
  • main(), в которой происходит соединение с LDAP сервером и вызов функции поиска

  • my_search(), в которой происходит получение и отображение данных от сервера

Давайте создадим нашу главную функцию и инициализируем переменные для аутентификации на LDAP сервере. Это будет примерно вот так:
def main():	
server = "ldap.somewhere.edu"
who = ""
cred = ""

Теперь нам необходимо ключевое слов, по которому мы будем искать:
    keyword = "ryan"

Далее нам нужно подключиться к LDAP серверу.
    try:
l = ldap.open(server)
l.simple_bind_s(who, cred)
print "Successfully bound to server.\n"

Теперь мы готовы для поиска. Мы также обрабатываем возможные ошибки:
        print "Searching..\n"
my_search(l, keyword)
except ldap.LDAPError, error_message:
print "Couldn't Connect. %s " % error_message

Создадим my_search:
def my_search(l, keyword):

Переменные base, scope, filter и retrieve_attributes — параметры метода search. Base используется для DN записи, откуда должен начаться поиск. Вы можете оставить его пустым для этого примера:
    base = ""

Для scope мы используем SCOPE_SUBTREE для поиска по объектам и их потомкам.
    scope = ldap.SCOPE_SUBTREE

Наш фильтр поиска состоит из cn и нашего keyword. Добавление знаков звездочки до и после keyword будет сопоставимо с любой строкой содержащей «rayn».
    filter = "cn" + "*" + keyword + "*"

Последний аргумент, который мы передаем в методы search, используется для возвращения всех атрибутов каждой записи.
    retrieve_attributes = None

Теперь, давайте установим дополнительные переменные, счетчик записей, результирующий список и тайм-аут запроса.
    count = 0
result_set = []
timeout = 0

Начинаем поиск с помощь вызова метода search у объекта :
    try:
result_id = l.search(base, scope, filter, retrieve_attributes)

Сохраняем результат в result_set списке:
        while 1:
result_type, result_data = l.result(result_id, timeout)
if (result_data == []):
break
else:
if result_type == ldap.RES_SEARCH_ENTRY:
result_set.append(result_data)

И выводим результат:
        if len(result_set) == 0:
print "No Results."
return
for i in range(len(result_set)):
for entry in result_set[i]:
try:
name = entry[1]['cn'][0]
email = entry[1]['mail'][0]
phone = entry[1]['telephonenumber'][0]
desc = entry[1]['description'][0]
count = count + 1
print "%d.\nName: %s\nDescription: %s\nE-mail: %s\nPhone: %s\n" %\
(count, name, desc, email, phone)
except:
pass
except ldap.LDAPError, error_message:
print error_message
 
 
if __name__=='__main__':
main()

Теперь после запуска нашей программы мы увидим список всех найденных записей.


Share this:


Комментарии (1) Добавить
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.
  • срочно нужна помощь с программирование в python! кто может помочь просьба обратится по телефону 8-919-772-45-08 или по э/п: artur.rodionov.1993@mail.r