summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2010-09-16 14:05:35 -0400
committerStephen Gallagher <sgallagh@redhat.com>2010-09-22 09:55:25 -0400
commite36ec25b898ecba4e28b244683c57a4372731042 (patch)
treed76f0355f5ee14ee0a111ee575960ad545a76fc8
parent1286160a84dadf7d74f0541648717b101d68460a (diff)
downloadsssd-e36ec25b898ecba4e28b244683c57a4372731042.tar.gz
sssd-e36ec25b898ecba4e28b244683c57a4372731042.tar.xz
sssd-e36ec25b898ecba4e28b244683c57a4372731042.zip
Fix sysdb_group_dn_name
-rw-r--r--src/db/sysdb.c9
-rw-r--r--src/tests/sysdb-tests.c35
2 files changed, 43 insertions, 1 deletions
diff --git a/src/db/sysdb.c b/src/db/sysdb.c
index 4e1243c08..5f002d844 100644
--- a/src/db/sysdb.c
+++ b/src/db/sysdb.c
@@ -56,6 +56,7 @@ errno_t sysdb_group_dn_name(struct sysdb_ctx *ctx, void *memctx,
const char *_dn, char **_name)
{
struct ldb_dn *dn;
+ const struct ldb_val *val;
*_name = NULL;
dn = ldb_dn_new_fmt(memctx, ctx->ldb, "%s", _dn);
@@ -63,7 +64,13 @@ errno_t sysdb_group_dn_name(struct sysdb_ctx *ctx, void *memctx,
return ENOMEM;
}
- *_name = talloc_strdup(memctx, ldb_dn_get_rdn_name(dn));
+ val = ldb_dn_get_rdn_val(dn);
+ if (val == NULL) {
+ talloc_zfree(dn);
+ return EINVAL;
+ }
+
+ *_name = talloc_strndup(memctx, (char *) val->data, val->length);
if (!*_name) {
talloc_zfree(dn);
return ENOMEM;
diff --git a/src/tests/sysdb-tests.c b/src/tests/sysdb-tests.c
index b320afdd0..98d9a20d4 100644
--- a/src/tests/sysdb-tests.c
+++ b/src/tests/sysdb-tests.c
@@ -2158,6 +2158,38 @@ START_TEST (test_sysdb_update_members)
}
END_TEST
+START_TEST (test_sysdb_group_dn_name)
+{
+ struct sysdb_test_ctx *test_ctx;
+ int ret;
+ struct ldb_dn *group_dn;
+ const char *groupname;
+ char *parsed;
+
+ /* Setup */
+ ret = setup_sysdb_tests(&test_ctx);
+ if (ret != EOK) {
+ fail("Could not set up the test");
+ return;
+ }
+
+ groupname = talloc_asprintf(test_ctx, "testgroup%d", _i);
+ group_dn = sysdb_group_dn(test_ctx->sysdb, test_ctx, "LOCAL", groupname);
+ if (!group_dn || !groupname) {
+ fail("Out of memory");
+ return;
+ }
+
+ ret = sysdb_group_dn_name(test_ctx->sysdb, test_ctx,
+ ldb_dn_get_linearized(group_dn), &parsed);
+ fail_if(ret != EOK, "Cannot get the group name from DN");
+
+ fail_if(strcmp(groupname, parsed) != 0,
+ "Names don't match (got %s)", parsed);
+ talloc_free(test_ctx);
+}
+END_TEST
+
Suite *create_sysdb_suite(void)
{
Suite *s = suite_create("sysdb");
@@ -2176,6 +2208,9 @@ Suite *create_sysdb_suite(void)
/* Verify the groups were added */
tcase_add_loop_test(tc_sysdb, test_sysdb_getgrnam, 28000, 28010);
+ /* sysdb_group_dn_name returns the name of the group in question */
+ tcase_add_loop_test(tc_sysdb, test_sysdb_group_dn_name, 28000, 28010);
+
/* sysdb_store_user allows setting attributes for existing users */
tcase_add_loop_test(tc_sysdb, test_sysdb_store_user_existing, 27000, 27010);