X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-kernel.c;h=a3afb2eba68fb0bb21a40e96e273207b32c1a23f;hb=6647dc6659e1e42b3cff3cf5033ea5624000e650;hp=b85a10dd389bbcab48ff32bbde06d0e60d64d7a2;hpb=0461f8cdc1d7b4afee2f2ff40fcaa3c7e26c662c;p=elogind.git diff --git a/src/libsystemd-bus/bus-kernel.c b/src/libsystemd-bus/bus-kernel.c index b85a10dd3..a3afb2eba 100644 --- a/src/libsystemd-bus/bus-kernel.c +++ b/src/libsystemd-bus/bus-kernel.c @@ -28,6 +28,7 @@ #include #include "util.h" +#include "strv.h" #include "bus-internal.h" #include "bus-message.h" @@ -253,7 +254,7 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) { m->kdbus->dst_id = well_known ? 0 : m->destination ? unique : KDBUS_DST_ID_BROADCAST; - m->kdbus->payload_type = KDBUS_PAYLOAD_DBUS1; + m->kdbus->payload_type = KDBUS_PAYLOAD_DBUS; m->kdbus->cookie = m->header->serial; m->kdbus->timeout_ns = m->timeout * NSEC_PER_USEC; @@ -461,7 +462,7 @@ static void close_kdbus_msg(sd_bus *bus, struct kdbus_msg *k) { off = (uint8_t *)k - (uint8_t *)bus->kdbus_buffer; ioctl(bus->input_fd, KDBUS_CMD_FREE, &off); - KDBUS_PART_FOREACH(d, k, items) { + KDBUS_ITEM_FOREACH(d, k, items) { if (d->type == KDBUS_ITEM_FDS) close_many(d->fds, (d->size - offsetof(struct kdbus_item, fds)) / sizeof(int)); @@ -588,7 +589,7 @@ static int bus_kernel_translate_message(sd_bus *bus, struct kdbus_msg *k) { assert(k); assert(k->payload_type == KDBUS_PAYLOAD_KERNEL); - KDBUS_PART_FOREACH(d, k, items) { + KDBUS_ITEM_FOREACH(d, k, items) { if (d->type >= _KDBUS_ITEM_KERNEL_BASE && d->type < _KDBUS_ITEM_KERNEL_BASE + ELEMENTSOF(translate)) { if (found) return -EBADMSG; @@ -617,9 +618,9 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) { assert(bus); assert(k); - assert(k->payload_type == KDBUS_PAYLOAD_DBUS1); + assert(k->payload_type == KDBUS_PAYLOAD_DBUS); - KDBUS_PART_FOREACH(d, k, items) { + KDBUS_ITEM_FOREACH(d, k, items) { size_t l; l = d->size - offsetof(struct kdbus_item, data); @@ -679,7 +680,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) { if (r < 0) return r; - KDBUS_PART_FOREACH(d, k, items) { + KDBUS_ITEM_FOREACH(d, k, items) { size_t l; l = d->size - offsetof(struct kdbus_item, data); @@ -800,9 +801,10 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) { destination = d->str; break; - case KDBUS_ITEM_NAMES: - m->creds.well_known_names = d->str; - m->creds.well_known_names_size = l; + case KDBUS_ITEM_NAME: + r = strv_extend(&m->creds.well_known_names, d->name.name); + if (r < 0) + goto fail; m->creds.mask |= SD_BUS_CREDS_WELL_KNOWN_NAMES & bus->creds_mask; break; @@ -883,7 +885,7 @@ int bus_kernel_read_message(sd_bus *bus) { } k = (struct kdbus_msg *)((uint8_t *)bus->kdbus_buffer + off); - if (k->payload_type == KDBUS_PAYLOAD_DBUS1) + if (k->payload_type == KDBUS_PAYLOAD_DBUS) r = bus_kernel_make_message(bus, k); else if (k->payload_type == KDBUS_PAYLOAD_KERNEL) r = bus_kernel_translate_message(bus, k); @@ -1061,11 +1063,10 @@ int bus_kernel_create_bus(const char *name, char **s) { n = make->items; sprintf(n->str, "%lu-%s", (unsigned long) getuid(), name); n->size = offsetof(struct kdbus_item, str) + strlen(n->str) + 1; - n->type = KDBUS_MAKE_NAME; + n->type = KDBUS_ITEM_MAKE_NAME; make->size = ALIGN8(offsetof(struct kdbus_cmd_bus_make, items) + n->size); make->flags = KDBUS_MAKE_POLICY_OPEN; - make->bus_flags = 0; make->bloom_size = BLOOM_SIZE; assert_cc(BLOOM_SIZE % 8 == 0); @@ -1165,7 +1166,7 @@ int bus_kernel_create_namespace(const char *name, char **s) { n = make->items; strcpy(n->str, name); n->size = offsetof(struct kdbus_item, str) + strlen(n->str) + 1; - n->type = KDBUS_MAKE_NAME; + n->type = KDBUS_ITEM_MAKE_NAME; make->size = ALIGN8(offsetof(struct kdbus_cmd_ns_make, items) + n->size); make->flags = KDBUS_MAKE_POLICY_OPEN | KDBUS_MAKE_ACCESS_WORLD;