aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog7
-rw-r--r--mail/folder-browser-factory.c7
-rw-r--r--mail/mail.h1
-rw-r--r--mail/session.c38
4 files changed, 51 insertions, 2 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index d5c3ce6abc..6211cd5d7c 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,5 +1,12 @@
2000-06-05 Dan Winship <danw@helixcode.com>
+ * 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.
+
* mail.h, mail-ops.c: fix some function prototypes
* folder-browser.c (etable_key): Add "Delete" = delete message.
diff --git a/mail/folder-browser-factory.c b/mail/folder-browser-factory.c
index 6cd36daebc..d4629d6e17 100644
--- a/mail/folder-browser-factory.c
+++ b/mail/folder-browser-factory.c
@@ -88,6 +88,12 @@ control_activate (BonoboControl *control, BonoboUIHandler *uih)
0,
0, 0, providers_config, NULL);
+ bonobo_ui_handler_menu_new_item (uih, "/Tools/Forget Passwords", N_("Forget _Passwords"),
+ NULL, -1,
+ BONOBO_UI_HANDLER_PIXMAP_NONE,
+ 0,
+ 0, 0, forget_passwords, NULL);
+
toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL,
GTK_TOOLBAR_BOTH);
@@ -120,6 +126,7 @@ control_deactivate (BonoboControl *control, BonoboUIHandler *uih)
bonobo_ui_handler_menu_remove (uih, "/Tools/Filter Druid ...");
bonobo_ui_handler_menu_remove (uih, "/Tools/Virtual Folder Druid ...");
bonobo_ui_handler_menu_remove (uih, "/Tools/Mail Configuration ...");
+ bonobo_ui_handler_menu_remove (uih, "/Tools/Forget Passwords");
bonobo_ui_handler_dock_remove (uih, "/Toolbar");
}
diff --git a/mail/mail.h b/mail/mail.h
index 3ee71e0162..190dfa9272 100644
--- a/mail/mail.h
+++ b/mail/mail.h
@@ -64,4 +64,5 @@ GtkWidget *providers_config_new (void);
/* session */
void session_init (void);
+void forget_passwords (BonoboUIHandler *uih, void *user_data, const char *path);
extern CamelSession *session;
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);
+}