Index: libmissioncontrol/mc-profile.c =================================================================== --- libmissioncontrol/mc-profile.c (revision 541) +++ libmissioncontrol/mc-profile.c (working copy) @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -486,10 +487,20 @@ GError *error = NULL; GList *ret = NULL; const gchar *filename, *dirname, **profile_dirs; + const gchar *profile_name; + gboolean protocols_locked_down; + GSList* allowed_profile_names; + GSList* allowed_profile_name; + gboolean profile_allowed; + gint i; + GConfClient *client = gconf_client_get_default (); profile_dirs = _mc_profile_get_dirs (); if (!profile_dirs) return NULL; + protocols_locked_down = gconf_client_get_bool (client, "/apps/telepathy/mc/protocols_locked_down", &error); + allowed_profile_names = gconf_client_get_list (client, "/apps/telepathy/mc/allowed_protocols", GCONF_VALUE_STRING, &error); + for (dirname = *profile_dirs; dirname; profile_dirs++, dirname = *profile_dirs) { dir = g_dir_open(dirname, 0, &error); @@ -515,12 +526,38 @@ g_free (unique_name); if (profile) - ret = g_list_prepend (ret, profile); + { + profile_allowed = FALSE; + profile_name = mc_profile_get_unique_name (profile); + allowed_profile_name = allowed_profile_names; + while (protocols_locked_down && allowed_profile_name != NULL) { + i++; + if (strcmp (profile_name, allowed_profile_name->data) == 0) { + profile_allowed = TRUE; + break; + } + allowed_profile_name = g_slist_next (allowed_profile_name); + } + + if (profile_allowed || i == 0 || !protocols_locked_down) { + ret = g_list_prepend (ret, profile); + } else { + g_debug ("ignoring profile because not allowed: %s", profile_name); + g_object_unref (profile); + } + } } - g_dir_close (dir); } + if (allowed_profile_names) { + while (allowed_profile_names) { + g_free (allowed_profile_names->data); + allowed_profile_names = g_slist_next (allowed_profile_names); + } + g_slist_free (allowed_profile_names); + } + return ret; }