DBusConnection *subject;
DBusMessage *reply = NULL;
DBusMessageIter writer;
+ DBusMessageIter arr_writer;
const char *bus_name;
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
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))
BusContainerInstance *instance = NULL;
DBusMessage *reply = NULL;
DBusMessageIter writer;
+ DBusMessageIter arr_writer;
const char *path;
if (!dbus_message_get_args (message, error,
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,
{
#ifdef HAVE_CONTAINERS_TEST
GVariant *asv;
+ GVariant *creator;
GVariant *parameters;
+ GVariantDict dict;
const gchar *confined_unique_name;
const gchar *path_from_query;
const gchar *manager_unique_name;
const gchar *name;
const gchar *name_owner;
const gchar *type;
+ guint32 uid;
GStatBuf stat_buf;
GVariant *tuple;
G_DBUS_CALL_FLAGS_NONE, -1, NULL, &f->error);
g_assert_no_error (f->error);
g_assert_nonnull (tuple);
- g_assert_cmpstr (g_variant_get_type_string (tuple), ==, "(ossa{sv})");
- g_variant_get (tuple, "(&o&s&s@a{sv})", &path_from_query, &type, &name, &asv);
+ g_assert_cmpstr (g_variant_get_type_string (tuple), ==, "(oa{sv}ssa{sv})");
+ g_variant_get (tuple, "(&o@a{sv}&s&s@a{sv})",
+ &path_from_query, &creator, &type, &name, &asv);
g_assert_cmpstr (path_from_query, ==, f->instance_path);
+ g_variant_dict_init (&dict, creator);
+ g_assert_true (g_variant_dict_lookup (&dict, "UnixUserID", "u", &uid));
+ g_assert_cmpuint (uid, ==, _dbus_getuid ());
+ g_variant_dict_clear (&dict);
g_assert_cmpstr (type, ==, "com.example.NotFlatpak");
g_assert_cmpstr (name, ==, "sample-app");
/* Trivial case: the metadata a{sv} is empty */
g_assert_cmpuint (g_variant_n_children (asv), ==, 0);
g_clear_pointer (&asv, g_variant_unref);
+ g_clear_pointer (&creator, g_variant_unref);
g_clear_pointer (&tuple, g_variant_unref);
g_test_message ("Inspecting container instance info");
G_DBUS_CALL_FLAGS_NONE, -1, NULL, &f->error);
g_assert_no_error (f->error);
g_assert_nonnull (tuple);
- g_assert_cmpstr (g_variant_get_type_string (tuple), ==, "(ssa{sv})");
- g_variant_get (tuple, "(&s&s@a{sv})", &type, &name, &asv);
+ g_assert_cmpstr (g_variant_get_type_string (tuple), ==, "(a{sv}ssa{sv})");
+ g_variant_get (tuple, "(@a{sv}&s&s@a{sv})", &creator, &type, &name, &asv);
+ g_variant_dict_init (&dict, creator);
+ g_assert_true (g_variant_dict_lookup (&dict, "UnixUserID", "u", &uid));
+ g_assert_cmpuint (uid, ==, _dbus_getuid ());
+ g_variant_dict_clear (&dict);
g_assert_cmpstr (type, ==, "com.example.NotFlatpak");
g_assert_cmpstr (name, ==, "sample-app");
/* Trivial case: the metadata a{sv} is empty */
g_assert_cmpuint (g_variant_n_children (asv), ==, 0);
g_clear_pointer (&asv, g_variant_unref);
+ g_clear_pointer (&creator, g_variant_unref);
g_clear_pointer (&tuple, g_variant_unref);
/* Check that the socket is cleaned up when the dbus-daemon is terminated */
{
#ifdef HAVE_CONTAINERS_TEST
GVariant *asv;
+ GVariant *creator;
GVariant *tuple;
GVariant *parameters;
GVariantDict dict;
const gchar *path_from_query;
const gchar *name;
const gchar *type;
+ guint32 uid;
guint u;
gboolean b;
const gchar *s;
G_DBUS_CALL_FLAGS_NONE, -1, NULL, &f->error);
g_assert_no_error (f->error);
g_assert_nonnull (tuple);
- g_assert_cmpstr (g_variant_get_type_string (tuple), ==, "(ossa{sv})");
- g_variant_get (tuple, "(&o&s&s@a{sv})", &path_from_query, &type, &name, &asv);
+ g_assert_cmpstr (g_variant_get_type_string (tuple), ==, "(oa{sv}ssa{sv})");
+ g_variant_get (tuple, "(&o@a{sv}&s&s@a{sv})",
+ &path_from_query, &creator, &type, &name, &asv);
g_assert_cmpstr (path_from_query, ==, f->instance_path);
+ g_variant_dict_init (&dict, creator);
+ g_assert_true (g_variant_dict_lookup (&dict, "UnixUserID", "u", &uid));
+ g_assert_cmpuint (uid, ==, _dbus_getuid ());
+ g_variant_dict_clear (&dict);
g_assert_cmpstr (type, ==, "org.example.Springwatch");
g_assert_cmpstr (name, ==, "");
g_variant_dict_init (&dict, asv);
g_variant_dict_clear (&dict);
g_assert_cmpuint (g_variant_n_children (asv), ==, 3);
g_clear_pointer (&asv, g_variant_unref);
+ g_clear_pointer (&creator, g_variant_unref);
g_clear_pointer (&tuple, g_variant_unref);
g_test_message ("Inspecting container instance info");
G_DBUS_CALL_FLAGS_NONE, -1, NULL, &f->error);
g_assert_no_error (f->error);
g_assert_nonnull (tuple);
- g_assert_cmpstr (g_variant_get_type_string (tuple), ==, "(ssa{sv})");
- g_variant_get (tuple, "(&s&s@a{sv})", &type, &name, &asv);
+ g_assert_cmpstr (g_variant_get_type_string (tuple), ==, "(a{sv}ssa{sv})");
+ g_variant_get (tuple, "(@a{sv}&s&s@a{sv})", &creator, &type, &name, &asv);
+ g_variant_dict_init (&dict, creator);
+ g_assert_true (g_variant_dict_lookup (&dict, "UnixUserID", "u", &uid));
+ g_assert_cmpuint (uid, ==, _dbus_getuid ());
+ g_variant_dict_clear (&dict);
g_assert_cmpstr (type, ==, "org.example.Springwatch");
g_assert_cmpstr (name, ==, "");
g_variant_dict_init (&dict, asv);
g_variant_dict_clear (&dict);
g_assert_cmpuint (g_variant_n_children (asv), ==, 3);
g_clear_pointer (&asv, g_variant_unref);
+ g_clear_pointer (&creator, g_variant_unref);
g_clear_pointer (&tuple, g_variant_unref);
#else /* !HAVE_CONTAINERS_TEST */