diff --git a/app/xdg-app-builtins-build.c b/app/xdg-app-builtins-build.c index ea49b471..91d98275 100644 --- a/app/xdg-app-builtins-build.c +++ b/app/xdg-app-builtins-build.c @@ -150,7 +150,7 @@ xdg_app_builtin_build (int argc, char **argv, GCancellable *cancellable, GError app_files = g_file_get_child (app_deploy, "files"); argv_array = g_ptr_array_new_with_free_func (g_free); - g_ptr_array_add (argv_array, g_strdup (HELPER)); + g_ptr_array_add (argv_array, g_strdup (xdg_app_get_bwrap ())); custom_usr = FALSE; usr = g_file_get_child (app_deploy, "usr"); @@ -220,7 +220,7 @@ xdg_app_builtin_build (int argc, char **argv, GCancellable *cancellable, GError g_ptr_array_add (argv_array, NULL); - if (!execve (HELPER, (char **)argv_array->pdata, envp)) + if (!execve (xdg_app_get_bwrap (), (char **)argv_array->pdata, envp)) { g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), "Unable to start app"); return FALSE; diff --git a/common/xdg-app-dir.c b/common/xdg-app-dir.c index 59d752b9..1cc74b14 100644 --- a/common/xdg-app-dir.c +++ b/common/xdg-app-dir.c @@ -1752,10 +1752,15 @@ xdg_app_dir_run_triggers (XdgAppDir *self, g_autoptr(GFileInfo) child_info = NULL; g_autoptr(GFile) triggersdir = NULL; GError *temp_error = NULL; + const char *triggerspath; - g_debug ("running triggers"); + triggerspath = g_getenv ("XDG_APP_TRIGGERSDIR"); + if (triggerspath == NULL) + triggerspath = XDG_APP_TRIGGERDIR; - triggersdir = g_file_new_for_path (XDG_APP_TRIGGERDIR); + g_debug ("running triggers from %s", triggerspath); + + triggersdir = g_file_new_for_path (triggerspath); dir_enum = g_file_enumerate_children (triggersdir, "standard::type,standard::name", 0, cancellable, error); @@ -1784,7 +1789,7 @@ xdg_app_dir_run_triggers (XdgAppDir *self, g_ptr_array_add (argv_array, g_file_get_path (child)); g_ptr_array_add (argv_array, g_file_get_path (self->basedir)); #else - g_ptr_array_add (argv_array, g_strdup (HELPER)); + g_ptr_array_add (argv_array, g_strdup (xdg_app_get_bwrap ())); g_ptr_array_add (argv_array, g_strdup ("--unshare-ipc")); g_ptr_array_add (argv_array, g_strdup ("--unshare-net")); g_ptr_array_add (argv_array, g_strdup ("--unshare-pid")); diff --git a/common/xdg-app-run.c b/common/xdg-app-run.c index f0d7660c..e4d32f71 100644 --- a/common/xdg-app-run.c +++ b/common/xdg-app-run.c @@ -2320,6 +2320,7 @@ add_dbus_proxy_args (GPtrArray *argv_array, GError **error) { char x = 'x'; + const char *proxy; if (dbus_proxy_argv->len == 0) return TRUE; @@ -2338,7 +2339,11 @@ add_dbus_proxy_args (GPtrArray *argv_array, add_args (argv_array, "--sync-fd", fd_str, NULL); } - g_ptr_array_insert (dbus_proxy_argv, 0, g_strdup (DBUSPROXY)); + proxy = g_getenv ("XDG_APP_DBUSPROXY"); + if (proxy == NULL) + proxy = DBUSPROXY; + + g_ptr_array_insert (dbus_proxy_argv, 0, g_strdup (proxy)); g_ptr_array_insert (dbus_proxy_argv, 1, g_strdup_printf ("--fd=%d", sync_fds[1])); if (enable_logging) g_ptr_array_insert (dbus_proxy_argv, 2, g_strdup ("--log")); @@ -2951,7 +2956,7 @@ xdg_app_run_app (const char *app_ref, } real_argv_array = g_ptr_array_new_with_free_func (g_free); - g_ptr_array_add (real_argv_array, g_strdup (HELPER)); + g_ptr_array_add (real_argv_array, g_strdup (xdg_app_get_bwrap ())); { gsize len; @@ -2989,7 +2994,7 @@ xdg_app_run_app (const char *app_ref, } else { - if (execvpe (HELPER, (char **)real_argv_array->pdata, envp) == -1) + if (execvpe (xdg_app_get_bwrap (), (char **)real_argv_array->pdata, envp) == -1) { g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), "Unable to start app"); return FALSE; diff --git a/common/xdg-app-utils.c b/common/xdg-app-utils.c index 46906ce3..cbf50315 100644 --- a/common/xdg-app-utils.c +++ b/common/xdg-app-utils.c @@ -216,6 +216,15 @@ xdg_app_get_arch (void) return arch; } +const char * +xdg_app_get_bwrap (void) +{ + const char *e = g_getenv ("XDG_APP_BWRAP"); + if (e != NULL) + return e; + return HELPER; +} + static gboolean is_valid_initial_name_character (gint c) { diff --git a/common/xdg-app-utils.h b/common/xdg-app-utils.h index 9b5e7c0c..5f0fbccc 100644 --- a/common/xdg-app-utils.h +++ b/common/xdg-app-utils.h @@ -41,6 +41,8 @@ const char * xdg_app_path_match_prefix (const char *pattern, const char * xdg_app_get_arch (void); +const char * xdg_app_get_bwrap (void); + GBytes * xdg_app_read_stream (GInputStream *in, gboolean null_terminate, GError **error); diff --git a/tests/Makefile.am.inc b/tests/Makefile.am.inc index 0d7d3c89..a59a87ae 100644 --- a/tests/Makefile.am.inc +++ b/tests/Makefile.am.inc @@ -1,4 +1,7 @@ TESTS_ENVIRONMENT += OT_TESTS_DEBUG=1 \ + XDG_APP_TRIGGERSDIR=$$(cd $(top_srcdir) && pwd)/triggers \ + XDG_APP_BWRAP=$$(cd $(top_builddir) && pwd)/bwrap \ + XDG_APP_DBUSPROXY=$$(cd $(top_builddir) && pwd)/xdg-dbus-proxy \ GI_TYPELIB_PATH=$$(cd $(top_builddir) && pwd) \ LD_LIBRARY_PATH=$$(cd $(top_builddir)/.libs && pwd) \ PATH=$$(cd $(top_builddir) && pwd):$${PATH} \