summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2016-05-12 21:16:40 +0200
committerAlexander Larsson <alexl@redhat.com>2016-05-12 21:16:40 +0200
commit3964504438e5f6e0354ea6145f0e0022244ae3fc (patch)
treed8d50f47dcf75fb0d92f12b6f206139410f73236
parente5649ead078cbd7bbe66a61c73e900ba591e0dae (diff)
downloadxdg-app-3964504438e5f6e0354ea6145f0e0022244ae3fc.tar.gz
Fix triggers with installation dir on a symlink
-rw-r--r--common/flatpak-dir.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c
index 7676cc4..2ba6769 100644
--- a/common/flatpak-dir.c
+++ b/common/flatpak-dir.c
@@ -1890,13 +1890,18 @@ flatpak_dir_run_triggers (FlatpakDir *self,
g_str_has_suffix (name, ".trigger"))
{
g_autoptr(GPtrArray) argv_array = NULL;
+ /* We need to canonicalize the basedir, because if has a symlink
+ somewhere the bind mount will be on the target of that, not
+ at that exact path. */
+ g_autofree char *basedir_orig = g_file_get_path (self->basedir);
+ g_autofree char *basedir = canonicalize_file_name (basedir_orig);
g_debug ("running trigger %s", name);
argv_array = g_ptr_array_new_with_free_func (g_free);
#ifdef DISABLE_SANDBOXED_TRIGGERS
g_ptr_array_add (argv_array, g_file_get_path (child));
- g_ptr_array_add (argv_array, g_file_get_path (self->basedir));
+ g_ptr_array_add (argv_array, g_strdup (basedir));
#else
g_ptr_array_add (argv_array, g_strdup (flatpak_get_bwrap ()));
g_ptr_array_add (argv_array, g_strdup ("--unshare-ipc"));
@@ -1910,11 +1915,11 @@ flatpak_dir_run_triggers (FlatpakDir *self,
g_ptr_array_add (argv_array, g_strdup ("--dev"));
g_ptr_array_add (argv_array, g_strdup ("/dev"));
g_ptr_array_add (argv_array, g_strdup ("--bind"));
- g_ptr_array_add (argv_array, g_file_get_path (self->basedir));
- g_ptr_array_add (argv_array, g_file_get_path (self->basedir));
+ g_ptr_array_add (argv_array, g_strdup (basedir));
+ g_ptr_array_add (argv_array, g_strdup (basedir));
#endif
g_ptr_array_add (argv_array, g_file_get_path (child));
- g_ptr_array_add (argv_array, g_file_get_path (self->basedir));
+ g_ptr_array_add (argv_array, g_strdup (basedir));
g_ptr_array_add (argv_array, NULL);
if (!g_spawn_sync ("/",