From 88118645466c50c52a81e5ff38d66ecb2dfda2a7 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Mon, 20 Jun 2016 16:11:11 +0200 Subject: [PATCH 07/14] utils: add is_email_from_domain() --- src/tests/cmocka/test_utils.c | 21 +++++++++++++++++++++ src/util/domain_info_utils.c | 28 ++++++++++++++++++++++++++++ src/util/util.h | 1 + 3 files changed, 50 insertions(+) diff --git a/src/tests/cmocka/test_utils.c b/src/tests/cmocka/test_utils.c index b08b19708bb59a076a79805fa37a15924152b8e2..ce6240483cbe9ed5ef172a840260df3da9268643 100644 --- a/src/tests/cmocka/test_utils.c +++ b/src/tests/cmocka/test_utils.c @@ -1682,6 +1682,25 @@ static void test_sss_output_name(void **state) assert_true(check_leaks_pop(global_talloc_context) == true); } +static void test_is_email_from_domain(void **state) +{ + struct dom_list_test_ctx *test_ctx = talloc_get_type(*state, + struct dom_list_test_ctx); + struct sss_domain_info *d; + + d = find_domain_by_name(test_ctx->dom_list, "name_0.dom", false); + assert_non_null(d); + + assert_false(is_email_from_domain(NULL, NULL)); + assert_false(is_email_from_domain("hello", NULL)); + assert_false(is_email_from_domain(NULL, d)); + assert_false(is_email_from_domain("hello", d)); + assert_false(is_email_from_domain("hello@hello", d)); + + assert_true(is_email_from_domain("hello@name_0.dom", d)); + assert_true(is_email_from_domain("hello@NaMe_0.DoM", d)); +} + int main(int argc, const char *argv[]) { poptContext pc; @@ -1710,6 +1729,8 @@ int main(int argc, const char *argv[]) setup_dom_list, teardown_dom_list), cmocka_unit_test_setup_teardown(test_find_domain_by_name_disabled, setup_dom_list, teardown_dom_list), + cmocka_unit_test_setup_teardown(test_is_email_from_domain, + setup_dom_list, teardown_dom_list), cmocka_unit_test_setup_teardown(test_sss_names_init, confdb_test_setup, diff --git a/src/util/domain_info_utils.c b/src/util/domain_info_utils.c index 360f70376c472466168d93d45b6c547d51dd18c6..2ef4eacf8905fb2b7edcc3cc76e4a0ade41fe31a 100644 --- a/src/util/domain_info_utils.c +++ b/src/util/domain_info_utils.c @@ -749,3 +749,31 @@ void sss_domain_set_state(struct sss_domain_info *dom, { dom->state = state; } + +bool is_email_from_domain(const char *email, struct sss_domain_info *dom) +{ + const char *p; + + if (email == NULL || dom == NULL) { + return false; + } + + p = strchr(email, '@'); + if (p == NULL) { + DEBUG(SSSDBG_TRACE_ALL, + "Input [%s] does not look like an email address.\n", email); + return false; + } + + if (strcasecmp(p+1, dom->name) == 0) { + DEBUG(SSSDBG_TRACE_ALL, "Email [%s] is from domain [%s].\n", email, + dom->name); + return true; + } + + DEBUG(SSSDBG_TRACE_ALL, "Email [%s] is not from domain [%s].\n", email, + dom->name); + + return false; +} + diff --git a/src/util/util.h b/src/util/util.h index 8a5caa52c2dc5243c3ae51c5a38fd65a949f4ac4..ddb2158c207631eb2b81c8a8ea9b2a27ff526237 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -514,6 +514,7 @@ struct sss_domain_info *find_domain_by_sid(struct sss_domain_info *domain, enum sss_domain_state sss_domain_get_state(struct sss_domain_info *dom); void sss_domain_set_state(struct sss_domain_info *dom, enum sss_domain_state state); +bool is_email_from_domain(const char *email, struct sss_domain_info *dom); struct sss_domain_info* sss_get_domain_by_sid_ldap_fallback(struct sss_domain_info *domain, -- 2.1.0