From f2769777c8e8ad32b0b19cd540d2f742bda4457f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 26 Dec 2013 03:08:15 +0100 Subject: [PATCH 1/1] bus: make system bus kdbus node world-accessible --- src/core/manager.c | 2 +- src/libsystemd-bus/bus-kernel.c | 4 ++-- src/libsystemd-bus/bus-kernel.h | 4 +++- src/libsystemd-bus/test-bus-kernel-benchmark.c | 2 +- src/libsystemd-bus/test-bus-kernel-bloom.c | 2 +- src/libsystemd-bus/test-bus-kernel.c | 2 +- src/libsystemd-bus/test-bus-zero-copy.c | 2 +- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/core/manager.c b/src/core/manager.c index c26dcaa99..6b33c1828 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -542,7 +542,7 @@ static int manager_setup_kdbus(Manager *m) { if (m->running_as == SYSTEMD_USER && getenv("DBUS_SESSION_BUS_ADDRESS")) return 0; - m->kdbus_fd = bus_kernel_create_bus(m->running_as == SYSTEMD_SYSTEM ? "system" : "user", &p); + m->kdbus_fd = bus_kernel_create_bus(m->running_as == SYSTEMD_SYSTEM ? "system" : "user", m->running_as == SYSTEMD_SYSTEM, &p); if (m->kdbus_fd < 0) { log_debug("Failed to set up kdbus: %s", strerror(-m->kdbus_fd)); return m->kdbus_fd; diff --git a/src/libsystemd-bus/bus-kernel.c b/src/libsystemd-bus/bus-kernel.c index fadb68309..d752d1fbe 100644 --- a/src/libsystemd-bus/bus-kernel.c +++ b/src/libsystemd-bus/bus-kernel.c @@ -1131,7 +1131,7 @@ int kdbus_translate_attach_flags(uint64_t mask, uint64_t *kdbus_mask) { return 0; } -int bus_kernel_create_bus(const char *name, char **s) { +int bus_kernel_create_bus(const char *name, bool world, char **s) { struct kdbus_cmd_make *make; struct kdbus_item *n; int fd; @@ -1163,7 +1163,7 @@ int bus_kernel_create_bus(const char *name, char **s) { n->type = KDBUS_ITEM_MAKE_NAME; make->size += ALIGN8(n->size); - make->flags = KDBUS_MAKE_POLICY_OPEN; + make->flags = KDBUS_MAKE_POLICY_OPEN | (world ? KDBUS_MAKE_ACCESS_WORLD : 0); if (ioctl(fd, KDBUS_CMD_BUS_MAKE, make) < 0) { close_nointr_nofail(fd); diff --git a/src/libsystemd-bus/bus-kernel.h b/src/libsystemd-bus/bus-kernel.h index 67690f8de..2aba0bbe0 100644 --- a/src/libsystemd-bus/bus-kernel.h +++ b/src/libsystemd-bus/bus-kernel.h @@ -21,6 +21,8 @@ along with systemd; If not, see . ***/ +#include + #include "sd-bus.h" #define KDBUS_ITEM_NEXT(item) \ @@ -61,7 +63,7 @@ int bus_kernel_take_fd(sd_bus *b); int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m); int bus_kernel_read_message(sd_bus *bus); -int bus_kernel_create_bus(const char *name, char **s); +int bus_kernel_create_bus(const char *name, bool world, char **s); int bus_kernel_create_namespace(const char *name, char **s); int bus_kernel_create_starter(const char *bus, const char *name); int bus_kernel_create_monitor(const char *bus); diff --git a/src/libsystemd-bus/test-bus-kernel-benchmark.c b/src/libsystemd-bus/test-bus-kernel-benchmark.c index 010a16132..70f4fcd85 100644 --- a/src/libsystemd-bus/test-bus-kernel-benchmark.c +++ b/src/libsystemd-bus/test-bus-kernel-benchmark.c @@ -239,7 +239,7 @@ int main(int argc, char *argv[]) { assert_se(arg_loop_usec > 0); - bus_ref = bus_kernel_create_bus("deine-mutter", &bus_name); + bus_ref = bus_kernel_create_bus("deine-mutter", false, &bus_name); if (bus_ref == -ENOENT) exit(EXIT_TEST_SKIP); diff --git a/src/libsystemd-bus/test-bus-kernel-bloom.c b/src/libsystemd-bus/test-bus-kernel-bloom.c index 62983eacc..772831bdd 100644 --- a/src/libsystemd-bus/test-bus-kernel-bloom.c +++ b/src/libsystemd-bus/test-bus-kernel-bloom.c @@ -42,7 +42,7 @@ static void test_one( sd_bus *a, *b; int r; - bus_ref = bus_kernel_create_bus("deine-mutter", &bus_name); + bus_ref = bus_kernel_create_bus("deine-mutter", false, &bus_name); if (bus_ref == -ENOENT) exit(EXIT_TEST_SKIP); diff --git a/src/libsystemd-bus/test-bus-kernel.c b/src/libsystemd-bus/test-bus-kernel.c index 8380b2c31..c78c6d42a 100644 --- a/src/libsystemd-bus/test-bus-kernel.c +++ b/src/libsystemd-bus/test-bus-kernel.c @@ -42,7 +42,7 @@ int main(int argc, char *argv[]) { log_set_max_level(LOG_DEBUG); - bus_ref = bus_kernel_create_bus("deine-mutter", &bus_name); + bus_ref = bus_kernel_create_bus("deine-mutter", false, &bus_name); if (bus_ref == -ENOENT) return EXIT_TEST_SKIP; diff --git a/src/libsystemd-bus/test-bus-zero-copy.c b/src/libsystemd-bus/test-bus-zero-copy.c index 054c4c795..dff369224 100644 --- a/src/libsystemd-bus/test-bus-zero-copy.c +++ b/src/libsystemd-bus/test-bus-zero-copy.c @@ -51,7 +51,7 @@ int main(int argc, char *argv[]) { log_set_max_level(LOG_DEBUG); - bus_ref = bus_kernel_create_bus("deine-mutter", &bus_name); + bus_ref = bus_kernel_create_bus("deine-mutter", false, &bus_name); if (bus_ref == -ENOENT) return EXIT_TEST_SKIP; -- 2.30.2