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
This commit is contained in:
Dan Winship
2000-06-05 22:33:51 +00:00
parent 5e20857d1c
commit 2f8b4bc14f
4 changed files with 51 additions and 2 deletions

View File

@ -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.

View File

@ -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");
}

View File

@ -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;

View File

@ -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);
}