[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Freeipa-devel] [PATCH] Make search limit option work



Fix the client-side search size limit.

I've changed the variable name searchlimit to sizelimit to match the name in python-ldap (and hopefully therefore be more readable).

The big change was changing the default value from 0 to -1. As 0 we were never using the value from cn=ipaconfig

python-ldap expects this to be an int type

In the UI sizelimit was hardcoded at 0 for users

rob
>From 73f328191cae35eb47a8d15f2ebe456bfe551c43 Mon Sep 17 00:00:00 2001
From: Rob Crittenden <rcritten redhat com>
Date: Fri, 25 Apr 2008 13:33:01 -0400
Subject: [PATCH] Fix the client-side search size limit.

I've changed the variable name searchlimit to sizelimit to match the
name in python-ldap (and hopefully therefore be more readable).

The big change was changing the default value from 0 to -1. As 0 we were
never using the value from cn=ipaconfig

python-ldap expects this to be an int type

In the UI sizelimit was hardcoded at 0 for users

439880
---
 ipa-python/ipaclient.py                          |   20 +++++-----
 ipa-python/rpcclient.py                          |   20 +++++-----
 ipa-server/ipa-gui/ipagui/subcontrollers/user.py |    2 +-
 ipa-server/xmlrpc-server/funcs.py                |   48 +++++++++++-----------
 4 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/ipa-python/ipaclient.py b/ipa-python/ipaclient.py
index 1cd541c..6f31dd8 100644
--- a/ipa-python/ipaclient.py
+++ b/ipa-python/ipaclient.py
@@ -136,11 +136,11 @@ class IPAClient:
         result = self.transport.set_custom_fields(schema)
         return result
 
-    def find_users(self, criteria, sattrs=None, searchlimit=0, timelimit=-1):
+    def find_users(self, criteria, sattrs=None, sizelimit=-1, timelimit=-1):
         """Return a list: counter followed by a User object for each user that
            matches the criteria. If the results are truncated, counter will
            be set to -1"""
-        result = self.transport.find_users(criteria, sattrs, searchlimit, timelimit)
+        result = self.transport.find_users(criteria, sattrs, sizelimit, timelimit)
         counter = result[0]
 
         users = [counter]
@@ -204,10 +204,10 @@ class IPAClient:
         result = self.transport.add_group(group_dict, group_container)
         return result
 
-    def find_groups(self, criteria, sattrs=None, searchlimit=0, timelimit=-1):
+    def find_groups(self, criteria, sattrs=None, sizelimit=-1, timelimit=-1):
         """Find groups whose cn matches the criteria. Wildcards are 
            acceptable. Returns a list of Group objects."""
-        result = self.transport.find_groups(criteria, sattrs, searchlimit, timelimit)
+        result = self.transport.find_groups(criteria, sattrs, sizelimit, timelimit)
         counter = result[0]
 
         groups = [counter]
@@ -387,11 +387,11 @@ class IPAClient:
     def delete_service_principal(self, principal_dn):
         return self.transport.delete_service_principal(principal_dn)
 
-    def find_service_principal(self, criteria, sattrs=None, searchlimit=0, timelimit=-1):
+    def find_service_principal(self, criteria, sattrs=None, sizelimit=-1, timelimit=-1):
         """Return a list: counter followed by a Entity object for each host that
            matches the criteria. If the results are truncated, counter will
            be set to -1"""
-        result = self.transport.find_service_principal(criteria, sattrs, searchlimit, timelimit)
+        result = self.transport.find_service_principal(criteria, sattrs, sizelimit, timelimit)
         counter = result[0]
 
         hosts = [counter]
@@ -426,8 +426,8 @@ class IPAClient:
     def delete_radius_client(self, ip_addr, container=None):
         return self.transport.delete_radius_client(ip_addr, container)
 
-    def find_radius_clients(self, criteria, container=None, sattrs=None, searchlimit=0, timelimit=-1):
-        result = self.transport.find_radius_clients(criteria, container, sattrs, searchlimit, timelimit)
+    def find_radius_clients(self, criteria, container=None, sattrs=None, sizelimit=-1, timelimit=-1):
+        result = self.transport.find_radius_clients(criteria, container, sattrs, sizelimit, timelimit)
         counter = result[0]
 
         users = [counter]
@@ -458,8 +458,8 @@ class IPAClient:
     def delete_radius_profile(self, ip_addr, user_profile=None):
         return self.transport.delete_radius_profile(ip_addr, user_profile)
 
