From 6ee5bbf85ce18cf07269a674d96f3a1d0ec7bf6b Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 10 Nov 2010 23:18:34 +0100 Subject: [PATCH] main: warn if /etc/mtab is not a symlink --- TODO | 2 -- src/main.c | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index a97ba9f1..3264bbfa 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,3 @@ -* print error if /etc/mtab is not a symlink to /proc/self/mounts - * oneshot services which do not remain: 'exited' instead of 'dead'? it should be visible in 'systemctl' that they have been run diff --git a/src/main.c b/src/main.c index ea2f0c1a..71e684b1 100644 --- a/src/main.c +++ b/src/main.c @@ -890,6 +890,24 @@ static struct dual_timestamp* parse_initrd_timestamp(struct dual_timestamp *t) { return t; } +static void test_mtab(void) { + char *p; + + if (readlink_malloc("/etc/mtab", &p) >= 0) { + bool b; + + b = streq(p, "/proc/self/mounts"); + free(p); + + if (b) + return; + } + + log_error("/etc/mtab is not a symlink or not pointing to /proc/self/mounts. " + "This is not supported anymore. " + "Please make sure to replace this file by a symlink to avoid incorrect or misleading mount(8) output."); +} + int main(int argc, char *argv[]) { Manager *m = NULL; int r, retval = EXIT_FAILURE; @@ -1048,6 +1066,8 @@ int main(int argc, char *argv[]) { loopback_setup(); mkdir_p("/dev/.systemd/ask-password/", 0755); + + test_mtab(); } if ((r = manager_new(arg_running_as, &m)) < 0) { -- 2.39.5