[python-ldap] ANN: python-ldap 3.0.0b1 (beta release)

Petr Viktorin pviktori at redhat.com
Mon Dec 4 08:39:44 EST 2017

Find a new BETA release of python-ldap:


This release merges Python 3 support from the pyldap fork, and includes 
quite a few bug fixes and infrastructure changes.

To install this beta release via pip, you need to supply the `--pre` flag:

     pip install --pre python-ldap

A major change relative to python-ldap 2.5.x is bytes/text handling.
Read about it here:


No other breaking changes should be present.

Please test with your code and report any issues, either on this mailing 
list or on the GitHub tracker:


After years of being hosted by Michael Ströder (thank you!), the 
project's website was merged with the documentation, and will be hosted 
at Read the Docs.
For a preview of what will be on www.python-ldap.org soon, visit:


About the project:

     python-ldap provides an object-oriented API to access LDAP directory
     servers from Python programs. It mainly wraps the OpenLDAP 2.x libs
     for that purpose. Additionally it contains modules for other
     LDAP-related stuff (e.g. processing LDIF, LDAP URLs and LDAPv3

Project's web site:


Git commit hash for the release:
     python-ldap-3.0.0b1  ed0f6edf0406dbb6824e680c3d8a5a8381f5f0bb

Released 3.0.0b1 2017-12-04

Changes since 2.4.45:
(this list includes changes from 2.5.x)

New dependencies (automatically installed when using pip):
* pyasn1 0.3.7+
* pyasn1_modules 0.1.5+

Python 3 support and bytes_mode:
* merged from the pyldap fork (https://github.com/pyldap)
* please see documentation on bytes_mode and text/bytes handling:

Removed support for Python 2.6.

* Move to Git
* Don't define search path for includes and libs in the default
* Include sasl/sasl.h from the standard path
* Re-format README to ReStructured Text
* Setup for automatic testing using Travis CI
* Add coverage reporting for Python and C
* Add install requires into setup.py
* Remove distclean.sh in favor of make clean
* Use `package`, `depends`, `install_requires` in setup.py
* Add make target for scan-build (static analysis using clang)

* Remove unused LDAPberval helper functions
* Fix type conversion in page control
* Fix multiple ref leaks in error-handling code
* Fix reference leak in result4
* Fix several compiler warnings
* Fix memory leak in whoami
* Fix internal error handling of LDAPControl_to_List()
* Fix two memory leaks and release GIL in encode_assertion_control
* Allow set_option() to set timeouts to infinity
and, thanks to Michael Ströder:
* removed unused code schema.c
* moved code from version.c to ldapmodule.c
* removed obsolete back-ward compability constants from common.h
* build checks whether LDAP_API_VERSION is OpenLDAP 2.4.x
* _ldap.__author__ and _ldap.__license__ also set from ldap.pkginfo
* assume C extension API for Python 2.7+

* Avoid eval() for getting module-level variables to fix running under
* Compability changes for pyasn1 0.3 or newer
and, thanks to Michael Ströder:
* ldap.__version__, ldap.__author__ and ldap.__license__ now
   imported from new sub-module ldap.pkginfo also to setup.py
* Added safety assertion when importing _ldap:
   ldap.pkginfo.__version__ must match _ldap.__version__
* removed stand-alone module dsml
* slapdtest.SlapdObject.restart() just restarts slapd
   without cleaning any data
* The methods SSSResponseControl.decodeControlValue() and
   VLVResponseControl.decodeControlValue() now follow the coding
   convention to use camel-cased ASN.1 name as class attribute name.
   The old class names are still set for back-ward compability
   but should not be used in new code because they might be removed
   in a later release.
* removed SSSRequestControl from ldap.controls.KNOWN_RESPONSE_CONTROLS
* removed all dependencies on modules string and types
* removed use of .has_key()
* removed class ldap.ldapobject.NonblockingLDAPObject
* new global constant ldap.LIBLDAP_API_INFO
* right after importing _ldap there is a call into libldap to initialize
* method .decodeControlValue() of SSSResponseControl and
   does not set class attribute result_code anymore
* always use bytes() for UUID() constructor in ldap.syncrepl
* module ldif now uses functions b64encode() and b64decode()
* fixed pickling and restoring of ReconnectLDAPObject

* Automatically try some common locations for SCHEMADIR
* Ensure server is stopped when the process exits
* Check for LDAP schema and slapd binaries
* slapdtest is now a package and includes testing certificates

* Expand cidict membership test
* Add test suite for binds
* Add test suite for edits
* Add a smoke-check for listall() and attribute_types()
* Add test case for SASL EXTERNAL auth
* Add tests for start_tls
* In CI, treat compiler warnings as fatal errors
* Added tests for ldap.syncrepl
and, thanks to Michael Ströder:
* added explicit reconnect tests for ReconnectLDAPObject
* scripts do not directly call SlapdTestCase.setUpClass() anymore
* added LDIF test with folded, base64-encoded attribute
* added more tests for sub-module ldap.dn

* Build documentation without the compiled C extension
* Merge contents from python-ldap.org
* Move reference documentation in its own section
* Document return value of {modify,add,delete}_ext_s() as a tuple
* Add tests for documentation (build & spelling)
* Link to documentation of old versions
* Add a contributing guide

Petr Viktorin

More information about the python-ldap mailing list