X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fdbus-unit.c;h=8fe83aefec62fdf9a7ca53e6616a6ccfa4535f39;hb=807d0cca2b0daf4cd725298c1b5e062b1126f15b;hp=515ac8b78c2042cd240ce1edb24f0d34e2a7979a;hpb=8f8f05a919355095518911135c3d630f4620a9b0;p=elogind.git diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c index 515ac8b78..8fe83aefe 100644 --- a/src/core/dbus-unit.c +++ b/src/core/dbus-unit.c @@ -421,6 +421,12 @@ int bus_unit_method_kill(sd_bus *bus, sd_bus_message *message, void *userdata, s assert(message); assert(u); + r = bus_verify_manage_unit_async_for_kill(u->manager, message, error); + if (r < 0) + return r; + if (r == 0) + return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */ + r = sd_bus_message_read(message, "si", &swho, &signo); if (r < 0) return r; @@ -436,7 +442,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, bus, message, "stop", error); + r = selinux_unit_access_check(u, message, "stop", error); if (r < 0) return r; @@ -455,7 +461,13 @@ int bus_unit_method_reset_failed(sd_bus *bus, sd_bus_message *message, void *use assert(message); assert(u); - r = selinux_unit_access_check(u, bus, message, "reload", error); + r = bus_verify_manage_unit_async(u->manager, message, error); + if (r < 0) + return r; + 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); if (r < 0) return r; @@ -472,11 +484,17 @@ int bus_unit_method_set_properties(sd_bus *bus, sd_bus_message *message, void *u assert(message); assert(u); + r = bus_verify_manage_unit_async(u->manager, message, error); + if (r < 0) + return r; + if (r == 0) + return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */ + r = sd_bus_message_read(message, "b", &runtime); if (r < 0) return r; - r = selinux_unit_access_check(u, bus, message, "start", error); + r = selinux_unit_access_check(u, message, "start", error); if (r < 0) return r; @@ -638,21 +656,13 @@ static int send_changed_signal(sd_bus *bus, void *userdata) { bus, p, UNIT_VTABLE(u)->bus_interface, NULL); - if (r < 0) { - log_warning("Failed to send out specific PropertiesChanged signal for %s: %s", u->id, strerror(-r)); + if (r < 0) return r; - } - r = sd_bus_emit_properties_changed_strv( + return sd_bus_emit_properties_changed_strv( bus, p, "org.freedesktop.systemd1.Unit", NULL); - if (r < 0) { - log_warning("Failed to send out generic PropertiesChanged signal for %s: %s", u->id, strerror(-r)); - return r; - } - - return 0; } void bus_unit_send_change_signal(Unit *u) { @@ -745,7 +755,7 @@ int bus_unit_queue_job( } r = selinux_unit_access_check( - u, bus, message, + u, message, (type == JOB_START || type == JOB_RESTART || type == JOB_TRY_RESTART) ? "start" : type == JOB_STOP ? "stop" : "reload", error); if (r < 0) @@ -766,13 +776,13 @@ int bus_unit_queue_job( return r; if (bus == u->manager->api_bus) { - if (!j->subscribed) { - r = sd_bus_track_new(bus, &j->subscribed, NULL, NULL); + if (!j->clients) { + r = sd_bus_track_new(bus, &j->clients, NULL, NULL); if (r < 0) return r; } - r = sd_bus_track_add_sender(j->subscribed, message); + r = sd_bus_track_add_sender(j->clients, message); if (r < 0) return r; }