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

Reply via email to