From 7af89f77b2ba79ba4e6a73a58012e02750adb34f Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Apr 26 2018 07:44:38 +0000 Subject: [PATCH 1/2] SYSDB: Return ENOENT for mpg with local provider We need to return ENOENT for local provider if user have just magic private group. Otherwise we would not be able to detect such situation in sss_groupshow /* The search itself */ ret = group_show(tctx, tctx->sysdb, tctx->local, pc_recursive, tctx->octx->name, &root); /* Also show MPGs */ if (ret == ENOENT) { ret = group_show_mpg(tctx, tctx->local, tctx->octx->name, &root); } Resolves: https://pagure.io/SSSD/sssd/issue/3644 Merges: https://pagure.io/SSSD/sssd/pull-request/3720 --- diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index 93b967e..c8f7455 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -494,7 +494,7 @@ static int sysdb_search_by_name(TALLOC_CTX *mem_ctx, break; case SYSDB_GROUP: def_attrs[1] = SYSDB_GIDNUM; - if (domain->mpg) { + if (domain->mpg && strcasecmp(domain->provider, "local") != 0) { /* When searching a group by name in a MPG domain, we also * need to search the user space in order to be able to match * a user private group/ diff --git a/src/tests/sysdb-tests.c b/src/tests/sysdb-tests.c index 416dedb..62dce8a 100644 --- a/src/tests/sysdb-tests.c +++ b/src/tests/sysdb-tests.c @@ -1091,6 +1091,11 @@ START_TEST(test_user_group_by_name) return; } + /* setup_sysdb_tests creates local provider and we need to handle + * ldap provider differently with auto_private_groups. + */ + test_ctx->domain->provider = discard_const_p(char, "ldap"); + data = test_data_new_user(test_ctx, _i); fail_if(data == NULL); From 836f0d43aec8ac32416c03e4685aad0ec6760281 Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Apr 26 2018 07:45:13 +0000 Subject: [PATCH 2/2] sysdb-tests: sysdb_search_group_by_name with local provider ldap and local provider are handled differently in sysdb_search_group_by_name. And we need to cover both cases to avoid regressions. Resolves: https://pagure.io/SSSD/sssd/issue/3644 Merges: https://pagure.io/SSSD/sssd/pull-request/3720 --- diff --git a/src/tests/sysdb-tests.c b/src/tests/sysdb-tests.c index 62dce8a..c493376 100644 --- a/src/tests/sysdb-tests.c +++ b/src/tests/sysdb-tests.c @@ -1112,6 +1112,32 @@ START_TEST(test_user_group_by_name) } END_TEST +START_TEST(test_user_group_by_name_local) +{ + struct sysdb_test_ctx *test_ctx; + struct test_data *data; + struct ldb_message *msg; + int ret; + + /* Setup */ + ret = setup_sysdb_tests(&test_ctx); + if (ret != EOK) { + fail("Could not set up the test"); + return; + } + + data = test_data_new_user(test_ctx, _i); + fail_if(data == NULL); + + ret = sysdb_search_group_by_name(data, + data->ctx->domain, + data->username, /* we're searching for the private group */ + NULL, + &msg); + fail_if(ret != ENOENT); +} +END_TEST + START_TEST (test_sysdb_getgrnam) { struct sysdb_test_ctx *test_ctx; @@ -7097,6 +7123,7 @@ Suite *create_sysdb_suite(void) * can be found. Regression test for ticket #3615 */ tcase_add_loop_test(tc_sysdb, test_user_group_by_name, 27000, 27010); + tcase_add_loop_test(tc_sysdb, test_user_group_by_name_local, 27000, 27010); /* Create a new group */ tcase_add_loop_test(tc_sysdb, test_sysdb_add_group, 28000, 28010);