X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmain.c;h=ed317b44132235a7c4b63e57863813056a0dcd2e;hb=9e7c53579a1d16287134e64f78ec5e1451aa2506;hp=738db6c264e94abd5e3e772e8c682163a33d62b7;hpb=5d6b158473100a7a85e790f8ead0b826baa13b5e;p=elogind.git diff --git a/src/main.c b/src/main.c index 738db6c26..ed317b441 100644 --- a/src/main.c +++ b/src/main.c @@ -323,6 +323,26 @@ static int parse_proc_cmdline_word(const char *word) { log_warning("Failed to parse default standard error switch %s. Ignoring.", word + 31); else arg_default_std_error = r; + } else if (startswith(word, "systemd.setenv=")) { + char *cenv, *eq; + int r; + + cenv = strdup(word + 15); + if (!cenv) + return -ENOMEM; + + eq = strchr(cenv, '='); + if (!eq) { + r = unsetenv(cenv); + if (r < 0) + log_warning("unsetenv failed %s. Ignoring.", strerror(errno)); + } else { + *eq = 0; + r = setenv(cenv, eq + 1, 1); + if (r < 0) + log_warning("setenv failed %s. Ignoring.", strerror(errno)); + } + free(cenv); #ifdef HAVE_SYSV_COMPAT } else if (startswith(word, "systemd.sysv_console=")) { int r; @@ -1292,7 +1312,11 @@ int main(int argc, char *argv[]) { /* Set up PATH unless it is already set */ setenv("PATH", +#ifdef HAVE_SPLIT_USR "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", +#else + "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin", +#endif arg_running_as == MANAGER_SYSTEM); if (arg_running_as == MANAGER_SYSTEM) { @@ -1404,6 +1428,7 @@ int main(int argc, char *argv[]) { } else { DBusError error; Unit *target = NULL; + Job *default_unit_job; dbus_error_init(&error); @@ -1440,11 +1465,13 @@ int main(int argc, char *argv[]) { manager_dump_units(m, stdout, "\t"); } - if ((r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &error, NULL)) < 0) { + r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &error, &default_unit_job); + if (r < 0) { log_error("Failed to start default target: %s", bus_error(&error, r)); dbus_error_free(&error); goto finish; } + m->default_unit_job_id = default_unit_job->id; after_startup = now(CLOCK_MONOTONIC); log_full(arg_action == ACTION_TEST ? LOG_INFO : LOG_DEBUG,