[gnome-settings-daemon] main: Add settings key to whitelist plugins
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] main: Add settings key to whitelist plugins
- Date: Wed, 14 Nov 2012 09:51:09 +0000 (UTC)
commit 1dc03f24a322ca2ee5fe7ac67564d8b59d25a2ad
Author: Bastien Nocera <hadess hadess net>
Date: Tue Nov 13 11:45:12 2012 +0100
main: Add settings key to whitelist plugins
Rather than having gdm load all the new plugins by default,
especially when gnome-settings-daemon gets updated and gdm doesn't,
keep a list of whitelisted plugins. Only those can be enabled, others
will be unknown and ignored.
By default, all plugins are whitelisted.
https://bugzilla.gnome.org/show_bug.cgi?id=662220
...gnome.settings-daemon.plugins.gschema.xml.in.in | 9 ++++++++
gnome-settings-daemon/gnome-settings-manager.c | 21 ++++++++++++++++++++
2 files changed, 30 insertions(+), 0 deletions(-)
---
diff --git a/data/org.gnome.settings-daemon.plugins.gschema.xml.in.in b/data/org.gnome.settings-daemon.plugins.gschema.xml.in.in
index e9c34cc..958863b 100644
--- a/data/org.gnome.settings-daemon.plugins.gschema.xml.in.in
+++ b/data/org.gnome.settings-daemon.plugins.gschema.xml.in.in
@@ -1,5 +1,14 @@
<schemalist>
<schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.settings-daemon.plugins" path="/org/gnome/settings-daemon/plugins/">
+ <key name="whitelisted-plugins" type="as">
+ <default>['all']</default>
+ <_summary>List of plugins that are allowed to be loaded</_summary>
+ <_description>
+ A list of strings representing the plugins that are allowed to be loaded (default: 'all').
+ The plugins still need to be marked as active to get loaded.
+ This is only evaluated on startup.
+ </_description>
+ </key>
<child name="a11y-keyboard" schema="org.gnome.settings-daemon.plugins.a11y-keyboard"/>
<child name="a11y-settings" schema="org.gnome.settings-daemon.plugins.a11y-settings"/>
<child name="background" schema="org.gnome.settings-daemon.plugins.background"/>
diff --git a/gnome-settings-daemon/gnome-settings-manager.c b/gnome-settings-daemon/gnome-settings-manager.c
index 60645be..be67c22 100644
--- a/gnome-settings-daemon/gnome-settings-manager.c
+++ b/gnome-settings-daemon/gnome-settings-manager.c
@@ -65,6 +65,7 @@ struct GnomeSettingsManagerPrivate
GDBusNodeInfo *introspection_data;
GDBusConnection *connection;
GSettings *settings;
+ char **whitelist;
GnomePnpIds *pnp_ids;
GSList *plugins;
};
@@ -200,6 +201,17 @@ is_schema (const char *schema)
return contained (g_settings_list_schemas (), schema);
}
+static gboolean
+is_whitelisted (char **whitelist,
+ const char *plugin_name)
+{
+ if (whitelist == NULL ||
+ whitelist[0] == NULL ||
+ g_strcmp0 (whitelist[0], "all") == 0)
+ return TRUE;
+
+ return contained ((const char * const *) whitelist, plugin_name);
+}
static void
_load_file (GnomeSettingsManager *manager,
@@ -224,6 +236,13 @@ _load_file (GnomeSettingsManager *manager,
goto out;
}
+ if (!is_whitelisted (manager->priv->whitelist,
+ gnome_settings_plugin_info_get_location (info))) {
+ g_debug ("Plugin %s ignored as it's not whitelisted",
+ gnome_settings_plugin_info_get_location (info));
+ goto out;
+ }
+
key_name = g_strdup_printf ("%s.plugins.%s",
DEFAULT_SETTINGS_PREFIX,
gnome_settings_plugin_info_get_location (info));
@@ -386,6 +405,7 @@ gnome_settings_manager_start (GnomeSettingsManager *manager,
gnome_settings_profile_start ("initializing plugins");
manager->priv->settings = g_settings_new (DEFAULT_SETTINGS_PREFIX ".plugins");
+ manager->priv->whitelist = g_settings_get_strv (manager->priv->settings, "whitelisted-plugins");
_load_all (manager);
gnome_settings_profile_end ("initializing plugins");
@@ -409,6 +429,7 @@ gnome_settings_manager_stop (GnomeSettingsManager *manager)
manager->priv->owner_id = 0;
}
+ g_clear_pointer (&manager->priv->whitelist, g_strfreev);
g_clear_object (&manager->priv->settings);
g_clear_object (&manager->priv->pnp_ids);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]