URL: https://github.com/SSSD/sssd/pull/5272 Author: ikerexxe Title: #5272: WIP! responder_utils: GetUserGroups() returns SYSDB_PRIMARY_GROUP_GIDNUM Action: opened
PR body: """ This is work in progress! There was a mismatch between the information provided by NSS and IFP interfaces. nss_protocol_fill_initgr() returned SYSDB_PRIMARY_GROUP_GIDNUM, but GetUserGroups() didn't. This commit makes GetUserGroups() also return SYSDB_PRIMARY_GROUP_GIDNUM value. Resolves: https://github.com/SSSD/sssd/issues/4569 """ To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/5272/head:pr5272 git checkout pr5272
From a2c166ea1c30b9b3fefabc49cce52c6ef825cc52 Mon Sep 17 00:00:00 2001 From: ikerexxe <ipedr...@redhat.com> Date: Thu, 13 Aug 2020 09:13:33 +0200 Subject: [PATCH] responder_utils: GetUserGroups() returns SYSDB_PRIMARY_GROUP_GIDNUM There was a mismatch between the information provided by NSS and IFP interfaces. nss_protocol_fill_initgr() returned SYSDB_PRIMARY_GROUP_GIDNUM, but GetUserGroups() didn't. This commit makes GetUserGroups() also return SYSDB_PRIMARY_GROUP_GIDNUM value. Resolves: https://github.com/SSSD/sssd/issues/4569 --- src/responder/common/responder_utils.c | 40 ++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/responder/common/responder_utils.c b/src/responder/common/responder_utils.c index 9141026e77..e536fadc94 100644 --- a/src/responder/common/responder_utils.c +++ b/src/responder/common/responder_utils.c @@ -210,6 +210,7 @@ struct resp_resolve_group_names_state { static void resp_resolve_group_done(struct tevent_req *subreq); static errno_t resp_resolve_group_next(struct tevent_req *req); +static errno_t resp_resolve_group_trigger_request(struct tevent_req *req, const char *attr_name); static errno_t resp_resolve_group_reread_names(struct resp_resolve_group_names_state *state); struct tevent_req *resp_resolve_group_names_send(TALLOC_CTX *mem_ctx, @@ -275,6 +276,7 @@ resp_resolve_group_needs_refresh(struct resp_resolve_group_names_state *state) static errno_t resp_resolve_group_next(struct tevent_req *req) { + //TODO: delete unused variables struct cache_req_data *data; uint64_t gid; struct tevent_req *subreq; @@ -286,15 +288,35 @@ static errno_t resp_resolve_group_next(struct tevent_req *req) && !resp_resolve_group_needs_refresh(state)) { state->group_iter++; } + DEBUG(SSSDBG_CRIT_FAILURE, "my_log: state->group_iter %d\n", state->group_iter); if (state->group_iter >= state->initgr_res->count) { /* All groups were refreshed */ return EOK; } - /* Fire a request */ + if(state->group_iter == 0) { + DEBUG(SSSDBG_CRIT_FAILURE, "my_log: state->group_iter is 0\n"); + if(resp_resolve_group_trigger_request(req, SYSDB_PRIMARY_GROUP_GIDNUM) != EAGAIN) { + DEBUG(SSSDBG_CRIT_FAILURE, "Unable to check SYSDB_PRIMARY_GROUP_GIDNUM\n"); + } + } + + return resp_resolve_group_trigger_request(req, SYSDB_GIDNUM); +} + +static errno_t resp_resolve_group_trigger_request(struct tevent_req *req, const char *attr_name) +{ + struct cache_req_data *data; + uint64_t gid; + struct tevent_req *subreq; + struct resp_resolve_group_names_state *state; + + state = tevent_req_data(req, struct resp_resolve_group_names_state); + gid = ldb_msg_find_attr_as_uint64(state->initgr_res->msgs[state->group_iter], - SYSDB_GIDNUM, 0); + attr_name, 0); + DEBUG(SSSDBG_CRIT_FAILURE, "my_log: gid %ld\n", gid); if (gid == 0) { return EINVAL; } @@ -318,6 +340,7 @@ static errno_t resp_resolve_group_next(struct tevent_req *req) return ENOMEM; } + DEBUG(SSSDBG_CRIT_FAILURE, "my_log: before request gid %ld\n", gid); tevent_req_set_callback(subreq, resp_resolve_group_done, req); return EAGAIN; } @@ -385,6 +408,19 @@ resp_resolve_group_reread_names(struct resp_resolve_group_names_state *state) return ret; } + DEBUG(SSSDBG_FATAL_FAILURE, "my_log: state->initgr_named_res->msgs[0]->num_elements %d\n", + state->initgr_named_res->msgs[0]->num_elements); + int count = 0; + while(count < state->initgr_named_res->msgs[0]->num_elements) { + DEBUG(SSSDBG_FATAL_FAILURE, "my_log: count %d, state->initgr_named_res->msgs[0]->elements[].name %s, state->initgr_named_res->msgs[0]->elements[count].num_values %d, state->initgr_named_res->msgs[0]->elements[count].values->data %s\n", + count, + state->initgr_named_res->msgs[0]->elements[count].name, + state->initgr_named_res->msgs[0]->elements[count].num_values, + state->initgr_named_res->msgs[0]->elements[count].values->data); + + count++; + } + return EOK; }
_______________________________________________ sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedorahosted.org/archives/list/sssd-devel@lists.fedorahosted.org