From 14ad252d2715e5eb1eed139d4497fc0155c51f85 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Fri, 13 Nov 2015 12:15:52 +0100 Subject: [PATCH 2/2] initgr: only search for primary group if it is not already cached Related to https://fedorahosted.org/sssd/ticket/2868 --- src/providers/ldap/sdap_async_initgroups.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/providers/ldap/sdap_async_initgroups.c b/src/providers/ldap/sdap_async_initgroups.c index e9fcb272d3e906555c63d51e0aab90d1f575f3f8..2c25505753c0705649a70bb7ee3ab0dd42d2c944 100644 --- a/src/providers/ldap/sdap_async_initgroups.c +++ b/src/providers/ldap/sdap_async_initgroups.c @@ -3065,6 +3065,7 @@ static void sdap_get_initgr_done(struct tevent_req *subreq) char *dom_sid_str; char *group_sid_str; struct sdap_options *opts = state->opts; + struct ldb_message *msg; DEBUG(SSSDBG_TRACE_ALL, "Initgroups done\n"); @@ -3182,14 +3183,25 @@ static void sdap_get_initgr_done(struct tevent_req *subreq) goto fail; } - subreq = groups_get_send(req, state->ev, state->id_ctx, - state->id_ctx->opts->sdom, state->conn, - gid, BE_FILTER_IDNUM, BE_ATTR_ALL, false, false); - if (!subreq) { - ret = ENOMEM; - goto fail; + ret = sysdb_search_group_by_gid(tmp_ctx, state->dom, primary_gid, NULL, + &msg); + if (ret == EOK) { + DEBUG(SSSDBG_TRACE_FUNC, + "Primary group already cached, nothing to do.\n"); + talloc_free(tmp_ctx); + tevent_req_done(req); + return; + } else { + subreq = groups_get_send(req, state->ev, state->id_ctx, + state->id_ctx->opts->sdom, state->conn, + gid, BE_FILTER_IDNUM, BE_ATTR_ALL, false, + false); + if (!subreq) { + ret = ENOMEM; + goto fail; + } + tevent_req_set_callback(subreq, sdap_get_initgr_pgid, req); } - tevent_req_set_callback(subreq, sdap_get_initgr_pgid, req); talloc_free(tmp_ctx); return; -- 2.1.0