X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fdbus.c;h=5dcb0d1c985e9cff54135b02a3b52fdf8ddd65a8;hp=925fac96b4b4c138b2788a3279c1aaf2c92d8ee4;hb=5bd4b173605142c7be493aa4d958ebaef21f421d;hpb=56f64d95763a799ba4475daf44d8e9f72a1bd474 diff --git a/src/core/dbus.c b/src/core/dbus.c index 925fac96b..5dcb0d1c9 100644 --- a/src/core/dbus.c +++ b/src/core/dbus.c @@ -20,7 +20,6 @@ ***/ #include -#include #include #include @@ -39,7 +38,7 @@ #include "dbus.h" #include "bus-util.h" #include "bus-error.h" -#include "bus-errors.h" +#include "bus-common-errors.h" #include "strxcpyx.h" #include "bus-internal.h" #include "selinux-access.h" @@ -958,22 +957,16 @@ static int bus_init_private(Manager *m) { (void) unlink(sa.un.sun_path); fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); - if (fd < 0) { - log_error_errno(errno, "Failed to allocate private socket: %m"); - return -errno; - } + if (fd < 0) + return log_error_errno(errno, "Failed to allocate private socket: %m"); r = bind(fd, &sa.sa, salen); - if (r < 0) { - log_error_errno(errno, "Failed to bind private socket: %m"); - return -errno; - } + if (r < 0) + return log_error_errno(errno, "Failed to bind private socket: %m"); r = listen(fd, SOMAXCONN); - if (r < 0) { - log_error_errno(errno, "Failed to make private socket listening: %m"); - return -errno; - } + if (r < 0) + return log_error_errno(errno, "Failed to make private socket listening: %m"); r = sd_event_add_io(m->event, &s, fd, EPOLLIN, bus_on_connection, m); if (r < 0) @@ -1150,15 +1143,20 @@ void bus_track_serialize(sd_bus_track *t, FILE *f) { int bus_track_deserialize_item(char ***l, const char *line) { const char *e; + int r; assert(l); assert(line); e = startswith(line, "subscribed="); if (!e) - return -EINVAL; + return 0; + + r = strv_extend(l, e); + if (r < 0) + return r; - return strv_extend(l, e); + return 1; } int bus_track_coldplug(Manager *m, sd_bus_track **t, char ***l) { @@ -1193,19 +1191,23 @@ int bus_track_coldplug(Manager *m, sd_bus_track **t, char ***l) { return r; } -int bus_verify_manage_unit_async(Manager *m, sd_bus_message *call, sd_bus_error *error) { - return bus_verify_polkit_async(call, CAP_SYS_ADMIN, "org.freedesktop.systemd1.manage-units", false, &m->polkit_registry, error); +int bus_verify_manage_units_async(Manager *m, sd_bus_message *call, sd_bus_error *error) { + return bus_verify_polkit_async(call, CAP_SYS_ADMIN, "org.freedesktop.systemd1.manage-units", false, UID_INVALID, &m->polkit_registry, error); } /* Same as bus_verify_manage_unit_async(), but checks for CAP_KILL instead of CAP_SYS_ADMIN */ -int bus_verify_manage_unit_async_for_kill(Manager *m, sd_bus_message *call, sd_bus_error *error) { - return bus_verify_polkit_async(call, CAP_KILL, "org.freedesktop.systemd1.manage-units", false, &m->polkit_registry, error); +int bus_verify_manage_units_async_for_kill(Manager *m, sd_bus_message *call, sd_bus_error *error) { + return bus_verify_polkit_async(call, CAP_KILL, "org.freedesktop.systemd1.manage-units", false, UID_INVALID, &m->polkit_registry, error); } int bus_verify_manage_unit_files_async(Manager *m, sd_bus_message *call, sd_bus_error *error) { - return bus_verify_polkit_async(call, CAP_SYS_ADMIN, "org.freedesktop.systemd1.manage-unit-files", false, &m->polkit_registry, error); + return bus_verify_polkit_async(call, CAP_SYS_ADMIN, "org.freedesktop.systemd1.manage-unit-files", false, UID_INVALID, &m->polkit_registry, error); } int bus_verify_reload_daemon_async(Manager *m, sd_bus_message *call, sd_bus_error *error) { - return bus_verify_polkit_async(call, CAP_SYS_ADMIN, "org.freedesktop.systemd1.reload-daemon", false, &m->polkit_registry, error); + return bus_verify_polkit_async(call, CAP_SYS_ADMIN, "org.freedesktop.systemd1.reload-daemon", false, UID_INVALID, &m->polkit_registry, error); +} + +int bus_verify_set_environment_async(Manager *m, sd_bus_message *call, sd_bus_error *error) { + return bus_verify_polkit_async(call, CAP_SYS_ADMIN, "org.freedesktop.systemd1.set-environment", false, UID_INVALID, &m->polkit_registry, error); }