diff options
author | David Herrmann <dh.herrmann@gmail.com> | 2015-08-27 16:32:22 +0200 |
---|---|---|
committer | David Herrmann <dh.herrmann@gmail.com> | 2015-08-27 16:32:22 +0200 |
commit | 057171efc103ac76c60a2a0d277d8bbf25415c21 (patch) | |
tree | 1f86acb043d5bf79725d89240c377fe2ed679066 /src/shared/bus-util.c | |
parent | 8faae625dc9b6322db452937f54176e56e65265a (diff) |
Revert "sd-bus: do not connect to dbus-1 socket when kdbus is available"
This reverts commit d4d00020d6ad855d65d31020fefa5003e1bb477f. The idea of
the commit is broken and needs to be reworked. We really cannot reduce
the bus-addresses to a single address. We always will have systemd with
native clients and legacy clients at the same time, so we also need both
addresses at the same time.
Diffstat (limited to 'src/shared/bus-util.c')
-rw-r--r-- | src/shared/bus-util.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c index 1bcb8903f3..1369a61458 100644 --- a/src/shared/bus-util.c +++ b/src/shared/bus-util.c @@ -2032,3 +2032,37 @@ int bus_path_decode_unique(const char *path, const char *prefix, char **ret_send *ret_external = external; return 1; } + +bool is_kdbus_wanted(void) { + _cleanup_free_ char *value = NULL; +#ifdef ENABLE_KDBUS + const bool configured = true; +#else + const bool configured = false; +#endif + + int r; + + if (get_proc_cmdline_key("kdbus", NULL) > 0) + return true; + + r = get_proc_cmdline_key("kdbus=", &value); + if (r <= 0) + return configured; + + return parse_boolean(value) == 1; +} + +bool is_kdbus_available(void) { + _cleanup_close_ int fd = -1; + struct kdbus_cmd cmd = { .size = sizeof(cmd), .flags = KDBUS_FLAG_NEGOTIATE }; + + if (!is_kdbus_wanted()) + return false; + + fd = open("/sys/fs/kdbus/control", O_RDWR | O_CLOEXEC | O_NONBLOCK | O_NOCTTY); + if (fd < 0) + return false; + + return ioctl(fd, KDBUS_CMD_BUS_MAKE, &cmd) >= 0; +} |