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:
@ -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.
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user