diff options
author | Dan Winship <danw@src.gnome.org> | 2000-06-06 06:33:51 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2000-06-06 06:33:51 +0800 |
commit | 2f8b4bc14f6570c0d99dad52e520f6ca5342b4f8 (patch) | |
tree | b4d094a74d7984a381f156f68d2d6dbbd821efd4 /mail/session.c | |
parent | 5e20857d1c31024d98242ff416872942e8295196 (diff) | |
download | gsoc2013-evolution-2f8b4bc14f6570c0d99dad52e520f6ca5342b4f8.tar.gz gsoc2013-evolution-2f8b4bc14f6570c0d99dad52e520f6ca5342b4f8.tar.zst gsoc2013-evolution-2f8b4bc14f6570c0d99dad52e520f6ca5342b4f8.zip |
Remember passwords between calls. (forget_passwords): Callback for "Forget
* session.c (evolution_auth_callback): Remember passwords between
calls.
(forget_passwords): Callback for "Forget Passwords" menu item.
* folder-browser-factory.c (control_activate):
(control_deactivate): Add "Forget Passwords" menu item.
svn path=/trunk/; revision=3434
Diffstat (limited to 'mail/session.c')
-rw-r--r-- | mail/session.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/mail/session.c b/mail/session.c index b7b24920b0..c9dbb0b1ae 100644 --- a/mail/session.c +++ b/mail/session.c @@ -12,6 +12,7 @@ #include "e-util/e-setup.h" CamelSession *session; +GHashTable *passwords; static void request_callback (gchar *string, gpointer data) @@ -30,9 +31,20 @@ evolution_auth_callback (char *prompt, gboolean secret, CamelException *ex) { GtkWidget *dialog; - char *ans; + char *key = NULL, *ans; - /* XXX look up stored passwords */ + if (service && item) { + key = g_strdup_printf ("%s:%s", camel_url_to_string (service->url, FALSE), item); + + if (passwords) { + ans = g_hash_table_lookup (passwords, key); + if (ans) { + g_free (key); + return g_strdup (ans); + } + } else + passwords = g_hash_table_new (g_str_hash, g_str_equal); + } /* XXX parent window? */ dialog = gnome_request_dialog (secret, prompt, NULL, 0, @@ -40,15 +52,22 @@ evolution_auth_callback (char *prompt, gboolean secret, if (!dialog) { camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, "Could not create dialog box."); + g_free (key); return NULL; } if (gnome_dialog_run_and_close (GNOME_DIALOG (dialog)) == -1 || ans == NULL) { camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, "User cancelled query."); + g_free (key); return NULL; } + if (service && item) + g_hash_table_insert (passwords, key, g_strdup (ans)); + else + g_free (key); + return ans; } @@ -60,3 +79,18 @@ session_init (void) session = camel_session_new (evolution_auth_callback); } + +static gboolean +free_entry (gpointer key, gpointer value, gpointer user_data) +{ + g_free (key); + memset (value, 0, strlen (value)); + g_free (value); + return TRUE; +} + +void +forget_passwords (BonoboUIHandler *uih, void *user_data, const char *path) +{ + g_hash_table_foreach_remove (passwords, free_entry, NULL); +} |