size = offsetof(struct kdbus_cmd_name, items) + KDBUS_ITEM_SIZE(l);
n = alloca0_align(size, 8);
n->size = size;
- kdbus_translate_request_name_flags(flags, (uint64_t *) &n->flags);
+ n->flags = request_name_flags_to_kdbus(flags);
n->items[0].size = KDBUS_ITEM_HEADER_SIZE + l;
n->items[0].type = KDBUS_ITEM_NAME;
return bus_list_names_dbus1(bus, acquired, activatable);
}
-static int bus_populate_creds_from_items(sd_bus *bus,
- struct kdbus_info *info,
- uint64_t mask,
- sd_bus_creds *c) {
+static int bus_populate_creds_from_items(
+ sd_bus *bus,
+ struct kdbus_info *info,
+ uint64_t mask,
+ sd_bus_creds *c) {
struct kdbus_item *item;
uint64_t m;
case KDBUS_ITEM_PID_COMM:
if (mask & SD_BUS_CREDS_COMM) {
- c->comm = strdup(item->str);
- if (!c->comm)
- return -ENOMEM;
+ r = free_and_strdup(&c->comm, item->str);
+ if (r < 0)
+ return r;
c->mask |= SD_BUS_CREDS_COMM;
}
case KDBUS_ITEM_TID_COMM:
if (mask & SD_BUS_CREDS_TID_COMM) {
- c->tid_comm = strdup(item->str);
- if (!c->tid_comm)
- return -ENOMEM;
+ r = free_and_strdup(&c->tid_comm, item->str);
+ if (r < 0)
+ return r;
c->mask |= SD_BUS_CREDS_TID_COMM;
}
case KDBUS_ITEM_EXE:
if (mask & SD_BUS_CREDS_EXE) {
- c->exe = strdup(item->str);
- if (!c->exe)
- return -ENOMEM;
+ r = free_and_strdup(&c->exe, item->str);
+ if (r < 0)
+ return r;
c->mask |= SD_BUS_CREDS_EXE;
}
case KDBUS_ITEM_CMDLINE:
if (mask & SD_BUS_CREDS_CMDLINE) {
- c->cmdline_size = item->size - KDBUS_ITEM_HEADER_SIZE;
+ c->cmdline_size = item->size - offsetof(struct kdbus_item, data);
c->cmdline = memdup(item->data, c->cmdline_size);
if (!c->cmdline)
return -ENOMEM;
SD_BUS_CREDS_SESSION | SD_BUS_CREDS_OWNER_UID) & mask;
if (m) {
- c->cgroup = strdup(item->str);
- if (!c->cgroup)
- return -ENOMEM;
+ r = free_and_strdup(&c->cgroup, item->str);
+ if (r < 0)
+ return r;
r = bus_get_root_path(bus);
if (r < 0)
return r;
- c->cgroup_root = strdup(bus->cgroup_root);
- if (!c->cgroup_root)
- return -ENOMEM;
+ r = free_and_strdup(&c->cgroup_root, bus->cgroup_root);
+ if (r < 0)
+ return r;
c->mask |= m;
}
case KDBUS_ITEM_SECLABEL:
if (mask & SD_BUS_CREDS_SELINUX_CONTEXT) {
- c->label = strdup(item->str);
- if (!c->label)
- return -ENOMEM;
+ r = free_and_strdup(&c->label, item->str);
+ if (r < 0)
+ return r;
c->mask |= SD_BUS_CREDS_SELINUX_CONTEXT;
}
break;
case KDBUS_ITEM_CONN_DESCRIPTION:
- if ((mask & SD_BUS_CREDS_DESCRIPTION)) {
- c->description = strdup(item->str);
- if (!c->description)
- return -ENOMEM;
+ if (mask & SD_BUS_CREDS_DESCRIPTION) {
+ r = free_and_strdup(&c->description, item->str);
+ if (r < 0)
+ return r;
c->mask |= SD_BUS_CREDS_DESCRIPTION;
}
break;
+
+ case KDBUS_ITEM_AUXGROUPS:
+ if (mask & SD_BUS_CREDS_SUPPLEMENTARY_GIDS) {
+ size_t i, n;
+ uid_t *u;
+
+ n = (item->size - offsetof(struct kdbus_item, data64)) / sizeof(uint64_t);
+ u = new(uid_t, n);
+ if (!u)
+ return -ENOMEM;
+
+ for (i = 0; i < n; i++)
+ u[i] = (uid_t) item->data64[i];
+
+ c->supplementary_gids = u;
+ c->n_supplementary_gids = n;
+
+ c->mask |= SD_BUS_CREDS_SUPPLEMENTARY_GIDS;
+ }
+ break;
}
}
}
cmd->size = size;
- kdbus_translate_attach_flags(mask, (uint64_t*) &cmd->flags);
+ cmd->flags = attach_flags_to_kdbus(mask);
/* If augmentation is on, and the bus doesn't didn't allow us
* to get the bits we want, then ask for the PID/TID so that we
struct kdbus_info *creator_info;
cmd.size = sizeof(cmd);
- kdbus_translate_attach_flags(mask, (uint64_t*) &cmd.flags);
+ cmd.flags = attach_flags_to_kdbus(mask);
/* If augmentation is on, and the bus doesn't didn't allow us
* to get the bits we want, then ask for the PID/TID so that we