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;
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;
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);
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
+#include <stdbool.h>
+
#include "sd-bus.h"
#define KDBUS_ITEM_NEXT(item) \
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);
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);
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);
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;
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;