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; }
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; } }
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); }