diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2009-10-15 17:12:43 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2009-10-15 17:26:53 +0100 |
commit | 90941d0dd744c5046b1ca409e63cbf18df3db3b0 (patch) | |
tree | 3a311a73e1ac6174619d26fa27ddb95f397c5279 | |
parent | c24b6b4cf0d33a76fc1dd7b9af9efc89e5fd4de0 (diff) | |
download | telepathy-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.c | 31 |
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); |