From 3f7b69c3af7b810443a94a1004d41b87e5ca79d8 Mon Sep 17 00:00:00 2001
From: Sumit Bose <sbose@redhat.com>
Date: Mon, 20 Jun 2016 16:11:11 +0200
Subject: [PATCH 55/62] utils: add is_email_from_domain()
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
(cherry picked from commit 04d4c4d45f3942a813b7f772737f801f877f4e64)
---
src/tests/cmocka/test_utils.c | 21 +++++++++++++++++++++
src/util/domain_info_utils.c | 27 +++++++++++++++++++++++++++
src/util/util.h | 1 +
3 files changed, 49 insertions(+)
diff --git a/src/tests/cmocka/test_utils.c b/src/tests/cmocka/test_utils.c
index 5349accc5c6b55f7d725bfdeaf318b90289880dd..09273692968b544aed88de00c747e85ff0b6695c 100644
--- a/src/tests/cmocka/test_utils.c
+++ b/src/tests/cmocka/test_utils.c
@@ -1842,6 +1842,25 @@ static void test_sss_get_domain_mappings_content(void **state)
* capaths might not be as expected. */
}
+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;
@@ -1870,6 +1889,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 587a6b993d2bd70662df8e0b0d5963fa00c84cf8..0feda148bd44b9cefc43c094ddc5a72820412322 100644
--- a/src/util/domain_info_utils.c
+++ b/src/util/domain_info_utils.c
@@ -824,3 +824,30 @@ 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 122be90b967fb7793adaff95f3754d7a199fcf48..4449315f8b1a79ec915bc340b46188c440a27fa3 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.4.11