-    def find_radius_profiles(self, criteria, user_profile=None, sattrs=None, searchlimit=0, timelimit=-1):
-        result = self.transport.find_radius_profiles(criteria, user_profile, sattrs, searchlimit, timelimit)
+    def find_radius_profiles(self, criteria, user_profile=None, sattrs=None, sizelimit=-1, timelimit=-1):
+        result = self.transport.find_radius_profiles(criteria, user_profile, sattrs, sizelimit, timelimit)
         counter = result[0]
 
         users = [counter]
diff --git a/ipa-python/rpcclient.py b/ipa-python/rpcclient.py
index aaaa5bb..ecd42b9 100644
--- a/ipa-python/rpcclient.py
+++ b/ipa-python/rpcclient.py
@@ -257,7 +257,7 @@ class RPCClient:
     
         return ipautil.unwrap_binary_data(result)
 
-    def find_users (self, criteria, sattrs=None, searchlimit=0, timelimit=-1):
+    def find_users (self, criteria, sattrs=None, sizelimit=-1, timelimit=-1):
         """Return a list: counter followed by a dict for each user that
            matches the criteria. If the results are truncated, counter will
            be set to -1"""
@@ -267,7 +267,7 @@ class RPCClient:
             # None values are not allowed in XML-RPC
             if sattrs is None:
                 sattrs = "__NONE__"
-            result = server.find_users(criteria, sattrs, searchlimit, timelimit)
+            result = server.find_users(criteria, sattrs, sizelimit, timelimit)
         except xmlrpclib.Fault, fault:
             raise ipaerror.gen_exception(fault.faultCode, fault.faultString)
         except socket.error, (value, msg):
@@ -383,7 +383,7 @@ class RPCClient:
 
         return ipautil.unwrap_binary_data(result)
 
-    def find_groups (self, criteria, sattrs=None, searchlimit=0, timelimit=-1):
+    def find_groups (self, criteria, sattrs=None, sizelimit=-1, timelimit=-1):
         """Return a list containing a Group object for each group that matches
            the criteria."""
     
@@ -392,7 +392,7 @@ class RPCClient:
             # None values are not allowed in XML-RPC
             if sattrs is None:
                 sattrs = "__NONE__"
-            result = server.find_groups(criteria, sattrs, searchlimit, timelimit)
+            result = server.find_groups(criteria, sattrs, sizelimit, timelimit)
         except xmlrpclib.Fault, fault:
             raise ipaerror.gen_exception(fault.faultCode, fault.faultString)
         except socket.error, (value, msg):
@@ -732,7 +732,7 @@ class RPCClient:
 
         return ipautil.unwrap_binary_data(result)
 
-    def find_service_principal (self, criteria, sattrs=None, searchlimit=0, timelimit=-1):
+    def find_service_principal (self, criteria, sattrs=None, sizelimit=-1, timelimit=-1):
         """Return a list: counter followed by a Entity object for each host that
            matches the criteria. If the results are truncated, counter will
            be set to -1"""
@@ -742,7 +742,7 @@ class RPCClient:
             # None values are not allowed in XML-RPC
             if sattrs is None:
                 sattrs = "__NONE__"
-            result = server.find_service_principal(criteria, sattrs, searchlimit, timelimit)
+            result = server.find_service_principal(criteria, sattrs, sizelimit, timelimit)
         except xmlrpclib.Fault, fault:
             raise ipaerror.gen_exception(fault.faultCode, fault.faultString)
         except socket.error, (value, msg):
@@ -818,14 +818,14 @@ class RPCClient:
 
         return ipautil.unwrap_binary_data(result)
 
-    def find_radius_clients(self, criteria, container=None, sattrs=None, searchlimit=0, timelimit=-1):
+    def find_radius_clients(self, criteria, container=None, sattrs=None, sizelimit=-1, timelimit=-1):
         server = self.setup_server()
         if container is None: container = "__NONE__"
         try:
             # None values are not allowed in XML-RPC
             if sattrs is None:
                 sattrs = "__NONE__"
-            result = server.find_radius_clients(criteria, container, sattrs, searchlimit, timelimit)
+            result = server.find_radius_clients(criteria, container, sattrs, sizelimit, timelimit)
         except xmlrpclib.Fault, fault:
             raise ipaerror.gen_exception(fault.faultCode, fault.faultString)
         except socket.error, (value, msg):
@@ -887,14 +887,14 @@ class RPCClient:
 
         return ipautil.unwrap_binary_data(result)
 
-    def find_radius_profiles(self, criteria, user_profile=None, sattrs=None, searchlimit=0, timelimit=-1):
+    def find_radius_profiles(self, criteria, user_profile=None, sattrs=None, sizelimit=-1, timelimit=-1):
         server = self.setup_server()
         if user_profile is None: user_profile = "__NONE__"
         try:
             # None values are not allowed in XML-RPC
             if sattrs is None:
                 sattrs = "__NONE__"
