Native python LDAP?

Michael Ströder michael at stroeder.com
Mon Feb 21 18:30:31 CET 2005


Rich,

nice to see you here. Sorry for following up so late. I'm swamped with 
orga stuff so this rather long response took a while...

Rich Megginson wrote:
> Has anyone ever thought about doing a native (not based on ldap sdk 
> binaries) python LDAP client?

Yes, every now and then I'm thinking about this. In fact the LDAPObject 
wrapper class was the first step towards that. Modules ldap.schema, ldif 
and ldapurl are pure Python by purpose. I wanted to reduce dependencies 
on LDAP C SDKs whereever I could...

Actually there is 'ldaptor' which is a pure-Python LDAP implementation 
based on Twisted. But the web site is very unclear, no docs, no release 
history, no response from the author to my request of working together, 
and last not least a strong dependency on Twisted. :-(

There are various good reasons for reimplementing python-ldap from the 
ground up.

The RFC1823-style API still looks through the LDAPObject class letting 
application code look very unpythonic.

The data types returned from and passed to LDAPObject methods are not 
specific to python-ldap:
- list of dicts for search results
- no clear distinction between search results and search continuations
- raw lists for change records
etc.

With LDAPControls we cannot stay away from messing with BER any longer. 
Therefore we could reimplement much of the LDAP protocol stuff following 
a nice object model.

Compiling the various SDKs is a mess on some platforms (e.g. building 
OpenLDAP libs on Win32). The binaries are often behind the current 
release although some people are really doing great work providing 
up-to-date pre-built binaries.

Licensing situation not suitable for contributing python-ldap to 
Python's standard lib.

etc.

> Something like Net::LDAP (which is a very 
> nice object model, even though it's perl).

Don't know this since I never used Perl. If it's really a good object 
model we could simply borrow from it.

> It depends on several modules being available.

Yes, that's where the sadness begins...

> For example, is there a python ASN.1 parser?

The short answer: No there's no standard ASN.1 / BER / DER module for 
Python which could just be imported by python-ldap without any licensing 
and installation hassles.

The long answer:

There are some BER modules in SNMP modules. Don't know how to solve the 
licensing issues.

In web2ldap I'm using a slightly modified version of pisces.asn1 which 
is under old CNRI license. The author planned to work out a better 
license with CNRI but got stuck.

=> It boils down to developing a ASN.1 module and contribute it to 
Python's standard libs (following licensing advice by PSF from the very 
beginning).

> Most everything else is already available in python - sockets, ssl, etc.

Hmm, SSL support in Python's standard lib is very basic. AFAIK there's 
no proper certificate and CRL checking at all. And there's also SASL, 
Kerberos, etc. to think about.

Off course I'd be willing to put work into it. But it would need several 
developers to reach the same functional level as today's python-ldap 
within a reasonable time frame.

Let's discuss design goals...mine are:

Let's call the module 'ldap2'.

'ldap2' should go into Python's standard lib in the long run.

Drop back-ward compabilty to 'ldap'. One could try to implement a 
compability class API later but this should not be a first-time 
requirement which then turns out to be an obstacle for a clean object model.

Drop support for Python versions prior 2.3 (because of sets, datetime 
and various other modules)

Add support for Unicode whereever suitable.

....to be continued...

Ciao, Michael.



More information about the python-ldap mailing list