#include "kmod-setup.h"
#include "load-fragment.h"
#include "fdset.h"
+#include "special.h"
static enum {
ACTION_RUN,
static int parse_proc_cmdline_word(const char *word) {
static const char * const rlmap[] = {
- "single", SPECIAL_RUNLEVEL1_TARGET,
- "-s", SPECIAL_RUNLEVEL1_TARGET,
- "s", SPECIAL_RUNLEVEL1_TARGET,
- "S", SPECIAL_RUNLEVEL1_TARGET,
- "1", SPECIAL_RUNLEVEL1_TARGET,
+ "single", SPECIAL_RESCUE_TARGET,
+ "-s", SPECIAL_RESCUE_TARGET,
+ "s", SPECIAL_RESCUE_TARGET,
+ "S", SPECIAL_RESCUE_TARGET,
+ "1", SPECIAL_RESCUE_TARGET,
"2", SPECIAL_RUNLEVEL2_TARGET,
"3", SPECIAL_RUNLEVEL3_TARGET,
"4", SPECIAL_RUNLEVEL4_TARGET,
case ARG_LOG_COLOR:
- if ((r = log_show_color_from_string(optarg)) < 0) {
- log_error("Failed to parse log color setting %s.", optarg);
- return r;
- }
+ if (optarg) {
+ if ((r = log_show_color_from_string(optarg)) < 0) {
+ log_error("Failed to parse log color setting %s.", optarg);
+ return r;
+ }
+ } else
+ log_show_color(true);
break;
case ARG_LOG_LOCATION:
- if ((r = log_show_location_from_string(optarg)) < 0) {
- log_error("Failed to parse log location setting %s.", optarg);
- return r;
- }
+ if (optarg) {
+ if ((r = log_show_location_from_string(optarg)) < 0) {
+ log_error("Failed to parse log location setting %s.", optarg);
+ return r;
+ }
+ } else
+ log_show_location(true);
break;
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);