X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsystemctl.c;h=be1dcc50dc4bc65c53cabed99ff175b4e305ce07;hb=9ed95f433630f11c54e852f2826e9d68efff81f0;hp=5bf5e9f38ff61ba05c39ea0b4471d7828e12322d;hpb=d06dacd0020af7e31ff6089deff339b00ed979e3;p=elogind.git diff --git a/src/systemctl.c b/src/systemctl.c index 5bf5e9f38..be1dcc50d 100644 --- a/src/systemctl.c +++ b/src/systemctl.c @@ -69,6 +69,11 @@ static bool arg_quiet = false; static bool arg_full = false; static bool arg_force = false; static bool arg_defaults = false; +static bool arg_sysv_compat = false; /* this is undocumented, and + * exists simply to make + * implementation of SysV + * compatible shell glue + * easier */ static char **arg_wall = NULL; static usec_t arg_when = 0; static enum action { @@ -244,7 +249,7 @@ static int list_units(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -322,7 +327,7 @@ static int list_units(DBusConnection *bus, char **args, unsigned n) { int a = 0, b = 0; const char *on, *off; - if (streq(u->active_state, "maintenance")) { + if (streq(u->active_state, "failed")) { on = ansi_highlight(true); off = ansi_highlight(false); } else @@ -468,7 +473,7 @@ static int dot_one(DBusConnection *bus, const char *name, const char *path) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -551,7 +556,7 @@ static int dot(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -644,7 +649,7 @@ static int list_jobs(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -741,7 +746,7 @@ static int load_unit(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -809,7 +814,7 @@ static int cancel_job(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -817,7 +822,7 @@ static int cancel_job(DBusConnection *bus, char **args, unsigned n) { if (!dbus_message_get_args(reply, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { - log_error("Failed to parse reply: %s", error.message); + log_error("Failed to parse reply: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -835,7 +840,7 @@ static int cancel_job(DBusConnection *bus, char **args, unsigned n) { dbus_message_unref(reply); if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -964,7 +969,7 @@ static DBusHandlerResult wait_filter(DBusConnection *connection, DBusMessage *me DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_BOOLEAN, &success, DBUS_TYPE_INVALID)) - log_error("Failed to parse message: %s", error.message); + log_error("Failed to parse message: %s", bus_error_message(&error)); else { char *p; @@ -998,7 +1003,7 @@ static int enable_wait_for_jobs(DBusConnection *bus) { &error); if (dbus_error_is_set(&error)) { - log_error("Failed to add match: %s", error.message); + log_error("Failed to add match: %s", bus_error_message(&error)); dbus_error_free(&error); return -EIO; } @@ -1087,7 +1092,7 @@ static int start_unit_one( goto finish; } - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -1095,7 +1100,7 @@ static int start_unit_one( if (!dbus_message_get_args(reply, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { - log_error("Failed to parse reply: %s", error.message); + log_error("Failed to parse reply: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -1307,7 +1312,7 @@ static int check_unit(DBusConnection *bus, char **args, unsigned n) { if (!dbus_message_get_args(reply, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { - log_error("Failed to parse reply: %s", error.message); + log_error("Failed to parse reply: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -1334,7 +1339,7 @@ static int check_unit(DBusConnection *bus, char **args, unsigned n) { dbus_message_unref(reply); if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -1359,7 +1364,7 @@ static int check_unit(DBusConnection *bus, char **args, unsigned n) { if (!arg_quiet) puts(state); - if (streq(state, "active") || startswith(state, "reloading")) + if (streq(state, "active") || streq(state, "reloading")) r = 0; dbus_message_unref(m); @@ -1484,6 +1489,11 @@ typedef struct UnitStatusInfo { const char *path; const char *default_control_group; + usec_t inactive_exit_timestamp; + usec_t active_enter_timestamp; + usec_t active_exit_timestamp; + usec_t inactive_enter_timestamp; + bool need_daemon_reload; /* Service */ @@ -1518,6 +1528,9 @@ typedef struct UnitStatusInfo { static void print_status_info(UnitStatusInfo *i) { ExecStatusInfo *p; const char *on, *off, *ss; + usec_t timestamp; + char since1[FORMAT_TIMESTAMP_PRETTY_MAX], *s1; + char since2[FORMAT_TIMESTAMP_MAX], *s2; assert(i); @@ -1544,7 +1557,7 @@ static void print_status_info(UnitStatusInfo *i) { ss = streq_ptr(i->active_state, i->sub_state) ? NULL : i->sub_state; - if (streq_ptr(i->active_state, "maintenance")) { + if (streq_ptr(i->active_state, "failed")) { on = ansi_highlight(true); off = ansi_highlight(false); } else if (streq_ptr(i->active_state, "active") || streq_ptr(i->active_state, "reloading")) { @@ -1554,17 +1567,34 @@ static void print_status_info(UnitStatusInfo *i) { on = off = ""; if (ss) - printf("\t Active: %s%s (%s)%s\n", + printf("\t Active: %s%s (%s)%s", on, strna(i->active_state), ss, off); else - printf("\t Active: %s%s%s\n", + printf("\t Active: %s%s%s", on, strna(i->active_state), off); + timestamp = (streq_ptr(i->active_state, "active") || + streq_ptr(i->active_state, "reloading")) ? i->active_enter_timestamp : + (streq_ptr(i->active_state, "inactive") || + streq_ptr(i->active_state, "failed")) ? i->inactive_enter_timestamp : + streq_ptr(i->active_state, "activating") ? i->inactive_exit_timestamp : + i->active_exit_timestamp; + + s1 = format_timestamp_pretty(since1, sizeof(since1), timestamp); + s2 = format_timestamp(since2, sizeof(since2), timestamp); + + if (s1) + printf(" since [%s; %s]\n", s2, s1); + else if (s2) + printf(" since [%s]\n", s2); + else + printf("\n"); + if (i->sysfs_path) printf("\t Device: %s\n", i->sysfs_path); else if (i->where) @@ -1583,7 +1613,7 @@ static void print_status_info(UnitStatusInfo *i) { continue; t = strv_join(p->argv, " "); - printf("\t Exited: %u (%s, code=%s, ", p->pid, strna(t), sigchld_code_to_string(p->code)); + printf("\t Process: %u (%s, code=%s, ", p->pid, strna(t), sigchld_code_to_string(p->code)); free(t); if (p->code == CLD_EXITED) { @@ -1612,7 +1642,7 @@ static void print_status_info(UnitStatusInfo *i) { printf("\t"); if (i->main_pid > 0) { - printf(" Main: %u", (unsigned) i->main_pid); + printf("Main PID: %u", (unsigned) i->main_pid); if (i->running) { char *t = NULL; @@ -1777,6 +1807,14 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn i->start_timestamp = (usec_t) u; else if (streq(name, "ExecMainExitTimestamp")) i->exit_timestamp = (usec_t) u; + else if (streq(name, "ActiveEnterTimestamp")) + i->active_enter_timestamp = (usec_t) u; + else if (streq(name, "InactiveEnterTimestamp")) + i->inactive_enter_timestamp = (usec_t) u; + else if (streq(name, "InactiveExitTimestamp")) + i->inactive_exit_timestamp = (usec_t) u; + else if (streq(name, "ActiveExitTimestamp")) + i->active_exit_timestamp = (usec_t) u; break; } @@ -2091,7 +2129,7 @@ static int show_one(DBusConnection *bus, const char *path, bool show_properties, } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2150,16 +2188,27 @@ static int show_one(DBusConnection *bus, const char *path, bool show_properties, dbus_message_iter_next(&sub); } - if (!show_properties) - print_status_info(&info); + r = 0; + + if (!show_properties) { + if (arg_sysv_compat && + !streq_ptr(info.active_state, "active") && + !streq_ptr(info.active_state, "reloading")) { + + /* If the SysV compatibility mode is on, we + * will refuse to run "status" on units that + * aren't active */ + log_error("Unit not active."); + r = -EADDRNOTAVAIL; + } else + print_status_info(&info); + } while ((p = info.exec)) { LIST_REMOVE(ExecStatusInfo, exec, info.exec, p); exec_status_info_free(p); } - r = 0; - finish: if (m) dbus_message_unref(m); @@ -2223,7 +2272,7 @@ static int show(DBusConnection *bus, char **args, unsigned n) { if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { if (!dbus_error_has_name(&error, DBUS_ERROR_ACCESS_DENIED)) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2250,7 +2299,7 @@ static int show(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2279,7 +2328,7 @@ static int show(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2306,7 +2355,7 @@ static int show(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2315,7 +2364,7 @@ static int show(DBusConnection *bus, char **args, unsigned n) { if (!dbus_message_get_args(reply, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { - log_error("Failed to parse reply: %s", error.message); + log_error("Failed to parse reply: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2368,7 +2417,7 @@ static DBusHandlerResult monitor_filter(DBusConnection *connection, DBusMessage DBUS_TYPE_STRING, &id, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) - log_error("Failed to parse message: %s", error.message); + log_error("Failed to parse message: %s", bus_error_message(&error)); else if (streq(dbus_message_get_member(message), "UnitNew")) printf("Unit %s added.\n", id); else @@ -2383,21 +2432,30 @@ static DBusHandlerResult monitor_filter(DBusConnection *connection, DBusMessage DBUS_TYPE_UINT32, &id, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) - log_error("Failed to parse message: %s", error.message); + log_error("Failed to parse message: %s", bus_error_message(&error)); else if (streq(dbus_message_get_member(message), "JobNew")) printf("Job %u added.\n", id); else printf("Job %u removed.\n", id); - } else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Unit", "Changed") || - dbus_message_is_signal(message, "org.freedesktop.systemd1.Job", "Changed")) { + } else if (dbus_message_is_signal(message, "org.freedesktop.DBus.Properties", "PropertiesChanged")) { const char *path, *interface, *property = "Id"; DBusMessageIter iter, sub; path = dbus_message_get_path(message); - interface = dbus_message_get_interface(message); + + if (!dbus_message_get_args(message, &error, + DBUS_TYPE_STRING, &interface, + DBUS_TYPE_INVALID)) { + log_error("Failed to parse message: %s", bus_error_message(&error)); + goto finish; + } + + if (!streq(interface, "org.freedesktop.systemd1.Job") && + !streq(interface, "org.freedesktop.systemd1.Unit")) + goto finish; if (!(m = dbus_message_new_method_call( "org.freedesktop.systemd1", @@ -2417,7 +2475,7 @@ static DBusHandlerResult monitor_filter(DBusConnection *connection, DBusMessage } if (!(reply = dbus_connection_send_with_reply_and_block(connection, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); goto finish; } @@ -2489,7 +2547,7 @@ static int monitor(DBusConnection *bus, char **args, unsigned n) { &error); if (dbus_error_is_set(&error)) { - log_error("Failed to add match: %s", error.message); + log_error("Failed to add match: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2497,25 +2555,12 @@ static int monitor(DBusConnection *bus, char **args, unsigned n) { dbus_bus_add_match(bus, "type='signal'," "sender='org.freedesktop.systemd1'," - "interface='org.freedesktop.systemd1.Unit'," - "member='Changed'", + "interface='org.freedesktop.DBus.Properties'," + "member='PropertiesChanged'", &error); if (dbus_error_is_set(&error)) { - log_error("Failed to add match: %s", error.message); - r = -EIO; - goto finish; - } - - dbus_bus_add_match(bus, - "type='signal'," - "sender='org.freedesktop.systemd1'," - "interface='org.freedesktop.systemd1.Job'," - "member='Changed'", - &error); - - if (dbus_error_is_set(&error)) { - log_error("Failed to add match: %s", error.message); + log_error("Failed to add match: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2538,7 +2583,7 @@ static int monitor(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2581,7 +2626,7 @@ static int dump(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2589,7 +2634,7 @@ static int dump(DBusConnection *bus, char **args, unsigned n) { if (!dbus_message_get_args(reply, &error, DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID)) { - log_error("Failed to parse reply: %s", error.message); + log_error("Failed to parse reply: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2645,7 +2690,7 @@ static int snapshot(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2653,7 +2698,7 @@ static int snapshot(DBusConnection *bus, char **args, unsigned n) { if (!dbus_message_get_args(reply, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { - log_error("Failed to parse reply: %s", error.message); + log_error("Failed to parse reply: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2679,7 +2724,7 @@ static int snapshot(DBusConnection *bus, char **args, unsigned n) { dbus_message_unref(reply); if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2750,7 +2795,7 @@ static int delete_snapshot(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2758,7 +2803,7 @@ static int delete_snapshot(DBusConnection *bus, char **args, unsigned n) { if (!dbus_message_get_args(reply, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { - log_error("Failed to parse reply: %s", error.message); + log_error("Failed to parse reply: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2776,7 +2821,7 @@ static int delete_snapshot(DBusConnection *bus, char **args, unsigned n) { dbus_message_unref(reply); if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2819,7 +2864,7 @@ static int daemon_reload(DBusConnection *bus, char **args, unsigned n) { streq(args[0], "clear-jobs") || streq(args[0], "cancel") ? "ClearJobs" : streq(args[0], "daemon-reexec") ? "Reexecute" : - streq(args[0], "reset-maintenance") ? "ResetMaintenance" : + streq(args[0], "reset-failed") ? "ResetFailed" : streq(args[0], "daemon-exit") ? "Exit" : "Reload"; } @@ -2842,7 +2887,7 @@ static int daemon_reload(DBusConnection *bus, char **args, unsigned n) { goto finish; } - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2861,7 +2906,7 @@ finish: return r; } -static int reset_maintenance(DBusConnection *bus, char **args, unsigned n) { +static int reset_failed(DBusConnection *bus, char **args, unsigned n) { DBusMessage *m = NULL, *reply = NULL; unsigned i; int r; @@ -2879,7 +2924,7 @@ static int reset_maintenance(DBusConnection *bus, char **args, unsigned n) { "org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", - "ResetMaintenanceUnit"))) { + "ResetFailedUnit"))) { log_error("Could not allocate message."); r = -ENOMEM; goto finish; @@ -2894,7 +2939,7 @@ static int reset_maintenance(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -2948,7 +2993,7 @@ static int show_enviroment(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -3046,7 +3091,7 @@ static int set_environment(DBusConnection *bus, char **args, unsigned n) { } if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) { - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -3789,8 +3834,8 @@ static int systemctl_help(void) { " status [NAME...|PID...] Show runtime status of one or more units\n" " show [NAME...|JOB...] Show properties of one or more\n" " units/jobs or the manager\n" - " reset-maintenance [NAME...] Reset maintenance state for all, one,\n" - " or more units\n" + " reset-failed [NAME...] Reset failed state for all, one, or more\n" + " units\n" " enable [NAME...] Enable one or more unit files\n" " disable [NAME...] Disable one or more unit files\n" " is-enabled [NAME...] Check whether unit files are enabled\n" @@ -3899,7 +3944,8 @@ static int systemctl_parse_argv(int argc, char *argv[]) { ARG_FULL, ARG_FORCE, ARG_NO_RELOAD, - ARG_DEFAULTS + ARG_DEFAULTS, + ARG_SYSV_COMPAT }; static const struct option options[] = { @@ -3919,7 +3965,8 @@ static int systemctl_parse_argv(int argc, char *argv[]) { { "require", no_argument, NULL, ARG_REQUIRE }, { "force", no_argument, NULL, ARG_FORCE }, { "no-reload", no_argument, NULL, ARG_NO_RELOAD }, - { "defaults", no_argument, NULL, ARG_DEFAULTS }, + { "defaults", no_argument, NULL, ARG_DEFAULTS }, + { "sysv-compat", no_argument, NULL, ARG_SYSV_COMPAT }, { NULL, 0, NULL, 0 } }; @@ -4013,6 +4060,10 @@ static int systemctl_parse_argv(int argc, char *argv[]) { arg_defaults = true; break; + case ARG_SYSV_COMPAT: + arg_sysv_compat = true; + break; + case '?': return -EINVAL; @@ -4475,7 +4526,7 @@ static int talk_upstart(void) { goto finish; } - log_error("Failed to connect to Upstart bus: %s", error.message); + log_error("Failed to connect to Upstart bus: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -4519,7 +4570,7 @@ static int talk_upstart(void) { goto finish; } - log_error("Failed to issue method call: %s", error.message); + log_error("Failed to issue method call: %s", bus_error_message(&error)); r = -EIO; goto finish; } @@ -4626,7 +4677,7 @@ static int systemctl_main(DBusConnection *bus, int argc, char *argv[], DBusError { "default", EQUAL, 1, start_special }, { "rescue", EQUAL, 1, start_special }, { "emergency", EQUAL, 1, start_special }, - { "reset-maintenance", MORE, 1, reset_maintenance }, + { "reset-failed", MORE, 1, reset_failed }, { "enable", MORE, 2, enable_unit }, { "disable", MORE, 2, enable_unit }, { "is-enabled", MORE, 2, enable_unit } @@ -4811,7 +4862,7 @@ static int halt_main(DBusConnection *bus) { int r; if (geteuid() != 0) { - log_error("Must to be root."); + log_error("Must be root."); return -EPERM; }