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 #2
0
static int link_update_search_domains(Link *l) {
        _cleanup_strv_free_ char **domains = NULL;
        char **i;
        int r;

        assert(l);

        r = sd_network_link_get_domains(l->ifindex, &domains);
        if (r < 0)
                goto clear;

        dns_search_domain_mark_all(l->search_domains);

        STRV_FOREACH(i, domains) {
                DnsSearchDomain *d;

                r = dns_search_domain_find(l->search_domains, *i, &d);
                if (r < 0)
                        goto clear;

                if (r > 0)
                        dns_search_domain_move_back_and_unmark(d);
                else {
                        r = dns_search_domain_new(l->manager, NULL, DNS_SEARCH_DOMAIN_LINK, l, *i);
                        if (r < 0)
                                goto clear;
                }
        }
Example #3
0
int manager_add_search_domain_by_string(Manager *m, const char *domain) {
        DnsSearchDomain *d;
        int r;

        assert(m);
        assert(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);
                return 0;
        }

        return dns_search_domain_new(m, NULL, DNS_SEARCH_DOMAIN_SYSTEM, NULL, domain);
}