From: Johannes Schmid Date: Thu, 7 Jun 2007 13:45:24 +0000 (+0000) Subject: 2007-06-07 Johannes Schmid X-Git-Tag: git_migration_finished~3390 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=bad70d1af9ab9d707c8a65e990338d3ab0820b6c 2007-06-07 Johannes Schmid * src/maemo/easysetup/modest-easysetup-wizard.c: (on_before_next): * src/maemo/modest-account-settings-dialog.c: (create_page_outgoing), (modest_account_settings_dialog_set_account_name), (save_configuration): - Fixed handling of the \"Use secure authentication\" toggle to comply with the ui specification. See also projects.maemo.org bug NB#58400 - Restore the Secure connection setting combo correctly when loading the settings dialog * src/maemo/modest-maemo-utils.c: (on_camel_account_get_supported_secure_authentication), (modest_maemo_utils_get_supported_secure_authentication_methods): Fixed a crasher if operation is canceled * src/modest-protocol-info.c: (modest_protocol_info_is_secure), (modest_protocol_info_auth_is_secure): * src/modest-protocol-info.h: Added two new methods to determine if a protocol/auth method is secure/encrypted in the sense of the \"Use secure authentication\" toggle. pmo-trunk-r2099 --- diff --git a/ChangeLog2 b/ChangeLog2 index a63d8d6..970a287 100644 --- a/ChangeLog2 +++ b/ChangeLog2 @@ -1,3 +1,28 @@ +2007-06-07 Johannes Schmid + + * src/maemo/easysetup/modest-easysetup-wizard.c: (on_before_next): + * src/maemo/modest-account-settings-dialog.c: + (create_page_outgoing), + (modest_account_settings_dialog_set_account_name), + (save_configuration): + - Fixed handling of the "Use secure authentication" toggle to comply with + the ui specification. See also projects.maemo.org bug NB#58400 + + - Restore the Secure connection setting combo correctly when loading + the settings dialog + + * src/maemo/modest-maemo-utils.c: + (on_camel_account_get_supported_secure_authentication), + (modest_maemo_utils_get_supported_secure_authentication_methods): + Fixed a crasher if operation is canceled + + * src/modest-protocol-info.c: (modest_protocol_info_is_secure), + (modest_protocol_info_auth_is_secure): + * src/modest-protocol-info.h: + + Added two new methods to determine if a protocol/auth method is secure/encrypted in + the sense of the "Use secure authentication" toggle. + 2007-06-07 Murray Cumming * src/modest-tny-account-store.h: diff --git a/src/maemo/easysetup/modest-easysetup-wizard.c b/src/maemo/easysetup/modest-easysetup-wizard.c index c4b95fc..036620f 100644 --- a/src/maemo/easysetup/modest-easysetup-wizard.c +++ b/src/maemo/easysetup/modest-easysetup-wizard.c @@ -1215,8 +1215,14 @@ on_before_next (ModestWizardDialog *dialog, GtkWidget *current_page, GtkWidget * else if (next_page == account_wizard->page_custom_outgoing) { set_default_custom_servernames (account_wizard); /* Check if the server support secure authentication */ + const ModestConnectionProtocol security_incoming = + modest_serversecurity_combo_box_get_active_serversecurity ( + MODEST_SERVERSECURITY_COMBO_BOX ( + account_wizard->combo_incoming_security)); if (gtk_toggle_button_get_active ( - GTK_TOGGLE_BUTTON (account_wizard->checkbox_incoming_auth))) { + GTK_TOGGLE_BUTTON (account_wizard->checkbox_incoming_auth)) + && !modest_protocol_info_is_secure(security_incoming)) + { const ModestTransportStoreProtocol protocol = easysetup_servertype_combo_box_get_active_servertype ( EASYSETUP_SERVERTYPE_COMBO_BOX (account_wizard->combo_incoming_servertype)); diff --git a/src/maemo/modest-account-settings-dialog.c b/src/maemo/modest-account-settings-dialog.c index d71e2d6..65c5fae 100644 --- a/src/maemo/modest-account-settings-dialog.c +++ b/src/maemo/modest-account-settings-dialog.c @@ -748,6 +748,7 @@ static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self) * and modest_serversecurity_combo_box_set_active_serversecurity(). */ if (!self->combo_outgoing_security) + self->combo_outgoing_security = GTK_WIDGET (modest_serversecurity_combo_box_new ()); caption = hildon_caption_new (sizegroup, _("mcen_li_emailsetup_secure_connection"), self->combo_outgoing_security, NULL, HILDON_CAPTION_OPTIONAL); @@ -1043,7 +1044,8 @@ void modest_account_settings_dialog_set_account_name (ModestAccountSettingsDialo } else { gtk_widget_show (dialog->caption_leave_messages); } - + + update_incoming_server_security_choices (dialog, incoming_account->proto); if (incoming_account) { /* Remember this for later: */ dialog->incoming_protocol = incoming_account->proto; @@ -1060,23 +1062,33 @@ void modest_account_settings_dialog_set_account_name (ModestAccountSettingsDialo * If secure authentication is unchecked, allow sending username and password also as plain text. * If secure authentication is checked, require one of the secure methods during connection: SSL, TLS, CRAM-MD5 etc. * TODO: Do we need to discover which of these (SSL, TLS, CRAM-MD5) is supported? - */ - /* Is AUTH_PASSWORD a secure method? We accept AUTH_PASSWORD while - saving so we should accept it here, too */ - const ModestAuthProtocol secure_auth = modest_server_account_get_secure_auth( - dialog->account_manager, incoming_account->account_name); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (dialog->checkbox_incoming_auth), - secure_auth != MODEST_PROTOCOL_AUTH_PASSWORD); - /* Note that MODEST_PROTOCOL_AUTH_PLAIN should probably never be used. */ - - update_incoming_server_title (dialog, incoming_account->proto); - update_incoming_server_security_choices (dialog, incoming_account->proto); - + */ const ModestConnectionProtocol security = modest_server_account_get_security ( dialog->account_manager, incoming_account->account_name); modest_serversecurity_combo_box_set_active_serversecurity ( MODEST_SERVERSECURITY_COMBO_BOX (dialog->combo_incoming_security), security); + /* Check if we have + - a secure protocol + OR + - use encrypted passwords + */ + const ModestAuthProtocol secure_auth = modest_server_account_get_secure_auth( + dialog->account_manager, incoming_account->account_name); + if (modest_protocol_info_is_secure(security) || + modest_protocol_info_auth_is_secure(secure_auth)) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (dialog->checkbox_incoming_auth), + TRUE); + } + else + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (dialog->checkbox_incoming_auth), + FALSE); + }; + + update_incoming_server_title (dialog, incoming_account->proto); + const gint port_num = modest_account_mgr_get_int (dialog->account_manager, incoming_account->account_name, MODEST_ACCOUNT_PORT, TRUE /* server account */); @@ -1245,42 +1257,54 @@ save_configuration (ModestAccountSettingsDialog *dialog) * If secure authentication is unchecked, allow sending username and password also as plain text. * If secure authentication is checked, require one of the secure methods during connection: SSL, TLS, CRAM-MD5 etc. */ - ModestAuthProtocol protocol_authentication_incoming = - MODEST_PROTOCOL_AUTH_PASSWORD; - if (gtk_toggle_button_get_active ( - GTK_TOGGLE_BUTTON (dialog->checkbox_incoming_auth))) { - GList *list_auth_methods = - modest_maemo_utils_get_supported_secure_authentication_methods (dialog->incoming_protocol, - hostname, port_num, GTK_WINDOW (dialog)); - if (list_auth_methods) { - /* Use the first supported method. - * TODO: Should we prioritize them, to prefer a particular one? */ - protocol_authentication_incoming = - (ModestAuthProtocol)(GPOINTER_TO_INT(list_auth_methods->data)); - g_list_free (list_auth_methods); - } - else - { - GtkWidget* error_dialog = gtk_message_dialog_new(GTK_WINDOW(dialog), - GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, _("Server does not support secure authentication!")); - gtk_dialog_run(GTK_DIALOG(error_dialog)); - gtk_widget_destroy(error_dialog); - /* This is a nasty hack. jschmid. */ - /* Don't let the dialog close */ - g_signal_stop_emission_by_name (dialog, "response"); - return FALSE; - } - - } - - modest_server_account_set_secure_auth (dialog->account_manager, incoming_account_name, protocol_authentication_incoming); - const ModestConnectionProtocol protocol_security_incoming = modest_serversecurity_combo_box_get_active_serversecurity ( MODEST_SERVERSECURITY_COMBO_BOX (dialog->combo_incoming_security)); modest_server_account_set_security (dialog->account_manager, incoming_account_name, protocol_security_incoming); + ModestAuthProtocol protocol_authentication_incoming = + MODEST_PROTOCOL_AUTH_PASSWORD; + /* If we use an encrypted protocol then there is no need to encrypt the password */ + if (!modest_protocol_info_is_secure(protocol_security_incoming)) + { + if (gtk_toggle_button_get_active ( + GTK_TOGGLE_BUTTON (dialog->checkbox_incoming_auth))) { + GList *list_auth_methods = + modest_maemo_utils_get_supported_secure_authentication_methods (dialog->incoming_protocol, + hostname, port_num, GTK_WINDOW (dialog)); + if (list_auth_methods) { + /* Use the first supported method. + * TODO: Should we prioritize them, to prefer a particular one? */ + GList* method; + for (method = list_auth_methods; method != NULL; method = g_list_next(method)) + { + ModestAuthProtocol proto = (ModestAuthProtocol)(GPOINTER_TO_INT(list_auth_methods->data)); + // Allow secure methods, e.g MD5 only + if (modest_protocol_info_auth_is_secure(proto)) + { + protocol_authentication_incoming = proto; + break; + } + } + g_list_free (list_auth_methods); + } + if (list_auth_methods == NULL || + !modest_protocol_info_auth_is_secure(protocol_authentication_incoming)) + { + GtkWidget* error_dialog = gtk_message_dialog_new(GTK_WINDOW(dialog), + GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, _("Server does not support secure authentication!")); + gtk_dialog_run(GTK_DIALOG(error_dialog)); + gtk_widget_destroy(error_dialog); + /* This is a nasty hack. jschmid. */ + /* Don't let the dialog close */ + g_signal_stop_emission_by_name (dialog, "response"); + return FALSE; + } + } + } + + modest_server_account_set_secure_auth (dialog->account_manager, incoming_account_name, protocol_authentication_incoming); g_free (incoming_account_name); diff --git a/src/maemo/modest-maemo-utils.c b/src/maemo/modest-maemo-utils.c index 6c8b0ae..43b3e73 100644 --- a/src/maemo/modest-maemo-utils.c +++ b/src/maemo/modest-maemo-utils.c @@ -277,6 +277,14 @@ on_camel_account_get_supported_secure_authentication ( ModestGetSupportedAuthInfo *info = (ModestGetSupportedAuthInfo*)user_data; g_return_if_fail (info); + /* Free everything if the actual action was canceled */ + if (info->cancel) + { + g_slice_free (ModestGetSupportedAuthInfo, info); + info = NULL; + return; + } + if (!auth_types) { printf ("DEBUG: %s: auth_types is NULL.\n", __FUNCTION__); info->finished = TRUE; /* We are blocking, waiting for this. */ @@ -373,6 +381,7 @@ GList* modest_maemo_utils_get_supported_secure_authentication_methods (ModestTra ModestGetSupportedAuthInfo *info = g_slice_new (ModestGetSupportedAuthInfo); info->finished = FALSE; info->result = NULL; + info->cancel = FALSE; info->progress = gtk_progress_bar_new(); info->dialog = gtk_dialog_new_with_buttons(_("Checking for supported authentication types"), parent_window, GTK_DIALOG_MODAL, @@ -397,15 +406,17 @@ GList* modest_maemo_utils_get_supported_secure_authentication_methods (ModestTra /* Block until the callback has been called, * driving the main context, so that the (idle handler) callback can be * called, and so that our dialog is clickable: */ - while (!(info->finished) && (!info->cancel)) { + while (!(info->finished) && !(info->cancel)) { gtk_main_iteration_do(FALSE); } gtk_widget_destroy(info->dialog); GList *result = info->result; - g_slice_free (ModestGetSupportedAuthInfo, info); - info = NULL; - + if (!info->cancel) + { + g_slice_free (ModestGetSupportedAuthInfo, info); + info = NULL; + } return result; } diff --git a/src/modest-protocol-info.c b/src/modest-protocol-info.c index 8539f20..503d15a 100644 --- a/src/modest-protocol-info.c +++ b/src/modest-protocol-info.c @@ -180,3 +180,15 @@ modest_protocol_info_protocol_is_store (ModestTransportStoreProtocol proto) return proto == MODEST_PROTOCOL_STORE_MBOX || proto == MODEST_PROTOCOL_STORE_MAILDIR || proto == MODEST_PROTOCOL_STORE_POP || proto == MODEST_PROTOCOL_STORE_IMAP; } + +gboolean +modest_protocol_info_is_secure(ModestConnectionProtocol protocol) +{ + return (protocol == MODEST_PROTOCOL_CONNECTION_SSL || + protocol == MODEST_PROTOCOL_CONNECTION_TLS); +} + +gboolean modest_protocol_info_auth_is_secure(ModestAuthProtocol protocol) +{ + return (protocol == MODEST_PROTOCOL_AUTH_CRAMMD5); +} diff --git a/src/modest-protocol-info.h b/src/modest-protocol-info.h index 3b567ff..c358d1d 100644 --- a/src/modest-protocol-info.h +++ b/src/modest-protocol-info.h @@ -188,6 +188,29 @@ gboolean modest_protocol_info_protocol_is_store (ModestTransportStoreProtocol pr gboolean modest_protocol_info_protocol_is_local_store (ModestTransportStoreProtocol proto); +/** + * modest_protocol_info_is_secure: + * @protocol + * + * is the protocol connection secure (e.g encrypted)? + * + * Returns: TRUE if it is secure, FALSE otherwise + * + */ +gboolean modest_protocol_info_is_secure(ModestConnectionProtocol protocol); + +/** + * modest_protocol_info_auth_is_secure: + * @protocol + * + * is the protocol authentication secure (e.g encrypted)? + * + * Returns: TRUE if it is secure, FALSE otherwise + * + */ +gboolean modest_protocol_info_auth_is_secure(ModestAuthProtocol protocol); + + G_END_DECLS #endif /* __MODEST_PROTOCOL_INFO_H__ */