summaryrefslogtreecommitdiff
path: root/ldap3/extend
diff options
context:
space:
mode:
authorAndrej Shadura <andrew.shadura@collabora.co.uk>2020-11-30 12:16:10 +0100
committerAndrej Shadura <andrew.shadura@collabora.co.uk>2020-11-30 12:16:10 +0100
commit96fb2df0e33b34a4dbb75577de8589a8611759c4 (patch)
tree7405641226ff632199336936c602f402b0427de4 /ldap3/extend
parentf6fd16282811d1a686b5ae611351b0f8eed3c008 (diff)
New upstream version 2.8.1
Diffstat (limited to 'ldap3/extend')
-rw-r--r--ldap3/extend/microsoft/addMembersToGroups.py15
-rw-r--r--ldap3/extend/microsoft/dirSync.py7
-rw-r--r--ldap3/extend/microsoft/modifyPassword.py5
-rw-r--r--ldap3/extend/microsoft/removeMembersFromGroups.py11
-rw-r--r--ldap3/extend/microsoft/unlockAccount.py9
-rw-r--r--ldap3/extend/novell/addMembersToGroups.py22
-rw-r--r--ldap3/extend/novell/checkGroupsMemberships.py12
-rw-r--r--ldap3/extend/novell/removeMembersFromGroups.py22
-rw-r--r--ldap3/extend/operation.py31
-rw-r--r--ldap3/extend/standard/PagedSearch.py9
10 files changed, 104 insertions, 39 deletions
diff --git a/ldap3/extend/microsoft/addMembersToGroups.py b/ldap3/extend/microsoft/addMembersToGroups.py
index eaf6cfd..fb6528a 100644
--- a/ldap3/extend/microsoft/addMembersToGroups.py
+++ b/ldap3/extend/microsoft/addMembersToGroups.py
@@ -57,13 +57,15 @@ def ad_add_members_to_groups(connection,
error = False
for group in groups_dn:
if fix: # checks for existance of group and for already assigned members
- result = connection.search(group, '(objectclass=*)', BASE, dereference_aliases=DEREF_NEVER,
- attributes=['member'])
-
+ result = connection.search(group, '(objectclass=*)', BASE, dereference_aliases=DEREF_NEVER, attributes=['member'])
if not connection.strategy.sync:
response, result = connection.get_response(result)
else:
- response, result = connection.response, connection.result
+ if connection.strategy.thread_safe:
+ _, result, response, _ = result
+ else:
+ response = connection.response
+ result = connection.result
if not result['description'] == 'success':
raise LDAPInvalidDnError(group + ' not found')
@@ -82,7 +84,10 @@ def ad_add_members_to_groups(connection,
if not connection.strategy.sync:
_, result = connection.get_response(result)
else:
- result = connection.result
+ if connection.strategy.thread_safe:
+ _, result, _, _ = result
+ else:
+ result = connection.result
if result['description'] != 'success':
error = True
result_error_params = ['result', 'description', 'dn', 'message']
diff --git a/ldap3/extend/microsoft/dirSync.py b/ldap3/extend/microsoft/dirSync.py
index db403a1..e5dd8ae 100644
--- a/ldap3/extend/microsoft/dirSync.py
+++ b/ldap3/extend/microsoft/dirSync.py
@@ -77,8 +77,11 @@ class DirSync(object):
if not self.connection.strategy.sync:
response, result = self.connection.get_response(result)
else:
- response = self.connection.response
- result = self.connection.result
+ if self.connection.strategy.thread_safe:
+ _, result, response, _ = result
+ else:
+ response = self.connection.response
+ result = self.connection.result
if result['description'] == 'success' and 'controls' in result and '1.2.840.113556.1.4.841' in result['controls']:
self.more_results = result['controls']['1.2.840.113556.1.4.841']['value']['more_results']
diff --git a/ldap3/extend/microsoft/modifyPassword.py b/ldap3/extend/microsoft/modifyPassword.py
index 0bf1c06..e304caf 100644
--- a/ldap3/extend/microsoft/modifyPassword.py
+++ b/ldap3/extend/microsoft/modifyPassword.py
@@ -56,7 +56,10 @@ def ad_modify_password(connection, user_dn, new_password, old_password, controls
if not connection.strategy.sync:
_, result = connection.get_response(result)
else:
- result = connection.result
+ if connection.strategy.thread_safe:
+ _, result, _, _ = result
+ else:
+ result = connection.result
# change successful, returns True
if result['result'] == RESULT_SUCCESS:
diff --git a/ldap3/extend/microsoft/removeMembersFromGroups.py b/ldap3/extend/microsoft/removeMembersFromGroups.py
index 0998713..86b799a 100644
--- a/ldap3/extend/microsoft/removeMembersFromGroups.py
+++ b/ldap3/extend/microsoft/removeMembersFromGroups.py
@@ -62,7 +62,11 @@ def ad_remove_members_from_groups(connection,
if not connection.strategy.sync:
response, result = connection.get_response(result)
else:
- response, result = connection.response, connection.result
+ if connection.strategy.thread_safe:
+ _, result, response, _ = result
+ else:
+ response = connection.response
+ result = connection.result
if not result['description'] == 'success':
raise LDAPInvalidDnError(group + ' not found')
@@ -81,7 +85,10 @@ def ad_remove_members_from_groups(connection,
if not connection.strategy.sync:
_, result = connection.get_response(result)
else:
- result = connection.result
+ if connection.strategy.thread_safe:
+ _, result, _, _ = result
+ else:
+ result = connection.result
if result['description'] != 'success':
error = True
result_error_params = ['result', 'description', 'dn', 'message']
diff --git a/ldap3/extend/microsoft/unlockAccount.py b/ldap3/extend/microsoft/unlockAccount.py
index bc59b58..b1c65b8 100644
--- a/ldap3/extend/microsoft/unlockAccount.py
+++ b/ldap3/extend/microsoft/unlockAccount.py
@@ -33,14 +33,15 @@ from ...utils.dn import safe_dn
def ad_unlock_account(connection, user_dn, controls=None):
if connection.check_names:
user_dn = safe_dn(user_dn)
- result = connection.modify(user_dn,
- {'lockoutTime': [(MODIFY_REPLACE, ['0'])]},
- controls)
+ result = connection.modify(user_dn, {'lockoutTime': [(MODIFY_REPLACE, ['0'])]}, controls)
if not connection.strategy.sync:
_, result = connection.get_response(result)
else:
- result = connection.result
+ if connection.strategy.thread_safe:
+ _, result, _, _ = result
+ else:
+ result = connection.result
# change successful, returns True
if result['result'] == RESULT_SUCCESS:
diff --git a/ldap3/extend/novell/addMembersToGroups.py b/ldap3/extend/novell/addMembersToGroups.py
index d649dc8..b832b9a 100644
--- a/ldap3/extend/novell/addMembersToGroups.py
+++ b/ldap3/extend/novell/addMembersToGroups.py
@@ -74,7 +74,11 @@ def edir_add_members_to_groups(connection,
if not connection.strategy.sync:
response, result = connection.get_response(result)
else:
- response, result = connection.response, connection.result
+ if connection.strategy.thread_safe:
+ _, result, response, _ = result
+ else:
+ result = connection.result
+ response = connection.response
if not result['description'] == 'success':
raise LDAPInvalidDnError(member + ' not found')
@@ -98,7 +102,10 @@ def edir_add_members_to_groups(connection,
if not connection.strategy.sync:
_, result = connection.get_response(result)
else:
- result = connection.result
+ if connection.strategy.thread_safe:
+ _, result, _, _ = result
+ else:
+ result = connection.result
if result['description'] != 'success':
error = True
break
@@ -111,7 +118,11 @@ def edir_add_members_to_groups(connection,
if not connection.strategy.sync:
response, result = connection.get_response(result)
else:
- response, result = connection.response, connection.result
+ if connection.strategy.thread_safe:
+ _, result, response, _ = result
+ else:
+ result = connection.result
+ response = connection.response
if not result['description'] == 'success':
raise LDAPInvalidDnError(group + ' not found')
@@ -136,7 +147,10 @@ def edir_add_members_to_groups(connection,
if not connection.strategy.sync:
_, result = connection.get_response(result)
else:
- result = connection.result
+ if connection.strategy.thread_safe:
+ _, result, _, _ = result
+ else:
+ result = connection.result
if result['description'] != 'success':
error = True
break
diff --git a/ldap3/extend/novell/checkGroupsMemberships.py b/ldap3/extend/novell/checkGroupsMemberships.py
index c51dbf2..0f65b5d 100644
--- a/ldap3/extend/novell/checkGroupsMemberships.py
+++ b/ldap3/extend/novell/checkGroupsMemberships.py
@@ -55,7 +55,11 @@ def _check_members_have_memberships(connection,
if not connection.strategy.sync:
response, result = connection.get_response(result)
else:
- response, result = connection.response, connection.result
+ if connection.strategy.thread_safe:
+ _, result, response, _ = result
+ else:
+ result = connection.result
+ response = connection.response
if not result['description'] == 'success': # member not found in DIT
raise LDAPInvalidDnError(member + ' not found')
@@ -99,7 +103,11 @@ def _check_groups_contain_members(connection,
if not connection.strategy.sync:
response, result = connection.get_response(result)
else:
- response, result = connection.response, connection.result
+ if connection.strategy.thread_safe:
+ _, result, response, _ = result
+ else:
+ result = connection.result
+ response = connection.response
if not result['description'] == 'success':
raise LDAPInvalidDnError(group + ' not found')
diff --git a/ldap3/extend/novell/removeMembersFromGroups.py b/ldap3/extend/novell/removeMembersFromGroups.py
index c46c275..5736079 100644
--- a/ldap3/extend/novell/removeMembersFromGroups.py
+++ b/ldap3/extend/novell/removeMembersFromGroups.py
@@ -75,7 +75,11 @@ def edir_remove_members_from_groups(connection,
if not connection.strategy.sync:
response, result = connection.get_response(result)
else:
- response, result = connection.response, connection.result
+ if connection.strategy.thread_safe:
+ _, result, response, _ = result
+ else:
+ response = connection.response
+ result = connection.result
if not result['description'] == 'success':
raise LDAPInvalidDnError(member + ' not found')
@@ -100,7 +104,10 @@ def edir_remove_members_from_groups(connection,
if not connection.strategy.sync:
_, result = connection.get_response(result)
else:
- result = connection.result
+ if connection.strategy.thread_safe:
+ _, result, _, _ = result
+ else:
+ result = connection.result
if result['description'] != 'success':
error = True
break
@@ -113,7 +120,11 @@ def edir_remove_members_from_groups(connection,
if not connection.strategy.sync:
response, result = connection.get_response(result)
else:
- response, result = connection.response, connection.result
+ if connection.strategy.thread_safe:
+ _, result, response, _ = result
+ else:
+ response = connection.response
+ result = connection.result
if not result['description'] == 'success':
raise LDAPInvalidDnError(group + ' not found')
@@ -139,7 +150,10 @@ def edir_remove_members_from_groups(connection,
if not connection.strategy.sync:
_, result = connection.get_response(result)
else:
- result = connection.result
+ if connection.strategy.thread_safe:
+ _, result, _, _ = result
+ else:
+ result = connection.result
if result['description'] != 'success':
error = True
break
diff --git a/ldap3/extend/operation.py b/ldap3/extend/operation.py
index c1d478c..fcfdad4 100644
--- a/ldap3/extend/operation.py
+++ b/ldap3/extend/operation.py
@@ -52,10 +52,14 @@ class ExtendedOperation(object):
resp = self.connection.extended(self.request_name, self.request_value, self.controls)
if not self.connection.strategy.sync:
- _, self.result = self.connection.get_response(resp)
+ _, result = self.connection.get_response(resp)
else:
- self.result = self.connection.result
- self.decode_response()
+ if self.connection.strategy.thread_safe:
+ _, result, _, _ = resp
+ else:
+ result = self.connection.result
+ self.result = result
+ self.decode_response(result)
self.populate_result()
self.set_response()
return self.response_value
@@ -63,29 +67,32 @@ class ExtendedOperation(object):
def populate_result(self):
pass
- def decode_response(self):
- if not self.result:
+ def decode_response(self, response=None):
+ if not response:
+ response = self.result
+ if not response:
return None
- if self.result['result'] not in [RESULT_SUCCESS]:
+ if response['result'] not in [RESULT_SUCCESS]:
if self.connection.raise_exceptions:
- raise LDAPExtensionError('extended operation error: ' + self.result['description'] + ' - ' + self.result['message'])
+ raise LDAPExtensionError('extended operation error: ' + response['description'] + ' - ' + response['message'])
else:
return None
- if not self.response_name or self.result['responseName'] == self.response_name:
- if self.result['responseValue']:
+ if not self.response_name or response['responseName'] == self.response_name:
+ if response['responseValue']:
if self.asn1_spec is not None:
- decoded, unprocessed = decoder.decode(self.result['responseValue'], asn1Spec=self.asn1_spec)
+ decoded, unprocessed = decoder.decode(response['responseValue'], asn1Spec=self.asn1_spec)
if unprocessed:
raise LDAPExtensionError('error decoding extended response value')
self.decoded_response = decoded
else:
- self.decoded_response = self.result['responseValue']
+ self.decoded_response = response['responseValue']
else:
raise LDAPExtensionError('invalid response name received')
def set_response(self):
self.response_value = self.result[self.response_attribute] if self.result and self.response_attribute in self.result else None
- self.connection.response = self.response_value
+ if not self.connection.strategy.thread_safe:
+ self.connection.response = self.response_value
def config(self):
pass
diff --git a/ldap3/extend/standard/PagedSearch.py b/ldap3/extend/standard/PagedSearch.py
index f8bc7e6..a0f986e 100644
--- a/ldap3/extend/standard/PagedSearch.py
+++ b/ldap3/extend/standard/PagedSearch.py
@@ -67,11 +67,14 @@ def paged_search_generator(connection,
paged_criticality,
None if cookie is True else cookie)
- if not isinstance(result, bool):
+ if not connection.strategy.sync:
response, result = connection.get_response(result)
else:
- response = connection.response
- result = connection.result
+ if connection.strategy.thread_safe:
+ _, result, response, _ = result
+ else:
+ response = connection.response
+ result = connection.result
if result['referrals'] and original_auto_referrals: # if rererrals are returned start over the loop with a new connection to the referral
if not original_connection: