chiark / gitweb /
sd-bus: when we get the list of well-known names back from kdbus we shouldn't confuse...
authorLennart Poettering <lennart@poettering.net>
Thu, 27 Nov 2014 11:51:22 +0000 (12:51 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 27 Nov 2014 21:02:13 +0000 (22:02 +0100)
src/libsystemd/sd-bus/bus-control.c
src/libsystemd/sd-bus/bus-kernel.c

index 758715d74e34b119ad8139bcbf26622e53dc9eea..e6e905c0e0c694d8e1cebddbf9fb022a2d1d8242 100644 (file)
@@ -692,6 +692,13 @@ static int bus_get_name_creds_kdbus(
                 c->mask |= SD_BUS_CREDS_UNIQUE_NAME;
         }
 
                 c->mask |= SD_BUS_CREDS_UNIQUE_NAME;
         }
 
+        /* If KDBUS_ITEM_OWNED_NAME is requested then we'll get 0 of
+           them in case the service has no names. This does not mean
+           however that the list of owned names could not be
+           acquired. Hence, let's explicitly clarify that the data is
+           complete. */
+        c->mask |= mask & SD_BUS_CREDS_WELL_KNOWN_NAMES;
+
         r = bus_populate_creds_from_items(bus, conn_info, mask, c);
         if (r < 0)
                 goto fail;
         r = bus_populate_creds_from_items(bus, conn_info, mask, c);
         if (r < 0)
                 goto fail;
index 3a3ed200a0782c0a48f8c8846b96329f47eb5137..3bf7b074efb3ad7a3adcea27b8230233cd848a10 100644 (file)
@@ -717,6 +717,14 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) {
                 }
         }
 
                 }
         }
 
+        /* If we requested the list of well-known names to be appended
+         * and the sender had none no item for it will be
+         * attached. However, this does *not* mean that we the kernel
+         * didn't want to provide this information to us. Hence, let's
+         * explicitly mark this information as available if it was
+         * requested. */
+        m->creds.mask |= bus->creds_mask & SD_BUS_CREDS_WELL_KNOWN_NAMES;
+
         r = bus_message_parse_fields(m);
         if (r < 0)
                 goto fail;
         r = bus_message_parse_fields(m);
         if (r < 0)
                 goto fail;