static void test_dns_name_is_root(void) { assert_se(dns_name_is_root("")); assert_se(dns_name_is_root(".")); assert_se(!dns_name_is_root("xxx")); assert_se(!dns_name_is_root("xxx.")); assert_se(!dns_name_is_root("..")); }
int manager_add_search_domain_by_string(Manager *m, const char *domain) { DnsSearchDomain *d; bool route_only; int r; assert(m); assert(domain); route_only = *domain == '~'; if (route_only) domain++; if (dns_name_is_root(domain) || streq(domain, "*")) { route_only = true; domain = "."; } r = dns_search_domain_find(m->search_domains, domain, &d); if (r < 0) return r; if (r > 0) dns_search_domain_move_back_and_unmark(d); else { r = dns_search_domain_new(m, &d, DNS_SEARCH_DOMAIN_SYSTEM, NULL, domain); if (r < 0) return r; } d->route_only = route_only; return 0; }
bool dns_server_limited_domains(DnsServer *server) { DnsSearchDomain *domain; bool domain_restricted = false; /* Check if the server has route-only domains without ~., i. e. whether * it should only be used for particular domains */ if (!server->link) return false; LIST_FOREACH(domains, domain, server->link->search_domains) if (domain->route_only) { domain_restricted = true; /* ~. means "any domain", thus it is a global server */ if (dns_name_is_root(DNS_SEARCH_DOMAIN_NAME(domain))) return false; } return domain_restricted; }