]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: don't complain at early boot if /etc/mtab is not the right symlink
authorLennart Poettering <lennart@poettering.net>
Fri, 13 Jun 2014 18:04:31 +0000 (20:04 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 13 Jun 2014 18:11:59 +0000 (20:11 +0200)
When we boot up with an empty /etc it's ok if the symlink doesn't exist.
We will create it later with tmpfiles.

src/core/main.c

index 29f2d5a2a55f7ca37fabea8eb60b3ba6a69048b9..3aac5d1d97fe281e097864cd543968c84f50ca9e 100644 (file)
@@ -1151,19 +1151,25 @@ static int bump_rlimit_nofile(struct rlimit *saved_rlimit) {
 }
 
 static void test_mtab(void) {
-        char *p;
 
-        /* Check that /etc/mtab is a symlink */
+        static const char ok[] =
+                "/proc/self/mounts\0"
+                "/proc/mounts\0"
+                "../proc/self/mounts\0"
+                "../proc/mounts\0";
 
-        if (readlink_malloc("/etc/mtab", &p) >= 0) {
-                bool b;
+        _cleanup_free_ char *p = NULL;
+        int r;
 
-                b = streq(p, "/proc/self/mounts") || streq(p, "/proc/mounts");
-                free(p);
+        /* Check that /etc/mtab is a symlink to the right place or
+         * non-existing. But certainly not a file, or a symlink to
+         * some weird place... */
 
-                if (b)
-                        return;
-        }
+        r = readlink_malloc("/etc/mtab", &p);
+        if (r == -ENOENT)
+                return;
+        if (r >= 0 && nulstr_contains(ok, p))
+                return;
 
         log_warning("/etc/mtab is not a symlink or not pointing to /proc/self/mounts. "
                     "This is not supported anymore. "