From 4627cf4d8a949d1d7b4a9b24f9ad3b9a06d5b5bc Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Fri, 4 May 2012 16:52:49 +0200 Subject: Special-case LDAP_SIZELIMIT_EXCEEDED Previous version of the SSSD did not abort the async LDAP search operation on errors. In cases where the request ended in progress, such as when the paging was very strictly limited, the old versions at least returned partial data. This patch special-cases the LDAP_SIZELIMIT_EXCEEDED error to avoid a user-visible regression. https://fedorahosted.org/sssd/ticket/1322 --- src/providers/ldap/sdap_async.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/providers/ldap/sdap_async.c b/src/providers/ldap/sdap_async.c index fb5c8902e..d505772c0 100644 --- a/src/providers/ldap/sdap_async.c +++ b/src/providers/ldap/sdap_async.c @@ -1288,10 +1288,15 @@ static void sdap_get_generic_ext_done(struct sdap_op *op, sss_ldap_err2string(result), result, errmsg ? errmsg : "no errmsg set")); - if (result != LDAP_SUCCESS && result != LDAP_NO_SUCH_OBJECT) { - DEBUG(2, ("Unexpected result from ldap: %s(%d), %s\n", - sss_ldap_err2string(result), result, - errmsg ? errmsg : "no errmsg set")); + if (result == LDAP_SIZELIMIT_EXCEEDED) { + /* Try to return what we've got */ + DEBUG(SSSDBG_MINOR_FAILURE, + ("LDAP sizelimit was exceeded, returning incomplete data\n")); + } else if (result != LDAP_SUCCESS && result != LDAP_NO_SUCH_OBJECT) { + DEBUG(SSSDBG_OP_FAILURE, + ("Unexpected result from ldap: %s(%d), %s\n", + sss_ldap_err2string(result), result, + errmsg ? errmsg : "no errmsg set")); ldap_memfree(errmsg); tevent_req_error(req, EIO); return; -- cgit