return sd_bus_message_append(reply, "u", (uint32_t) hashmap_size(m->units));
}
+static int property_get_n_failed_units(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ Manager *m = userdata;
+
+ assert(bus);
+ assert(reply);
+ assert(m);
+
+ return sd_bus_message_append(reply, "u", (uint32_t) set_size(m->failed_units));
+}
+
static int property_get_n_jobs(
sd_bus *bus,
const char *path,
return sd_bus_message_append(reply, "d", d);
}
+static int property_get_system_state(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ Manager *m = userdata;
+
+ assert(bus);
+ assert(reply);
+ assert(m);
+
+ return sd_bus_message_append(reply, "s", manager_state_to_string(manager_state(m)));
+}
+
static int property_set_runtime_watchdog(
sd_bus *bus,
const char *path,
if (!u)
return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s not loaded.", name);
- r = selinux_unit_access_check(u, bus, message, "status", error);
+ r = selinux_unit_access_check(u, message, "status", error);
if (r < 0)
return r;
if (!u)
return sd_bus_error_setf(error, BUS_ERROR_NO_UNIT_FOR_PID, "PID %u does not belong to any loaded unit.", pid);
- r = selinux_unit_access_check(u, bus, message, "status", error);
+ r = selinux_unit_access_check(u, message, "status", error);
if (r < 0)
return r;
if (r < 0)
return r;
- r = selinux_unit_access_check(u, bus, message, "status", error);
+ r = selinux_unit_access_check(u, message, "status", error);
if (r < 0)
return r;
if (mode < 0)
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Job mode %s is invalid.", smode);
- r = selinux_access_check(bus, message, "start", error);
+ r = selinux_access_check(message, "start", error);
if (r < 0)
return r;
if (!j)
return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_JOB, "Job %u does not exist.", (unsigned) id);
- r = selinux_unit_access_check(j->unit, bus, message, "status", error);
+ r = selinux_unit_access_check(j->unit, message, "status", error);
if (r < 0)
return r;
if (!j)
return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_JOB, "Job %u does not exist.", (unsigned) id);
- r = selinux_unit_access_check(j->unit, bus, message, "stop", error);
+ r = selinux_unit_access_check(j->unit, message, "stop", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "reboot", error);
+ r = selinux_access_check(message, "reboot", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "reload", error);
+ r = selinux_access_check(message, "reload", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "status", error);
+ r = selinux_access_check(message, "status", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "status", error);
+ r = selinux_access_check(message, "status", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "status", error);
+ r = selinux_access_check(message, "status", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "status", error);
+ r = selinux_access_check(message, "status", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "status", error);
+ r = selinux_access_check(message, "status", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "start", error);
+ r = selinux_access_check(message, "start", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "stop", error);
+ r = selinux_access_check(message, "stop", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "reload", error);
+ r = selinux_access_check(message, "reload", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "reload", error);
+ r = selinux_access_check(message, "reload", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "halt", error);
+ r = selinux_access_check(message, "halt", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "reboot", error);
+ r = selinux_access_check(message, "reboot", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "halt", error);
+ r = selinux_access_check(message, "halt", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "halt", error);
+ r = selinux_access_check(message, "halt", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "reboot", error);
+ r = selinux_access_check(message, "reboot", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "reboot", error);
+ r = selinux_access_check(message, "reboot", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "reload", error);
+ r = selinux_access_check(message, "reload", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "reload", error);
+ r = selinux_access_check(message, "reload", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "reload", error);
+ r = selinux_access_check(message, "reload", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "status", error);
+ r = selinux_access_check(message, "status", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "status", error);
+ r = selinux_access_check(message, "status", error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "status", error);
+ r = selinux_access_check(message, "status", error);
if (r < 0)
return r;
u = manager_get_unit(m, *i);
if (u) {
- r = selinux_unit_access_check(u, bus, message, verb, error);
+ r = selinux_unit_access_check(u, message, verb, error);
if (r < 0)
return r;
}
assert(message);
assert(m);
- r = selinux_access_check(bus, message, verb, error);
+ r = selinux_access_check(message, verb, error);
if (r < 0)
return r;
assert(message);
assert(m);
- r = selinux_access_check(bus, message, "enable", error);
+ r = selinux_access_check(message, "enable", error);
if (r < 0)
return r;
SD_BUS_WRITABLE_PROPERTY("LogLevel", "s", property_get_log_level, property_set_log_level, 0, 0),
SD_BUS_WRITABLE_PROPERTY("LogTarget", "s", property_get_log_target, property_set_log_target, 0, 0),
SD_BUS_PROPERTY("NNames", "u", property_get_n_names, 0, 0),
+ SD_BUS_PROPERTY("NFailedUnits", "u", property_get_n_failed_units, 0, 0),
SD_BUS_PROPERTY("NJobs", "u", property_get_n_jobs, 0, 0),
SD_BUS_PROPERTY("NInstalledJobs", "u", bus_property_get_unsigned, offsetof(Manager, n_installed_jobs), 0),
SD_BUS_PROPERTY("NFailedJobs", "u", bus_property_get_unsigned, offsetof(Manager, n_failed_jobs), 0),
SD_BUS_WRITABLE_PROPERTY("RuntimeWatchdogUSec", "t", bus_property_get_usec, property_set_runtime_watchdog, offsetof(Manager, runtime_watchdog), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_WRITABLE_PROPERTY("ShutdownWatchdogUSec", "t", bus_property_get_usec, bus_property_set_usec, offsetof(Manager, shutdown_watchdog), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("ControlGroup", "s", NULL, offsetof(Manager, cgroup_root), 0),
+ SD_BUS_PROPERTY("SystemState", "s", property_get_system_state, 0, 0),
SD_BUS_METHOD("GetUnit", "s", "o", method_get_unit, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_METHOD("GetUnitByPID", "u", "o", method_get_unit_by_pid, SD_BUS_VTABLE_UNPRIVILEGED),