An open API service indexing awesome lists of open source software.

https://github.com/pycontribs/python3-ldap


https://github.com/pycontribs/python3-ldap

Last synced: about 1 year ago
JSON representation

Awesome Lists containing this project

README

          

A strictly RFC 4511 conforming LDAP V3 pure Python 3 client - Python 2 compatible

License
-------

The python3-ldap project is open source and released under the LGPL v3 license.

PEP8 Compliance
---------------

python3-ldap is PEP8 compliance (except for line length) starting from version 0.9.0.

Mailing List
------------

You can join the python3-ldap mailing list at http://mail.python.org/mailman/listinfo/python3-ldap

Home Page
---------

Project home page is https://bitbucket.org/python3ldap/python3-ldap

Documentation
-------------

Documentation is available at http://pythonhosted.org/python3-ldap

Download
--------

Package download is available at https://pypi.python.org/pypi/python3-ldap or via pip

Mercurial (hg) repository
-------------------------

You can download the latest source at https://bitbucket.org/python3ldap/python3-ldap

Support
-------

You can submit support tickets on https://bitbucket.org/python3ldap/python3-ldap/issues

Acknowledgements
----------------

* I wish to thank **Ilya Etingof**, the author of the *pyasn1* package for his excellent work and support.
* I wish to thank **Mark Lutz** for his *Learning Python* and *Programming Python* excellent books series and **John Goerzen** and **Brandon Rhodes** for their book *Foundations of Python Network Programming*. These books are wonderful tools for learning Python and this project owes a lot to them.
* I wish to thank **JetBrains** for donating to this project the Open Source license of *PyCharm 3 Professional*.
* I wish to thank **Atlassian** for providing the *free source repository space and the tools* I use to develop this project.

Contact me
----------

For information and suggestions you can contact me at python3ldap@gmail.com or you can join the python3-ldap mailing list at http://mail.python.org/mailman/listinfo/python3-ldap. You can also open a support ticket on https://bitbucket.org/python3ldap/python3-ldap/issues/new

CHANGELOG
=========
* 0.9.5.3 2014.08.24
- elements returned in schema and dsa info are in a case insensitive dictionary (can be changed in ldap3.CASE_INSENSITIVE_SCHEMA_NAMES = True|False)
- attributes name returned in searches are now case insensitive (can be changed in ldap3.CASE_INSENSITIVE_ATTRIBUTE_NAMES = True|False)
- change parameter name from separe_rdn to separate_rnd in ldap3.utils.conv.to_dn()
- sync dev from Bitbucket to GitHub
- schema attributes are explicitly read (useful for Active directory and 389 Directory Server)
- new extended operation: list_replicas (Novell)
- new extended operation: get_replica_info (Novell)
- new extended operation: partition_entry_count (Novell)
- renamed convert_to_ldif() to _convert_to_ldif()

* 0.9.5.2 2014.08.05
- fixed LDAPOperationResult.__str__ (thanks David)
- added to_dn() in utils.conv to convert a dn string in a list of components (strings or tuples)
- added __version__ in ldap3
- don't raise exception if the schema cannot be read in unauthenticated state
- server.address_info is now a property

* 0.9.5.1 2014.08.02
- getaddrinfo called only once
- real_server machinery removed - messageId is now global and monotonic for the whole library
- attributes are returned formatted if schema is read and check_names = True, removed checked_attributes
- bind result is populated again when successful (was removed in 0.9.2.1)
- exception is now raised if you receive multiple extended response to a single extended request. This is not allowed by RFC 4511

* 0.9.5 2014.07.22
- added support for IPv6 (thanks Robert)
- auto_bind can be used even for establishing tls, possible values (defined in ldap3) are: AUTO_BIND_NONE, AUTO_BIND_NO_TLS, AUTO_BIND_TLS_AFTER_BIND, AUTO_BIND_TLS_BEFORE_BIND
- refactored extend package to use classes
- new extended operation: get_universal_password (Novell)
- new extended operation: set_universal_password (Novell)
- added parsing of hostname in scheme://hostname:hostport format. This has the precedence on the parameters (thanks Sorin)
- added extra checks when the schema is read (with the get_info parameter) but nothing is returned by the server
- updated setuptools to version 5.4.1
- when check_name is True and schema is read attributes are checked and formatted in "checked_attributes" as specified by RFCs and schema
- added formatter for generalizedTime syntax as specified in rfc 4517 (asn.1)
- custom formatter can be added in Server definition

* 0.9.4.2 2014.07.03
- Moved to Bitbucket + Mercurial
- Fixed import in core.tls package
- Removed unneeded imports

* 0.9.4.1 2014.07.02
- included missing extend package (thanks to debnet)

