dev-python/pyldap: Backport patch for bytes/string conversion problem
authorJustin Lecher <jlec@gentoo.org>
Wed, 14 Oct 2015 14:05:34 +0000 (16:05 +0200)
committerJustin Lecher <jlec@gentoo.org>
Wed, 14 Oct 2015 14:05:34 +0000 (16:05 +0200)
Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=562854

Package-Manager: portage-2.2.23
Signed-off-by: Justin Lecher <jlec@gentoo.org>
dev-python/pyldap/files/pyldap-2.4.20-bytes_string-backport.patch [new file with mode: 0644]
dev-python/pyldap/metadata.xml
dev-python/pyldap/pyldap-2.4.20-r1.ebuild
dev-python/pyldap/pyldap-2.4.20-r2.ebuild [new file with mode: 0644]

diff --git a/dev-python/pyldap/files/pyldap-2.4.20-bytes_string-backport.patch b/dev-python/pyldap/files/pyldap-2.4.20-bytes_string-backport.patch
new file mode 100644 (file)
index 0000000..ff4519b
--- /dev/null
@@ -0,0 +1,49 @@
+From 6e9e1902f33bff8ea179dc32ce4d2aa71b3335de Mon Sep 17 00:00:00 2001
+From: Petr Viktorin <pviktori@redhat.com>
+Date: Fri, 2 Oct 2015 14:06:12 +0200
+Subject: [PATCH] Fix sasl string/bytes mismatch
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The SASL mechanism and response are always bytes; encode them if necessary.
+
+Based on patch by Michael Šimáček: https://github.com/pyldap/pyldap/pull/20
+---
+ Lib/ldap/sasl.py | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/Lib/ldap/sasl.py b/Lib/ldap/sasl.py
+index 1158671..de38393 100644
+--- a/Lib/ldap/sasl.py
++++ b/Lib/ldap/sasl.py
+@@ -46,6 +46,8 @@ def __init__(self,cb_value_dict,mech):
+         SASL callback id's. The mech argument is a string that specifies
+         the SASL mechaninsm to be uesd."""
+         self.cb_value_dict = cb_value_dict or {}
++        if not isinstance(mech, bytes):
++            mech = mech.encode('utf-8')
+         self.mech = mech
+ 
+     def callback(self,cb_id,challenge,prompt,defresult):
+@@ -62,7 +64,10 @@ def callback(self,cb_id,challenge,prompt,defresult):
+         cb_value_dictionary. Note that the current callback interface is not very
+         useful for writing generic sasl GUIs, which would need to know all
+         the questions to ask, before the answers are returned to the sasl
+-        lib (in contrast to one question at a time)."""
++        lib (in contrast to one question at a time).
++
++        Unicode strings are always converted to bytes.
++        """
+ 
+         # The following print command might be useful for debugging
+         # new sasl mechanisms. So it is left here
+@@ -72,6 +77,8 @@ def callback(self,cb_id,challenge,prompt,defresult):
+             _trace_file.write("*** id=%d, challenge=%s, prompt=%s, defresult=%s\n-> %s\n" % (
+                 cb_id, challenge, prompt, repr(defresult), repr(self.cb_value_dict.get(cb_result))
+               ))
++        if not isinstance(cb_result, bytes):
++            cb_result = cb_result.encode('utf-8')
+         return cb_result
+ 
+ 
index b491fc41d4f8373588a56e0dd6f13a4854053e6f..7a3d4a504cc9ac18223883042709cc6f2e6a1568 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding='UTF-8'?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
 <pkgmetadata>
        <herd>python</herd>
index 55a781d8331370ff45d39b2a69af75321106f118..1ea0d220e39abcd2b0d988c2a1d48d2ba8dc8e2a 100644 (file)
@@ -31,6 +31,8 @@ DEPEND="${RDEPEND}
        doc? ( dev-python/sphinx[${PYTHON_USEDEP}] )"
 RDEPEND+=" !dev-python/python-ldap"
 
+PATCHES=( "${FILESDIR}"/${P}-bytes_string-backport.patch )
+
 python_prepare_all() {
        sed -e "s:^library_dirs =.*:library_dirs = /usr/$(get_libdir) /usr/$(get_libdir)/sasl2:" \
                -e "s:^include_dirs =.*:include_dirs = ${EPREFIX}/usr/include ${EPREFIX}/usr/include/sasl:" \
diff --git a/dev-python/pyldap/pyldap-2.4.20-r2.ebuild b/dev-python/pyldap/pyldap-2.4.20-r2.ebuild
new file mode 100644 (file)
index 0000000..1ea0d22
--- /dev/null
@@ -0,0 +1,77 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+PYTHON_COMPAT=( python2_7 python3_{3,4} pypy )
+
+inherit distutils-r1 multilib
+
+DESCRIPTION="Various LDAP-related Python modules"
+HOMEPAGE="https://pypi.python.org/pypi/pyldap https://github.com/pyldap/pyldap/"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="PSF-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~x86-solaris"
+IUSE="doc examples sasl ssl"
+
+# If you need support for openldap-2.3.x, please use python-ldap-2.3.9.
+# python team: Please do not remove python-ldap-2.3.9 from the tree.
+# OpenSSL is an optional runtime dep.
+# setup.py sets setuptools and misses pyasn1 and pyasn1-modules in install_requires
+RDEPEND="
+       >net-nds/openldap-2.4.11
+       dev-python/pyasn1[${PYTHON_USEDEP}]
+       dev-python/pyasn1-modules[${PYTHON_USEDEP}]
+       sasl? ( >=dev-libs/cyrus-sasl-2.1 )"
+DEPEND="${RDEPEND}
+       dev-python/setuptools[${PYTHON_USEDEP}]
+       doc? ( dev-python/sphinx[${PYTHON_USEDEP}] )"
+RDEPEND+=" !dev-python/python-ldap"
+
+PATCHES=( "${FILESDIR}"/${P}-bytes_string-backport.patch )
+
+python_prepare_all() {
+       sed -e "s:^library_dirs =.*:library_dirs = /usr/$(get_libdir) /usr/$(get_libdir)/sasl2:" \
+               -e "s:^include_dirs =.*:include_dirs = ${EPREFIX}/usr/include ${EPREFIX}/usr/include/sasl:" \
+               -i setup.cfg || die "error fixing setup.cfg"
+
+       local mylibs="ldap"
+       if use sasl; then
+               use ssl && mylibs="ldap_r"
+               mylibs="${mylibs} sasl2"
+       else
+               sed -e 's/HAVE_SASL//g' -i setup.cfg || die
+       fi
+       use ssl && mylibs="${mylibs} ssl crypto"
+       use elibc_glibc && mylibs="${mylibs} resolv"
+
+       sed -e "s:^libs = .*:libs = lber ${mylibs}:" \
+               -i setup.cfg || die "error setting up libs in setup.cfg"
+
+       # set test expected to fail to expectedFailure
+       sed -e "s:^    def test_bad_urls:    @unittest.expectedFailure\n    def test_bad_urls:" \
+               -i Tests/t_ldapurl.py || die
+
+       distutils-r1_python_prepare_all
+}
+
+python_compile_all() {
+       use doc && emake -C Doc html
+}
+
+python_test() {
+       # XXX: the tests supposedly can start local slapd
+       # but it requires some manual config, it seems.
+
+       "${PYTHON}" Tests/t_ldapurl.py || die "Tests fail with ${EPYTHON}"
+}
+
+python_install_all() {
+       use examples && local EXAMPLES=( Demo/. )
+       use doc && local HTML_DOCS=( Doc/.build/html/. )
+
+       distutils-r1_python_install_all
+}