From: Murray Cumming Date: Mon, 14 May 2007 09:01:31 +0000 (+0000) Subject: 2007-05-14 Murray Cumming X-Git-Tag: git_migration_finished~3627 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=b587d015280efc78a756a9271b9e1c2075757dca 2007-05-14 Murray Cumming * src/maemo/easysetup/modest-easysetup-wizard.c: (create_account): * src/maemo/modest-account-settings-dialog.c: (modest_account_settings_dialog_set_account_name), (save_configuration): For the incoming secure authentication checkbox, use PASSWORD for unchecked, and CRAM-MD5 for checked, after I reread the UI specification. PLAIN does not seem to be supported for most IMAP servers anyway, and I am not sure what it would mean. However, we probably need to discover which of the secure-authentication mechanisms are supported by the server, instead of hard-coding CRAM-MD5. * src/modest-account-mgr-helpers.c: (modest_account_mgr_get_server_account_data): * src/modest-tny-account.c: (modest_tny_account_new_from_server_account): Use tny_account_set_mech() to set secure-authentication methods, with some special-casing for IMAP, based on my observations of how evolution behaves. * src/modest-account-mgr-helpers.h: * src/modest-account-mgr.c: * src/modest-defs.h: Comment that the URI is only used for local folders. pmo-trunk-r1844 --- diff --git a/ChangeLog2 b/ChangeLog2 index 64b7e54..b73a9b8 100644 --- a/ChangeLog2 +++ b/ChangeLog2 @@ -1,3 +1,27 @@ +2007-05-14 Murray Cumming + + * src/maemo/easysetup/modest-easysetup-wizard.c: (create_account): + * src/maemo/modest-account-settings-dialog.c: + (modest_account_settings_dialog_set_account_name), + (save_configuration): For the incoming secure authentication checkbox, + use PASSWORD for unchecked, and CRAM-MD5 for checked, after I reread + the UI specification. PLAIN does not seem to be supported for most IMAP + servers anyway, and I am not sure what it would mean. + However, we probably need to discover which of the secure-authentication + mechanisms are supported by the server, instead of hard-coding CRAM-MD5. + * src/modest-account-mgr-helpers.c: + (modest_account_mgr_get_server_account_data): + + * src/modest-tny-account.c: + (modest_tny_account_new_from_server_account): + Use tny_account_set_mech() to set secure-authentication methods, + with some special-casing for IMAP, based on my observations of how + evolution behaves. + + * src/modest-account-mgr-helpers.h: + * src/modest-account-mgr.c: + * src/modest-defs.h: Comment that the URI is only used for local folders. + 2007-05-11 Murray Cumming * src/maemo/modest-main-window.c: (on_account_update): Make the gchar* diff --git a/src/maemo/easysetup/modest-easysetup-wizard.c b/src/maemo/easysetup/modest-easysetup-wizard.c index c4e86a6..dd44d95 100644 --- a/src/maemo/easysetup/modest-easysetup-wizard.c +++ b/src/maemo/easysetup/modest-easysetup-wizard.c @@ -1331,9 +1331,14 @@ create_account (ModestEasysetupWizardDialog *self, gboolean enabled) protocol_security_incoming = modest_serversecurity_combo_box_get_active_serversecurity ( MODEST_SERVERSECURITY_COMBO_BOX (self->combo_incoming_security)); + /* The UI spec says: + * 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? + */ protocol_authentication_incoming = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->checkbox_incoming_auth)) - ? MODEST_PROTOCOL_AUTH_PASSWORD - : MODEST_PROTOCOL_AUTH_NONE; + ? MODEST_PROTOCOL_AUTH_CRAMMD5 + : MODEST_PROTOCOL_AUTH_PASSWORD; } diff --git a/src/maemo/modest-account-settings-dialog.c b/src/maemo/modest-account-settings-dialog.c index 4e54e0d..9d6b01a 100644 --- a/src/maemo/modest-account-settings-dialog.c +++ b/src/maemo/modest-account-settings-dialog.c @@ -1015,10 +1015,16 @@ void modest_account_settings_dialog_set_account_name (ModestAccountSettingsDialo gtk_entry_set_text( GTK_ENTRY (dialog->entry_incomingserver), incoming_account->hostname ? incoming_account->hostname : ""); + /* The UI spec says: + * 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? + */ const ModestProtocol 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); + 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); @@ -1144,10 +1150,15 @@ save_configuration (ModestAccountSettingsDialog *dialog) const gchar* password = gtk_entry_get_text (GTK_ENTRY (dialog->entry_user_password)); modest_server_account_set_password (dialog->account_manager, incoming_account_name, password); + /* The UI spec says: + * 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? + */ const ModestProtocol protocol_authentication_incoming = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbox_incoming_auth)) - ? MODEST_PROTOCOL_AUTH_PASSWORD - : MODEST_PROTOCOL_AUTH_NONE; + ? MODEST_PROTOCOL_AUTH_CRAMMD5 + : MODEST_PROTOCOL_AUTH_PASSWORD; modest_server_account_set_secure_auth (dialog->account_manager, incoming_account_name, protocol_authentication_incoming); const ModestProtocol protocol_security_incoming = modest_serversecurity_combo_box_get_active_serversecurity ( diff --git a/src/modest-account-mgr-helpers.c b/src/modest-account-mgr-helpers.c index 5f9de4c..7451b31 100644 --- a/src/modest-account-mgr-helpers.c +++ b/src/modest-account-mgr-helpers.c @@ -360,8 +360,7 @@ modest_account_mgr_get_server_account_data (ModestAccountMgr *self, const gchar* data->last_updated = modest_account_mgr_get_int (self, name, MODEST_ACCOUNT_LAST_UPDATED,TRUE); - data->password = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_PASSWORD, TRUE); - data->uri = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_URI,TRUE); + data->password = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_PASSWORD, TRUE); return data; } diff --git a/src/modest-account-mgr-helpers.h b/src/modest-account-mgr-helpers.h index 45ad0e0..67b6959 100644 --- a/src/modest-account-mgr-helpers.h +++ b/src/modest-account-mgr-helpers.h @@ -44,7 +44,7 @@ typedef struct { gchar *account_name; gchar *hostname; gchar *username; - gchar *uri; + gchar *uri; /*< Only for mbox and maildir accounts. */ ModestProtocol proto; /*< The store or transport. Not ORed. */ gchar *password; time_t last_updated; diff --git a/src/modest-account-mgr.c b/src/modest-account-mgr.c index b051201..432fc80 100644 --- a/src/modest-account-mgr.c +++ b/src/modest-account-mgr.c @@ -411,7 +411,9 @@ cleanup: return TRUE; } - +/** modest_account_mgr_add_server_account_uri: + * Only used for mbox and maildir accounts. + */ gboolean modest_account_mgr_add_server_account_uri (ModestAccountMgr * self, const gchar *name, ModestProtocol proto, diff --git a/src/modest-defs.h b/src/modest-defs.h index 5f55181..ded2ec2 100644 --- a/src/modest-defs.h +++ b/src/modest-defs.h @@ -117,6 +117,8 @@ #define MODEST_ACCOUNT_USERNAME_HAS_SUCCEEDED "username_succeeded" /* string */ #define MODEST_ACCOUNT_USE_SIGNATURE "use_signature" /* boolean */ #define MODEST_ACCOUNT_SIGNATURE "signature" /* string */ + +/* Only used for mbox and maildir accounts: */ #define MODEST_ACCOUNT_URI "uri" /* string */ #define MODEST_ACCOUNT_PROTO "proto" /* string */ diff --git a/src/modest-tny-account.c b/src/modest-tny-account.c index 1417136..392dd5a 100644 --- a/src/modest-tny-account.c +++ b/src/modest-tny-account.c @@ -103,13 +103,21 @@ modest_tny_account_get_special_folder (TnyAccount *account, #define MODEST_ACCOUNT_OPTION_USE_LSUB "use_lsub" /* Show only subscribed folders */ #define MODEST_ACCOUNT_OPTION_CHECK_ALL "check_all" /* Check for new messages in all folders */ -/* TODO: Find how to specify the authentication method with camel. - * This is just made up stuff - I have no idea if its even possible via options: -#define MODEST_ACCOUNT_OPTION_AUTH "auth" -#define MODEST_ACCOUNT_OPTION_AUTH_PLAIN "PLAIN" -#define MODEST_ACCOUNT_OPTION_AUTH_PASSWORD "PASSWORD" -#define MODEST_ACCOUNT_OPTION_AUTH_CRAMMD5 "CRAMMD5" -*/ + +/* Posssible values for tny_account_set_mech(). + * These might be camel-specific. + * Really, tinymail should use an enum. + * camel_sasl_authtype() seems to list some possible values. + */ + + /* Note that evolution does not offer this for IMAP: */ +#define MODEST_ACCOUNT_AUTH_PLAIN "PLAIN" + +/* IMAP uses NULL instead. + * Also, not that Evolution offers "Password" for IMAP, but "Login" for SMTP.*/ +#define MODEST_ACCOUNT_AUTH_PASSWORD "LOGIN" +#define MODEST_ACCOUNT_AUTH_CRAMMD5 "CRAM-MD5" + /** * modest_tny_account_new_from_server_account: @@ -125,9 +133,7 @@ modest_tny_account_get_special_folder (TnyAccount *account, static TnyAccount* modest_tny_account_new_from_server_account (ModestAccountMgr *account_mgr, ModestServerAccountData *account_data) -{ - TnyAccount *tny_account; - +{ g_return_val_if_fail (account_mgr, NULL); g_return_val_if_fail (account_data, NULL); @@ -138,6 +144,8 @@ modest_tny_account_new_from_server_account (ModestAccountMgr *account_mgr, return NULL; } + TnyAccount *tny_account = NULL; + switch (account_data->proto) { case MODEST_PROTOCOL_TRANSPORT_SENDMAIL: case MODEST_PROTOCOL_TRANSPORT_SMTP: @@ -162,13 +170,15 @@ modest_tny_account_new_from_server_account (ModestAccountMgr *account_mgr, /* Proto */ tny_account_set_proto (tny_account, modest_protocol_info_get_protocol_name(account_data->proto)); - + + + /* mbox and maildir accounts use a URI instead of the rest: */ if (account_data->uri) tny_account_set_url_string (TNY_ACCOUNT(tny_account), account_data->uri); else { /* Set camel-specific options: */ - /* To enable security settings: */ + /* Enable secure connection settings: */ const gchar* option_security = NULL; switch (account_data->security) { case MODEST_PROTOCOL_SECURITY_NONE: @@ -190,32 +200,40 @@ modest_tny_account_new_from_server_account (ModestAccountMgr *account_mgr, option_security); } - /* To enable secure-auth settings: */ - /* The UI spec says: - * # 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: Find how to specify the authentication method with camel. - * This is just made up stuff - I have no idea if its even possible via options: - const gchar* option_secure_auth = NULL; + + const gchar* auth_mech_name = NULL; switch (account_data->secure_auth) { case MODEST_PROTOCOL_AUTH_NONE: - option_secure_auth = MODEST_ACCOUNT_OPTION_AUTH "= " MODEST_ACCOUNT_OPTION_AUTH_PLAIN; + /* IMAP needs at least a password, + * which camel uses if we specify NULL. + * This setting should never happen anyway. */ + if (account_data->proto == MODEST_PROTOCOL_STORE_IMAP) + auth_mech_name = NULL; + else + auth_mech_name = MODEST_ACCOUNT_AUTH_PLAIN; break; + case MODEST_PROTOCOL_AUTH_PASSWORD: - option_secure_auth = MODEST_ACCOUNT_OPTION_AUTH "= " MODEST_ACCOUNT_OPTION_AUTH_PASSWORD; + /* Camel use a password for IMAP if we specify NULL, + * but will report an error if we use "Password", "Login" or "Plain". */ + if (account_data->proto == MODEST_PROTOCOL_STORE_IMAP) + auth_mech_name = NULL; + else + auth_mech_name = MODEST_ACCOUNT_AUTH_PASSWORD; break; + case MODEST_PROTOCOL_AUTH_CRAMMD5: - option_secure_auth = MODEST_ACCOUNT_OPTION_AUTH "= " MODEST_ACCOUNT_OPTION_AUTH_CRAMMD5; + auth_mech_name = MODEST_ACCOUNT_AUTH_CRAMMD5; + default: + g_warning ("%s: Unhandled secure authentication setting for " + "account=%s", __FUNCTION__, account_data->account_name); break; } - if(option_secure_auth) { - tny_camel_account_add_option (TNY_CAMEL_ACCOUNT (tny_account), - option_secure_auth); + if(auth_mech_name) { + tny_account_set_mech (tny_account, auth_mech_name); } - */ if (account_data->proto == MODEST_PROTOCOL_TYPE_STORE) { /* Other connection options. Some options are only valid for IMAP