LDAP3¶
Kleines Startbeispiel
# http://ldap3.readthedocs.io/welcome.html
from ldap3 import Server, Connection, ALL
server = Server('ipa.demo1.freeipa.org', get_info = ALL)
conn = Connection(
server,
'uid=admin,cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org',
'Secret123',
auto_bind = True)
print(conn)
print(conn.search('dc=demo1,dc=freeipa,dc=org', '(objectclass=person)'))
print(conn.entries)
for entry in conn.entries:
print(entry.entry_to_json())
Suche im LDAP der TU Chemnitz
from ldap3 import Connection, SYNC
from ldap3.core.exceptions import LDAPSizeLimitExceededResult
# http://ldap3.readthedocs.io/welcome.html
# http://ldap3.readthedocs.io/tutorial_searches.html
#
# https://www.tu-chemnitz.de/urz/idm/services/ldap.html
#
# LDAP-Server: ldap.tu-chemnitz.de
# Port: 389
# Namens-Wurzel / Basis-DN: ou=Users,dc=tu-chemnitz,dc=de
# Suchfilter (optional): (mail=*)
connection_kwargs = {
'server': 'ldap.tu-chemnitz.de',
'auto_bind': True,
#'client_strategy': SYNC,
}
conn = Connection(**connection_kwargs)
print(conn)
searchParameters = {'search_base': 'ou=Users,dc=tu-chemnitz,dc=de',
#'search_filter': '(& (objectClass=Person) (sn=Müller*))',
#'search_filter': '(& (objectClass=Person) (sn=Trapp*))',
'search_filter': '(mail=*berger*)',
'attributes': ['cn', 'givenName'],
'paged_size': 5 }
# paged search mit Funktion "paged_search()"
cnt = 0
entries = conn.extend.standard.paged_search(**searchParameters)
try:
for entry in entries:
print(entry)
cnt += 1
except LDAPSizeLimitExceededResult:
print('LDAPSizeLimitExceededResult')
print(cnt)
print('============')
# paged search mit eigenem Cookie-Handling
while True:
# eine Page abfragen
conn.search(**searchParameters)
# gefundene Einträge ausgeben
for entry in conn.entries:
print(entry.entry_to_json())
print(entry)
# ggf. Übergang zur nächsten Page
try:
# print(conn.result['controls'])
# {'1.2.840.113556.1.4.319': {'description': ('1.2.840.113556.1.4.319',
# 'CONTROL', 'LDAP Simple Paged Results', 'RFC2696'), 'criticality': False,
# 'value': {'size': 0, 'cookie': b'm\x00\x00\x00\x00\x00\x00\x00'}}}
cookie = conn.result['controls']['1.2.840.113556.1.4.319']['value']['cookie']
if cookie:
searchParameters['paged_cookie'] = cookie
print('next page')
else:
# wir haben alle Daten vollständig geholt, daher existiert kein
# Cookie mehr
print('no cookie')
break
except Exception as e:
# der Key 'controls' existiert nicht, wenn die Maximale Entry-Zahl (bei
# uns 100) abgerufen wurde
print(repr(e))
break