X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmain.c;h=71e684b1bda9f34cb5889c41bc30ff7a683ea3eb;hb=62347bc24a695bc0527f663af5fe136b1a993573;hp=cd73ee2cffd4d6f0a26f85fadde37182b1fac78d;hpb=e9ddabc246ced239cbce436e16792dc4c3d1b52d;p=elogind.git diff --git a/src/main.c b/src/main.c index cd73ee2cf..71e684b1b 100644 --- a/src/main.c +++ b/src/main.c @@ -31,6 +31,7 @@ #include #include #include +#include #include "manager.h" #include "log.h" @@ -889,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; @@ -896,6 +915,7 @@ int main(int argc, char *argv[]) { bool reexecute = false; const char *shutdown_verb = NULL; dual_timestamp initrd_timestamp = { 0ULL, 0ULL }; + char systemd[] = "systemd"; if (getpid() != 1 && strstr(program_invocation_short_name, "init")) { /* This is compatbility support for SysV, where @@ -907,6 +927,14 @@ int main(int argc, char *argv[]) { return 1; } + /* If we get started via the /sbin/init symlink then we are + called 'init'. After a subsequent reexecution we are then + called 'systemd'. That is confusing, hence let's call us + systemd right-away. */ + + program_invocation_short_name = systemd; + prctl(PR_SET_NAME, systemd); + log_show_color(isatty(STDERR_FILENO) > 0); log_show_location(false); log_set_max_level(LOG_INFO); @@ -1038,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) {