* 0.9.4 2014.07.02
- when running in python 3.4 or newer now Tls class uses SSLContext object with default secure setting
- added parameters ca_certs_path, ca_certs_data, local_private_key_password to Tls object creation, valid when using SSLContext
- in python 3.4 or newer the system CA certificates configuration can be used (just leave ca_cert_file, ca_certs_path and ca_certs_data set to None)
- removed TLSv1 as default for Tls connection
- upgraded backported ssl function from python 3.4.1 when using with python 2
- when creating a connection server can now be a string, the name of the server to connect in cleartext on default port 389
- fixed bug in ldap3.util.conv.escape_bytes()
- attributes parameter in search can be a tuple
- check_names parameter in connection now defaults to True (so if schema info is available attribute and class name will be checked when performing LDAP operations)
- remove the connection.close() method - you must use connection.unbind()
- new exception LDAPExtensionError for signaling when the requestValue of extended operation is of unknown ASN1 type
- exiting connection manager doesn't raise exception if unbind is not successful (needed in long operations)
- new extended operation: modify_password (RFC3062)
- new extended operation: who_am_i (RFC4532)
- new extended operation: get_bind_dn (Novell)
- updated setuptools to version 5.3

* 0.9.3.5 2014.06.22
- Exception history in restartable strategy is printed when reached the maximum number of retries
- Fixed conditions on terminated_by_server unsolicited message
- Added python2.6 egg installation package

* 0.9.3.4 2014.06.16
- Exception can now be imported from ldap3 package
- Escape_bytes return '' for empty string instead of None (thanks Brian)
- Added exception history to restartable connection (except than for infinite retries)
- Fixed start_tls retrying in restartable connection (thanks Brian)
- New exception LDAPMaximumRetriesError for signaling when the SyncRestartable Strategy has reached the maximum number of retries while performing an operation
- Inverted deleteoldrdn value in LDIF output (thanks Joseph)

* 0.9.3.3 2014.06.01
- Fixed a bug in LDIFProducer when using context manager for connection
- LDIF header in stream is added only whene there are actua data in the stream
- Now LDIF stream can be added to an existing file - version header will not be written if stream is not empty

* 0.9.3.2 2014.05.30
- Fixed a bug while reading schema
- Add an implicit open() when trying binding on a closed connection

* 0.9.3.1 2014.05.28
- Added stream capability to LDIFProducer strategy
- Customizable line separator for ldif output
- Customizable sorting order in ldif output
- object_class parameter is now optional in connection.add()
- Fixed objectClass attribute case sensitive dependency in add operation
- Added stream capability to response_to_ldif() while searching

* 0.9.3 2014.05.20
- Now the key in server.schema.attribute_type is the attribute name (was the oid)
- Now the key in server.schema.object_classes is the class name (was the oid)
- Added check_names to Connection definition to have the names of attributes and object class checked against the schema
- Updated setuptools to 3.6
- Added wheel installation format
- Added raise_exceptions mode for connection
- Exception hierarchy reworked
- Added locking to Server object (for multithreading)

* 0.9.2.2 2014.04.30
- fixed a bug from 0.9.1 that broke start_tls() (thanks Mark)

* 0.9.2.1 2014.04.28
- fixed a bug in 0.9.2 that allowed only string attributes in add, modify and compare operations (thank Mladen)

* 0.9.2 2014.04.26
- changed return value in get_response from response to (response, result) - helpful for multi threaded connections
- added ReusableStrategy for pooling connections
- refined docstrings (thanks Will)
- result and response attributes don't overlap anymore. Operation result is only in result attribute.
- fixed search for binary values (thanks Marcin)
- added convenience function to convert bytes to LDAP binary value string format for search filter

* 0.9.1 2014.03.30
- added laziness flag to test suite
- changed ServerPool signature to accept active and exhaust parameters
- removed unneeded start_listen parameter
- added 'lazy' parameter to open, to bind and to unbind a connection only when an effective operation is performed
- fixed start_tls in SyncWaitRestartable strategy
- fixed certificate name checking while opening an ssl connection
- fixed syntax error during installation
- socket operations now raises proper exception, not generic LDAPException (thanks Joseph)
- tested against Python 3.4, 3.3, 2.7, 2.6
- updated setuptools to 3.3

* 0.9.0 2014.03.20
- PEP8 compliance
- added ldap3.compat package with older (non PEP8 compliant) signatures
- renamed ldap3.abstraction to ldap3.abstract
- moved connection.py, server.py and tls.py files to ldap3.core
- fixed SyncWaitRestartableStrategy (thanks Christoph)

* 0.8.3 2014.03.08
- added SyncWaitRestartable strategy
- removed useless forceBind parameter
- usage statistics updated with restartable success/failure counters and open/closed/wrapped socket counters

* 0.8.2 2014.03.04
- Added refresh() method to Entry object to read again the attributes from the Reader in the abstraction layer
- Fixed Python 2.6 issues
- Fixed test suite for Python 2.6

* 0.8,1 2014.02.12
- Changed exceptions returned by the library to LDAPException, a subclass of Exception.
- Fixed documentation typos

* 0.8.0 - 2014.02.08
- Added abstraction layer (for searching)
- Added context manager to Connection class
- Added readOnly parameter to Connection class
- Fixed a bug in search with 'less than' parameter
- Remove validation of available SSL protocols because different Python interpreters can use different ssl packages

