#
# spec file for package python-ldap
#
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%{?!python_module:%define python_module() python-%{**} python3-%{**}}

%define skip_python2 1
%define skip_python36 1
%define skip_python38 1
%define skip_python39 1
%define skip_python311 1

Name:           python-ldap
Version:        3.4.3
Release:        2.1
Summary:        Python LDAP interface
License:        Python-2.0
Group:          Development/Libraries/Python
URL:            https://www.python-ldap.org/
Source0:        https://files.pythonhosted.org/packages/source/p/python-ldap/python-ldap-%{version}.tar.gz
BuildRequires:  %{python_module devel}
BuildRequires:  %{python_module pyasn1 >= 0.3.7}
BuildRequires:  %{python_module pyasn1-modules >= 0.1.5}
BuildRequires:  %{python_module setuptools}
BuildRequires:  cyrus-sasl-devel >= 2.1
BuildRequires:  fdupes
BuildRequires:  krb5-devel
BuildRequires:  libopenssl-devel >= 0.9.7
# needed for slapd binary in tests
BuildRequires:  openldap2
# needed for ldapadd binary in tests
BuildRequires:  openldap2-client
BuildRequires:  openldap2-devel >= 2.4.11
BuildRequires:  python-rpm-macros
Requires:       python-pyasn1 >= 0.3.7
Requires:       python-pyasn1-modules >= 0.1.5
%python_subpackages

%description
python-ldap provides an object-oriented API to access LDAP directory
servers from Python programs.  Mainly it wraps the OpenLDAP 2.x libs
for that purpose.  Additionally the package contains modules for other
LDAP-related stuff (e.g. processing LDIF, LDAPURLs, LDAPv3 schema, etc.).

%prep
%setup -q
cp Build/setup.cfg.suse-linux setup.cfg

%build
CFLAGS="%{optflags}" %python_build

%install
%python_install
%python_expand %fdupes %{buildroot}%{$python_sitearch}

%check
PATH=/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin %pyunittest_arch discover -v -s Tests -p 't_*'

