From 0f0c0790d0c7162dcca806cbf12b4856ec3835be Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Mon, 11 Mar 2019 20:47:17 +0100 Subject: [PATCH 3/5] ldap: only wrap LDAPObject.result4 (#31273) result4() is the only function in python-ldap really handling results from LDAP requests, all other methods calls it; if we encode attributes from other function we duplicate work. --- src/authentic2/backends/ldap_backend.py | 64 +++++++++++-------------- 1 file changed, 28 insertions(+), 36 deletions(-) diff --git a/src/authentic2/backends/ldap_backend.py b/src/authentic2/backends/ldap_backend.py index 7b0899d8..11131358 100644 --- a/src/authentic2/backends/ldap_backend.py +++ b/src/authentic2/backends/ldap_backend.py @@ -90,13 +90,6 @@ if PYTHON_LDAP3 is True: attrs = {attribute: filter_non_unicode_values(attrs[attribute]) for attribute in attrs} yield dn, attrs - def search_s(self, base, scope, filterstr='(objectclass=*)', attrlist=None, attrsonly=0): - return self._convert_results_to_unicode( - NativeLDAPObject.search_s(self, base, scope, - filterstr=filterstr, - attrlist=attrlist, - attrsonly=attrsonly)) - def modify_s(self, dn, modlist): new_modlist = [] for mod_op, mod_typ, mod_vals in modlist: @@ -114,15 +107,20 @@ if PYTHON_LDAP3 is True: new_modlist.append((mod_op, mod_typ, mod_vals)) return NativeLDAPObject.modify_s(self, dn, new_modlist) - def result3(self, msgid=ldap.RES_ANY, all=1, timeout=None, resp_ctrl_classes=None): - result_type, data, msgid, serverctrls = NativeLDAPObject.result3(self, - msgid=msgid, - all=all, - timeout=timeout, - resp_ctrl_classes=resp_ctrl_classes) - if data: - data = self._convert_results_to_unicode(data) - return result_type, data, msgid, serverctrls + def result4(self, msgid=ldap.RES_ANY, all=1, timeout=None, add_ctrls=0, + add_intermediates=0, add_extop=0, resp_ctrl_classes=None): + resp_type, resp_data, resp_msgid, decoded_resp_ctrls, resp_name, resp_value = NativeLDAPObject.result4( + self, + msgid=msgid, + all=all, + timeout=timeout, + add_ctrls=add_ctrls, + add_intermediates=add_intermediates, + add_extop=add_extop, + resp_ctrl_classes=resp_ctrl_classes) + if resp_data: + resp_data = self._convert_results_to_unicode(resp_data) + return resp_type, resp_data, resp_msgid, decoded_resp_ctrls, resp_name, resp_value elif PYTHON_LDAP3 is False: class LDAPObject(NativeLDAPObject): @@ -149,17 +147,6 @@ elif PYTHON_LDAP3 is False: attrs = {attribute: filter_non_unicode_values(attrs[attribute]) for attribute in attrs} yield force_text(dn), attrs - def search_s(self, base, scope, filterstr='(objectclass=*)', attrlist=None, attrsonly=0): - base = force_bytes(base) - filterstr = force_bytes(filterstr) - if attrlist: - attrlist = map(force_bytes, attrlist) - return self._convert_results_to_unicode( - NativeLDAPObject.search_s(self, base, scope, - filterstr=filterstr, - attrlist=attrlist, - attrsonly=attrsonly)) - def search_ext(self, base, scope, filterstr='(objectclass=*)', attrlist=None, attrsonly=0, serverctrls=None, clientctrls=None, timeout=-1, sizelimit=0): @@ -196,15 +183,20 @@ elif PYTHON_LDAP3 is False: new_modlist.append((mod_op, mod_typ, mod_vals)) return NativeLDAPObject.modify_s(self, dn, new_modlist) - def result3(self, msgid=ldap.RES_ANY, all=1, timeout=None, resp_ctrl_classes=None): - result_type, data, msgid, serverctrls = NativeLDAPObject.result3(self, - msgid=msgid, - all=all, - timeout=timeout, - resp_ctrl_classes=resp_ctrl_classes) - if data: - data = self._convert_results_to_unicode(data) - return result_type, data, msgid, serverctrls + def result4(self, msgid=ldap.RES_ANY, all=1, timeout=None, add_ctrls=0, + add_intermediates=0, add_extop=0, resp_ctrl_classes=None): + resp_type, resp_data, resp_msgid, decoded_resp_ctrls, resp_name, resp_value = NativeLDAPObject.result4( + self, + msgid=msgid, + all=all, + timeout=timeout, + add_ctrls=add_ctrls, + add_intermediates=add_intermediates, + add_extop=add_extop, + resp_ctrl_classes=resp_ctrl_classes) + if resp_data: + resp_data = self._convert_results_to_unicode(resp_data) + return resp_type, resp_data, resp_msgid, decoded_resp_ctrls, resp_name, resp_value def map_text(d): -- 2.20.1