summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--fixme2
-rw-r--r--src/main.c10
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 = \
diff --git a/fixme b/fixme
index 374ff4107e..23fda7e57e 100644
--- a/fixme
+++ b/fixme
@@ -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);