%files %{python_files}
%license LICENCE
%doc README Demo CHANGES TODO
%{python_sitearch}/*

%changelog
* Mon Aug 14 2023 William Brown <william.brown@suse.com>
- Re-run source download due to file differences.
* Fri Sep 16 2022 William Brown <william.brown@suse.com>
- up to upstream release 3.4.3
  This is a minor release to bring back the removed OPT_X_TLS option.
  Please note, it's still a deprecated option and it will be removed in 3.5.0.
  The following deprecated option has been brought back:
  * OPT_X_TLS
  * Fixes:
  - Sphinx documentation is now successfully built
  _ pypy3 tests stability was improved
  _ setup.py deprecation warning is now resolved
* Sun Jul 24 2022 Michael Ströder <michael@stroeder.com>
- update to upstream release 3.4.2
  minor release to provide out-of-the-box compatibility with the merge
  of libldap and libldap_r that happened with OpenLDAP's 2.5 release.
* Fri Dec 10 2021 Michael Ströder <michael@stroeder.com>
- skip Python 2 builds
- set PATH when running tests
- update to upstream release 3.4.0
  * Security fixes:
  - Fix inefficient regular expression which allows denial-of-service attacks
    when parsing specially-crafted LDAP schema (GHSL-2021-117, bsc#1194834)
  * Changes:
  - On MacOS, remove option to make LDAP connections from a file descriptor
    when built with the system libldap (which lacks the underlying function,
    ldap_init_fd)
  - Attribute values of the post read control are now bytes
    instead of ISO8859-1 decoded str
  - LDAPUrl now treats urlscheme as case-insensitive
  - Several OpenLDAP options are now supported:
  - OPT_X_TLS_REQUIRE_SAN
  - OPT_X_SASL_SSF_EXTERNAL
  - OPT_X_TLS_PEERCERT
  * Fixes:
  - The copy() method of cidict was added back. It was unintentionally
    removed in 3.3.0
  - Fixed getting/setting SASL options on big endian platforms
  - Unknown LDAP result code are now converted to LDAPexception,
    rather than raising a SystemError.
  * slapdtest:
  - Show stderr of slapd -Ttest
  - SlapdObject uses directory-based configuration of slapd
  - SlapdObject startup is now faster
* Tue Sep 14 2021 pgajdos@suse.com
- %%check: use %%pyunittest_arch rpm macro
* Mon Sep 28 2020 William Brown <william.brown@suse.com>
- update to upstream release 3.3.1:
  Highlights:
  * ``LDAPError`` now contains additional fields, such as ctrls, result, msgid
  * ``passwd_s`` can now extract the newly generated password
  * LDAP connections can now be made from a file descriptor
  This release is tested on Python 3.8, and the beta of Python 3.9.
  The following undocumented functions are deprecated and scheduled for removal:
- ``ldap.cidict.strlist_intersection``
- ``ldap.cidict.strlist_minus``
- ``ldap.cidict.strlist_union``
  Modules/
  * Ensure ReconnectLDAPObject is not left in an inconsistent state after
  a reconnection timeout
  * Syncrepl now correctly parses SyncInfoMessage when the message is a syncIdSet
  * Release GIL around global get/set option call
  * Do not leak serverctrls in result functions
  * Don't overallocate memory in attrs_from_List()
  * Fix thread support check for Python 3
  * With OpenLDAP 2.4.48, use the new header openldap.h
  Lib/
  * Fix some edge cases regarding quoting in the schema tokenizer
  * Fix escaping a single space in ldap.escape_dn_chars
  * Fix string formatting in ldap.compare_ext_s
  * Prefer iterating dict instead of calling dict.keys()
  Doc/
  * Clarify the relationship between initialize() and LDAPObject()
  * Improve documentation of TLS options
  * Update FAQ to include Samba AD-DC error message
  "Operation unavailable without authentication"
  * Fix several incorrect examples and demos
  (but note that these are not yet tested)
  * Update Debian installation instructions for Debian Buster
  * Typo fixes in docs and docstrings
  Test/
  * Test and document error cases in ldap.compare_s
  * Test if reconnection is done after connection loss
  * Make test certificates valid for the far future
  * Use slapd -Tt instead of slaptest
  Infrastructure:
  * Mark the LICENCE file as a license for setuptools
  * Use "unittest discover" rather than "setup.py test" to run tests
* Mon Dec 10 2018 Tomáš Chvátal <tchvatal@suse.com>
- Reduce the runtime dependencies to match the actual needs
  * User can use either openldap or 389-ds or anything else
- Run the tests on the package
- Fix the fdupes call
* Fri Dec  7 2018 Tomáš Chvátal <tchvatal@suse.com>
- Add this package to SLE wrt fate#325747
- Do not add version dependency to devel requirement
* Tue Aug 14 2018 tchvatal@suse.com
- Require openldap2-client as some of the binaries are called
  on the runtime
* Tue Aug  7 2018 michael@stroeder.com
- update to upstream release 3.1.0:
  * Long-deprecated functions `ldap.open()` and `ldap.init()` are removed
  * `LDAPObject.compare_s()` and `compare_ext_s` return bool instead of 0 or 1
  * Tons of changes see CHANGES file
* Thu Jan 18 2018 fbergmann@suse.com
- update to upstream release 3.0.0b4:
  - Adds support for Python 3.4+
  - Adds support for `bytes_mode`
  - Idiotmatic python code changes
  - Adds testing for `pypy`
  - Fixes/enhances tests
- Remove python-ldap.keyring and python-ldap-%%{version}.tar.gz.asc:
  There is no signature provided for the new upstream tarball
* Mon Nov 20 2017 michael@stroeder.com
- update to upstream release 2.5.2
  Changes since 2.5.1:
  * code-cleaning in setup.py
  Modules/
  * PyBytes_ instead of PyString_ and added PyInt_FromLong compat macro
  * 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+
  Lib/
  * 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 it
  * method .decodeControlValue() of SSSResponseControl and VLVResponseControl
  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
  * more modules with PEP-8 compliance
  * ldap.ldapobject split into module-package
  Tests/
  * scripts do not directly call SlapdTestCase.setUpClass() anymore
  * added LDIF test with folded, base64-encoded attribute
  * added more tests for sub-module ldap.dn
  * added tests for ldap.syncrepl (thanks to Karl Kornel)
* Sun Nov 12 2017 michael@stroeder.com
- update to upstream release 2.5.1
- adjusted BuildRequires to match upstream prerequisites
  Changes since 2.4.45:
  Mandatory prerequisites:
- Python 2.7.x
- pyasn1 0.3.7+ and pyasn1_modules 0.1.5+
  Modules/
  * removed unused code schema.c
  Lib/
  * 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
  * Compability changes for pyasn1 0.3.x or newer
  (thanks to Ilya Etingof and Christian Heimes)
  * 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
  Tests/
  * added explicit reconnect tests for ReconnectLDAPObject
* Mon Oct  9 2017 michael@stroeder.com
- update to upstream release 2.4.45
  * fixed error handling
* Thu Sep  7 2017 michael@stroeder.com
- update to upstream release 2.4.44
  * GIL fix
* Thu Sep  7 2017 michael@stroeder.com
- update to upstream release 2.4.43
  * SASL bind fix
* Mon Sep  4 2017 michael@stroeder.com
- update to upstream release 2.4.42
  * small enhancements to test suite
* Wed Jul 12 2017 michael@stroeder.com
- update to upstream release 2.4.41 (small LDIF parser enhancement)
* Tue Jun 27 2017 michael@stroeder.com
- update to upstream release 2.4.40 (small memleak fix)
* Wed May 31 2017 michael@stroeder.com
- update to upstream release 2.4.39
* Thu May 18 2017 jmatejek@suse.com
- provide python2-ldap to support singlespec packages
* Fri Apr 28 2017 michael@stroeder.com
- update to upstream release 2.4.38
* Thu Apr 27 2017 michael@stroeder.com
- update to upstream release 2.4.37
* Wed Feb  8 2017 michael@stroeder.com
- Update to upstream release 2.4.30
  (with compability fix for pyasn1 0.2.x)
* Wed Jan 25 2017 michael@stroeder.com
- Update to upstream release 2.4.29
- added python-ldap.keyring to validate upstream source signatures
* Fri Nov 18 2016 michael@stroeder.com
- Update to upstream release 2.4.28
* Mon Aug  1 2016 michael@stroeder.com
- Update to upstream release 2.4.27
* Sun Jul 24 2016 michael@stroeder.com
- Update to upstream release 2.4.26
- updated pypi source URL
* Tue Feb 23 2016 michael@stroeder.com
- Use HTTPS links
* Wed Feb 10 2016 michael@stroeder.com
- Aligned desciption with project's web site
- Removed obsolete stuff:
  * build flag -DLDAP_DEPRECATED
  * outdated URL in package description
  * removing of CVS files
* Mon Jan 18 2016 michael@stroeder.com
- Update to upstream release 2.4.25
* Sat Oct 24 2015 michael@stroeder.com
- Update to upstream release 2.4.22
* Fri Sep 25 2015 michael@stroeder.com
- Update to upstream release 2.4.21
* Tue Jul  7 2015 michael@stroeder.com
- Update to upstream release 2.4.20
* Sun Jan 11 2015 michael@stroeder.com
- Update to upstream release 2.4.19
* Thu Oct  9 2014 michael@stroeder.com
- Update to upstream release 2.4.18
* Sat Sep 27 2014 michael@stroeder.com
- Update to upstream release 2.4.17
* Wed Sep 10 2014 michael@stroeder.com
- Update to upstream release 2.4.16
* Fri Mar 28 2014 speilicke@suse.com
- Set license ot Python-2.0 (according to legal)
* Mon Mar 24 2014 michael@stroeder.com
- Update to upstream release 2.4.15
  * Various fixes
  * Support for subordinates search scope
  * Support for select schema description extension
* Thu Jun 27 2013 michael@stroeder.com
- Update to upstream release 2.4.13
  * mainly important fixes for ReconnectLDAPObject
* Tue Jun 18 2013 jengelh@inai.de
- Explicitly specify openssl build dependency
* Thu Jun  7 2012 michael@stroeder.com
- update to 2.4.10
* Fri Mar 23 2012 michael@stroeder.com
- Added dependencies to python-pyasn1 and python-pyasn1-modules
* Fri Mar 16 2012 saschpe@suse.de
- Remove service
- Spec file cleanup:
  * Remove outdated sections
  * Proper macro usage
* Tue Oct 11 2011 jmatejek@suse.com
- removed sasl.patch as it is no longer necessary
- update to 2.4.3
  * requires OpenLDAP 2.4.11 or higher
  * improved documentation
  * backwards-incompatible API for ldap.control
  * a couple new features, e.g. support for OPT_X_TLS_PACKAGE
  * improved LDAPv3 support
* Thu Mar  3 2011 saschpe@suse.de
- update to 2.3.13:
  * Correct #ifdef-statement for LDAP_OPT_X_TLS_CRLFILE in
    constants.c fixes build with older OpenLDAP libs
  * Support for LDAP_OPT_DEFBASE (see SF#3072016)
  * Several documentation improvements
* Thu Aug  6 2009 matejcik@suse.cz
- update to 2.3.9
  * support for handling ldap url extensions without explicit exvalue
  * common version number for all modules
* Wed May  6 2009 matejcik@suse.cz
- update to 2.3.8
  * supposedly supports gcc4.4
  * better handling of corner case errors
  * minor fixes
- fixed rpmlint warnings
* Fri Sep  5 2008 matejcik@suse.cz
- update to 2.3.5
  * minor fixes
- removed cvs-related files from the package
* Thu Apr  3 2008 matejcik@suse.cz
- update to 2.3.4
  * better RFC 4514 compatibility
  * bugfixes
- cleaned up spec file
- removed unnecessary source
- added %%fdupes
* Wed Aug  1 2007 jmatejek@suse.cz
- update to 2.3.1
  * openLDAP 2.3+ is now required
  * upstream fixed python2.5 problems
  * support for Cancel operation
  * DN related functions moved to submodule ldap.dn
  * numerous bugfixes
* Mon Jan 22 2007 jmatejek@suse.cz
- removed dependency on openldap, added dependency on openldap-client
* Thu Nov 16 2006 jmatejek@suse.cz
- fixed a bug that would in some cases lead to invalid free() call
  while deallocating the object
* Mon Oct 23 2006 jmatejek@suse.cz
- update to 2.2.0
  - OpenLDAP 2.2+ is now required
  - code is cleaned up, many memory leaks fixed
  - improved ldap.async - fixed Dict, added IndexedDict
  - lots of bugs fixed
- fixed some 64bit problems with PEP353 conversion
* Tue Feb 28 2006 jmatejek@suse.cz
- updated to reflect python changes due to #149809
* Wed Jan 25 2006 mls@suse.de
- converted neededforbuild to BuildRequires
* Thu Jan  5 2006 jmatejek@suse.cz
- update to 2.0.11
- using setup.cfg source designed for SuSE (minor adjustments
  against Build/setup.cfg.suse-linux
* Tue Oct 25 2005 rhafer@suse.de
- added LDAP_DEPRECATED to CFLAGS to build correctly with·
  OpenLDAP 2.3
* Thu Oct  6 2005 matejcik@suse.cz
- update to 2.0.10
* Wed Jun 29 2005 ltinkl@suse.cz
- update to 2.0.8
* Tue May 10 2005 mcihar@suse.cz
- update to 2.0.7
* Mon Dec  6 2004 mcihar@suse.cz
- update to 2.0.6
* Tue Nov 23 2004 mcihar@suse.cz
- update to 2.0.5
* Fri Jul 30 2004 mcihar@suse.cz
- update to 2.0.2
* Wed Jun 30 2004 mcihar@suse.cz
- update to 2.0.1
* Wed May 19 2004 mcihar@suse.cz
- update to 2.0.0 final
* Fri Jan 30 2004 mcihar@suse.cz
- include licence
* Fri Jan 23 2004 mcihar@suse.cz
- updated to 2.0.0pre19
* Tue Dec 16 2003 mcihar@suse.cz
- updated to 2.0.0pre18
* Thu Nov 13 2003 mcihar@suse.cz
- updated to 2.0.0pre15
* Wed Oct 15 2003 mcihar@suse.cz
- don't build as root
- updated to 2.0.0pre14:
    ldap.ldapobject:
  * Added class attribute LDAPObject.network_timeout mapped to
    set_option(ldap.OPT_NETWORK_TIMEOUT,..)
  * LDAPObject.search_ext(): Pass arguments serverctrls,clientctrls
    to _ldap.search_ext()
    ldap.sasl:
  * Added class ldap.sasl.external for handling
    the SASL mechanism EXTERNAL
  * Dictionary ldap.sasl.saslmech_handler_class built during import
    for all the known SASL mechanisms derived from class definitions
    ldap.schema:
  * More graceful handling of KeyError in SubSchema.attribute_types()
  * New method SubSchema.get_inheritedattr() for retrieving inherited
    class attributes
  * New method SubSchema.get_inheritedobj() for retrieving a
    schema element instance including all inherited class attributes
* Mon Aug 11 2003 mcihar@suse.cz
- updated to 2.0.0pre13
* Mon Jun 16 2003 mcihar@suse.cz
- use record-rpm
* Tue May 27 2003 mcihar@suse.cz
- updated to 2.0.0pre12
* Tue May 13 2003 mcihar@suse.cz
- updated to 2.0.0pre11
- use distutils for build
* Mon May 12 2003 mcihar@suse.cz
- use versioned dependency on python
* Thu Jan 30 2003 ro@suse.de
- use sasl2
* Fri Jan 10 2003 mcihar@suse.cz
- updated to 2.0.0pre06
- build with more features
- add demo into docs
* Mon Aug 26 2002 rhafer@suse.de
- LDAP_FILT_MAXSIZ isn't defined in libldap anymore
* Wed Aug 14 2002 vinil@suse.cz
- new version: 2.0.0pre05
* Mon Jun  3 2002 stepan@suse.de
- use %%_lib instead of lib
* Wed Feb 27 2002 vinil@suse.cz
- version 2.0.0pre04 to work with openldap2 (bug #13948)
* Tue Sep  4 2001 rvasice@suse.cz
- fix Group tag to Development/Libraries/Python
* Thu Mar 15 2001 kukuk@suse.de
- Remove openldap from Requires
* Thu Mar 15 2001 ro@suse.de
- changed for openldap2
* Thu Mar 15 2001 ro@suse.de
- fixed neededforbuild for openldap
* Wed Nov 22 2000 mt@suse.de
- renamed from pyldapm to python-ldap
- updated to python-ldap-1.10alpha3
- adopted spec file for python2.0
* Mon Nov  6 2000 ro@suse.de
- fixed neededforbuild (added ldaplib)
* Sun Oct 29 2000 kukuk@suse.de
- fix need for build
* Mon Sep 13 1999 bs@suse.de
- ran old prepare_spec on spec file to switch to new prepare_spec.
* Wed May 26 1999 mt@suse.de
- new version 1.5