summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2009-10-15 17:12:43 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2009-10-15 17:26:53 +0100
commit90941d0dd744c5046b1ca409e63cbf18df3db3b0 (patch)
tree3a311a73e1ac6174619d26fa27ddb95f397c5279
parentc24b6b4cf0d33a76fc1dd7b9af9efc89e5fd4de0 (diff)
downloadtelepathy-glib-90941d0dd744c5046b1ca409e63cbf18df3db3b0.tar.gz
TpConnectionManager: extend the "(^|-)password" special-case to GetParameters(), and debug whenever it is used
Current Telepathy connection managers seem to all say that "password" is secret in their .manager file, but not in their source code. As a result, if you delete all your .manager files, MC no longer retrieves your passwords from gnome-keyring, and all your accounts get marked as invalid :-(
-rw-r--r--telepathy-glib/connection-manager.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/telepathy-glib/connection-manager.c b/telepathy-glib/connection-manager.c
index 193e3a049..6e573ee27 100644
--- a/telepathy-glib/connection-manager.c
+++ b/telepathy-glib/connection-manager.c
@@ -454,6 +454,15 @@ tp_connection_manager_got_parameters (TpConnectionManager *self,
DEBUG ("\tParam flags: 0x%x", param->flags);
DEBUG ("\tParam sig: %s", param->dbus_signature);
+ if ((!tp_strdiff (param->name, "password") ||
+ g_str_has_suffix (param->name, "-password")) &&
+ (param->flags & TP_CONN_MGR_PARAM_FLAG_SECRET) == 0)
+ {
+ DEBUG ("\tTreating as secret due to its name (please fix %s)",
+ self->name);
+ param->flags |= TP_CONN_MGR_PARAM_FLAG_SECRET;
+ }
+
#ifdef ENABLE_DEBUG
{
gchar *repr = g_strdup_value_contents (&(param->default_value));
@@ -976,8 +985,9 @@ parse_default_value (GValue *value,
}
static GPtrArray *
-tp_connection_manager_read_file (const gchar *filename,
- GError **error)
+tp_connection_manager_read_file (const gchar *cm_name,
+ const gchar *filename,
+ GError **error)
{
GKeyFile *file;
gchar **groups, **group;
@@ -1061,12 +1071,6 @@ tp_connection_manager_read_file (const gchar *filename,
param->dbus_signature = g_strdup (strv[0]);
- if (!tp_strdiff (param->name, "password") ||
- g_str_has_suffix (param->name, "-password"))
- {
- param->flags |= TP_CONN_MGR_PARAM_FLAG_SECRET;
- }
-
for (iter = strv + 1; *iter != NULL; iter++)
{
if (!tp_strdiff (*iter, "required"))
@@ -1081,6 +1085,15 @@ tp_connection_manager_read_file (const gchar *filename,
g_strfreev (strv);
+ if ((!tp_strdiff (param->name, "password") ||
+ g_str_has_suffix (param->name, "-password")) &&
+ (param->flags & TP_CONN_MGR_PARAM_FLAG_SECRET) == 0)
+ {
+ DEBUG ("\tTreating %s as secret due to its name (please "
+ "fix %s)", param->name, cm_name);
+ param->flags |= TP_CONN_MGR_PARAM_FLAG_SECRET;
+ }
+
def = g_strdup_printf ("default-%s", param->name);
value = g_key_file_get_string (file, *group, def, NULL);
@@ -1144,7 +1157,7 @@ tp_connection_manager_idle_read_manager_file (gpointer data)
{
GError *error = NULL;
GPtrArray *protocols = tp_connection_manager_read_file (
- self->priv->manager_file, &error);
+ self->name, self->priv->manager_file, &error);
DEBUG ("Read %s", self->priv->manager_file);