diff options
-rw-r--r-- | src/db/sysdb_ops.c | 42 | ||||
-rw-r--r-- | src/tests/cmocka/test_nss_srv.c | 30 |
2 files changed, 51 insertions, 21 deletions
diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index b7c04cb4a..e0ac5f893 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -4829,20 +4829,44 @@ errno_t sysdb_get_user_members_recursively(TALLOC_CTX *mem_ctx, struct ldb_result **members) { TALLOC_CTX *tmp_ctx; - hash_table_t *users; - hash_table_t *groups; + //hash_table_t *users; + //hash_table_t *groups; int ret; - int hret; - size_t c; - unsigned long count; + //int hret; + //size_t c; + //unsigned long count; + size_t count; struct ldb_result *res; - hash_value_t *values; + //hash_value_t *values; + struct ldb_dn *base_dn; + char *filter; + const char *attrs[] = SYSDB_PW_ATTRS; + struct ldb_message **msgs; tmp_ctx = talloc_new(NULL); if (tmp_ctx == NULL) { return ENOMEM; } + base_dn = sysdb_base_dn(dom->sysdb, tmp_ctx); + if (base_dn == NULL) { + DEBUG(SSSDBG_OP_FAILURE, "sysdb_base_dn failed.\n"); + ret = ENOMEM; + goto done; + } + + filter = talloc_asprintf(tmp_ctx, "(&("SYSDB_UC")("SYSDB_MEMBEROF"=%s))", + ldb_dn_get_linearized(group_dn)); + if (filter == NULL) { + DEBUG(SSSDBG_OP_FAILURE, "talloc_asprintf failed.\n"); + ret = ENOMEM; + goto done; + } + + ret = sysdb_search_entry(tmp_ctx, dom->sysdb, base_dn, LDB_SCOPE_SUBTREE, + filter, attrs, &count, &msgs); + +#if 0 ret = sss_hash_create(tmp_ctx, 10, &users); if (ret != EOK) { DEBUG(SSSDBG_OP_FAILURE, "sss_hash_create failed.\n"); @@ -4864,6 +4888,7 @@ errno_t sysdb_get_user_members_recursively(TALLOC_CTX *mem_ctx, } goto done; } +#endif res = talloc_zero(tmp_ctx, struct ldb_result); if (res == NULL) { @@ -4872,6 +4897,7 @@ errno_t sysdb_get_user_members_recursively(TALLOC_CTX *mem_ctx, goto done; } +#if 0 hret = hash_values(users, &count, &values); if (hret != HASH_SUCCESS) { DEBUG(SSSDBG_OP_FAILURE, "hash_values failed.\n"); @@ -4902,6 +4928,10 @@ errno_t sysdb_get_user_members_recursively(TALLOC_CTX *mem_ctx, res->msgs[c] = (struct ldb_message *) talloc_steal(res->msgs, values[c].ptr); } +#endif + + res->count = count; + res->msgs = talloc_steal(res, msgs); ret = EOK; diff --git a/src/tests/cmocka/test_nss_srv.c b/src/tests/cmocka/test_nss_srv.c index 892bebe63..6fa167aa4 100644 --- a/src/tests/cmocka/test_nss_srv.c +++ b/src/tests/cmocka/test_nss_srv.c @@ -1342,8 +1342,8 @@ static int test_nss_getgrnam_members_check(uint32_t status, int ret; uint32_t nmem; struct group gr; - const char *exp_members[] = { testmember2.pw_name, - testmember1.pw_name }; + const char *exp_members[] = { testmember1.pw_name, + testmember2.pw_name }; struct group expected = { .gr_gid = testgroup_members.gr_gid, .gr_name = testgroup_members.gr_name, @@ -1429,10 +1429,10 @@ static int test_nss_getgrnam_members_check_fqdn(uint32_t status, assert_non_null(tmp_ctx); exp_members[0] = sss_tc_fqname(tmp_ctx, nss_test_ctx->tctx->dom->names, - nss_test_ctx->tctx->dom, testmember2.pw_name); + nss_test_ctx->tctx->dom, testmember1.pw_name); assert_non_null(exp_members[0]); exp_members[1] = sss_tc_fqname(tmp_ctx, nss_test_ctx->tctx->dom->names, - nss_test_ctx->tctx->dom, testmember1.pw_name); + nss_test_ctx->tctx->dom, testmember2.pw_name); assert_non_null(exp_members[1]); expected.gr_name = sss_tc_fqname(tmp_ctx, @@ -1619,11 +1619,11 @@ static int test_nss_getgrnam_check_mix_dom(uint32_t status, tmp_ctx = talloc_new(nss_test_ctx); assert_non_null(tmp_ctx); - exp_members[0] = testmember2.pw_name; - exp_members[1] = testmember1.pw_name; - exp_members[2] = sss_tc_fqname(tmp_ctx, nss_test_ctx->subdom->names, + exp_members[0] = sss_tc_fqname(tmp_ctx, nss_test_ctx->subdom->names, nss_test_ctx->subdom, submember1.pw_name); - assert_non_null(exp_members[2]); + assert_non_null(exp_members[0]); + exp_members[1] = testmember1.pw_name; + exp_members[2] = testmember2.pw_name; assert_int_equal(status, EOK); @@ -1682,14 +1682,14 @@ static int test_nss_getgrnam_check_mix_dom_fqdn(uint32_t status, tmp_ctx = talloc_new(nss_test_ctx); assert_non_null(tmp_ctx); - exp_members[0] = sss_tc_fqname(tmp_ctx, nss_test_ctx->tctx->dom->names, - nss_test_ctx->tctx->dom, testmember2.pw_name); + exp_members[0] = sss_tc_fqname(tmp_ctx, nss_test_ctx->subdom->names, + nss_test_ctx->subdom, submember1.pw_name); assert_non_null(exp_members[0]); exp_members[1] = sss_tc_fqname(tmp_ctx, nss_test_ctx->tctx->dom->names, nss_test_ctx->tctx->dom, testmember1.pw_name); assert_non_null(exp_members[1]); - exp_members[2] = sss_tc_fqname(tmp_ctx, nss_test_ctx->subdom->names, - nss_test_ctx->subdom, submember1.pw_name); + exp_members[2] = sss_tc_fqname(tmp_ctx, nss_test_ctx->tctx->dom->names, + nss_test_ctx->tctx->dom, testmember2.pw_name); assert_non_null(exp_members[2]); expected.gr_name = sss_tc_fqname(tmp_ctx, @@ -1752,16 +1752,16 @@ static int test_nss_getgrnam_check_mix_subdom(uint32_t status, tmp_ctx = talloc_new(nss_test_ctx); assert_non_null(tmp_ctx); - exp_members[1] = sss_tc_fqname(tmp_ctx, nss_test_ctx->subdom->names, + exp_members[0] = sss_tc_fqname(tmp_ctx, nss_test_ctx->subdom->names, nss_test_ctx->subdom, submember1.pw_name); assert_non_null(exp_members[1]); - exp_members[2] = sss_tc_fqname(tmp_ctx, nss_test_ctx->subdom->names, + exp_members[1] = sss_tc_fqname(tmp_ctx, nss_test_ctx->subdom->names, nss_test_ctx->subdom, submember2.pw_name); assert_non_null(exp_members[2]); /* Important: this member is from a non-qualified domain, so his name will * not be qualified either */ - exp_members[0] = testmember1.pw_name; + exp_members[2] = testmember1.pw_name; expected.gr_name = sss_tc_fqname(tmp_ctx, nss_test_ctx->subdom->names, nss_test_ctx->subdom, testsubdomgroup.gr_name); |