static void test_runlevel_to_target(void) { in_initrd_force(false); assert_se(streq_ptr(runlevel_to_target(NULL), NULL)); assert_se(streq_ptr(runlevel_to_target("unknown-runlevel"), NULL)); assert_se(streq_ptr(runlevel_to_target("rd.unknown-runlevel"), NULL)); assert_se(streq_ptr(runlevel_to_target("3"), SPECIAL_MULTI_USER_TARGET)); assert_se(streq_ptr(runlevel_to_target("rd.rescue"), NULL)); in_initrd_force(true); assert_se(streq_ptr(runlevel_to_target(NULL), NULL)); assert_se(streq_ptr(runlevel_to_target("unknown-runlevel"), NULL)); assert_se(streq_ptr(runlevel_to_target("rd.unknown-runlevel"), NULL)); assert_se(streq_ptr(runlevel_to_target("3"), NULL)); assert_se(streq_ptr(runlevel_to_target("rd.rescue"), SPECIAL_RESCUE_TARGET)); }
static int parse_proc_cmdline_item(const char *key, const char *value, void *data) { assert(key); /* Check if a run level is specified on the kernel command line. The * command line has higher priority than any on-disk configuration, so * it'll make any symlink we create moot. */ if (streq(key, "systemd.unit") && !proc_cmdline_value_missing(key, value)) log_warning("Offline system update overriden by kernel command line systemd.unit= setting"); else if (!value && runlevel_to_target(key)) log_warning("Offline system update overriden by runlevel \"%s\" on the kernel command line", key); return 0; }
static int parse_proc_cmdline_item(const char *key, const char *value) { int r; assert(key); if (streq(key, "systemd.mask")) { if (!value) log_error("Missing argument for systemd.mask= kernel command line parameter."); else { char *n; r = unit_name_mangle(value, UNIT_NAME_NOGLOB, &n); if (r < 0) return log_error_errno(r, "Failed to glob unit name: %m"); r = strv_consume(&arg_mask, n); if (r < 0) return log_oom(); } } else if (streq(key, "systemd.wants")) { if (!value) log_error("Missing argument for systemd.want= kernel command line parameter."); else { char *n; r = unit_name_mangle(value, UNIT_NAME_NOGLOB, &n); if (r < 0) return log_error_errno(r, "Failed to glob unit name: %m"); r = strv_consume(&arg_wants, n); if (r < 0) return log_oom(); } } else if (streq(key, "systemd.debug-shell")) { if (value) { r = parse_boolean(value); if (r < 0) log_error("Failed to parse systemd.debug-shell= argument '%s', ignoring.", value); else arg_debug_shell = r; } else arg_debug_shell = true; } else if (streq(key, "systemd.unit")) { if (!value) log_error("Missing argument for systemd.unit= kernel command line parameter."); else { r = free_and_strdup(&arg_default_unit, value); if (r < 0) return log_error_errno(r, "Failed to set default unit %s: %m", value); } } else if (!value) { const char *target; target = runlevel_to_target(key); if (target) { r = free_and_strdup(&arg_default_unit, target); if (r < 0) return log_error_errno(r, "Failed to set default unit %s: %m", target); } } return 0; }