]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: don't clear the server list too eagerly
authorLennart Poettering <lennart@poettering.net>
Thu, 26 Nov 2015 23:15:28 +0000 (00:15 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 26 Nov 2015 23:46:51 +0000 (00:46 +0100)
If /etc/resolv.conf is missing, this should not result in the server
list to be cleared, after all the native data from resolved.conf
shouldn't be flushed out then. Hence flush out the data only if
/etc/resolv.conf exists, but we cannot read it for some reason.

src/resolve/resolved-resolv-conf.c

index 744969b7453451e56988bfbb08cee334655611e5..63bde1c2f4194ae54269d6917b8fd7fb8d8ecc82 100644 (file)
@@ -50,9 +50,9 @@ int manager_read_resolv_conf(Manager *m) {
         r = stat("/etc/resolv.conf", &st);
         if (r < 0) {
                 if (errno == ENOENT)
-                        r = 0;
-                else
-                        r = log_warning_errno(errno, "Failed to stat /etc/resolv.conf: %m");
+                        return 0;
+
+                r = log_warning_errno(errno, "Failed to stat /etc/resolv.conf: %m");
                 goto clear;
         }
 
@@ -61,22 +61,18 @@ int manager_read_resolv_conf(Manager *m) {
         if (t == m->resolv_conf_mtime)
                 return 0;
 
-        m->resolv_conf_mtime = t;
-
         /* Is it symlinked to our own file? */
         if (stat("/run/systemd/resolve/resolv.conf", &own) >= 0 &&
             st.st_dev == own.st_dev &&
-            st.st_ino == own.st_ino) {
-                r = 0;
-                goto clear;
-        }
+            st.st_ino == own.st_ino)
+                return 0;
 
         f = fopen("/etc/resolv.conf", "re");
         if (!f) {
                 if (errno == ENOENT)
-                        r = 0;
-                else
-                        r = log_warning_errno(errno, "Failed to open /etc/resolv.conf: %m");
+                        return 0;
+
+                r = log_warning_errno(errno, "Failed to open /etc/resolv.conf: %m");
                 goto clear;
         }
 
@@ -115,6 +111,8 @@ int manager_read_resolv_conf(Manager *m) {
                 }
         }
 
+        m->resolv_conf_mtime = t;
+
         /* Flush out all servers and search domains that are still
          * marked. Those are then ones that didn't appear in the new
          * /etc/resolv.conf */