Warn user when ipa *-find reach limit

Truncated entries were silently ignored, now a user receives warning.

https://fedorahosted.org/freeipa/ticket/4022

Reviewed-By: Petr Spacek <pspacek@redhat.com>
Reviewed-By: Gabe Alford <redhatrises@gmail.com>
This commit is contained in:
Martin Basti
2016-01-26 13:47:56 +01:00
parent 840de9bb48
commit 9a945b201e
2 changed files with 17 additions and 1 deletions

View File

@@ -331,6 +331,16 @@ class ExternalCommandOutput(PublicMessage):
format = _("%(line)s") format = _("%(line)s")
class SearchResultTruncated(PublicMessage):
"""
**13017** Results of LDAP search has been truncated
"""
errno = 13017
type = "warning"
format = _("Search result has been truncated to configured search limit.")
def iter_messages(variables, base): def iter_messages(variables, base):
"""Return a tuple with all subclasses """Return a tuple with all subclasses
""" """

View File

@@ -35,6 +35,7 @@ from ipalib import output
from ipalib.text import _ from ipalib.text import _
from ipalib.util import json_serialize, validate_hostname from ipalib.util import json_serialize, validate_hostname
from ipalib.capabilities import client_has_capability from ipalib.capabilities import client_has_capability
from ipalib.messages import add_message, SearchResultTruncated
from ipapython.dn import DN from ipapython.dn import DN
from ipapython.version import API_VERSION from ipapython.version import API_VERSION
@@ -2101,12 +2102,17 @@ class LDAPSearch(BaseLDAPCommand, crud.Search):
entries[i] = entry_to_dict(e, **options) entries[i] = entry_to_dict(e, **options)
entries[i]['dn'] = e.dn entries[i]['dn'] = e.dn
return dict( result = dict(
result=entries, result=entries,
count=len(entries), count=len(entries),
truncated=truncated, truncated=truncated,
) )
if truncated:
add_message(options['version'], result, SearchResultTruncated())
return result
def pre_callback(self, ldap, filters, attrs_list, base_dn, scope, *args, **options): def pre_callback(self, ldap, filters, attrs_list, base_dn, scope, *args, **options):
assert isinstance(base_dn, DN) assert isinstance(base_dn, DN)
return (filters, base_dn, scope) return (filters, base_dn, scope)