summaryrefslogtreecommitdiffstats
path: root/ipaserver/dcerpc.py
diff options
context:
space:
mode:
authorAlexander Bokovoy <abokovoy@redhat.com>2012-09-25 17:23:33 +0300
committerMartin Kosek <mkosek@redhat.com>2012-10-04 17:00:56 +0200
commit459c83fb75fd6077ab3e5981f6e04f13ad3379c8 (patch)
tree8f772683ec378110bddd5961eb47b61b05dc83ef /ipaserver/dcerpc.py
parenta72064c3778f20da04fb664459782b4d4ecba473 (diff)
downloadfreeipa-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/dcerpc.py')
-rw-r--r--ipaserver/dcerpc.py14
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):