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.
This commit is contained in:
Benjamin Dauvergne 2019-03-11 20:47:17 +01:00
parent 2bb6f8aab3
commit 0f0c0790d0
1 changed files with 28 additions and 36 deletions

View File

@ -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):