chiark / gitweb /
sd-bus: add proper monitoring API
[elogind.git] / src / libsystemd / sd-bus / bus-kernel.c
index 64a74d6edd42de9ed784e18d2ecc282729650ff2..af42b9f5e14a5b04b5146f6ad5f574408db9e3de 100644 (file)
@@ -1339,9 +1339,13 @@ int bus_kernel_create_bus(const char *name, bool world, char **s) {
         return fd;
 }
 
-static void bus_kernel_translate_policy(const BusNamePolicy *policy, struct kdbus_item *item)
-{
+static void bus_kernel_translate_policy(const BusNamePolicy *policy, struct kdbus_item *item) {
+
+        assert(policy);
+        assert(item);
+
         switch (policy->type) {
+
         case BUSNAME_POLICY_TYPE_USER:
                 item->policy_access.type = KDBUS_POLICY_ACCESS_USER;
                 item->policy_access.id = policy->uid;
@@ -1361,6 +1365,7 @@ static void bus_kernel_translate_policy(const BusNamePolicy *policy, struct kdbu
         }
 
         switch (policy->access) {
+
         case BUSNAME_POLICY_ACCESS_SEE:
                 item->policy_access.access = KDBUS_POLICY_SEE;
                 break;
@@ -1378,7 +1383,7 @@ static void bus_kernel_translate_policy(const BusNamePolicy *policy, struct kdbu
         }
 }
 
-int bus_kernel_create_starter(const char *bus, const char *name, bool accept_fd, BusNamePolicy *policy) {
+int bus_kernel_create_starter(const char *bus, const char *name, bool activating, bool accept_fd, BusNamePolicy *policy) {
         struct kdbus_cmd_hello *hello;
         struct kdbus_item *n;
         size_t policy_cnt = 0;
@@ -1420,8 +1425,11 @@ int bus_kernel_create_starter(const char *bus, const char *name, bool accept_fd,
         }
 
         hello->size = size;
-        hello->conn_flags = KDBUS_HELLO_ACTIVATOR | (accept_fd ? KDBUS_HELLO_ACCEPT_FD : 0);
+        hello->conn_flags =
+                (activating ? KDBUS_HELLO_ACTIVATOR : KDBUS_HELLO_POLICY_HOLDER) |
+                (accept_fd ? KDBUS_HELLO_ACCEPT_FD : 0);
         hello->pool_size = KDBUS_POOL_SIZE;
+        hello->attach_flags = _KDBUS_ATTACH_ALL;
 
         if (ioctl(fd, KDBUS_CMD_HELLO, hello) < 0) {
                 safe_close(fd);