diff options
author | Sumit Bose <sbose@redhat.com> | 2016-06-20 16:11:11 +0200 |
---|---|---|
committer | Sumit Bose <sbose@redhat.com> | 2016-07-22 14:17:54 +0200 |
commit | 0d10de16f44d79d2d479b1e368fd413e864523e1 (patch) | |
tree | 5929b2c7421e9da96ec0b881c6122eb8b69626e0 | |
parent | 6c896de7e0f922ef564e881edb85e6d766a91dab (diff) | |
download | sssd-0d10de16f44d79d2d479b1e368fd413e864523e1.tar.gz sssd-0d10de16f44d79d2d479b1e368fd413e864523e1.tar.xz sssd-0d10de16f44d79d2d479b1e368fd413e864523e1.zip |
utils: add is_email_from_domain()
-rw-r--r-- | src/tests/cmocka/test_utils.c | 21 | ||||
-rw-r--r-- | src/util/domain_info_utils.c | 28 | ||||
-rw-r--r-- | src/util/util.h | 1 |
3 files changed, 50 insertions, 0 deletions
diff --git a/src/tests/cmocka/test_utils.c b/src/tests/cmocka/test_utils.c index b08b19708..ce6240483 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 360f70376..2ef4eacf8 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 8a5caa52c..ddb2158c2 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, |