summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2016-11-04 17:17:13 +0100
committerJakub Hrozek <jhrozek@redhat.com>2017-02-22 12:30:16 +0100
commit454cf0c3808a9f6a0c9f79e9796e17c58907ee6c (patch)
treeec643bc41e4e41b546a93741f10752fc4ff8664d
parent08bf6b4a281ef4308119dccbba4e86cf28b505d2 (diff)
downloadsssd-454cf0c3808a9f6a0c9f79e9796e17c58907ee6c.tar.gz
sssd-454cf0c3808a9f6a0c9f79e9796e17c58907ee6c.tar.xz
sssd-454cf0c3808a9f6a0c9f79e9796e17c58907ee6c.zip
check_duplicate: check name member before using it
Resolves https://fedorahosted.org/sssd/ticket/3231 Reviewed-by: Petr Cech <pcech@redhat.com>
-rw-r--r--src/providers/ldap/sdap.c2
-rw-r--r--src/tests/ipa_ldap_opt-tests.c32
2 files changed, 33 insertions, 1 deletions
diff --git a/src/providers/ldap/sdap.c b/src/providers/ldap/sdap.c
index 342667aae..d562a96e2 100644
--- a/src/providers/ldap/sdap.c
+++ b/src/providers/ldap/sdap.c
@@ -137,7 +137,7 @@ static enum duplicate_t check_duplicate(struct sdap_attr_map *map,
for (i = 0; i < num_entries; i++) {
if (strcmp(map[i].sys_name, sysdb_attr) == 0) {
- if (strcmp(map[i].name, ldap_attr) == 0) {
+ if (map[i].name != NULL && strcmp(map[i].name, ldap_attr) == 0) {
return ALREADY_IN_MAP;
} else {
return CONFLICT_WITH_MAP;
diff --git a/src/tests/ipa_ldap_opt-tests.c b/src/tests/ipa_ldap_opt-tests.c
index 622a617c3..30e09f75b 100644
--- a/src/tests/ipa_ldap_opt-tests.c
+++ b/src/tests/ipa_ldap_opt-tests.c
@@ -467,6 +467,37 @@ START_TEST(test_extra_opts_dup)
extra_attrs,
&out_map, &new_size);
fail_unless(ret == ERR_DUP_EXTRA_ATTR, "[%s]", sss_strerror(ret));
+
+ talloc_free(out_map);
+}
+END_TEST
+
+START_TEST(test_extra_opts_empty_name)
+{
+ errno_t ret;
+ char *extra_attrs[] = { discard_const(SYSDB_UUID":bar"),
+ NULL };
+ struct sdap_attr_map *in_map;
+ struct sdap_attr_map *out_map;
+ size_t new_size;
+
+ ret = sdap_copy_map(global_talloc_context, rfc2307_user_map,
+ SDAP_OPTS_USER, &in_map);
+ fail_unless(ret == EOK, "[%s]", strerror(ret));
+
+ /* Make sure the name if really NULL */
+ fail_unless(rfc2307_user_map[SDAP_AT_USER_UUID].name == NULL,
+ "The reference name is not NULL anymore, "
+ "please choose a different attribute.");
+
+ ret = sdap_extend_map(global_talloc_context,
+ in_map,
+ SDAP_OPTS_USER,
+ extra_attrs,
+ &out_map, &new_size);
+ fail_unless(ret == ERR_DUP_EXTRA_ATTR, "[%s]", sss_strerror(ret));
+
+ talloc_free(out_map);
}
END_TEST
@@ -500,6 +531,7 @@ Suite *ipa_ldap_opt_suite (void)
tcase_add_test (tc_extra_opts, test_no_extra_opts);
tcase_add_test (tc_extra_opts, test_extra_opts_neg);
tcase_add_test (tc_extra_opts, test_extra_opts_dup);
+ tcase_add_test (tc_extra_opts, test_extra_opts_empty_name);
suite_add_tcase (s, tc_extra_opts);
return s;