Blame SOURCES/0067-ipa-compare-DNs-instead-of-group-names-in-ipa_s2n_sa.patch

9f2ebf
From 118860519777791368520f4e92ecbf2ef60cb7db Mon Sep 17 00:00:00 2001
9f2ebf
From: Sumit Bose <sbose@redhat.com>
9f2ebf
Date: Mon, 20 Nov 2017 16:45:45 +0100
9f2ebf
Subject: [PATCH 67/67] ipa: compare DNs instead of group names in
9f2ebf
 ipa_s2n_save_objects()
9f2ebf
MIME-Version: 1.0
9f2ebf
Content-Type: text/plain; charset=UTF-8
9f2ebf
Content-Transfer-Encoding: 8bit
9f2ebf
9f2ebf
If group names are used to compare the current list of group memberships
9f2ebf
returned by the server with the one from the cache some groups might end
9f2ebf
up in the wrong result list if group names are overridden. This
9f2ebf
ambiguity can be resolved by using the DNs of the cached objects.
9f2ebf
9f2ebf
Related to https://pagure.io/SSSD/sssd/issue/3579
9f2ebf
9f2ebf
Reviewed-by: Fabiano FidĂȘncio <fidencio@redhat.com>
9f2ebf
(cherry picked from commit a52226c651308a0a7732544b492eb4db56b84f1d)
9f2ebf
---
9f2ebf
 src/providers/ipa/ipa_s2n_exop.c | 31 ++++++++++++-------------------
9f2ebf
 1 file changed, 12 insertions(+), 19 deletions(-)
9f2ebf
9f2ebf
diff --git a/src/providers/ipa/ipa_s2n_exop.c b/src/providers/ipa/ipa_s2n_exop.c
9f2ebf
index 49c393e9a1eb19ab683949cf633a6838274bc0fe..8b97f78620f19b0708e8a480cb72fd7f12d96dfb 100644
9f2ebf
--- a/src/providers/ipa/ipa_s2n_exop.c
9f2ebf
+++ b/src/providers/ipa/ipa_s2n_exop.c
9f2ebf
@@ -2185,10 +2185,9 @@ static errno_t ipa_s2n_save_objects(struct sss_domain_info *dom,
9f2ebf
     struct ldb_result *res;
9f2ebf
     enum sysdb_member_type type;
9f2ebf
     char **sysdb_grouplist;
9f2ebf
-    char **add_groups;
9f2ebf
     char **add_groups_dns;
9f2ebf
-    char **del_groups;
9f2ebf
     char **del_groups_dns;
9f2ebf
+    char **groups_dns;
9f2ebf
     bool in_transaction = false;
9f2ebf
     int tret;
9f2ebf
     struct sysdb_attrs *gid_override_attrs = NULL;
9f2ebf
@@ -2514,33 +2513,27 @@ static errno_t ipa_s2n_save_objects(struct sss_domain_info *dom,
9f2ebf
             }
9f2ebf
 
9f2ebf
             if (attrs->response_type == RESP_USER_GROUPLIST) {
9f2ebf
-                ret = get_sysdb_grouplist(tmp_ctx, dom->sysdb, dom, name,
9f2ebf
-                                          &sysdb_grouplist);
9f2ebf
+                ret = get_sysdb_grouplist_dn(tmp_ctx, dom->sysdb, dom, name,
9f2ebf
+                                             &sysdb_grouplist);
9f2ebf
                 if (ret != EOK) {
9f2ebf
                     DEBUG(SSSDBG_OP_FAILURE, "get_sysdb_grouplist failed.\n");
9f2ebf
                     goto done;
9f2ebf
                 }
9f2ebf
 
9f2ebf
-                ret = diff_string_lists(tmp_ctx, attrs->groups,
9f2ebf
-                                        sysdb_grouplist, &add_groups,
9f2ebf
-                                        &del_groups, NULL);
9f2ebf
+                ret = get_groups_dns(tmp_ctx, dom, attrs->groups, &groups_dns);
9f2ebf
+                if (ret != EOK) {
9f2ebf
+                    DEBUG(SSSDBG_OP_FAILURE, "get_groups_dns failed.\n");
9f2ebf
+                    goto done;
9f2ebf
+                }
9f2ebf
+
9f2ebf
+                ret = diff_string_lists(tmp_ctx, groups_dns,
9f2ebf
+                                        sysdb_grouplist, &add_groups_dns,
9f2ebf
+                                        &del_groups_dns, NULL);
9f2ebf
                 if (ret != EOK) {
9f2ebf
                     DEBUG(SSSDBG_OP_FAILURE, "diff_string_lists failed.\n");
9f2ebf
                     goto done;
9f2ebf
                 }
9f2ebf
 
9f2ebf
-                ret = get_groups_dns(tmp_ctx, dom, add_groups, &add_groups_dns);
9f2ebf
-                if (ret != EOK) {
9f2ebf
-                    DEBUG(SSSDBG_OP_FAILURE, "get_groups_dns failed.\n");
9f2ebf
-                    goto done;
9f2ebf
-                }
9f2ebf
-
9f2ebf
-                ret = get_groups_dns(tmp_ctx, dom, del_groups, &del_groups_dns);
9f2ebf
-                if (ret != EOK) {
9f2ebf
-                    DEBUG(SSSDBG_OP_FAILURE, "get_groups_dns failed.\n");
9f2ebf
-                    goto done;
9f2ebf
-                }
9f2ebf
-
9f2ebf
                 DEBUG(SSSDBG_TRACE_INTERNAL, "Updating memberships for %s\n",
9f2ebf
                                              name);
9f2ebf
                 ret = sysdb_update_members_dn(dom, name, SYSDB_MEMBER_USER,
9f2ebf
-- 
9f2ebf
2.14.3
9f2ebf