common: Separate creation of FlatpakExports from append_bwrap_filesystem

A subsequent commit will need to look at the FlatpakExports before
we are ready to append their arguments to the FlatpakBwrap.

Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
Simon McVittie
2021-01-25 15:51:53 +00:00
committed by Alexander Larsson
parent 5d50b77c37
commit 574ff50cf4
4 changed files with 35 additions and 24 deletions

View File

@@ -145,8 +145,9 @@ void flatpak_context_append_bwrap_filesystem (FlatpakContext *context,
FlatpakBwrap *bwrap,
const char *app_id,
GFile *app_id_dir,
GPtrArray *extra_app_id_dirs,
FlatpakExports **exports_out);
FlatpakExports *exports,
const char *xdg_dirs_conf,
gboolean home_access);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakContext, flatpak_context_free)

View File

@@ -2501,20 +2501,13 @@ flatpak_context_append_bwrap_filesystem (FlatpakContext *context,
FlatpakBwrap *bwrap,
const char *app_id,
GFile *app_id_dir,
GPtrArray *extra_app_id_dirs,
FlatpakExports **exports_out)
FlatpakExports *exports,
const char *xdg_dirs_conf,
gboolean home_access)
{
g_autoptr(FlatpakExports) exports = NULL;
g_autofree char *xdg_dirs_conf = NULL;
gboolean home_access = FALSE;
GHashTableIter iter;
gpointer key, value;
exports = flatpak_context_get_exports_full (context,
app_id_dir, extra_app_id_dirs,
TRUE, TRUE,
&xdg_dirs_conf, &home_access);
if (app_id_dir != NULL)
flatpak_run_apply_env_appid (bwrap, app_id_dir);
@@ -2610,7 +2603,4 @@ flatpak_context_append_bwrap_filesystem (FlatpakContext *context,
flatpak_bwrap_add_args_data (bwrap, "xdg-config-dirs",
xdg_dirs_conf, strlen (xdg_dirs_conf), path, NULL);
}
if (exports_out)
*exports_out = g_steal_pointer (&exports);
}

View File

@@ -1352,8 +1352,10 @@ flatpak_run_add_environment_args (FlatpakBwrap *bwrap,
g_autoptr(GError) my_error = NULL;
g_autoptr(FlatpakExports) exports = NULL;
g_autoptr(FlatpakBwrap) proxy_arg_bwrap = flatpak_bwrap_new (flatpak_bwrap_empty_env);
g_autofree char *xdg_dirs_conf = NULL;
gboolean has_wayland = FALSE;
gboolean allow_x11 = FALSE;
gboolean home_access = FALSE;
if ((context->shares & FLATPAK_CONTEXT_SHARED_IPC) == 0)
{
@@ -1460,7 +1462,13 @@ flatpak_run_add_environment_args (FlatpakBwrap *bwrap,
}
}
flatpak_context_append_bwrap_filesystem (context, bwrap, app_id, app_id_dir, previous_app_id_dirs, &exports);
exports = flatpak_context_get_exports_full (context,
app_id_dir, previous_app_id_dirs,
TRUE, TRUE,
&xdg_dirs_conf, &home_access);
flatpak_context_append_bwrap_filesystem (context, bwrap, app_id, app_id_dir,
exports, xdg_dirs_conf, home_access);
if (context->sockets & FLATPAK_CONTEXT_SOCKET_WAYLAND)
{

View File

@@ -167,6 +167,8 @@ test_empty_context (void)
g_autoptr(FlatpakBwrap) bwrap = flatpak_bwrap_new (NULL);
g_autoptr(FlatpakContext) context = flatpak_context_new ();
g_autoptr(FlatpakExports) exports = NULL;
g_autofree char *xdg_dirs_conf = NULL;
gboolean home_access = FALSE;
g_assert_cmpuint (g_hash_table_size (context->env_vars), ==, 0);
g_assert_cmpuint (g_hash_table_size (context->persistent), ==, 0);
@@ -188,13 +190,17 @@ test_empty_context (void)
g_assert_nonnull (exports);
g_clear_pointer (&exports, flatpak_exports_free);
exports = flatpak_context_get_exports_full (context,
NULL, NULL,
TRUE, TRUE,
&xdg_dirs_conf, &home_access);
g_assert_nonnull (exports);
g_assert_nonnull (xdg_dirs_conf);
flatpak_context_append_bwrap_filesystem (context, bwrap,
"com.example.App",
NULL,
NULL,
&exports);
NULL, exports, xdg_dirs_conf,
home_access);
print_bwrap (bwrap);
g_assert_nonnull (exports);
}
static void
@@ -206,8 +212,10 @@ test_full_context (void)
g_autoptr(GError) error = NULL;
g_autoptr(GKeyFile) keyfile = g_key_file_new ();
g_autofree gchar *text = NULL;
g_autofree char *xdg_dirs_conf = NULL;
g_auto(GStrv) strv = NULL;
gsize i, n;
gboolean home_access = FALSE;
g_key_file_set_value (keyfile,
FLATPAK_METADATA_GROUP_CONTEXT,
@@ -306,13 +314,17 @@ test_full_context (void)
g_assert_nonnull (exports);
g_clear_pointer (&exports, flatpak_exports_free);
exports = flatpak_context_get_exports_full (context,
NULL, NULL,
TRUE, TRUE,
&xdg_dirs_conf, &home_access);
g_assert_nonnull (exports);
g_assert_nonnull (xdg_dirs_conf);
flatpak_context_append_bwrap_filesystem (context, bwrap,
"com.example.App",
NULL,
NULL,
&exports);
NULL, exports, xdg_dirs_conf,
home_access);
print_bwrap (bwrap);
g_assert_nonnull (exports);
g_clear_pointer (&keyfile, g_key_file_unref);
keyfile = g_key_file_new ();