X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fbus-proxyd%2Fdriver.c;h=bc2c0c86f33b5c22d7a2d098aed826b4ea5018aa;hp=37fb87c453851c7433016cfdd4faa4a2b28af028;hb=1433efd219a6df414a1821b3d3d70d86201ed3e4;hpb=bae8352c1dedc335b0e0b6ee2066f64b0b483e24 diff --git a/src/bus-proxyd/driver.c b/src/bus-proxyd/driver.c index 37fb87c45..bc2c0c86f 100644 --- a/src/bus-proxyd/driver.c +++ b/src/bus-proxyd/driver.c @@ -252,11 +252,11 @@ int bus_proxy_process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPoli if (!sd_bus_message_has_signature(m, "s")) return synthetic_reply_method_error(m, &SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_INVALID_ARGS, "Invalid parameters")); - r = get_creds_by_message(a, m, SD_BUS_CREDS_UID, &creds, &error); + r = get_creds_by_message(a, m, SD_BUS_CREDS_EUID, &creds, &error); if (r < 0) return synthetic_reply_method_errno(m, r, &error); - return synthetic_reply_method_return(m, "u", (uint32_t) creds->uid); + return synthetic_reply_method_return(m, "u", (uint32_t) creds->euid); } else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "GetId")) { sd_id128_t server_id; @@ -305,7 +305,7 @@ int bus_proxy_process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPoli /* Let's sort the names list to make it stable */ strv_sort(names); - return synthetic_reply_return_strv(m, names); + return synthetic_reply_method_return_strv(m, names); } else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "ListNames")) { _cleanup_strv_free_ char **names = NULL; @@ -324,12 +324,14 @@ int bus_proxy_process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPoli /* Let's sort the names list to make it stable */ strv_sort(names); - return synthetic_reply_return_strv(m, names); + return synthetic_reply_method_return_strv(m, names); } else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "ListQueuedOwners")) { - struct kdbus_cmd_name_list cmd = {}; - struct kdbus_name_list *name_list; - struct kdbus_name_info *name; + struct kdbus_cmd_list cmd = { + .flags = KDBUS_LIST_QUEUED, + .size = sizeof(cmd), + }; + struct kdbus_info *name_list, *name; _cleanup_strv_free_ char **owners = NULL; _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; char *arg0; @@ -350,14 +352,13 @@ int bus_proxy_process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPoli if (r < 0) return synthetic_reply_method_errno(m, r, NULL); - cmd.flags = KDBUS_NAME_LIST_QUEUED; - r = ioctl(a->input_fd, KDBUS_CMD_NAME_LIST, &cmd); + r = ioctl(a->input_fd, KDBUS_CMD_LIST, &cmd); if (r < 0) return synthetic_reply_method_errno(m, -errno, NULL); - name_list = (struct kdbus_name_list *) ((uint8_t *) a->kdbus_buffer + cmd.offset); + name_list = (struct kdbus_info *) ((uint8_t *) a->kdbus_buffer + cmd.offset); - KDBUS_ITEM_FOREACH(name, name_list, names) { + KDBUS_FOREACH(name, name_list, cmd.list_size) { const char *entry_name = NULL; struct kdbus_item *item; char *n; @@ -369,7 +370,7 @@ int bus_proxy_process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPoli if (!streq_ptr(entry_name, arg0)) continue; - if (asprintf(&n, ":1.%llu", (unsigned long long) name->owner_id) < 0) { + if (asprintf(&n, ":1.%llu", (unsigned long long) name->id) < 0) { err = -ENOMEM; break; } @@ -388,7 +389,7 @@ int bus_proxy_process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPoli if (err < 0) return synthetic_reply_method_errno(m, err, NULL); - return synthetic_reply_return_strv(m, owners); + return synthetic_reply_method_return_strv(m, owners); } else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "NameHasOwner")) { const char *name; @@ -434,14 +435,14 @@ int bus_proxy_process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPoli return synthetic_reply_method_return(m, "u", BUS_NAME_RELEASED); } else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "ReloadConfig")) { - _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - if (!sd_bus_message_has_signature(m, "")) return synthetic_reply_method_error(m, &SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_INVALID_ARGS, "Invalid parameters")); - r = sd_bus_error_setf(&error, SD_BUS_ERROR_NOT_SUPPORTED, "%s() is not supported", sd_bus_message_get_member(m)); + r = shared_policy_reload(sp); + if (r < 0) + return synthetic_reply_method_errno(m, r, NULL); - return synthetic_reply_method_errno(m, r, &error); + return synthetic_reply_method_return(m, NULL); } else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "RequestName")) { const char *name;