summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2016-05-17 11:54:44 +0200
committerAlexander Larsson <alexl@redhat.com>2016-05-17 11:54:44 +0200
commit251dcdb680a623627fafa47e85c602814835c3d3 (patch)
tree56c16c8b5d18a290c4f3a9174c445f4c49737f45
parent6b4e5dd9039b3ff8a6ea880b67524d2df9eab096 (diff)
downloadxdg-app-251dcdb680a623627fafa47e85c602814835c3d3.tar.gz
system-helper: Never use a system helper recursively
-rw-r--r--common/flatpak-dir.c10
-rw-r--r--common/flatpak-dir.h2
-rw-r--r--system-helper/flatpak-system-helper.c15
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);