URL: https://github.com/SSSD/sssd/pull/202
Author: celestian
 Title: #202: T3315 infopipe group users master
Action: opened

PR body:
"""
Reproducer is:
```
# PREPARING
ipa user-add --first=Test --last=User [email protected] test_user
ipa group-add test_group

# REPRODUCER
systemctl daemon-reload
sudo su -c "truncate -s0 /var/log/sssd/*.log"
sudo su -c "rm -f /var/lib/sss/db/*" 
sudo su -c "rm -f /var/lib/sss/mc/*"
sudo systemctl restart sssd.service

ipa group-add-member --users=test_user test_group
sss_cache -UG
getent group test_group

# getent show user test_user in test_group, but dbus call doesn't:

dbus-send --print-reply --system --dest=org.freedesktop.sssd.infopipe \
    /org/freedesktop/sssd/infopipe/Groups \
    org.freedesktop.sssd.infopipe.Groups.FindByName \
    string:test_group

# command above returns <RESULT_OBJECT>

# We need to update group in cache because method 
"org.freedesktop.DBus.Properties.GetAll"
# doesn't update records (<-- this should be better commented)

dbus-send --print-reply --system --dest=org.freedesktop.sssd.infopipe \
   <RESULT_OBJECT>  \
    org.freedesktop.sssd.infopipe.Groups.Group.UpdateMemberList

# --> this call doesn't work without patch "IFP: Parse ghost name in 
Group.UpdateMemberList"
# after this call group is updated in cache and we can call: 

dbus-send --system --print-reply --dest=org.freedesktop.sssd.infopipe \
    <RESULT_OBJECT> \
    org.freedesktop.DBus.Properties.GetAll \
    string:"org.freedesktop.sssd.infopipe.Groups.Group"

# We expect test_user in result users array.

# CLEANING
ipa group-del test_group
ipa user-del test_user
```
"""

To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/202/head:pr202
git checkout pr202
From 3560f62d331db55c903a394fbcb02351e896dee8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20=C4=8Cech?= <[email protected]>
Date: Thu, 16 Mar 2017 15:26:34 +0100
Subject: [PATCH 1/2] IFP: Parse ghost name in Group.UpdateMemberList

Ghost users are stored in FQ name form in cache. The function
cache_req_user_by_name_send() expects original name.

Resolves:
https://pagure.io/SSSD/sssd/issue/3315
---
 src/responder/ifp/ifp_groups.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/responder/ifp/ifp_groups.c b/src/responder/ifp/ifp_groups.c
index 94d1e84..c66c0e8 100644
--- a/src/responder/ifp/ifp_groups.c
+++ b/src/responder/ifp/ifp_groups.c
@@ -592,6 +592,8 @@ errno_t resolv_ghosts_step(struct tevent_req *req)
 {
     struct resolv_ghosts_state *state;
     struct tevent_req *subreq;
+    const char *ghost_name;
+    errno_t ret;
 
     state = tevent_req_data(req, struct resolv_ghosts_state);
 
@@ -599,10 +601,19 @@ errno_t resolv_ghosts_step(struct tevent_req *req)
         return EOK;
     }
 
+    ret = sss_parse_internal_fqname(state, state->ghosts[state->index],
+                                    &ghost_name, NULL);
+    if (ret != EOK) {
+        DEBUG(SSSDBG_OP_FAILURE,
+             "sss_parse_internal_fqname failed to split [%s].\n",
+             state->ghosts[state->index]);
+        return EINVAL;
+    }
+
     subreq = cache_req_user_by_name_send(state, state->ev, state->ctx->rctx,
                                          state->ctx->rctx->ncache, 0,
                                          state->domain->name,
-                                         state->ghosts[state->index]);
+                                         ghost_name);
     if (subreq == NULL) {
         return ENOMEM;
     }

From 0dd67527ec0aaf4c715f6f0edade8cf2de4ed101 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20=C4=8Cech?= <[email protected]>
Date: Wed, 15 Mar 2017 14:23:31 +0100
Subject: [PATCH 2/2] IFP: ldb_msg_find_element empty result fix

Resolves:
https://pagure.io/SSSD/sssd/issue/3315
---
 src/responder/ifp/ifp_groups.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/src/responder/ifp/ifp_groups.c b/src/responder/ifp/ifp_groups.c
index c66c0e8..893abe8 100644
--- a/src/responder/ifp/ifp_groups.c
+++ b/src/responder/ifp/ifp_groups.c
@@ -561,12 +561,7 @@ static void resolv_ghosts_group_done(struct tevent_req *subreq)
     }
 
     el = ldb_msg_find_element(group, SYSDB_GHOST);
-    if (el == NULL) {
-        ret = ENOMEM;
-        goto done;
-    }
-
-    if (el->num_values == 0) {
+    if (el == NULL || el->num_values == 0) {
         ret = EOK;
         goto done;
     }
_______________________________________________
sssd-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to