X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fresolve%2Fresolved-conf.c;h=7af63b0a82289ba7e49d9e5988c39b5bf48c2ffb;hb=75e52a16f9ef476f1d18ec6d9c84e00149b80d03;hp=0def80e3a578d84276348192d3924e64f2715ff1;hpb=4e945a6f7971fd7d1f6b2c62ee3afdaff3c95ce4;p=elogind.git diff --git a/src/resolve/resolved-conf.c b/src/resolve/resolved-conf.c index 0def80e3a..7af63b0a8 100644 --- a/src/resolve/resolved-conf.c +++ b/src/resolve/resolved-conf.c @@ -81,7 +81,6 @@ int config_parse_dnsv( void *userdata) { Manager *m = userdata; - DnsServer **l; int r; assert(filename); @@ -89,24 +88,22 @@ int config_parse_dnsv( assert(rvalue); assert(m); - if (ltype == DNS_SERVER_FALLBACK) - l = &m->fallback_dns_servers; - else - l = &m->dns_servers; - - /* Empty assignment means clear the list */ - if (isempty(rvalue)) { - while (*l) - dns_server_free(*l); - - return 0; + if (isempty(rvalue)) + /* Empty assignment means clear the list */ + manager_flush_dns_servers(m, ltype); + else { + /* Otherwise add to the list */ + r = manager_parse_dns_server(m, ltype, rvalue); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to parse DNS server string '%s'. Ignoring.", rvalue); + return 0; + } } - r = manager_parse_dns_server(m, ltype, rvalue); - if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to parse DNS server string '%s'. Ignoring.", rvalue); - return 0; - } + /* If we have a manual setting, then we stop reading + * /etc/resolv.conf */ + if (ltype == DNS_SERVER_SYSTEM) + m->read_resolv_conf = false; return 0; } @@ -123,14 +120,12 @@ int config_parse_support( void *data, void *userdata) { - Manager *m = userdata; Support support, *v = data; int r; assert(filename); assert(lvalue); assert(rvalue); - assert(m); support = support_from_string(rvalue); if (support < 0) { @@ -150,8 +145,9 @@ int config_parse_support( 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); + return config_parse_many("/etc/systemd/resolved.conf", + CONF_DIRS_NULSTR("systemd/resolved.conf"), + "Resolve\0", + config_item_perf_lookup, resolved_gperf_lookup, + false, m); }