]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: make sure FallbackDNS= overrides built-in servers, doesn't extend them
authorLennart Poettering <lennart@poettering.net>
Tue, 24 Nov 2015 17:08:35 +0000 (18:08 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 25 Nov 2015 20:58:37 +0000 (21:58 +0100)
Closes #342.

src/resolve/resolved-conf.c
src/resolve/resolved-manager.c
src/resolve/resolved-manager.h
src/resolve/resolved.c

index fe88006fb73ef001f2b43ae244bb237552fbb924..7e3b61381676262ba19c46c084cbe016ffe954e5 100644 (file)
@@ -116,6 +116,8 @@ int config_parse_dns_servers(
          * /etc/resolv.conf */
         if (ltype == DNS_SERVER_SYSTEM)
                 m->read_resolv_conf = false;
+        if (ltype == DNS_SERVER_FALLBACK)
+                m->need_builtin_fallbacks = false;
 
         return 0;
 }
@@ -155,11 +157,24 @@ int config_parse_support(
 }
 
 int manager_parse_config_file(Manager *m) {
+        int r;
+
         assert(m);
 
-        return config_parse_many(PKGSYSCONFDIR "/resolved.conf",
-                                 CONF_PATHS_NULSTR("systemd/resolved.conf.d"),
-                                 "Resolve\0",
-                                 config_item_perf_lookup, resolved_gperf_lookup,
-                                 false, m);
+        r = config_parse_many(PKGSYSCONFDIR "/resolved.conf",
+                              CONF_PATHS_NULSTR("systemd/resolved.conf.d"),
+                              "Resolve\0",
+                              config_item_perf_lookup, resolved_gperf_lookup,
+                              false, m);
+        if (r < 0)
+                return r;
+
+        if (m->need_builtin_fallbacks) {
+                r = manager_parse_dns_server_string_and_warn(m, DNS_SERVER_FALLBACK, DNS_SERVERS);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+
 }
index 5ebf1926be66c64677132a9997e2837c62b11027..c3c61a0893c40511905ddcb83d509295be31cb93 100644 (file)
@@ -476,10 +476,7 @@ int manager_new(Manager **ret) {
 
         m->llmnr_support = SUPPORT_YES;
         m->read_resolv_conf = true;
-
-        r = manager_parse_dns_server_string_and_warn(m, DNS_SERVER_FALLBACK, DNS_SERVERS);
-        if (r < 0)
-                return r;
+        m->need_builtin_fallbacks = true;
 
         r = sd_event_default(&m->event);
         if (r < 0)
index 08dd61fb1440494f4e82387569218e4a4da0d894..8a716b3cebdb5585135194923c2f725bfe3ece33 100644 (file)
@@ -70,7 +70,8 @@ struct Manager {
         LIST_HEAD(DnsServer, fallback_dns_servers);
         DnsServer *current_dns_server;
 
-        bool read_resolv_conf;
+        bool need_builtin_fallbacks:1;
+        bool read_resolv_conf:1;
         usec_t resolv_conf_mtime;
 
         LIST_HEAD(DnsScope, dns_scopes);
index e07f49ce17490539d135cb53b22358684d4ac60d..be406b71fe7e09ce23702c0709ef2fcbd8c25c96 100644 (file)
@@ -82,8 +82,10 @@ int main(int argc, char *argv[]) {
         }
 
         r = manager_parse_config_file(m);
-        if (r < 0)
-                log_warning_errno(r, "Failed to parse configuration file: %m");
+        if (r < 0) {
+                log_error_errno(r, "Failed to parse configuration file: %m");
+                goto finish;
+        }
 
         r = manager_start(m);
         if (r < 0) {