X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibsystemd%2Fsd-bus%2Fbus-control.c;h=bd439a95ddf625919be37ef48f6391f0e370783a;hp=5dd2307f535bbea9f3a17d53983998b70d5d3cf5;hb=00d053d3cacab6628405d704c5049274e1be297e;hpb=21fce57b26f50381d21a22be4d62a8f6067dc5c9 diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c index 5dd2307f5..bd439a95d 100644 --- a/src/libsystemd/sd-bus/bus-control.c +++ b/src/libsystemd/sd-bus/bus-control.c @@ -52,7 +52,7 @@ _public_ int sd_bus_get_unique_name(sd_bus *bus, const char **unique) { } static int bus_request_name_kernel(sd_bus *bus, const char *name, uint64_t flags) { - struct kdbus_cmd_name *n; + struct kdbus_cmd *n; size_t size, l; int r; @@ -60,7 +60,7 @@ static int bus_request_name_kernel(sd_bus *bus, const char *name, uint64_t flags assert(name); l = strlen(name) + 1; - size = offsetof(struct kdbus_cmd_name, items) + KDBUS_ITEM_SIZE(l); + size = offsetof(struct kdbus_cmd, items) + KDBUS_ITEM_SIZE(l); n = alloca0_align(size, 8); n->size = size; n->flags = request_name_flags_to_kdbus(flags); @@ -151,7 +151,7 @@ _public_ int sd_bus_request_name(sd_bus *bus, const char *name, uint64_t flags) } static int bus_release_name_kernel(sd_bus *bus, const char *name) { - struct kdbus_cmd_name *n; + struct kdbus_cmd *n; size_t size, l; int r; @@ -159,7 +159,7 @@ static int bus_release_name_kernel(sd_bus *bus, const char *name) { assert(name); l = strlen(name) + 1; - size = offsetof(struct kdbus_cmd_name, items) + KDBUS_ITEM_SIZE(l); + size = offsetof(struct kdbus_cmd, items) + KDBUS_ITEM_SIZE(l); n = alloca0_align(size, 8); n->size = size; @@ -233,32 +233,31 @@ _public_ int sd_bus_release_name(sd_bus *bus, const char *name) { } static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) { - struct kdbus_cmd_name_list cmd = {}; - struct kdbus_name_list *name_list; - struct kdbus_name_info *name; + struct kdbus_cmd_list cmd = { + .size = sizeof(cmd), + .flags = flags, + }; + struct kdbus_info *name_list, *name; uint64_t previous_id = 0; int r; /* Caller will free half-constructed list on failure... */ - cmd.size = sizeof(cmd); - cmd.flags = flags; - - r = ioctl(bus->input_fd, KDBUS_CMD_NAME_LIST, &cmd); + r = ioctl(bus->input_fd, KDBUS_CMD_LIST, &cmd); if (r < 0) return -errno; - name_list = (struct kdbus_name_list *) ((uint8_t *) bus->kdbus_buffer + cmd.offset); + name_list = (struct kdbus_info *) ((uint8_t *) bus->kdbus_buffer + cmd.offset); - KDBUS_ITEM_FOREACH(name, name_list, names) { + KDBUS_FOREACH(name, name_list, cmd.list_size) { struct kdbus_item *item; const char *entry_name = NULL; - if ((flags & KDBUS_NAME_LIST_UNIQUE) && name->owner_id != previous_id) { + if ((flags & KDBUS_LIST_UNIQUE) && name->id != previous_id) { char *n; - if (asprintf(&n, ":1.%llu", (unsigned long long) name->owner_id) < 0) { + if (asprintf(&n, ":1.%llu", (unsigned long long) name->id) < 0) { r = -ENOMEM; goto fail; } @@ -267,7 +266,7 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) { if (r < 0) goto fail; - previous_id = name->owner_id; + previous_id = name->id; } KDBUS_ITEM_FOREACH(item, name, items) @@ -295,13 +294,13 @@ static int bus_list_names_kernel(sd_bus *bus, char ***acquired, char ***activata int r; if (acquired) { - r = kernel_get_list(bus, KDBUS_NAME_LIST_UNIQUE | KDBUS_NAME_LIST_NAMES, &x); + r = kernel_get_list(bus, KDBUS_LIST_UNIQUE | KDBUS_LIST_NAMES, &x); if (r < 0) return r; } if (activatable) { - r = kernel_get_list(bus, KDBUS_NAME_LIST_ACTIVATORS, &y); + r = kernel_get_list(bus, KDBUS_LIST_ACTIVATORS, &y); if (r < 0) return r; @@ -655,7 +654,7 @@ int bus_get_name_creds_kdbus( mask |= SD_BUS_CREDS_PID; cmd->size = size; - cmd->flags = attach_flags_to_kdbus(mask); + cmd->attach_flags = attach_flags_to_kdbus(mask); r = ioctl(bus->input_fd, KDBUS_CMD_CONN_INFO, cmd); if (r < 0) @@ -897,7 +896,7 @@ _public_ int sd_bus_get_name_creds( static int bus_get_owner_creds_kdbus(sd_bus *bus, uint64_t mask, sd_bus_creds **ret) { _cleanup_bus_creds_unref_ sd_bus_creds *c = NULL; struct kdbus_cmd_info cmd = { - .size = sizeof(struct kdbus_cmd_info) + .size = sizeof(struct kdbus_cmd_info), }; struct kdbus_info *creator_info; pid_t pid = 0; @@ -920,7 +919,7 @@ static int bus_get_owner_creds_kdbus(sd_bus *bus, uint64_t mask, sd_bus_creds ** SD_BUS_CREDS_AUDIT_SESSION_ID|SD_BUS_CREDS_AUDIT_LOGIN_UID))) mask |= SD_BUS_CREDS_PID; - cmd.flags = attach_flags_to_kdbus(mask); + cmd.attach_flags = attach_flags_to_kdbus(mask); r = ioctl(bus->input_fd, KDBUS_CMD_BUS_CREATOR_INFO, &cmd); if (r < 0) @@ -1268,7 +1267,7 @@ int bus_add_match_internal_kernel( if (c->type - BUS_MATCH_ARG < 3) name_change_arg[c->type - BUS_MATCH_ARG] = c->value_str; - snprintf(buf, sizeof(buf), "arg%u", c->type - BUS_MATCH_ARG); + xsprintf(buf, "arg%i", c->type - BUS_MATCH_ARG); bloom_add_pair(bloom, bus->bloom_size, bus->bloom_n_hash, buf, c->value_str); using_bloom = true; break; @@ -1277,7 +1276,7 @@ int bus_add_match_internal_kernel( case BUS_MATCH_ARG_PATH...BUS_MATCH_ARG_PATH_LAST: { char buf[sizeof("arg")-1 + 2 + sizeof("-slash-prefix")]; - snprintf(buf, sizeof(buf), "arg%u-slash-prefix", c->type - BUS_MATCH_ARG_PATH); + xsprintf(buf, "arg%i-slash-prefix", c->type - BUS_MATCH_ARG_PATH); bloom_add_pair(bloom, bus->bloom_size, bus->bloom_n_hash, buf, c->value_str); using_bloom = true; break; @@ -1286,7 +1285,7 @@ int bus_add_match_internal_kernel( case BUS_MATCH_ARG_NAMESPACE...BUS_MATCH_ARG_NAMESPACE_LAST: { char buf[sizeof("arg")-1 + 2 + sizeof("-dot-prefix")]; - snprintf(buf, sizeof(buf), "arg%u-dot-prefix", c->type - BUS_MATCH_ARG_NAMESPACE); + xsprintf(buf, "arg%i-dot-prefix", c->type - BUS_MATCH_ARG_NAMESPACE); bloom_add_pair(bloom, bus->bloom_size, bus->bloom_n_hash, buf, c->value_str); using_bloom = true; break; @@ -1359,7 +1358,7 @@ int bus_add_match_internal_kernel( #define internal_match(bus, m) \ ((bus)->hello_flags & KDBUS_HELLO_MONITOR \ - ? (isempty(m) ? "eavesdrop='true'" : strappenda((m), ",eavesdrop='true'")) \ + ? (isempty(m) ? "eavesdrop='true'" : strjoina((m), ",eavesdrop='true'")) \ : (m)) static int bus_add_match_internal_dbus1( @@ -1404,7 +1403,10 @@ int bus_remove_match_internal_kernel( sd_bus *bus, uint64_t cookie) { - struct kdbus_cmd_match m; + struct kdbus_cmd_match m = { + .size = offsetof(struct kdbus_cmd_match, items), + .cookie = cookie, + }; int r; assert(bus); @@ -1413,10 +1415,6 @@ int bus_remove_match_internal_kernel( if (bus->hello_flags & KDBUS_HELLO_MONITOR) return 0; - zero(m); - m.size = offsetof(struct kdbus_cmd_match, items); - m.cookie = cookie; - r = ioctl(bus->input_fd, KDBUS_CMD_MATCH_REMOVE, &m); if (r < 0) return -errno;