Accommodate changed pyasn1 behaviour
pyasn1 versions prior to 0.2.3 indicate absent value by returning `None` object, later pyasn1 versions use the `noValue` sentinel object which is the basis for the `.hasValue()` method call (and .isValue property). This fix makes the code compatible with both `None` sentinel and the `.hasValue()` test call thus making it compatible with all reasonable pyasn1 versions in circulation. Fixes RHBZ#1489184 Original patch by Ilya Etingof <etingof@gmail.com> Signed-off-by: Christian Heimes <cheimes@redhat.com>
This commit is contained in:
parent
65963d2934
commit
8b78abd6ef
168
accommodate-changed-pyasn1-behaviour.patch
Normal file
168
accommodate-changed-pyasn1-behaviour.patch
Normal file
@ -0,0 +1,168 @@
|
||||
From a89bd2361a3971d0dc11908707509bbf5e1fd1ac Mon Sep 17 00:00:00 2001
|
||||
From: Ilya Etingof <etingof@gmail.com>
|
||||
Date: Wed, 11 Oct 2017 20:27:41 +0200
|
||||
Subject: [PATCH] accommodate changed pyasn1 behaviour
|
||||
|
||||
pyasn1 versions prior to 0.2.3 indicate absent value by
|
||||
returning `None` object, later pyasn1 versions use
|
||||
the `noValue` sentinel object which is the basis for
|
||||
the `.hasValue()` method call (and .isValue property).
|
||||
|
||||
This fix makes the code compatible with both `None` sentinel
|
||||
and the `.hasValue()` test thus making it compatible with all
|
||||
reasonable pyasn1 versions in circulation.
|
||||
---
|
||||
Index: Lib/ldap/syncrepl.py
|
||||
===================================================================
|
||||
RCS file: /cvsroot/python-ldap/python-ldap/Lib/ldap/syncrepl.py,v
|
||||
retrieving revision 1.9
|
||||
diff -u -r1.9 syncrepl.py
|
||||
--- Lib/ldap/syncrepl.py 9 Oct 2017 15:09:28 -0000 1.9
|
||||
+++ Lib/ldap/syncrepl.py 7 Nov 2017 13:40:32 -0000
|
||||
@@ -131,11 +131,13 @@
|
||||
d = decoder.decode(encodedControlValue, asn1Spec = syncStateValue())
|
||||
state = d[0].getComponentByName('state')
|
||||
uuid = UUID(bytes=d[0].getComponentByName('entryUUID'))
|
||||
- self.cookie = d[0].getComponentByName('cookie')
|
||||
+ cookie = d[0].getComponentByName('cookie')
|
||||
+ if cookie is None or not cookie.hasValue():
|
||||
+ self.cookie = None
|
||||
+ else:
|
||||
+ self.cookie = str(self.cookie)
|
||||
self.state = self.__class__.opnames[int(state)]
|
||||
self.entryUUID = str(uuid)
|
||||
- if self.cookie is not None:
|
||||
- self.cookie = str(self.cookie)
|
||||
|
||||
KNOWN_RESPONSE_CONTROLS[SyncStateControl.controlType] = SyncStateControl
|
||||
|
||||
@@ -165,10 +167,10 @@
|
||||
|
||||
def decodeControlValue(self, encodedControlValue):
|
||||
d = decoder.decode(encodedControlValue, asn1Spec = syncDoneValue())
|
||||
- self.cookie = d[0].getComponentByName('cookie')
|
||||
+ cookie = d[0].getComponentByName('cookie')
|
||||
+ if cookie is not None and cookie.hasValue():
|
||||
+ self.cookie = str(cookie)
|
||||
self.refreshDeletes = d[0].getComponentByName('refreshDeletes')
|
||||
- if self.cookie is not None:
|
||||
- self.cookie = str(self.cookie)
|
||||
if self.refreshDeletes is not None:
|
||||
self.refreshDeletes = bool(self.refreshDeletes)
|
||||
|
||||
@@ -263,7 +265,7 @@
|
||||
for attr in [ 'newcookie', 'refreshDelete', 'refreshPresent', 'syncIdSet']:
|
||||
comp = d[0].getComponentByName(attr)
|
||||
|
||||
- if comp is not None:
|
||||
+ if comp is not None and comp.hasValue():
|
||||
|
||||
if attr == 'newcookie':
|
||||
self.newcookie = str(comp)
|
||||
@@ -272,7 +274,7 @@
|
||||
val = dict()
|
||||
|
||||
cookie = comp.getComponentByName('cookie')
|
||||
- if cookie is not None:
|
||||
+ if cookie is not None and cookie.hasValue():
|
||||
val['cookie'] = str(cookie)
|
||||
|
||||
if attr.startswith('refresh'):
|
||||
Index: Lib/ldap/controls/ppolicy.py
|
||||
===================================================================
|
||||
RCS file: /cvsroot/python-ldap/python-ldap/Lib/ldap/controls/ppolicy.py,v
|
||||
retrieving revision 1.6
|
||||
diff -u -r1.6 ppolicy.py
|
||||
--- Lib/ldap/controls/ppolicy.py 9 Oct 2017 15:09:28 -0000 1.6
|
||||
+++ Lib/ldap/controls/ppolicy.py 7 Nov 2017 13:40:32 -0000
|
||||
@@ -71,7 +71,7 @@
|
||||
def decodeControlValue(self,encodedControlValue):
|
||||
ppolicyValue,_ = decoder.decode(encodedControlValue,asn1Spec=PasswordPolicyResponseValue())
|
||||
warning = ppolicyValue.getComponentByName('warning')
|
||||
- if warning is None:
|
||||
+ if warning is None or not warning.hasValue():
|
||||
self.timeBeforeExpiration,self.graceAuthNsRemaining = None,None
|
||||
else:
|
||||
timeBeforeExpiration = warning.getComponentByName('timeBeforeExpiration')
|
||||
@@ -85,7 +85,7 @@
|
||||
else:
|
||||
self.graceAuthNsRemaining = None
|
||||
error = ppolicyValue.getComponentByName('error')
|
||||
- if error is None:
|
||||
+ if error is None or not error.hasValue():
|
||||
self.error = None
|
||||
else:
|
||||
self.error = int(error)
|
||||
Index: Lib/ldap/controls/psearch.py
|
||||
===================================================================
|
||||
RCS file: /cvsroot/python-ldap/python-ldap/Lib/ldap/controls/psearch.py,v
|
||||
retrieving revision 1.6
|
||||
diff -u -r1.6 psearch.py
|
||||
--- Lib/ldap/controls/psearch.py 9 Oct 2017 15:09:28 -0000 1.6
|
||||
+++ Lib/ldap/controls/psearch.py 7 Nov 2017 13:40:32 -0000
|
||||
@@ -115,18 +115,16 @@
|
||||
def decodeControlValue(self,encodedControlValue):
|
||||
ecncValue,_ = decoder.decode(encodedControlValue,asn1Spec=EntryChangeNotificationValue())
|
||||
self.changeType = int(ecncValue.getComponentByName('changeType'))
|
||||
- if len(ecncValue)==3:
|
||||
- self.previousDN = str(ecncValue.getComponentByName('previousDN'))
|
||||
- self.changeNumber = int(ecncValue.getComponentByName('changeNumber'))
|
||||
- elif len(ecncValue)==2:
|
||||
- if self.changeType==8:
|
||||
- self.previousDN = str(ecncValue.getComponentByName('previousDN'))
|
||||
- self.changeNumber = None
|
||||
- else:
|
||||
- self.previousDN = None
|
||||
- self.changeNumber = int(ecncValue.getComponentByName('changeNumber'))
|
||||
+ previousDN = ecncValue.getComponentByName('previousDN')
|
||||
+ if previousDN is None or not previousDN.hasValue():
|
||||
+ self.previousDN = None
|
||||
else:
|
||||
- self.previousDN,self.changeNumber = None,None
|
||||
+ self.previousDN = str(previousDN)
|
||||
+ changeNumber = ecncValue.getComponentByName('changeNumber')
|
||||
+ if changeNumber is None or not changeNumber.hasValue():
|
||||
+ self.changeNumber = None
|
||||
+ else:
|
||||
+ self.changeNumber = int(changeNumber)
|
||||
return (self.changeType,self.previousDN,self.changeNumber)
|
||||
|
||||
KNOWN_RESPONSE_CONTROLS[EntryChangeNotificationControl.controlType] = EntryChangeNotificationControl
|
||||
Index: Lib/ldap/controls/sss.py
|
||||
===================================================================
|
||||
RCS file: /cvsroot/python-ldap/python-ldap/Lib/ldap/controls/sss.py,v
|
||||
retrieving revision 1.5
|
||||
diff -u -r1.5 sss.py
|
||||
--- Lib/ldap/controls/sss.py 9 Oct 2017 15:09:28 -0000 1.5
|
||||
+++ Lib/ldap/controls/sss.py 7 Nov 2017 13:40:32 -0000
|
||||
@@ -121,7 +121,9 @@
|
||||
assert not rest, 'all data could not be decoded'
|
||||
self.result = int(p.getComponentByName('sortResult'))
|
||||
self.result_code = p.getComponentByName('sortResult').prettyOut(self.result)
|
||||
- self.attribute_type_error = p.getComponentByName('attributeType')
|
||||
+ attribute_type_error = p.getComponentByName('attributeType')
|
||||
+ if attribute_type_error is not None and attribute_type_error.hasValue():
|
||||
+ self.attribute_type_error = attribute_type_error
|
||||
|
||||
|
||||
KNOWN_RESPONSE_CONTROLS[SSSRequestControl.controlType] = SSSRequestControl
|
||||
Index: Lib/ldap/controls/vlv.py
|
||||
===================================================================
|
||||
RCS file: /cvsroot/python-ldap/python-ldap/Lib/ldap/controls/vlv.py,v
|
||||
retrieving revision 1.5
|
||||
diff -u -r1.5 vlv.py
|
||||
--- Lib/ldap/controls/vlv.py 9 Oct 2017 15:09:28 -0000 1.5
|
||||
+++ Lib/ldap/controls/vlv.py 7 Nov 2017 13:40:32 -0000
|
||||
@@ -130,8 +130,9 @@
|
||||
self.result = int(p.getComponentByName('virtualListViewResult'))
|
||||
self.result_code = p.getComponentByName('virtualListViewResult') \
|
||||
.prettyOut(self.result)
|
||||
- self.context_id = p.getComponentByName('contextID')
|
||||
- if self.context_id:
|
||||
- self.context_id = str(self.context_id)
|
||||
+ context_id = p.getComponentByName('contextID')
|
||||
+ if context_id is not None and context_id.hasValue():
|
||||
+ self.context_id = str(context_id)
|
||||
+
|
||||
|
||||
KNOWN_RESPONSE_CONTROLS[VLVResponseControl.controlType] = VLVResponseControl
|
@ -2,7 +2,7 @@
|
||||
|
||||
Name: python-ldap
|
||||
Version: 2.4.25
|
||||
Release: 7%{?dist}
|
||||
Release: 8%{?dist}
|
||||
Epoch: 0
|
||||
License: Python
|
||||
Group: System Environment/Libraries
|
||||
@ -13,6 +13,9 @@ Source0: http://pypi.python.org/packages/source/p/python-ldap/python-ldap-%{vers
|
||||
### Patches ###
|
||||
# Fedora specific patch
|
||||
Patch0: python-ldap-2.4.16-dirs.patch
|
||||
# Fix for pyasn1 >= 0.3
|
||||
# https://github.com/pyldap/pyldap/pull/126
|
||||
Patch1: accommodate-changed-pyasn1-behaviour.patch
|
||||
|
||||
### Dependencies ###
|
||||
# LDAP controls, extop, syncrepl require pyasn1
|
||||
@ -48,6 +51,7 @@ Requires: python-pyasn1, python-pyasn1-modules
|
||||
%prep
|
||||
%setup -q -n python-ldap-%{version}
|
||||
%patch0 -p1 -b .dirs
|
||||
%patch1 -p0 -b accommodate-changed-pyasn1-behaviour.patch
|
||||
|
||||
# clean up cvs hidden files
|
||||
rm -rf Demo/Lib/ldap/.cvsignore Demo/.cvsignore Demo/Lib/ldif/.cvsignore Demo/Lib/ldap/async/.cvsignore \
|
||||
@ -74,6 +78,9 @@ sed -i 's|#! python|#!/usr/bin/python|g' Demo/simplebrowse.py
|
||||
%{python_sitearch}/python_ldap-%{version}-*.egg-info
|
||||
|
||||
%changelog
|
||||
* Tue Nov 07 2017 Christian Heimes <cheimes@redhat.com> - 0:2.4.25-8
|
||||
- Apply fix for pyasn1 >= 0.3
|
||||
|
||||
* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 0:2.4.25-7
|
||||
- Python 2 binary package renamed to python2-ldap
|
||||
See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3
|
||||
|
Loading…
Reference in New Issue
Block a user