This is a module for handling LDAP operations in Python. Uses libldap2 on Unix platforms and WinLDAP on Microsoft Windows. LDAP entries are mapped to a special Python case-insensitive dictionary, tracking the changes of the dictionary to modify the entry on the server easily.
Supports only Python 3.3 or newer, and LDAPv3.
- python3.3-dev or newer
- libldap2-dev
- libsasl2-dev
- libkrb5-dev or heimdal-dev (optional)
- Uses LDAP libraries (OpenLDAP and WinLDAP) written in C for faster processing.
- Simple pythonic design.
- Implements an own dictionary-like object for mapping LDAP entries that makes easier to add and modify them.
- Works with various asynchronous library (like asyncio, gevent).
Documentation is available online with a simple tutorial.
Simple search and modify:
import bonsai
client = bonsai.LDAPClient("ldap://localhost")
client.set_credentials("SIMPLE", ("cn=admin,dc=bonsai,dc=test", "secret"))
with client.connect() as conn:
res = conn.search("ou=nerdherd,dc=bonsai,dc=test", 2, "(cn=chuck)")
res[0]['givenname'] = "Charles"
res[0]['sn'] = "Carmichael"
res[0].modify()
Using with asnycio:
import asyncio
import bonsai
@asyncio.coroutine
def do():
client = bonsai.LDAPClient("ldap://localhost")
client.set_credentials("DIGEST-MD5", ("admin", "secret", None, None))
with (yield from client.connect(is_async=True)) as conn:
res = yield from conn.search("ou=nerdherd,dc=bonsai,dc=test", 2)
print(res)
who = yield from conn.whoami()
print(who)
Currently, you can read the changelog here.
Any contributions and advices are welcome. Please report any issues at the GitHub page.