diff options
author | Alexander Bokovoy <abokovoy@redhat.com> | 2012-09-25 17:23:33 +0300 |
---|---|---|
committer | Martin Kosek <mkosek@redhat.com> | 2012-10-04 17:00:56 +0200 |
commit | 459c83fb75fd6077ab3e5981f6e04f13ad3379c8 (patch) | |
tree | 8f772683ec378110bddd5961eb47b61b05dc83ef /ipaserver | |
parent | a72064c3778f20da04fb664459782b4d4ecba473 (diff) | |
download | freeipa-459c83fb75fd6077ab3e5981f6e04f13ad3379c8.tar.gz freeipa-459c83fb75fd6077ab3e5981f6e04f13ad3379c8.tar.xz freeipa-459c83fb75fd6077ab3e5981f6e04f13ad3379c8.zip |
Support python-ldap 2.3 way of making LDAP control
This strange patch is to accomodate both python-ldap 2.3 and later versions.
There was refactoring in python-ldap support for LDAP controls that split
base class into two different, changing properties and method signatures.
Luckily, we don't use any values passed to encodeControlValue.
Diffstat (limited to 'ipaserver')
-rw-r--r-- | ipaserver/dcerpc.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/ipaserver/dcerpc.py b/ipaserver/dcerpc.py index cbe28753d..e7b41e6d8 100644 --- a/ipaserver/dcerpc.py +++ b/ipaserver/dcerpc.py @@ -40,8 +40,12 @@ from samba.ndr import ndr_pack from samba import net import samba import random -import ldap as _ldap from Crypto.Cipher import ARC4 +try: + from ldap.controls import RequestControl as LDAPControl #pylint: disable=F0401 +except ImportError: + from ldap.controls import LDAPControl as LDAPControl #pylint: disable=F0401 +import ldap as _ldap __doc__ = _(""" Classes to manage trust joins using DCE-RPC calls @@ -81,13 +85,17 @@ def assess_dcerpc_exception(num=None,message=None): message "%(message)s" (both may be "None")''') % dict(num=num, message=message) return errors.RemoteRetrieveError(reason=reason) -class ExtendedDNControl(_ldap.controls.RequestControl): +class ExtendedDNControl(LDAPControl): + # This class attempts to implement LDAP control that would work + # with both python-ldap 2.4.x and 2.3.x, thus there is mix of properties + # from both worlds and encodeControlValue has default parameter def __init__(self): + self.controlValue = 1 self.controlType = "1.2.840.113556.1.4.529" self.criticality = False self.integerValue = 1 - def encodeControlValue(self): + def encodeControlValue(self, value=None): return '0\x03\x02\x01\x01' class DomainValidator(object): |