* 0.7.3 - 2014.01.05
- Added SASL DIGEST-MD5 support
- Moved to intrapackage (relative) imports

* 0.7.2 - 2013.12.30
- Fixed a bug when parentheses are used in search filter as ASCII escaped sequences

* 0.7.1 - 2013.12.21
- Completed support for LDFI as per RFC2849
- Added new LDIF_PRODUCER strategy to generate LDIF-CHANGE stream
- Fixed a bug in the autoReferral feature when controls where used in operation

* 0.7.0 - 2013.12.12
- Added support for LDIF as per RFC2849
- Added LDIF-CONTENT compliant search responses
- Added exception when using autoBind if connection is not successful

* 0.6.7 - 2013.12.03
- Fixed exception when DSA is not willing to return rootDSE and schema info

* 0.6.6 - 2013.11.13
- Added parameters to test suite

* 0.6.5 - 2013.11.05
- Modified rawAttributes decoding, now null (empty) values are returned

* 0.6.4 - 2013.10.16
- Added simple paged search as per RFC2696
- Controls return values are decoded and stored in result attribute of connection

* 0.6.3 - 2013.10.07
- Added Extesible Filter syntax to search filter
- Fixed exception while closing connection in AsyncThreaded strategy

* 0.6.2 - 2013.10.01
- Fix for referrals in searchRefResult
- Disabled schema reading on Active Directory

* 0.6.1 - 2013.09.22
- Experimental support for Python 2 - no unicode
- Added backport of ssl.match_name for Python 2
- Minor fixes for using the client in Python 2
- Fix for getting schema info with AsyncThreaded strategy

* 0.6.0 - 2013.09.16
- Moved to beta!
- Added support site hosted on www.assembla.com
- Added public svn repository on www.assembla.com
- Added getInfo to server object, parameter can be: GET_NO_INFO, GET_DSA_INFO, GET_SCHEMA_INFO, GET_ALL_INFO
- Added method to read the schema from the server. Schema is decoded and returned in different dictionaries of the server.schema object
- Updated connection usage info (elapsed time is now computed when connection is closed)
- Updated OID dictionary with extensions and controls from Active Directory specifications.

* 0.5.3 - 2013.09.03
- Added getOperationalAttributes boolean to Search operation to fetch the operational attributes during search
- Added increment operation to modify operation as per RFC4525
- Added dictionary of OID descriptions (for DSE and schema decoding)
- Added method to get Info from DSE (returned in server.info object)
- Modified exceptions for sending controls in LDAP request
- Added connection usage (in connection.usage if collectUsage=True in connection definition)
- Fixed StartTls in asynchronous client strategy

* 0.5.2 - 2013.08.27
- Added SASLprep profile for validating password
- Fixed RFC4511 asn1 definitions

* 0.5.1 - 2013.08.17
- Refactored package structure
- Project description reformatted with reStructuredText
- Added Windows graphical installation

* 0.5.0 - 2013.08.15
- Added reference to LGPL v3 license
- Added Tls object to hold ssl/tls configuration
- Added StartTLS feature
- Added SASL feature
- Added SASL EXTERNAL mechanism
- Fixed Unbind
- connection.close in now an alias for connection.unbind

* 0.4.4 - 2013.08.01
- Added 'Controls' to all LDAP Requests
- Added Extended Request feature
- Added Intermediate Response feature
- Added namespace 'ldap3'

* 0.4.3 - 2013.07.31
- Test suite refactored
- Fixed single object search response error
- Changed attributes returned in search from tuple to dict
- Added 'raw_attributes' key in search response to hold undecoded (binary) attribute values read from ldap
- Added __repr__ for Server and Connection objects to re-create the object instance

* 0.4.2 - 2013.07.29
- Added autoReferral feature as per RFC4511 (4.1.10)
- Added allowedReferralHosts to conform to Security considerations of RFC4516

* 0.4.1 - 2013.07.20
- Add validation to Abandon operation
- Added connection.request to hold a dictionary of infos about last request
- Added info about outstanding operation in connection.strategy._oustanding
- Implemented RFC4515 for search filter coding and decoding
- Added a parser to build filter string from LdapMessage

* 0.4.0 - 2013.07.15
- Refactoring of the connection and strategy classes
- Added the ldap3.strategy namespace to contain client connection strategies
- Added ssl authentication
- Moved authentication parameters from Server object to Connection object
- Added ssl parameters to Server Object

* 0.3.0 - 2013.07.14
- Fixed AsyncThreaded strategy with _outstanding and _responses attributes to hold the pending requests and the not-yet-read responses
- Added Extended Operation
- Added "Unsolicited Notification" discover logic
- Added managing of "Notice of Disconnection" from server to properly close connection

* 0.2.0 - 2013.07.13
- Update setup with setuptools 0.7
- Docstrings added to class
- Removed ez_setup dependency
- Removed distribute dependency

* 0.1.0 - 2013.07.12
- Initial upload on pypi
- PyASN1 RFC4511 module completed and tested
- Synchronous client working properly
- Asynchronous client working but not fully tested
- Basic authentication working