From 96fb2df0e33b34a4dbb75577de8589a8611759c4 Mon Sep 17 00:00:00 2001 From: Andrej Shadura Date: Mon, 30 Nov 2020 12:16:10 +0100 Subject: New upstream version 2.8.1 --- ldap3/extend/microsoft/addMembersToGroups.py | 15 +++++++---- ldap3/extend/microsoft/dirSync.py | 7 +++-- ldap3/extend/microsoft/modifyPassword.py | 5 +++- ldap3/extend/microsoft/removeMembersFromGroups.py | 11 ++++++-- ldap3/extend/microsoft/unlockAccount.py | 9 ++++--- ldap3/extend/novell/addMembersToGroups.py | 22 +++++++++++++--- ldap3/extend/novell/checkGroupsMemberships.py | 12 +++++++-- ldap3/extend/novell/removeMembersFromGroups.py | 22 +++++++++++++--- ldap3/extend/operation.py | 31 ++++++++++++++--------- ldap3/extend/standard/PagedSearch.py | 9 ++++--- 10 files changed, 104 insertions(+), 39 deletions(-) (limited to 'ldap3/extend') 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: -- cgit v1.2.3