-            result = server.find_radius_profiles(criteria, user_profile, sattrs, searchlimit, timelimit)
+            result = server.find_radius_profiles(criteria, user_profile, sattrs, sizelimit, timelimit)
         except xmlrpclib.Fault, fault:
             raise ipaerror.gen_exception(fault.faultCode, fault.faultString)
         except socket.error, (value, msg):
diff --git a/ipa-server/ipa-gui/ipagui/subcontrollers/user.py b/ipa-server/ipa-gui/ipagui/subcontrollers/user.py
index f57a297..0a79fc7 100644
--- a/ipa-server/ipa-gui/ipagui/subcontrollers/user.py
+++ b/ipa-server/ipa-gui/ipagui/subcontrollers/user.py
@@ -650,7 +650,7 @@ class UserController(IPAController):
         uid = kw.get('uid')
         if uid != None and len(uid) > 0:
             try:
-                users = client.find_users(uid.encode('utf-8'), user_fields, 0, 2)
+                users = client.find_users(uid.encode('utf-8'), user_fields)
                 counter = users[0]
                 users = users[1:]
                 if counter == -1:
diff --git a/ipa-server/xmlrpc-server/funcs.py b/ipa-server/xmlrpc-server/funcs.py
index 4c49d47..74a3030 100644
--- a/ipa-server/xmlrpc-server/funcs.py
+++ b/ipa-server/xmlrpc-server/funcs.py
@@ -700,7 +700,7 @@ class IPAServer:
             self.releaseConnection(conn)
         return res
 
-    def find_radius_clients(self, ip_attrs, container=None, sattrs=None, searchlimit=0, timelimit=-1, opts=None):
+    def find_radius_clients(self, ip_attrs, container=None, sattrs=None, sizelimit=-1, timelimit=-1, opts=None):
         def gen_filter(objectclass, attr, values):
             '''Given ('myclass', 'myattr', [v1, v2]) returns
                (&(objectclass=myclass)(|(myattr=v1)(myattr=v2)))
@@ -716,7 +716,7 @@ class IPAServer:
         conn = self.getConnection(opts)
         try:
             try:
-                results = conn.getListAsync(basedn, self.scope, filter, sattrs, 0, None, None, timelimit, searchlimit)
+                results = conn.getListAsync(basedn, self.scope, filter, sattrs, 0, None, None, timelimit, sizelimit)
             except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
                 results = [0]
         finally:
@@ -801,7 +801,7 @@ class IPAServer:
             self.releaseConnection(conn)
         return res
 
-    def find_radius_profiles(self, uids, user_profile=True, sattrs=None, searchlimit=0, timelimit=-1, opts=None):
+    def find_radius_profiles(self, uids, user_profile=True, sattrs=None, sizelimit=-1, timelimit=-1, opts=None):
         def gen_filter(objectclass, attr, values):
             '''Given ('myclass', 'myattr', [v1, v2]) returns
                (&(objectclass=myclass)(|(myattr=v1)(myattr=v2)))
@@ -822,7 +822,7 @@ class IPAServer:
         conn = self.getConnection(opts)
         try:
             try:
-                results = conn.getListAsync(basedn, self.scope, filter, sattrs, 0, None, None, timelimit, searchlimit)
+                results = conn.getListAsync(basedn, self.scope, filter, sattrs, 0, None, None, timelimit, sizelimit)
             except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
                 results = [0]
         finally:
@@ -888,7 +888,7 @@ class IPAServer:
     
         return users
 
-    def find_users (self, criteria, sattrs, searchlimit=-1, timelimit=-1,
+    def find_users (self, criteria, sattrs, sizelimit=-1, timelimit=-1,
             opts=None):
         """Returns a list: counter followed by the results.
            If the results are truncated, counter will be set to -1."""
@@ -897,7 +897,7 @@ class IPAServer:
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
         if sattrs is not None and not isinstance(sattrs, list):
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
-        if not isinstance(searchlimit,int):
+        if not isinstance(sizelimit,int):
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
         if not isinstance(timelimit,int):
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
@@ -906,8 +906,8 @@ class IPAServer:
         config = self.get_ipa_config(opts)
         if timelimit < 0:
             timelimit = float(config.get('ipasearchtimelimit'))
-        if searchlimit < 0:
-            searchlimit = float(config.get('ipasearchrecordslimit'))
+        if sizelimit < 0:
+            sizelimit = int(config.get('ipasearchrecordslimit'))
 
         # Assume the list of fields to search will come from a central
         # configuration repository.  A good format for that would be
@@ -937,14 +937,14 @@ class IPAServer:
             try:
                 exact_results = conn.getListAsync(self.basedn, self.scope,
                         exact_match_filter, sattrs, 0, None, None, timelimit,
-                        searchlimit)
+                        sizelimit)
             except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
                 exact_results = [0]
 
             try:
                 partial_results = conn.getListAsync(self.basedn, self.scope,
                         partial_match_filter, sattrs, 0, None, None, timelimit,
-                        searchlimit)
+                        sizelimit)
             except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
                 partial_results = [0]
         finally:
