95ea96
From 2461d69242108fe6f4bc067cc8255e41f66c58aa Mon Sep 17 00:00:00 2001
95ea96
From: Armando Neto <neto.armando@gmail.com>
95ea96
Date: Mon, 18 Jun 2018 18:26:01 -0300
95ea96
Subject: [PATCH] ipaserver config plugin: Increase search records minimum
95ea96
 limit
95ea96
95ea96
Check if the given search records value is greater than an arbitrary number that is not so close to zero.
95ea96
95ea96
https://pagure.io/freeipa/issue/6617
95ea96
95ea96
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
95ea96
---
95ea96
 ipaserver/plugins/config.py                | 14 +++++-
95ea96
 ipatests/test_xmlrpc/test_config_plugin.py | 76 ++++++++++++++++++++++++++++++
95ea96
 2 files changed, 89 insertions(+), 1 deletion(-)
95ea96
95ea96
diff --git a/ipaserver/plugins/config.py b/ipaserver/plugins/config.py
95ea96
index 33ed38ba016567b9df57503f2f8418cf7c7fc794..d367c3c5aa421bb22d1630c88bbac846e7d84386 100644
95ea96
--- a/ipaserver/plugins/config.py
95ea96
+++ b/ipaserver/plugins/config.py
95ea96
@@ -85,6 +85,18 @@ EXAMPLES:
95ea96
 
95ea96
 register = Registry()
95ea96
 
95ea96
+
95ea96
+def validate_search_records_limit(ugettext, value):
95ea96
+    """Check if value is greater than a realistic minimum.
95ea96
+
95ea96
+    Values 0 and -1 are valid, as they represent unlimited.
95ea96
+    """
95ea96
+    if value in {-1, 0}:
95ea96
+        return
95ea96
+    if value < 10:
95ea96
+        return _('must be at least 10')
95ea96
+
95ea96
+
95ea96
 @register()
95ea96
 class config(LDAPObject):
95ea96
     """
95ea96
@@ -161,10 +173,10 @@ class config(LDAPObject):
95ea96
             minvalue=-1,
95ea96
         ),
95ea96
         Int('ipasearchrecordslimit',
95ea96
+            validate_search_records_limit,
95ea96
             cli_name='searchrecordslimit',
95ea96
             label=_('Search size limit'),
95ea96
             doc=_('Maximum number of records to search (-1 or 0 is unlimited)'),
95ea96
-            minvalue=-1,
95ea96
         ),
95ea96
         IA5Str('ipausersearchfields',
95ea96
             cli_name='usersearch',
95ea96
diff --git a/ipatests/test_xmlrpc/test_config_plugin.py b/ipatests/test_xmlrpc/test_config_plugin.py
95ea96
index c037224162e2c29f6dd76eabefe7fededc6f882d..666b7c2c87b4f0a1f7bde18c78780a1ea6072b71 100644
95ea96
--- a/ipatests/test_xmlrpc/test_config_plugin.py
95ea96
+++ b/ipatests/test_xmlrpc/test_config_plugin.py
95ea96
@@ -211,4 +211,80 @@ class test_config(Declarative):
95ea96
                 summary=None,
95ea96
                 ),
95ea96
         ),
95ea96
+        dict(
95ea96
+            desc='Set the number of search records to -1 (unlimited)',
95ea96
+            command=(
95ea96
+                'config_mod', [], {
95ea96
+                    'ipasearchrecordslimit': u'-1',
95ea96
+                },
95ea96
+            ),
95ea96
+            expected={
95ea96
+                'result': lambda d: d['ipasearchrecordslimit'] == (u'-1',),
95ea96
+                'summary': None,
95ea96
+                'value': None,
95ea96
+            },
95ea96
+        ),
95ea96
+        dict(
95ea96
+            desc='Set the number of search records to greater than 10',
95ea96
+            command=(
95ea96
+                'config_mod', [], {
95ea96
+                    'ipasearchrecordslimit': u'100',
95ea96
+                },
95ea96
+            ),
95ea96
+            expected={
95ea96
+                'result': lambda d: d['ipasearchrecordslimit'] == (u'100',),
95ea96
+                'summary': None,
95ea96
+                'value': None,
95ea96
+            },
95ea96
+        ),
95ea96
+        dict(
95ea96
+            desc='Set the number of search records to lower than -1',
95ea96
+            command=(
95ea96
+                'config_mod', [], {
95ea96
+                    'ipasearchrecordslimit': u'-10',
95ea96
+                },
95ea96
+            ),
95ea96
+            expected=errors.ValidationError(
95ea96
+                name=u'searchrecordslimit',
95ea96
+                error=u'must be at least 10',
95ea96
+            ),
95ea96
+        ),
95ea96
+        dict(
95ea96
+            desc='Set the number of search records to lower than 10',
95ea96
+            command=(
95ea96
+                'config_mod', [], {
95ea96
+                    'ipasearchrecordslimit': u'1',
95ea96
+                },
95ea96
+            ),
95ea96
+            expected=errors.ValidationError(
95ea96
+                name=u'searchrecordslimit',
95ea96
+                error=u'must be at least 10',
95ea96
+            ),
95ea96
+        ),
95ea96
+        dict(
95ea96
+            desc='Set the number of search records to zero (unlimited)',
95ea96
+            command=(
95ea96
+                'config_mod', [], {
95ea96
+                    'ipasearchrecordslimit': u'0',
95ea96
+                },
95ea96
+            ),
95ea96
+            expected={
95ea96
+                'result': lambda d: d['ipasearchrecordslimit'] == (u'-1',),
95ea96
+                'summary': None,
95ea96
+                'value': None,
95ea96
+            },
95ea96
+        ),
95ea96
+        dict(
95ea96
+            desc='Set the number of search records back to 100',
95ea96
+            command=(
95ea96
+                'config_mod', [], {
95ea96
+                    'ipasearchrecordslimit': u'100',
95ea96
+                },
95ea96
+            ),
95ea96
+            expected={
95ea96
+                'result': lambda d: d['ipasearchrecordslimit'] == (u'100',),
95ea96
+                'summary': None,
95ea96
+                'value': None,
95ea96
+            },
95ea96
+        ),
95ea96
     ]
95ea96
-- 
95ea96
2.14.4
95ea96