From 2e63c5b42935951f39c74bce5531597f83b02e3f Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Fri, 17 Aug 2012 00:09:48 +0200 Subject: Process all groups from a single nesting level https://bugzilla.redhat.com/show_bug.cgi?id=846664 If the first group was cached when processing the nested group membership, we would call tevent_req_done, effectivelly marking the whole nesting level as done. --- src/providers/ldap/sdap_async_initgroups.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/providers/ldap/sdap_async_initgroups.c b/src/providers/ldap/sdap_async_initgroups.c index b0b533242..36dacc16e 100644 --- a/src/providers/ldap/sdap_async_initgroups.c +++ b/src/providers/ldap/sdap_async_initgroups.c @@ -2010,9 +2010,8 @@ struct tevent_req *rfc2307bis_nested_groups_send( if ((num_groups == 0) || (nesting > dp_opt_get_int(opts->basic, SDAP_NESTING_LEVEL))) { /* No parent groups to process or too deep*/ - tevent_req_done(req); - tevent_req_post(req, ev); - return req; + ret = EOK; + goto done; } state->ev = ev; @@ -2046,7 +2045,18 @@ struct tevent_req *rfc2307bis_nested_groups_send( goto done; } - ret = rfc2307bis_nested_groups_step(req); + while (state->group_iter < state->num_groups) { + ret = rfc2307bis_nested_groups_step(req); + if (ret == EOK) { + /* This group had already been looked up. Continue to + * another group in the same level + */ + state->group_iter++; + continue; + } else { + goto done; + } + } done: if (ret == EOK) { -- cgit