From fe88023c07b078e5d288361abf0a6e0ebd211f65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Thu, 14 May 2026 10:55:41 +0100 Subject: [PATCH 1/6] chore: Prepare a new release 3.4.6 --- CHANGES | 13 +++++++++++++ Lib/ldap/pkginfo.py | 2 +- Lib/ldapurl.py | 2 +- Lib/ldif.py | 2 +- Lib/slapdtest/__init__.py | 2 +- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 05fcf4b6..4f820393 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,16 @@ +Released 3.4.6 2026-05-14 + +Fixes: +* ``attrlist`` parameter is now properly checked before use, avoiding memory + errors due to type mismatches +* Fixed errors with requestName/requestValue in ``extop.dds`` +* ``ldif`` and ``ldap.schema`` modules now actively close sockets as they're + finished with them + +Infrastructure: +* Package no longer requires setuptools-scm + +---------------------------------------------------------------- Released 3.4.5 2025-10-10 Security fixes: diff --git a/Lib/ldap/pkginfo.py b/Lib/ldap/pkginfo.py index 2ac6852d..28e853a0 100644 --- a/Lib/ldap/pkginfo.py +++ b/Lib/ldap/pkginfo.py @@ -1,6 +1,6 @@ """ meta attributes for packaging which does not import any dependencies """ -__version__ = '3.4.5' +__version__ = '3.4.6' __author__ = 'python-ldap project' __license__ = 'Python style' diff --git a/Lib/ldapurl.py b/Lib/ldapurl.py index 57900028..9ae8ef93 100644 --- a/Lib/ldapurl.py +++ b/Lib/ldapurl.py @@ -4,7 +4,7 @@ See https://www.python-ldap.org/ for details. """ -__version__ = '3.4.5' +__version__ = '3.4.6' __all__ = [ # constants diff --git a/Lib/ldif.py b/Lib/ldif.py index 356f95ea..747e6acc 100644 --- a/Lib/ldif.py +++ b/Lib/ldif.py @@ -3,7 +3,7 @@ See https://www.python-ldap.org/ for details. """ -__version__ = '3.4.5' +__version__ = '3.4.6' __all__ = [ # constants diff --git a/Lib/slapdtest/__init__.py b/Lib/slapdtest/__init__.py index 0fabc4c4..dcfe6506 100644 --- a/Lib/slapdtest/__init__.py +++ b/Lib/slapdtest/__init__.py @@ -4,7 +4,7 @@ See https://www.python-ldap.org/ for details. """ -__version__ = '3.4.5' +__version__ = '3.4.6' from slapdtest._slapdtest import SlapdObject, SlapdTestCase, SysLogHandler from slapdtest._slapdtest import requires_ldapi, requires_sasl, requires_tls From 18212ea82a2c055c0dd415fdc388d3785207c1ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Tue, 19 May 2026 14:59:25 +0100 Subject: [PATCH 2/6] chore: Prepare a new release 3.4.7 --- CHANGES | 6 ++++++ Lib/ldap/pkginfo.py | 2 +- Lib/ldapurl.py | 2 +- Lib/ldif.py | 2 +- Lib/slapdtest/__init__.py | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 4f820393..41e6cb17 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,9 @@ +Released 3.4.7 2026-05-19 + +No code changes, correcting for the fact that the previous release artifacts +uploaded to PyPI contained unintended files. + +---------------------------------------------------------------- Released 3.4.6 2026-05-14 Fixes: diff --git a/Lib/ldap/pkginfo.py b/Lib/ldap/pkginfo.py index 28e853a0..5e90c09f 100644 --- a/Lib/ldap/pkginfo.py +++ b/Lib/ldap/pkginfo.py @@ -1,6 +1,6 @@ """ meta attributes for packaging which does not import any dependencies """ -__version__ = '3.4.6' +__version__ = '3.4.7' __author__ = 'python-ldap project' __license__ = 'Python style' diff --git a/Lib/ldapurl.py b/Lib/ldapurl.py index 9ae8ef93..00f55659 100644 --- a/Lib/ldapurl.py +++ b/Lib/ldapurl.py @@ -4,7 +4,7 @@ See https://www.python-ldap.org/ for details. """ -__version__ = '3.4.6' +__version__ = '3.4.7' __all__ = [ # constants diff --git a/Lib/ldif.py b/Lib/ldif.py index 747e6acc..b6c1a6a1 100644 --- a/Lib/ldif.py +++ b/Lib/ldif.py @@ -3,7 +3,7 @@ See https://www.python-ldap.org/ for details. """ -__version__ = '3.4.6' +__version__ = '3.4.7' __all__ = [ # constants diff --git a/Lib/slapdtest/__init__.py b/Lib/slapdtest/__init__.py index dcfe6506..4edfa031 100644 --- a/Lib/slapdtest/__init__.py +++ b/Lib/slapdtest/__init__.py @@ -4,7 +4,7 @@ See https://www.python-ldap.org/ for details. """ -__version__ = '3.4.6' +__version__ = '3.4.7' from slapdtest._slapdtest import SlapdObject, SlapdTestCase, SysLogHandler from slapdtest._slapdtest import requires_ldapi, requires_sasl, requires_tls From c84c6dc11a8034198af06149f67eb8e1964ef052 Mon Sep 17 00:00:00 2001 From: Florian Best Date: Tue, 19 May 2026 16:32:52 +0200 Subject: [PATCH 3/6] ci(pyproject): remove unused coverage exceptions --- pyproject.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 77783f8b..218ccc73 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -98,8 +98,6 @@ exclude_lines = [ "raise NotImplementedError", "if 0:", "if __name__ == .__main__.:", - "if PY2", - "if not PY2", ] [tool.coverage.html] From af50475ccf2a704aa2b77d8f6e1e57770c532a1e Mon Sep 17 00:00:00 2001 From: Florian Best Date: Tue, 19 May 2026 16:35:13 +0200 Subject: [PATCH 4/6] chore: remove obsolete TODO points --- TODO | 6 ------ 1 file changed, 6 deletions(-) diff --git a/TODO b/TODO index b728424a..b91341c3 100644 --- a/TODO +++ b/TODO @@ -2,12 +2,8 @@ General: - Define common Python style license for all modules -- Support Python 3.2+ Modules/ -- Specific support for more controls - - VLV control - - server-side sorting control - Wrap libldif as faster drop-in replacement for module ldif? - Extract response controls in SASL bind responses - Attach response controls to LDAPError instances to deliver the @@ -16,8 +12,6 @@ Modules/ when doing a search in case of ldap.FILTER_ERROR etc. Lib/ -- Unicode support for DNs, filter strings, etc. but not entry attributes! -(Everybody asking for the latter should check the mailing list archive first.) - Caching of search requests for each LDAPObject instance - LDIF parser for replication logs and change records From 8fcf4683f45bdaaff526d0dc73658af5abacbbf5 Mon Sep 17 00:00:00 2001 From: Florian Best Date: Tue, 19 May 2026 16:41:31 +0200 Subject: [PATCH 5/6] build: mark Python 3.9 as requirement Fixes: e628f1582b46269ba6c31e1e3ee8a952cb32bb7d --- pyproject.toml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 218ccc73..d43379d6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ authors = [ {name = "python-ldap project", email = "python-ldap@python.org"}, ] readme = "README" -requires-python = ">=3.6" +requires-python = ">=3.9" keywords = ["ldap", "directory", "authentication"] classifiers = [ "Development Status :: 5 - Production/Stable", @@ -26,9 +26,6 @@ classifiers = [ "Programming Language :: C", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", From 91a8214fd4e11c45ded46afc45ccf93fcdb5ab13 Mon Sep 17 00:00:00 2001 From: Florian Best Date: Wed, 20 May 2026 08:34:42 +0200 Subject: [PATCH 6/6] build(pyproject): modernize PEP 621 metadata and packaging config * replace legacy license.text usage, see PEP 639 * add explicit README content type * require modern setuptools version * add Python 3 only classifier * add project issues URLs * clean up classifiers and dependency formatting --- pyproject.toml | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d43379d6..cd9c4b70 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,45 +1,57 @@ [build-system] requires = [ - "setuptools", + "setuptools>=69", ] build-backend = "setuptools.build_meta" [project] name = "python-ldap" -license.text = "python-ldap" # Replace with 'license' once Python 3.8 is dropped dynamic = ["version"] description = "Python modules for implementing LDAP clients" + +license = "MIT AND LicenseRef-python-ldap" +license-files = [ + "LICENCE", + "LICENCE.MIT", +] + authors = [ - {name = "python-ldap project", email = "python-ldap@python.org"}, + { name = "python-ldap project", email = "python-ldap@python.org" }, ] -readme = "README" +readme = { file = "README.rst", content-type = "text/x-rst" } + requires-python = ">=3.9" keywords = ["ldap", "directory", "authentication"] + classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: System Administrators", - "Operating System :: OS Independent", + + # "License :: OSI Approved :: Python Software Foundation License", + "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", + "Programming Language :: C", - "Programming Language :: Python", "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Topic :: Database", "Topic :: Internet", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Systems Administration :: Authentication/Directory :: LDAP", - "License :: OSI Approved :: Python Software Foundation License", ] + dependencies = [ - "pyasn1 >= 0.3.7", - "pyasn1_modules >= 0.1.5", + "pyasn1>=0.3.7", + "pyasn1_modules>=0.1.5", ] [project.urls] @@ -48,13 +60,11 @@ Documentation = "https://python-ldap.readthedocs.io/" Repository = "https://github.com/python-ldap/python-ldap" Download = "https://pypi.org/project/python-ldap/" Changelog = "https://github.com/python-ldap/python-ldap/blob/main/CHANGES" - - +Issues = "https://github.com/python-ldap/python-ldap/issues" [tool.setuptools] zip-safe = false include-package-data = true -license-files = ["LICENCE", "LICENCE.MIT"] # Explicitly list all Python modules py-modules = ["ldapurl", "ldif"]