Example #1
0
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;
}
Example #3
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;
}