diff options
author | Simon McVittie <smcv@collabora.com> | 2018-01-12 19:55:41 +0000 |
---|---|---|
committer | Simon McVittie <smcv@collabora.com> | 2018-01-15 14:00:52 +0000 |
commit | 1086acbd792c810c4ad643b319732a5060add6a9 (patch) | |
tree | 6c708e075ddd898babec5b9db4568343a6a27ddf /bus/containers.c | |
parent | d6d01c7881149a6105cc760d3d3e4af1886850e5 (diff) | |
download | dbus-1086acbd792c810c4ad643b319732a5060add6a9.tar.gz |
containers: Include credentials of initiator in container instance info
This provides the necessary information for services to make an
informed decision about how far they should trust the container type,
name and metadata fields.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Reviewed-by: Philip Withnall <withnall@endlessm.com>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=104610
Diffstat (limited to 'bus/containers.c')
-rw-r--r-- | bus/containers.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/bus/containers.c b/bus/containers.c index f9865706..6eb327ff 100644 --- a/bus/containers.c +++ b/bus/containers.c @@ -1130,6 +1130,7 @@ bus_containers_handle_get_connection_instance (DBusConnection *caller, DBusConnection *subject; DBusMessage *reply = NULL; DBusMessageIter writer; + DBusMessageIter arr_writer; const char *bus_name; _DBUS_ASSERT_ERROR_IS_CLEAR (error); @@ -1169,6 +1170,25 @@ bus_containers_handle_get_connection_instance (DBusConnection *caller, if (!dbus_message_append_args (reply, DBUS_TYPE_OBJECT_PATH, &instance->path, + DBUS_TYPE_INVALID)) + goto oom; + + dbus_message_iter_init_append (reply, &writer); + + if (!dbus_message_iter_open_container (&writer, DBUS_TYPE_ARRAY, "{sv}", + &arr_writer)) + goto oom; + + if (!bus_driver_fill_connection_credentials (instance->creator, &arr_writer)) + { + dbus_message_iter_abandon_container (&writer, &arr_writer); + goto oom; + } + + if (!dbus_message_iter_close_container (&writer, &arr_writer)) + goto oom; + + if (!dbus_message_append_args (reply, DBUS_TYPE_STRING, &instance->type, DBUS_TYPE_STRING, &instance->name, DBUS_TYPE_INVALID)) @@ -1206,6 +1226,7 @@ bus_containers_handle_get_instance_info (DBusConnection *connection, BusContainerInstance *instance = NULL; DBusMessage *reply = NULL; DBusMessageIter writer; + DBusMessageIter arr_writer; const char *path; if (!dbus_message_get_args (message, error, @@ -1234,6 +1255,21 @@ bus_containers_handle_get_instance_info (DBusConnection *connection, if (reply == NULL) goto oom; + dbus_message_iter_init_append (reply, &writer); + + if (!dbus_message_iter_open_container (&writer, DBUS_TYPE_ARRAY, "{sv}", + &arr_writer)) + goto oom; + + if (!bus_driver_fill_connection_credentials (instance->creator, &arr_writer)) + { + dbus_message_iter_abandon_container (&writer, &arr_writer); + goto oom; + } + + if (!dbus_message_iter_close_container (&writer, &arr_writer)) + goto oom; + if (!dbus_message_append_args (reply, DBUS_TYPE_STRING, &instance->type, DBUS_TYPE_STRING, &instance->name, |