LDAP в Python
LDAP в Python
В этой статье Вы узнаете, как Ваши приложения могут взаимодействовать с 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()
Теперь после запуска нашей программы мы увидим список всех найденных записей.
Оригинальный текст статьи на www.linuxjournal.com
Перевод КОМТЕТ komtet.ru