diff options
author | Alexander Larsson <alexl@redhat.com> | 2016-05-12 21:16:40 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2016-05-12 21:16:40 +0200 |
commit | 3964504438e5f6e0354ea6145f0e0022244ae3fc (patch) | |
tree | d8d50f47dcf75fb0d92f12b6f206139410f73236 | |
parent | e5649ead078cbd7bbe66a61c73e900ba591e0dae (diff) | |
download | xdg-app-3964504438e5f6e0354ea6145f0e0022244ae3fc.tar.gz |
Fix triggers with installation dir on a symlink
-rw-r--r-- | common/flatpak-dir.c | 13 |
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 ("/", |