summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2016-06-20 16:11:11 +0200
committerSumit Bose <sbose@redhat.com>2016-07-22 14:17:54 +0200
commit0d10de16f44d79d2d479b1e368fd413e864523e1 (patch)
tree5929b2c7421e9da96ec0b881c6122eb8b69626e0
parent6c896de7e0f922ef564e881edb85e6d766a91dab (diff)
downloadsssd-0d10de16f44d79d2d479b1e368fd413e864523e1.tar.gz
sssd-0d10de16f44d79d2d479b1e368fd413e864523e1.tar.xz
sssd-0d10de16f44d79d2d479b1e368fd413e864523e1.zip
utils: add is_email_from_domain()
-rw-r--r--src/tests/cmocka/test_utils.c21
-rw-r--r--src/util/domain_info_utils.c28
-rw-r--r--src/util/util.h1
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,