@@ -1270,7 +1270,7 @@ class IPAServer:
         finally:
             self.releaseConnection(conn)
 
-    def find_groups (self, criteria, sattrs, searchlimit=-1, timelimit=-1,
+    def find_groups (self, criteria, sattrs, sizelimit=-1, timelimit=-1,
             opts=None):
         """Return a list containing a User object for each
         existing group that matches the criteria.
@@ -1279,7 +1279,7 @@ class IPAServer:
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
         if sattrs is not None and not isinstance(sattrs, list):
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
-        if not isinstance(searchlimit,int):
+        if not isinstance(sizelimit,int):
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
         if not isinstance(timelimit,int):
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
@@ -1289,8 +1289,8 @@ class IPAServer:
         config = self.get_ipa_config(opts)
         if timelimit < 0:
             timelimit = float(config.get('ipasearchtimelimit'))
-        if searchlimit < 0:
-            searchlimit = float(config.get('ipasearchrecordslimit'))
+        if sizelimit < 0:
+            sizelimit = int(config.get('ipasearchrecordslimit'))
 
         # Assume the list of fields to search will come from a central
         # configuration repository.  A good format for that would be
@@ -1323,14 +1323,14 @@ class IPAServer:
             try:
                 exact_results = conn.getListAsync(self.basedn, self.scope,
                         exact_match_filter, sattrs, 0, None, None, timelimit,
-                        searchlimit)
+                        sizelimit)
             except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
                 exact_results = [0]
 
             try:
                 partial_results = conn.getListAsync(self.basedn, self.scope,
                         partial_match_filter, sattrs, 0, None, None, timelimit,
-                        searchlimit)
+                        sizelimit)
             except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
                 partial_results = [0]
         finally:
@@ -1822,7 +1822,7 @@ class IPAServer:
 
         logging.debug("IPA: group_members: %s %s %s" % (groupdn, attr_list, membertype))
 
-        searchlimit = float(config.get('ipasearchrecordslimit'))
+        sizelimit = int(config.get('ipasearchrecordslimit'))
 
         groupdn = self.__safe_filter(groupdn)
         searchfilter = "(memberOf=%s)" % groupdn
@@ -1836,7 +1836,7 @@ class IPAServer:
             try:
                 results = conn.getListAsync(self.basedn, self.scope,
                     searchfilter, attr_list, 0, None, None, timelimit,
-                    searchlimit)
+                    sizelimit)
             except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
                 results = [0]
         finally:
@@ -1982,7 +1982,7 @@ class IPAServer:
             self.releaseConnection(conn)
         return res
 
-    def find_service_principal(self, criteria, sattrs, searchlimit=-1,
+    def find_service_principal(self, criteria, sattrs, sizelimit=-1,
             timelimit=-1, opts=None):
         """Returns a list: counter followed by the results.
            If the results are truncated, counter will be set to -1."""
@@ -1990,7 +1990,7 @@ class IPAServer:
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
         if sattrs is not None and not isinstance(sattrs, list):
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
-        if not isinstance(searchlimit,int):
+        if not isinstance(sizelimit,int):
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
         if not isinstance(timelimit,int):
             raise ipaerror.gen_exception(ipaerror.INPUT_INVALID_PARAMETER)
@@ -1998,8 +1998,8 @@ class IPAServer:
         config = self.get_ipa_config(opts)
         if timelimit < 0:
             timelimit = float(config.get('ipasearchtimelimit'))
-        if searchlimit < 0:
-            searchlimit = float(config.get('ipasearchrecordslimit'))
+        if sizelimit < 0:
+            sizelimit = int(config.get('ipasearchrecordslimit'))
 
         search_fields = ["krbprincipalname"]
 
@@ -2026,14 +2026,14 @@ class IPAServer:
             try:
                 exact_results = conn.getListAsync(self.basedn, self.scope,
                         exact_match_filter, sattrs, 0, None, None, timelimit,
-                        searchlimit)
+                        sizelimit)
             except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
                 exact_results = [0]
 
             try:
                 partial_results = conn.getListAsync(self.basedn, self.scope,
                         partial_match_filter, sattrs, 0, None, None, timelimit,
-                        searchlimit)
+                        sizelimit)
             except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
                 partial_results = [0]
         finally:
-- 
1.5.3.3

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]