summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2016-07-26 21:30:41 +0200
committerSumit Bose <sbose@redhat.com>2016-07-26 21:30:41 +0200
commite7c0b818abcef3badaa2d9d122f92b0632e38ab5 (patch)
tree8579ecf77e3eddee12080247281e32655adc8d31
parent57ec193fd6a4d5014ef47a720dae74fdf6df2207 (diff)
downloadsssd-e7c0b818abcef3badaa2d9d122f92b0632e38ab5.tar.gz
sssd-e7c0b818abcef3badaa2d9d122f92b0632e38ab5.tar.xz
sssd-e7c0b818abcef3badaa2d9d122f92b0632e38ab5.zip
WIP use memberoffill_grent_with_view
-rw-r--r--src/db/sysdb_ops.c42
-rw-r--r--src/tests/cmocka/test_nss_srv.c30
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);