[glib/glib-2-60: 1/4] portal: Add a getter for dconf access



commit 69dcbc83d8bc8315b38b46609afef7c0e44105e8
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Jul 12 11:30:30 2019 -0400

    portal: Add a getter for dconf access
    
    Add method to find whether the sandbox provides
    access to dconf. This will be used to tweak
    the priorities for the keyfile settings backend.

 gio/gportalsupport.c | 18 ++++++++++++++++++
 gio/gportalsupport.h |  1 +
 2 files changed, 19 insertions(+)
---
diff --git a/gio/gportalsupport.c b/gio/gportalsupport.c
index 2f1e82517..b0a94b360 100644
--- a/gio/gportalsupport.c
+++ b/gio/gportalsupport.c
@@ -23,6 +23,7 @@
 static gboolean flatpak_info_read;
 static gboolean use_portal;
 static gboolean network_available;
+static gboolean dconf_access;
 
 static void
 read_flatpak_info (void)
@@ -40,11 +41,13 @@ read_flatpak_info (void)
 
       use_portal = TRUE;
       network_available = FALSE;
+      dconf_access = FALSE;
 
       keyfile = g_key_file_new ();
       if (g_key_file_load_from_file (keyfile, path, G_KEY_FILE_NONE, NULL))
         {
           char **shared = NULL;
+          char *dconf_policy = NULL;
 
           shared = g_key_file_get_string_list (keyfile, "Context", "shared", NULL, NULL);
           if (shared)
@@ -52,6 +55,14 @@ read_flatpak_info (void)
               network_available = g_strv_contains ((const char * const *)shared, "network");
               g_strfreev (shared);
             }
+
+          dconf_policy = g_key_file_get_string (keyfile, "Session Bus Policy", "ca.desrt.dconf", NULL);
+          if (dconf_policy)
+            {
+              if (strcmp (dconf_policy, "talk") == 0)
+                dconf_access = TRUE;
+              g_free (dconf_policy);
+            }
         }
 
       g_key_file_unref (keyfile);
@@ -64,6 +75,7 @@ read_flatpak_info (void)
       if (var && var[0] == '1')
         use_portal = TRUE;
       network_available = TRUE;
+      dconf_access = TRUE;
     }
 }
 
@@ -81,3 +93,9 @@ glib_network_available_in_sandbox (void)
   return network_available;
 }
 
+gboolean
+glib_has_dconf_access_in_sandbox (void)
+{
+  read_flatpak_info ();
+  return dconf_access;
+}
diff --git a/gio/gportalsupport.h b/gio/gportalsupport.h
index a331f45d3..746f1fd6b 100644
--- a/gio/gportalsupport.h
+++ b/gio/gportalsupport.h
@@ -24,6 +24,7 @@ G_BEGIN_DECLS
 
 gboolean glib_should_use_portal (void);
 gboolean glib_network_available_in_sandbox (void);
+gboolean glib_has_dconf_access_in_sandbox (void);
 
 G_END_DECLS
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]