chiark / gitweb /
tests: use assert_se instead of assert
[elogind.git] / src / resolve / resolved-conf.c
index 0def80e3a578d84276348192d3924e64f2715ff1..7af63b0a82289ba7e49d9e5988c39b5bf48c2ffb 100644 (file)
@@ -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);
 }