X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fdbus-unit.c;h=5dcde25a2d5d1cf5f13d41765f579476f39530f6;hp=8fe83aefec62fdf9a7ca53e6616a6ccfa4535f39;hb=59fccdc587bc179c1638916ee16a24099f94f81f;hpb=630a4d9ea7298fb4a494662cbb4871069143ff56 diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c index 8fe83aefe..5dcde25a2 100644 --- a/src/core/dbus-unit.c +++ b/src/core/dbus-unit.c @@ -33,6 +33,7 @@ static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_load_state, unit_load_state, UnitLoadState); static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_job_mode, job_mode, JobMode); +static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_failure_action, failure_action, FailureAction); static int property_get_names( sd_bus *bus, @@ -314,23 +315,31 @@ static int property_get_conditions( void *userdata, sd_bus_error *error) { - Unit *u = userdata; - Condition *c; + const char *(*to_string)(ConditionType type) = NULL; + Condition **list = userdata, *c; int r; assert(bus); assert(reply); - assert(u); + assert(list); + + to_string = streq(property, "Asserts") ? assert_type_to_string : condition_type_to_string; r = sd_bus_message_open_container(reply, 'a', "(sbbsi)"); if (r < 0) return r; - LIST_FOREACH(conditions, c, u->conditions) { + LIST_FOREACH(conditions, c, *list) { + int tristate; + + tristate = + c->result == CONDITION_UNTESTED ? 0 : + c->result == CONDITION_SUCCEEDED ? 1 : -1; + r = sd_bus_message_append(reply, "(sbbsi)", - condition_type_to_string(c->type), + to_string(c->type), c->trigger, c->negate, - c->parameter, c->state); + c->parameter, tristate); if (r < 0) return r; @@ -442,7 +451,7 @@ int bus_unit_method_kill(sd_bus *bus, sd_bus_message *message, void *userdata, s if (signo <= 0 || signo >= _NSIG) return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Signal number out of range."); - r = selinux_unit_access_check(u, message, "stop", error); + r = mac_selinux_unit_access_check(u, message, "stop", error); if (r < 0) return r; @@ -467,7 +476,7 @@ int bus_unit_method_reset_failed(sd_bus *bus, sd_bus_message *message, void *use if (r == 0) return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */ - r = selinux_unit_access_check(u, message, "reload", error); + r = mac_selinux_unit_access_check(u, message, "reload", error); if (r < 0) return r; @@ -494,7 +503,7 @@ int bus_unit_method_set_properties(sd_bus *bus, sd_bus_message *message, void *u if (r < 0) return r; - r = selinux_unit_access_check(u, message, "start", error); + r = mac_selinux_unit_access_check(u, message, "start", error); if (r < 0) return r; @@ -562,9 +571,14 @@ const sd_bus_vtable bus_unit_vtable[] = { SD_BUS_PROPERTY("IgnoreOnSnapshot", "b", bus_property_get_bool, offsetof(Unit, ignore_on_snapshot), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("NeedDaemonReload", "b", property_get_need_daemon_reload, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("JobTimeoutUSec", "t", bus_property_get_usec, offsetof(Unit, job_timeout), SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("JobTimeoutAction", "s", property_get_failure_action, offsetof(Unit, job_timeout_action), SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("JobTimeoutRebootArgument", "s", NULL, offsetof(Unit, job_timeout_reboot_arg), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("ConditionResult", "b", bus_property_get_bool, offsetof(Unit, condition_result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), + SD_BUS_PROPERTY("AssertResult", "b", bus_property_get_bool, offsetof(Unit, assert_result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), BUS_PROPERTY_DUAL_TIMESTAMP("ConditionTimestamp", offsetof(Unit, condition_timestamp), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), - SD_BUS_PROPERTY("Conditions", "a(sbbsi)", property_get_conditions, 0, 0), + BUS_PROPERTY_DUAL_TIMESTAMP("AssertTimestamp", offsetof(Unit, assert_timestamp), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), + SD_BUS_PROPERTY("Conditions", "a(sbbsi)", property_get_conditions, offsetof(Unit, conditions), 0), + SD_BUS_PROPERTY("Asserts", "a(sbbsi)", property_get_conditions, offsetof(Unit, asserts), 0), SD_BUS_PROPERTY("LoadError", "(ss)", property_get_load_error, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("Transient", "b", bus_property_get_bool, offsetof(Unit, transient), SD_BUS_VTABLE_PROPERTY_CONST), @@ -754,7 +768,7 @@ int bus_unit_queue_job( type = JOB_RELOAD; } - r = selinux_unit_access_check( + r = mac_selinux_unit_access_check( u, message, (type == JOB_START || type == JOB_RESTART || type == JOB_TRY_RESTART) ? "start" : type == JOB_STOP ? "stop" : "reload", error); @@ -856,20 +870,16 @@ static int bus_unit_set_transient_property( } return 1; - - } else if (streq(name, "Requires") || - streq(name, "RequiresOverridable") || - streq(name, "Requisite") || - streq(name, "RequisiteOverridable") || - streq(name, "Wants") || - streq(name, "BindsTo") || - streq(name, "Conflicts") || - streq(name, "Before") || - streq(name, "After") || - streq(name, "OnFailure") || - streq(name, "PropagatesReloadTo") || - streq(name, "ReloadPropagatedFrom") || - streq(name, "PartOf")) { + } else if (STR_IN_SET(name, + "Requires", "RequiresOverridable", + "Requisite", "RequisiteOverridable", + "Wants", + "BindsTo", + "Conflicts", + "Before", "After", + "OnFailure", + "PropagatesReloadTo", "ReloadPropagatedFrom", + "PartOf")) { UnitDependency d; const char *other;