diff options
author | Sumit Bose <sbose@redhat.com> | 2016-11-04 17:17:13 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2017-02-22 12:30:16 +0100 |
commit | 454cf0c3808a9f6a0c9f79e9796e17c58907ee6c (patch) | |
tree | ec643bc41e4e41b546a93741f10752fc4ff8664d | |
parent | 08bf6b4a281ef4308119dccbba4e86cf28b505d2 (diff) | |
download | sssd-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.c | 2 | ||||
-rw-r--r-- | src/tests/ipa_ldap_opt-tests.c | 32 |
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; |