{"id":20030291,"url":"https://github.com/pycontribs/python3-ldap","last_synced_at":"2025-05-05T03:32:51.064Z","repository":{"id":19442007,"uuid":"22685912","full_name":"pycontribs/python3-ldap","owner":"pycontribs","description":null,"archived":false,"fork":false,"pushed_at":"2014-09-23T16:45:52.000Z","size":4728,"stargazers_count":4,"open_issues_count":0,"forks_count":3,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-08T16:53:55.780Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pycontribs.png","metadata":{"files":{"readme":"README.txt","changelog":null,"contributing":null,"funding":null,"license":"COPYING.LESSER.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-08-06T14:38:38.000Z","updated_at":"2024-07-25T19:01:51.000Z","dependencies_parsed_at":"2022-08-21T09:40:56.497Z","dependency_job_id":null,"html_url":"https://github.com/pycontribs/python3-ldap","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pycontribs%2Fpython3-ldap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pycontribs%2Fpython3-ldap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pycontribs%2Fpython3-ldap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pycontribs%2Fpython3-ldap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pycontribs","download_url":"https://codeload.github.com/pycontribs/python3-ldap/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252435567,"owners_count":21747457,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T09:25:43.879Z","updated_at":"2025-05-05T03:32:49.230Z","avatar_url":"https://github.com/pycontribs.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"A strictly RFC 4511 conforming LDAP V3 pure Python 3 client - Python 2 compatible\n\nLicense\n-------\n\nThe python3-ldap project is open source and released under the LGPL v3 license.\n\nPEP8 Compliance\n---------------\n\npython3-ldap is PEP8 compliance (except for line length) starting from version 0.9.0.\n\nMailing List\n------------\n\nYou can join the python3-ldap mailing list at http://mail.python.org/mailman/listinfo/python3-ldap\n\nHome Page\n---------\n\nProject home page is https://bitbucket.org/python3ldap/python3-ldap\n\nDocumentation\n-------------\n\nDocumentation is available at http://pythonhosted.org/python3-ldap\n\nDownload\n--------\n\nPackage download is available at https://pypi.python.org/pypi/python3-ldap or via pip\n\nMercurial (hg) repository\n-------------------------\n\nYou can download the latest source at https://bitbucket.org/python3ldap/python3-ldap\n\nSupport\n-------\n\nYou can submit support tickets on https://bitbucket.org/python3ldap/python3-ldap/issues\n\nAcknowledgements\n----------------\n\n* I wish to thank **Ilya Etingof**, the author of the *pyasn1* package for his excellent work and support.\n* 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.\n* I wish to thank **JetBrains** for donating to this project the Open Source license of *PyCharm 3 Professional*.\n* I wish to thank **Atlassian** for providing the *free source repository space and the tools* I use to develop this project.\n\nContact me\n----------\n\nFor 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\n\nCHANGELOG\n=========\n* 0.9.5.3 2014.08.24\n    - elements returned in schema and dsa info are in a case insensitive dictionary (can be changed in ldap3.CASE_INSENSITIVE_SCHEMA_NAMES = True|False)\n    - attributes name returned in searches are now case insensitive (can be changed in ldap3.CASE_INSENSITIVE_ATTRIBUTE_NAMES = True|False)\n    - change parameter name from separe_rdn to separate_rnd in ldap3.utils.conv.to_dn()\n    - sync dev from Bitbucket to GitHub\n    - schema attributes are explicitly read (useful for Active directory and 389 Directory Server)\n    - new extended operation: list_replicas (Novell)\n    - new extended operation: get_replica_info (Novell)\n    - new extended operation: partition_entry_count (Novell)\n    - renamed convert_to_ldif() to _convert_to_ldif()\n\n* 0.9.5.2 2014.08.05\n    - fixed LDAPOperationResult.__str__ (thanks David)\n    - added to_dn() in utils.conv to convert a dn string in a list of components (strings or tuples)\n    - added __version__ in ldap3\n    - don't raise exception if the schema cannot be read in unauthenticated state\n    - server.address_info is now a property\n\n* 0.9.5.1 2014.08.02\n    - getaddrinfo called only once\n    - real_server machinery removed - messageId is now global and monotonic for the whole library\n    - attributes are returned formatted if schema is read and check_names = True, removed checked_attributes\n    - bind result is populated again when successful (was removed in 0.9.2.1)\n    - exception is now raised if you receive multiple extended response to a single extended request. This is not allowed by RFC 4511\n\n* 0.9.5 2014.07.22\n    - added support for IPv6 (thanks Robert)\n    - 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\n    - refactored extend package to use classes\n    - new extended operation: get_universal_password (Novell)\n    - new extended operation: set_universal_password (Novell)\n    - added parsing of hostname in scheme://hostname:hostport format. This has the precedence on the parameters (thanks Sorin)\n    - added extra checks when the schema is read (with the get_info parameter) but nothing is returned by the server\n    - updated setuptools to version 5.4.1\n    - when check_name is True and schema is read attributes are checked and formatted in \"checked_attributes\" as specified by RFCs and schema\n    - added formatter for generalizedTime syntax as specified in rfc 4517 (asn.1)\n    - custom formatter can be added in Server definition\n\n* 0.9.4.2 2014.07.03\n    - Moved to Bitbucket + Mercurial\n    - Fixed import in core.tls package\n    - Removed unneeded imports\n\n* 0.9.4.1 2014.07.02\n    - included missing extend package (thanks to debnet)\n\n* 0.9.4 2014.07.02\n    - when running in python 3.4 or newer now Tls class uses SSLContext object with default secure setting\n    - added parameters ca_certs_path, ca_certs_data, local_private_key_password to Tls object creation, valid when using SSLContext\n    - 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)\n    - removed TLSv1 as default for Tls connection\n    - upgraded backported ssl function from python 3.4.1 when using with python 2\n    - when creating a connection server can now be a string, the name of the server to connect in cleartext on default port 389\n    - fixed bug in ldap3.util.conv.escape_bytes()\n    - attributes parameter in search can be a tuple\n    - 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)\n    - remove the connection.close() method - you must use connection.unbind()\n    - new exception LDAPExtensionError for signaling when the requestValue of extended operation is of unknown ASN1 type\n    - exiting connection manager doesn't raise exception if unbind is not successful (needed in long operations)\n    - new extended operation: modify_password (RFC3062)\n    - new extended operation: who_am_i (RFC4532)\n    - new extended operation: get_bind_dn (Novell)\n    - updated setuptools to version 5.3\n\n* 0.9.3.5 2014.06.22\n    - Exception history in restartable strategy is printed when reached the maximum number of retries\n    - Fixed conditions on terminated_by_server unsolicited message\n    - Added python2.6 egg installation package\n\n* 0.9.3.4 2014.06.16\n    - Exception can now be imported from ldap3 package\n    - Escape_bytes return '' for empty string instead of None (thanks Brian)\n    - Added exception history to restartable connection (except than for infinite retries)\n    - Fixed start_tls retrying in restartable connection (thanks Brian)\n    - New exception LDAPMaximumRetriesError for signaling when the SyncRestartable Strategy has reached the maximum number of retries while performing an operation\n    - Inverted deleteoldrdn value in LDIF output (thanks Joseph)\n\n* 0.9.3.3 2014.06.01\n    - Fixed a bug in LDIFProducer when using context manager for connection\n    - LDIF header in stream is added only whene there are actua data in the stream\n    - Now LDIF stream can be added to an existing file - version header will not be written if stream is not empty\n\n* 0.9.3.2 2014.05.30\n    - Fixed a bug while reading schema\n    - Add an implicit open() when trying binding on a closed connection\n\n* 0.9.3.1 2014.05.28\n    - Added stream capability to LDIFProducer strategy\n    - Customizable line separator for ldif output\n    - Customizable sorting order in ldif output\n    - object_class parameter is now optional in connection.add()\n    - Fixed objectClass attribute case sensitive dependency in add operation\n    - Added stream capability to response_to_ldif() while searching\n\n\n* 0.9.3 2014.05.20\n    - Now the key in server.schema.attribute_type is the attribute name (was the oid)\n    - Now the key in server.schema.object_classes is the class name (was the oid)\n    - Added check_names to Connection definition to have the names of attributes and object class checked against the schema\n    - Updated setuptools to 3.6\n    - Added wheel installation format\n    - Added raise_exceptions mode for connection\n    - Exception hierarchy reworked\n    - Added locking to Server object (for multithreading)\n\n* 0.9.2.2 2014.04.30\n    - fixed a bug from 0.9.1 that broke start_tls() (thanks Mark)\n\n* 0.9.2.1 2014.04.28\n    - fixed a bug in 0.9.2 that allowed only string attributes in add, modify and compare operations (thank Mladen)\n\n* 0.9.2 2014.04.26\n    - changed return value in get_response from response to (response, result) - helpful for multi threaded connections\n    - added ReusableStrategy for pooling connections\n    - refined docstrings (thanks Will)\n    - result and response attributes don't overlap anymore. Operation result is only in result attribute.\n    - fixed search for binary values (thanks Marcin)\n    - added convenience function to convert bytes to LDAP binary value string format for search filter\n\n* 0.9.1 2014.03.30\n    - added laziness flag to test suite\n    - changed ServerPool signature to accept active and exhaust parameters\n    - removed unneeded start_listen parameter\n    - added 'lazy' parameter to open, to bind and to unbind a connection only when an effective operation is performed\n    - fixed start_tls in SyncWaitRestartable strategy\n    - fixed certificate name checking while opening an ssl connection\n    - fixed syntax error during installation\n    - socket operations now raises proper exception, not generic LDAPException (thanks Joseph)\n    - tested against Python 3.4, 3.3, 2.7, 2.6\n    - updated setuptools to 3.3\n\n* 0.9.0 2014.03.20\n    - PEP8 compliance\n    - added ldap3.compat package with older (non PEP8 compliant) signatures\n    - renamed ldap3.abstraction to ldap3.abstract\n    - moved connection.py, server.py and tls.py files to ldap3.core\n    - fixed SyncWaitRestartableStrategy (thanks Christoph)\n\n* 0.8.3 2014.03.08\n    - added SyncWaitRestartable strategy\n    - removed useless forceBind parameter\n    - usage statistics updated with restartable success/failure counters and open/closed/wrapped socket counters\n\n* 0.8.2 2014.03.04\n    - Added refresh() method to Entry object to read again the attributes from the Reader in the abstraction layer\n    - Fixed Python 2.6 issues\n    - Fixed test suite for Python 2.6\n\n* 0.8,1 2014.02.12\n    - Changed exceptions returned by the library to LDAPException, a subclass of Exception.\n    - Fixed documentation typos\n\n* 0.8.0 - 2014.02.08\n    - Added abstraction layer (for searching)\n    - Added context manager to Connection class\n    - Added readOnly parameter to Connection class\n    - Fixed a bug in search with 'less than' parameter\n    - Remove validation of available SSL protocols because different Python interpreters can use different ssl packages\n\n* 0.7.3 - 2014.01.05\n    - Added SASL DIGEST-MD5 support\n    - Moved to intrapackage (relative) imports\n\n* 0.7.2 - 2013.12.30\n    - Fixed a bug when parentheses are used in search filter as ASCII escaped sequences\n\n* 0.7.1 - 2013.12.21\n    - Completed support for LDFI as per RFC2849\n    - Added new LDIF_PRODUCER strategy to generate LDIF-CHANGE stream\n    - Fixed a bug in the autoReferral feature when controls where used in operation\n\n* 0.7.0 - 2013.12.12\n    - Added support for LDIF as per RFC2849\n    - Added LDIF-CONTENT compliant search responses\n    - Added exception when using autoBind if connection is not successful\n\n* 0.6.7 - 2013.12.03\n    - Fixed exception when DSA is not willing to return rootDSE and schema info\n\n* 0.6.6 - 2013.11.13\n    - Added parameters to test suite\n\n* 0.6.5 - 2013.11.05\n    - Modified rawAttributes decoding, now null (empty) values are returned\n\n* 0.6.4 - 2013.10.16\n    - Added simple paged search as per RFC2696\n    - Controls return values are decoded and stored in result attribute of connection\n\n* 0.6.3 - 2013.10.07\n    - Added Extesible Filter syntax to search filter\n    - Fixed exception while closing connection in AsyncThreaded strategy\n\n* 0.6.2 - 2013.10.01\n    - Fix for referrals in searchRefResult\n    - Disabled schema reading on Active Directory\n\n* 0.6.1 - 2013.09.22\n    - Experimental support for Python 2 - no unicode\n    - Added backport of ssl.match_name for Python 2\n    - Minor fixes for using the client in Python 2\n    - Fix for getting schema info with AsyncThreaded strategy\n\n* 0.6.0 - 2013.09.16\n    - Moved to beta!\n    - Added support site hosted on www.assembla.com\n    - Added public svn repository on www.assembla.com\n    - Added getInfo to server object, parameter can be: GET_NO_INFO, GET_DSA_INFO, GET_SCHEMA_INFO, GET_ALL_INFO\n    - Added method to read the schema from the server. Schema is decoded and returned in different dictionaries of the server.schema object\n    - Updated connection usage info (elapsed time is now computed when connection is closed)\n    - Updated OID dictionary with extensions and controls from Active Directory specifications.\n\n* 0.5.3 - 2013.09.03\n    - Added getOperationalAttributes boolean to Search operation to fetch the operational attributes during search\n    - Added increment operation to modify operation as per RFC4525\n    - Added dictionary of OID descriptions (for DSE and schema decoding)\n    - Added method to get Info from DSE (returned in server.info object)\n    - Modified exceptions for sending controls in LDAP request\n    - Added connection usage (in connection.usage if collectUsage=True in connection definition)\n    - Fixed StartTls in asynchronous client strategy\n\n* 0.5.2 - 2013.08.27\n    - Added SASLprep profile for validating password\n    - Fixed RFC4511 asn1 definitions\n\n* 0.5.1 - 2013.08.17\n    - Refactored package structure\n    - Project description reformatted with reStructuredText\n    - Added Windows graphical installation\n\n* 0.5.0 - 2013.08.15\n    - Added reference to LGPL v3 license\n    - Added Tls object to hold ssl/tls configuration\n    - Added StartTLS feature\n    - Added SASL feature\n    - Added SASL EXTERNAL mechanism\n    - Fixed Unbind\n    - connection.close in now an alias for connection.unbind\n\n* 0.4.4 - 2013.08.01\n    - Added 'Controls' to all LDAP Requests\n    - Added Extended Request feature\n    - Added Intermediate Response feature\n    - Added namespace 'ldap3'\n\n* 0.4.3 - 2013.07.31\n    - Test suite refactored\n    - Fixed single object search response error\n    - Changed attributes returned in search from tuple to dict\n    - Added 'raw_attributes' key in search response to hold undecoded (binary) attribute values read from ldap\n    - Added __repr__ for Server and Connection objects to re-create the object instance\n\n* 0.4.2 - 2013.07.29\n    - Added autoReferral feature as per RFC4511 (4.1.10)\n    - Added allowedReferralHosts to conform to Security considerations of RFC4516\n\n* 0.4.1 - 2013.07.20\n    - Add validation to Abandon operation\n    - Added connection.request to hold a dictionary of infos about last request\n    - Added info about outstanding operation in connection.strategy._oustanding\n    - Implemented RFC4515 for search filter coding and decoding\n    - Added a parser to build filter string from LdapMessage\n\n* 0.4.0 - 2013.07.15\n    - Refactoring of the connection and strategy classes\n    - Added the ldap3.strategy namespace to contain client connection strategies\n    - Added ssl authentication\n    - Moved authentication parameters from Server object to Connection object\n    - Added ssl parameters to Server Object\n\n* 0.3.0 - 2013.07.14\n    - Fixed AsyncThreaded strategy with _outstanding and _responses attributes to hold the pending requests and the not-yet-read responses\n    - Added Extended Operation\n    - Added \"Unsolicited Notification\" discover logic\n    - Added managing of \"Notice of Disconnection\" from server to properly close connection\n\n* 0.2.0 - 2013.07.13\n    - Update setup with setuptools 0.7\n    - Docstrings added to class\n    - Removed ez_setup dependency\n    - Removed distribute dependency\n\n* 0.1.0 - 2013.07.12\n    - Initial upload on pypi\n    - PyASN1 RFC4511 module completed and tested\n    - Synchronous client working properly\n    - Asynchronous client working but not fully tested\n    - Basic authentication working\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpycontribs%2Fpython3-ldap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpycontribs%2Fpython3-ldap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpycontribs%2Fpython3-ldap/lists"}