dev-python/pyldap: Backport patch for bytes/string conversion problem

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>
This commit is contained in:
Justin Lecher
2015-10-14 16:05:34 +02:00
parent d41ec6c1d4
commit 1009299d11
4 changed files with 129 additions and 1 deletions

View File

@@ -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

View 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>

View 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:" \

View File

@@ -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
}