[gnome-online-accounts] imap-smtp: Support SMTP servers that don't require authentication
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-online-accounts] imap-smtp: Support SMTP servers that don't require authentication
- Date: Fri, 1 Mar 2013 14:56:36 +0000 (UTC)
commit 08b4cefcfdef94cd429ff07679bbd9bdab6f6049
Author: Debarshi Ray <debarshir gnome org>
Date: Fri Mar 1 12:03:22 2013 +0100
imap-smtp: Support SMTP servers that don't require authentication
There is a lot of email infrastructure where SMTP is only allowed
inside a firewall and no authentication is required. We should support
such cases.
src/goabackend/goaimapsmtpprovider.c | 80 +++++++++++++++++++++++++++-------
1 files changed, 64 insertions(+), 16 deletions(-)
---
diff --git a/src/goabackend/goaimapsmtpprovider.c b/src/goabackend/goaimapsmtpprovider.c
index 8bb98cf..554d2e7 100644
--- a/src/goabackend/goaimapsmtpprovider.c
+++ b/src/goabackend/goaimapsmtpprovider.c
@@ -119,6 +119,7 @@ build_object (GoaProvider *provider,
gboolean imap_use_tls;
gboolean ret;
gboolean smtp_accept_ssl_errors;
+ gboolean smtp_use_auth;
gboolean smtp_use_ssl;
gboolean smtp_use_tls;
gchar *email_address;
@@ -185,9 +186,13 @@ build_object (GoaProvider *provider,
imap_accept_ssl_errors = g_key_file_get_boolean (key_file, group, "ImapAcceptSslErrors", NULL);
smtp_host = g_key_file_get_string (key_file, group, "SmtpHost", NULL);
- smtp_username = g_key_file_get_string (key_file, group, "SmtpUserName", NULL);
- if (smtp_username == NULL)
- smtp_username = g_strdup (g_get_user_name ());
+ smtp_use_auth = g_key_file_get_boolean (key_file, group, "SmtpUseAuth", NULL);
+ if (smtp_use_auth)
+ {
+ smtp_username = g_key_file_get_string (key_file, group, "SmtpUserName", NULL);
+ if (smtp_username == NULL)
+ smtp_username = g_strdup (g_get_user_name ());
+ }
smtp_use_ssl = g_key_file_get_boolean (key_file, group, "SmtpUseSsl", NULL);
smtp_use_tls = g_key_file_get_boolean (key_file, group, "SmtpUseTls", NULL);
smtp_accept_ssl_errors = g_key_file_get_boolean (key_file, group, "SmtpAcceptSslErrors", NULL);
@@ -205,6 +210,7 @@ build_object (GoaProvider *provider,
"smtp-supported", TRUE,
"smtp-host", smtp_host,
"smtp-user-name", smtp_username,
+ "smtp-use-auth", smtp_use_auth,
"smtp-use-ssl", smtp_use_ssl,
"smtp-use-tls", smtp_use_tls,
"smtp-accept-ssl-errors", smtp_accept_ssl_errors,
@@ -388,6 +394,12 @@ ensure_credentials_sync (GoaProvider *provider,
/* SMTP */
+ if (!goa_util_lookup_keyfile_boolean (object, "SmtpUseAuth"))
+ {
+ ret = TRUE;
+ goto smtp_done;
+ }
+
if (!g_variant_lookup (credentials, "smtp-password", "s", &smtp_password))
{
if (error != NULL)
@@ -435,6 +447,8 @@ ensure_credentials_sync (GoaProvider *provider,
goto out;
}
+ smtp_done:
+
if (out_expires_in != NULL)
*out_expires_in = 0;
@@ -575,9 +589,26 @@ on_smtp_changed (GtkEditable *editable, gpointer user_data)
AddAccountData *data = user_data;
gboolean can_add;
- can_add = gtk_entry_get_text_length (GTK_ENTRY (data->smtp_password)) != 0
- && gtk_entry_get_text_length (GTK_ENTRY (data->smtp_server)) != 0
- && gtk_entry_get_text_length (GTK_ENTRY (data->smtp_username)) != 0;
+ can_add = FALSE;
+
+ if (gtk_entry_get_text_length (GTK_ENTRY (data->smtp_server)) == 0)
+ goto out;
+
+ /* If you provide a password then you must provide a username, and
+ * vice versa. If the server does not require authentication then
+ * both should be left empty.
+ */
+ if (gtk_entry_get_text_length (GTK_ENTRY (data->smtp_password)) != 0
+ && gtk_entry_get_text_length (GTK_ENTRY (data->smtp_username)) == 0)
+ goto out;
+
+ if (gtk_entry_get_text_length (GTK_ENTRY (data->smtp_password)) == 0
+ && gtk_entry_get_text_length (GTK_ENTRY (data->smtp_username)) != 0)
+ goto out;
+
+ can_add = TRUE;
+
+ out:
gtk_dialog_set_response_sensitive (data->dialog, GTK_RESPONSE_OK, can_add);
}
@@ -844,6 +875,7 @@ add_account (GoaProvider *provider,
GoaTlsType smtp_tls_type;
gboolean imap_accept_ssl_errors;
gboolean smtp_accept_ssl_errors;
+ gboolean smtp_use_auth;
const gchar *email_address;
const gchar *encryption;
const gchar *imap_password;
@@ -1037,6 +1069,8 @@ add_account (GoaProvider *provider,
gtk_widget_show (data.progress_grid);
g_main_loop_run (data.loop);
+ smtp_use_auth = goa_mail_auth_is_needed (smtp_auth);
+
if (g_cancellable_is_cancelled (data.cancellable))
{
g_prefix_error (&data.error,
@@ -1081,7 +1115,8 @@ add_account (GoaProvider *provider,
g_variant_builder_init (&credentials, G_VARIANT_TYPE_VARDICT);
g_variant_builder_add (&credentials, "{sv}", "imap-password", g_variant_new_string (imap_password));
- g_variant_builder_add (&credentials, "{sv}", "smtp-password", g_variant_new_string (smtp_password));
+ if (smtp_use_auth)
+ g_variant_builder_add (&credentials, "{sv}", "smtp-password", g_variant_new_string (smtp_password));
g_variant_builder_init (&details, G_VARIANT_TYPE ("a{ss}"));
g_variant_builder_add (&details, "{ss}", "Enabled", "true");
@@ -1096,7 +1131,9 @@ add_account (GoaProvider *provider,
g_variant_builder_add (&details, "{ss}",
"ImapAcceptSslErrors", (imap_accept_ssl_errors) ? "true" : "false");
g_variant_builder_add (&details, "{ss}", "SmtpHost", smtp_server);
- g_variant_builder_add (&details, "{ss}", "SmtpUserName", smtp_username);
+ g_variant_builder_add (&details, "{ss}", "SmtpUseAuth", (smtp_use_auth) ? "true" : "false");
+ if (smtp_use_auth)
+ g_variant_builder_add (&details, "{ss}", "SmtpUserName", smtp_username);
g_variant_builder_add (&details, "{ss}",
"SmtpUseSsl", (smtp_tls_type == GOA_TLS_TYPE_SSL) ? "true" : "false");
g_variant_builder_add (&details, "{ss}",
@@ -1166,6 +1203,7 @@ refresh_account (GoaProvider *provider,
gboolean imap_accept_ssl_errors;
gboolean ret;
gboolean smtp_accept_ssl_errors;
+ gboolean smtp_use_auth;
const gchar *imap_password;
const gchar *smtp_password;
gchar *domain;
@@ -1230,13 +1268,17 @@ refresh_account (GoaProvider *provider,
gtk_entry_set_text (GTK_ENTRY (data.imap_username), imap_username);
gtk_editable_set_editable (GTK_EDITABLE (data.imap_username), FALSE);
- smtp_server = goa_util_lookup_keyfile_string (object, "SmtpHost");
- gtk_entry_set_text (GTK_ENTRY (data.smtp_server), smtp_server);
- gtk_editable_set_editable (GTK_EDITABLE (data.smtp_server), FALSE);
+ smtp_use_auth = goa_util_lookup_keyfile_boolean (object, "SmtpUseAuth");
+ if (smtp_use_auth)
+ {
+ smtp_server = goa_util_lookup_keyfile_string (object, "SmtpHost");
+ gtk_entry_set_text (GTK_ENTRY (data.smtp_server), smtp_server);
+ gtk_editable_set_editable (GTK_EDITABLE (data.smtp_server), FALSE);
- smtp_username = goa_util_lookup_keyfile_string (object, "SmtpUserName");
- gtk_entry_set_text (GTK_ENTRY (data.smtp_username), smtp_username);
- gtk_editable_set_editable (GTK_EDITABLE (data.smtp_username), FALSE);
+ smtp_username = goa_util_lookup_keyfile_string (object, "SmtpUserName");
+ gtk_entry_set_text (GTK_ENTRY (data.smtp_username), smtp_username);
+ gtk_editable_set_editable (GTK_EDITABLE (data.smtp_username), FALSE);
+ }
gtk_widget_show_all (dialog);
g_signal_connect (dialog, "response", G_CALLBACK (dialog_response_cb), &data);
@@ -1312,6 +1354,9 @@ refresh_account (GoaProvider *provider,
/* SMTP */
+ if (!smtp_use_auth)
+ goto smtp_done;
+
/* Re-use the password from the IMAP page */
gtk_entry_set_text (GTK_ENTRY (data.smtp_password), imap_password);
@@ -1377,10 +1422,13 @@ refresh_account (GoaProvider *provider,
goto smtp_again;
}
+ smtp_done:
+
/* TODO: run in worker thread */
g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
g_variant_builder_add (&builder, "{sv}", "imap-password", g_variant_new_string (imap_password));
- g_variant_builder_add (&builder, "{sv}", "smtp-password", g_variant_new_string (smtp_password));
+ if (smtp_use_auth)
+ g_variant_builder_add (&builder, "{sv}", "smtp-password", g_variant_new_string (smtp_password));
if (!goa_utils_store_credentials_for_object_sync (provider,
object,
@@ -1490,7 +1538,7 @@ show_account (GoaProvider *provider,
value_str = goa_util_lookup_keyfile_string (object, "SmtpHost");
value_str_1 = goa_util_lookup_keyfile_string (object, "SmtpUserName");
- if (g_strcmp0 (username, value_str_1) != 0)
+ if (value_str_1 != NULL && g_strcmp0 (username, value_str_1) != 0)
{
gchar *tmp;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]