Как прочитать содержимое активного каталога с помощью python-ldap?

Мой скрипт такой:

import ldap, sys
server = 'ldap://my_server'
l = ldap.initialize(server)
dn="myname@mydomain"
pw = "password"
l.simple_bind_s(dn,pw)
ldap.set_option(ldap.OPT_REFERRALS,0)
print "valid"

Я использую Python 2.7 в Windows.

Есть ли способ прочитать или получить содержимое активного каталога?


person Sharadhi Ballal    schedule 16.11.2012    source источник


Ответы (2)


Вы также можете многое сделать, используя win32com.client (для которого у меня возникли проблемы с поиском документации). Например, мне нужно было разрешить электронную почту пользователя, зная его ADS_NAME_TYPE_NT4 отформатированное имя (doman\jonjoe).

Прежде всего вам нужно преобразовать его в формат ADS_NAME_TYPE_1779 (CN=Jeff Smith,CN=users,DC=Fabrikam,DC=com):

name_resolver = win32com.client.Dispatch(dispatch='NameTranslate')
name_resolver.Set(3, 'domain\\jonjoe')
ldap_query = 'LDAP://{}'.format(name_resolver.Get(1))

Как только вы это сделаете, вы можете просто вызвать GetObject():

ldap = win32com.client.GetObject(ldap_query)
print(ldap.Get('mail'))

Протестировано с Python 3.2.5

person Vyktor    schedule 13.05.2014
comment
Может ли эта библиотека также разрешать домен внешнего принципала безопасности, происходящий из другого леса, подключенного через одностороннее доверие? - person Andrzej Bobak; 03.09.2015
comment
@AndrzejBobak в основном просто обертывает WinAPI, поэтому, если вы можете написать его в WinAPI, вы можете переписать его, используя win32* библиотеки Python. - person Vyktor; 03.09.2015

Вам действительно нужно прочитать документацию python-ldap http://www.python-ldap.org/docs.shtml

You have a connection in your variable l, then you can do this.

l.con_search_s('dc=your,dc=base,dc=dit', ldap.SCOPE_SUBTREE, 'uid=*', ['uid', 'uidnumber'])

The above code, goint to search in to all the uid's entrys, for if entry, is going to get the uid and the uidnumbre attributes.
person Pjl    schedule 15.05.2013