diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2012-08-17 00:09:48 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2012-08-21 12:06:34 +0200 |
commit | 2e63c5b42935951f39c74bce5531597f83b02e3f (patch) | |
tree | 859d13f411bc8aaf49269ef6f6086a982552ec8c /src | |
parent | c041c677dcc194ec0280365c9621c46f92e56f7a (diff) | |
download | sssd-2e63c5b42935951f39c74bce5531597f83b02e3f.tar.gz sssd-2e63c5b42935951f39c74bce5531597f83b02e3f.tar.xz sssd-2e63c5b42935951f39c74bce5531597f83b02e3f.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/providers/ldap/sdap_async_initgroups.c | 18 |
1 files changed, 14 insertions, 4 deletions
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) { |