From 454cf0c3808a9f6a0c9f79e9796e17c58907ee6c Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Fri, 4 Nov 2016 17:17:13 +0100 Subject: check_duplicate: check name member before using it Resolves https://fedorahosted.org/sssd/ticket/3231 Reviewed-by: Petr Cech --- src/providers/ldap/sdap.c | 2 +- src/tests/ipa_ldap_opt-tests.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) 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; -- cgit