-static int parse_dns_server_string(Manager *m, const char *string) {
- const char *word, *state;
- size_t length;
- int r;
-
- assert(m);
- assert(string);
-
- FOREACH_WORD_QUOTED(word, length, string, state) {
- char buffer[length+1];
- int family;
- union in_addr_union addr;
-
- memcpy(buffer, word, length);
- buffer[length] = 0;
-
- r = in_addr_from_string_auto(buffer, &family, &addr);
- if (r < 0) {
- log_warning("Ignoring invalid DNS address '%s'", buffer);
- continue;
- }
-
- /* filter out duplicates */
- if (manager_find_dns_server(m, family, &addr))
- continue;
-
- r = dns_server_new(m, NULL, NULL, family, &addr);
- if (r < 0)
- return r;
- }
- /* do not warn about state here, since probably systemd already did */
-
- return 0;
-}
-
-int config_parse_dnsv(
- const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- unsigned section_line,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
-
- Manager *m = userdata;
- int r;
-
- assert(filename);
- assert(lvalue);
- assert(rvalue);
- assert(m);
-
- /* Empty assignment means clear the list */
- if (isempty(rvalue)) {
- while (m->dns_servers)
- dns_server_free(m->dns_servers);
-
- return 0;
- }
-
- r = parse_dns_server_string(m, rvalue);
- if (r < 0) {
- log_error("Failed to parse DNS server string");
- return r;
- }
-
- return 0;
-}
-
-int manager_parse_config_file(Manager *m) {
- assert(m);
-
- return config_parse(NULL, "/etc/systemd/resolved.conf", NULL,
- "Resolve\0",
- config_item_perf_lookup, resolved_gperf_lookup,
- false, false, true, m);
-}
-