summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2013-08-03 01:02:02 +0200
committerPavel Březina <pbrezina@redhat.com>2013-08-08 11:57:37 +0200
commit569d33c17b4663ce6f84d0b8f2ec6ce6035fd0ab (patch)
tree4e9e64ff9532fa19405a87c8a9551cc67dbcc6c5 /src
parentc901b2d1116e3717f6c3b52717e3f24c3c77fdee (diff)
downloadsssd_unused-569d33c17b4663ce6f84d0b8f2ec6ce6035fd0ab.tar.gz
sssd_unused-569d33c17b4663ce6f84d0b8f2ec6ce6035fd0ab.tar.xz
sssd_unused-569d33c17b4663ce6f84d0b8f2ec6ce6035fd0ab.zip
Add is_host_in_domain() util function
Diffstat (limited to 'src')
-rw-r--r--src/tests/util-tests.c28
-rw-r--r--src/util/util.c15
-rw-r--r--src/util/util.h2
3 files changed, 45 insertions, 0 deletions
diff --git a/src/tests/util-tests.c b/src/tests/util-tests.c
index 4b0d5009..9fcb43be 100644
--- a/src/tests/util-tests.c
+++ b/src/tests/util-tests.c
@@ -808,6 +808,33 @@ START_TEST(test_split_on_separator)
}
END_TEST
+START_TEST(test_is_host_in_domain)
+{
+ struct {
+ const char *host;
+ const char *domain;
+ bool expected;
+ } data[] = {{"example.com", "example.com", true},
+ {"client.example.com", "example.com", true},
+ {"client.child.example.com", "example.com", true},
+ {"example.com", "child.example.com", false},
+ {"client.example.com", "child.example.com", false},
+ {"client.child.example.com", "child.example.com", true},
+ {"my.com", "example.com", false},
+ {"myexample.com", "example.com", false},
+ {NULL, NULL, false}};
+ bool ret;
+ int i;
+
+ for (i = 0; data[i].host != NULL; i++) {
+ ret = is_host_in_domain(data[i].host, data[i].domain);
+ fail_if(ret != data[i].expected, "Host: %s, Domain: %s, Expected: %d, "
+ "Got: %d\n", data[i].host, data[i].domain,
+ data[i].expected, ret);
+ }
+}
+END_TEST
+
Suite *util_suite(void)
{
Suite *s = suite_create("util");
@@ -824,6 +851,7 @@ Suite *util_suite(void)
tcase_add_test (tc_util, test_add_string_to_list);
tcase_add_test (tc_util, test_string_in_list);
tcase_add_test (tc_util, test_split_on_separator);
+ tcase_add_test (tc_util, test_is_host_in_domain);
tcase_set_timeout(tc_util, 60);
TCase *tc_utf8 = tcase_create("utf8");
diff --git a/src/util/util.c b/src/util/util.c
index 63cffe85..5c198979 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -723,3 +723,18 @@ int domain_to_basedn(TALLOC_CTX *memctx, const char *domain, char **basedn)
*basedn = dn;
return EOK;
}
+
+bool is_host_in_domain(const char *host, const char *domain)
+{
+ int diff = strlen(host) - strlen(domain);
+
+ if (diff == 0 && strcmp(host, domain) == 0) {
+ return true;
+ }
+
+ if (diff > 0 && strcmp(host + diff, domain) == 0 && host[diff - 1] == '.') {
+ return true;
+ }
+
+ return false;
+}
diff --git a/src/util/util.h b/src/util/util.h
index 5acc67be..2b4ec1c0 100644
--- a/src/util/util.h
+++ b/src/util/util.h
@@ -525,6 +525,8 @@ void safezero(void *data, size_t size);
int domain_to_basedn(TALLOC_CTX *memctx, const char *domain, char **basedn);
+bool is_host_in_domain(const char *host, const char *domain);
+
/* from nscd.c */
enum nscd_db {
NSCD_DB_PASSWD,