From 251dcdb680a623627fafa47e85c602814835c3d3 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Tue, 17 May 2016 11:54:44 +0200 Subject: system-helper: Never use a system helper recursively --- common/flatpak-dir.c | 10 +++++++++- common/flatpak-dir.h | 2 ++ system-helper/flatpak-system-helper.c | 15 +++++++++++---- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 57986ea..017f4b7 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -62,6 +62,7 @@ struct FlatpakDir gboolean user; GFile *basedir; OstreeRepo *repo; + gboolean no_system_helper; FlatpakSystemHelper *system_helper; @@ -253,7 +254,7 @@ flatpak_dir_use_system_helper (FlatpakDir *self) { FlatpakSystemHelper *system_helper; - if (self->user || getuid () == 0) + if (self->no_system_helper || self->user || getuid () == 0) return FALSE; system_helper = flatpak_dir_get_system_helper (self); @@ -370,6 +371,13 @@ flatpak_dir_is_user (FlatpakDir *self) return self->user; } +void +flatpak_dir_set_no_system_helper (FlatpakDir *self, + gboolean no_system_helper) +{ + self->no_system_helper = no_system_helper; +} + GFile * flatpak_dir_get_path (FlatpakDir *self) { diff --git a/common/flatpak-dir.h b/common/flatpak-dir.h index 385139a..b4e1e3a 100644 --- a/common/flatpak-dir.h +++ b/common/flatpak-dir.h @@ -107,6 +107,8 @@ FlatpakDir *flatpak_dir_get (gboolean user); FlatpakDir *flatpak_dir_get_system (void); FlatpakDir *flatpak_dir_get_user (void); gboolean flatpak_dir_is_user (FlatpakDir *self); +void flatpak_dir_set_no_system_helper (FlatpakDir *self, + gboolean no_system_helper); GFile * flatpak_dir_get_path (FlatpakDir *self); GFile * flatpak_dir_get_changed_path (FlatpakDir *self); GFile * flatpak_dir_get_deploy_dir (FlatpakDir *self, diff --git a/system-helper/flatpak-system-helper.c b/system-helper/flatpak-system-helper.c index 3d214d1..72249ab 100644 --- a/system-helper/flatpak-system-helper.c +++ b/system-helper/flatpak-system-helper.c @@ -110,6 +110,13 @@ schedule_idle_callback (void) G_UNLOCK(idle); } +static FlatpakDir * +dir_get_system (void) +{ + FlatpakDir *system = flatpak_dir_get_system (); + flatpak_dir_set_no_system_helper (system, TRUE); + return system; +} static gboolean handle_deploy (FlatpakSystemHelper *object, @@ -120,7 +127,7 @@ handle_deploy (FlatpakSystemHelper *object, const gchar *arg_origin, const gchar *const *arg_subpaths) { - g_autoptr(FlatpakDir) system = flatpak_dir_get_system (); + g_autoptr(FlatpakDir) system = dir_get_system (); g_autoptr(GFile) path = g_file_new_for_path (arg_repo_path); g_autoptr(GError) error = NULL; g_autoptr(GFile) deploy_dir = NULL; @@ -236,7 +243,7 @@ handle_deploy_appstream (FlatpakSystemHelper *object, const gchar *arg_origin, const gchar *arg_arch) { - g_autoptr(FlatpakDir) system = flatpak_dir_get_system (); + g_autoptr(FlatpakDir) system = dir_get_system (); g_autoptr(GFile) path = g_file_new_for_path (arg_repo_path); g_autoptr(GError) error = NULL; g_autoptr(GMainContext) main_context = NULL; @@ -301,7 +308,7 @@ handle_uninstall (FlatpakSystemHelper *object, guint arg_flags, const gchar *arg_ref) { - g_autoptr(FlatpakDir) system = flatpak_dir_get_system (); + g_autoptr(FlatpakDir) system = dir_get_system (); g_autoptr(GError) error = NULL; g_debug ("Uninstall %u %s", arg_flags, arg_ref); @@ -338,7 +345,7 @@ handle_configure_remote (FlatpakSystemHelper *object, const gchar *arg_config, GVariant *arg_gpg_key) { - g_autoptr(FlatpakDir) system = flatpak_dir_get_system (); + g_autoptr(FlatpakDir) system = dir_get_system (); g_autoptr(GError) error = NULL; g_autoptr(GKeyFile) config = g_key_file_new (); g_autofree char *group = g_strdup_printf ("remote \"%s\"", arg_remote); -- cgit v1.2.1