From dbc6eec3145a53c85f2a28d8088ce65652709a55 Mon Sep 17 00:00:00 2001 From: stroeder Date: Mon, 26 Sep 2016 22:32:14 +0000 Subject: [PATCH] async search to deal with ldap.SIZELIMIT_EXCEEDED, added comments --- Demo/pyasn1/sss_highest_number.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Demo/pyasn1/sss_highest_number.py b/Demo/pyasn1/sss_highest_number.py index 9b1003a..fb19fdd 100644 --- a/Demo/pyasn1/sss_highest_number.py +++ b/Demo/pyasn1/sss_highest_number.py @@ -8,22 +8,38 @@ import pprint,ldap +from ldap.ldapobject import LDAPObject from ldap.controls.sss import SSSRequestControl +from ldap.resiter import ResultProcessor + +class MyLDAPObject(LDAPObject,ResultProcessor): + pass uri = "ldap://ipa.demo1.freeipa.org" -l = ldap.initialize(uri,trace_level=0) +l = MyLDAPObject(uri,trace_level=0) l.simple_bind_s('uid=admin,cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org','Secret123') for id_attr in ('uidNumber','gidNumber'): + # reverse sorting request control sss_control = SSSRequestControl(ordering_rules=['-%s' % (id_attr)]) - ldap_result = l.search_ext_s( + # send search request + msg_id = l.search_ext( 'dc=demo1,dc=freeipa,dc=org', ldap.SCOPE_SUBTREE, '(%s=*)' % (id_attr), attrlist=[id_attr], + sizelimit=1, serverctrls = [sss_control], ) + # collect result + ldap_result = [] + try: + for res_type,res_data,res_msgid,res_controls in l.allresults(msg_id,add_ctrls=0): + ldap_result.extend(res_data) + except ldap.SIZELIMIT_EXCEEDED: + pass + # print result print 'Highest value of %s' % (id_attr) if ldap_result: dn,entry = ldap_result[0]