diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | fixme | 2 | ||||
-rw-r--r-- | src/main.c | 10 |
3 files changed, 11 insertions, 2 deletions
diff --git a/Makefile.am b/Makefile.am index 0e7c489ca0..76662b1826 100644 --- a/Makefile.am +++ b/Makefile.am @@ -44,6 +44,7 @@ AM_CPPFLAGS = \ -DSESSION_DATA_UNIT_PATH=\"$(sessionunitdir)\" \ -DCGROUP_AGENT_PATH=\"$(rootlibexecdir)/systemd-cgroups-agent\" \ -DSYSTEMD_BINARY_PATH=\"$(rootbindir)/systemd\" \ + -DSYSTEMCTL_BINARY_PATH=\"$(rootbindir)/systemctl\" \ -I $(top_srcdir)/src rootbin_PROGRAMS = \ @@ -73,8 +73,6 @@ * /sbin/shutdown argv[2..] message -* exec /sbin/telinit from init - * discuss NOTIFY_SOCKET, make it configurable? security implications? Regularly: diff --git a/src/main.c b/src/main.c index 99f6bdd712..8a7f18ea9c 100644 --- a/src/main.c +++ b/src/main.c @@ -610,6 +610,16 @@ int main(int argc, char *argv[]) { FDSet *fds = NULL; bool reexecute = false; + if (getpid() != 1 && strstr(program_invocation_short_name, "init")) { + /* This is compatbility support for SysV, where + * calling init as a user is identical to telinit. */ + + errno = -ENOENT; + execv(SYSTEMCTL_BINARY_PATH, argv); + log_error("Failed to exec " SYSTEMCTL_BINARY_PATH ": %m"); + return 1; + } + log_show_color(true); log_show_location(false); log_set_max_level(LOG_DEBUG); |