X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-control.c;h=186724e8ad1f7723ef48cb5986028eb3bba89312;hb=65dae17a2f890b12a07dd4901b3db02b1031c463;hp=7a772ff49f87d3f55eca6fde817a772a96a14f80;hpb=c0a0913218f900e76984179ab959d8fb12bef1fb;p=elogind.git diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c index 7a772ff49..186724e8a 100644 --- a/src/libsystemd-bus/bus-control.c +++ b/src/libsystemd-bus/bus-control.c @@ -208,7 +208,6 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) { /* Caller will free half-constructed list on failure... */ - cmd.size = sizeof(struct kdbus_cmd_name_list); cmd.flags = flags; r = ioctl(bus->input_fd, KDBUS_CMD_NAME_LIST, &cmd); @@ -364,6 +363,7 @@ static int bus_get_owner_kdbus( cmd = alloca0(size); strcpy(cmd->name, name); } + cmd->flags = KDBUS_ATTACH_NAMES; cmd->size = size; r = ioctl(bus->input_fd, KDBUS_CMD_CONN_INFO, cmd); @@ -504,14 +504,11 @@ static int bus_get_owner_kdbus( } break; - case KDBUS_ITEM_NAMES: + case KDBUS_ITEM_NAME: if (mask & SD_BUS_CREDS_WELL_KNOWN_NAMES) { - c->well_known_names_size = item->size - KDBUS_PART_HEADER_SIZE; - c->well_known_names = memdup(item->data, c->well_known_names_size); - if (!c->well_known_names) { - r = -ENOMEM; + r = strv_extend(&c->well_known_names, item->name.name); + if (r < 0) goto fail; - } c->mask |= SD_BUS_CREDS_WELL_KNOWN_NAMES; }