Hi all,

I noticed that the assistant for configuring balsa contains minor flaws:
- if the mail address is guessed using /etc/mailname, it contains a trailing 
newline
- the assistant asks for POP3 or IMAP SSL only, not for TLS.

The attached patch fixes it:
- libbalsa/libbalsa.c: read /etc/mailname using glib, and remove everything 
starting with the 1st newline
- libinit_balsa/assistant_page_user.[ch]: replace the "SSL" checkbox by a combo 
asking for the requested security mode

Opinions?

Cheers,
Albrecht.
diff --git a/libbalsa/libbalsa.c b/libbalsa/libbalsa.c
index f24a5b1..4380e25 100644
--- a/libbalsa/libbalsa.c
+++ b/libbalsa/libbalsa.c
@@ -173,26 +173,29 @@ libbalsa_guess_email_address(void)
 {
     /* Q: Find this location with configure? or at run-time? */
     static const gchar* MAILNAME_FILE = "/etc/mailname";
-    char hostbuf[512];
-    FILE *mailname_in = NULL;
-
     gchar* preset, *domain;
+    gchar *mailname;
+
     if(g_getenv("EMAIL") != NULL){                  /* 1. */
         preset = g_strdup(g_getenv("EMAIL"));
-    } else if( (mailname_in = fopen(MAILNAME_FILE, "r")) != NULL
-              && fgets(hostbuf, sizeof(hostbuf)-1, mailname_in)){ /* 2. */
-        hostbuf[sizeof(hostbuf)-1] = '\0';
-        preset = g_strconcat(g_get_user_name(), "@", hostbuf, NULL);
-        
+    } else if (g_file_get_contents(MAILNAME_FILE, &mailname, NULL, NULL)) { /* 2. */
+    	gchar *newline;
+
+    	newline = strchr(mailname, '\n');
+    	if (newline != NULL) {
+    		newline[0] = '\0';
+    	}
+        preset = g_strconcat(g_get_user_name(), "@", mailname, NULL);
+        g_free(mailname);
     }else if((domain = libbalsa_get_domainname())){ /* 3. */
         preset = g_strconcat(g_get_user_name(), "@", domain, NULL);
         g_free(domain);    
     } else {                                        /* 4. */
+        char hostbuf[512];
+
         gethostname(hostbuf, 511);
         preset = g_strconcat(g_get_user_name(), "@", hostbuf, NULL);
     }
-    if (mailname_in)
-        fclose(mailname_in);
     return preset;
 }
 
diff --git a/libinit_balsa/assistant_page_user.c b/libinit_balsa/assistant_page_user.c
index d987d55..7ad95a3 100644
--- a/libinit_balsa/assistant_page_user.c
+++ b/libinit_balsa/assistant_page_user.c
@@ -64,6 +64,12 @@ balsa_druid_page_user_init(BalsaDruidPageUser * user,
            "this up for you):");
 #endif
     static const char* server_types[] = { "POP3", "IMAP", NULL };
+    static const gchar *security_modes[] = {
+    	N_("SSL"),
+		N_("TLS required"),
+		N_("TLS if possible (not recommended)"),
+		N_("None (not recommended)"),
+		NULL };
     static const char* remember_passwd[] = {
         N_("Yes, remember it"), N_("No, type it in every time"), NULL };
     GtkGrid *grid;
@@ -104,9 +110,10 @@ balsa_druid_page_user_init(BalsaDruidPageUser * user,
                                 _("_Type of mail server:"),
                                server_types, druid, &(user->incoming_type));
 
-    balsa_init_add_grid_checkbox(grid, row++,
-                                  _("Connect using _SSL:"), FALSE,
-                                  druid, &(user->using_ssl));
+    balsa_init_add_grid_option(grid, row++,
+    						   _("Connection _Security"),
+							   security_modes, druid, &(user->security));
+    gtk_combo_box_set_active(GTK_COMBO_BOX(user->security), NET_CLIENT_CRYPT_STARTTLS - 1);
 
     balsa_init_add_grid_entry(grid, row++, _("Your email _login name:"),
                                g_get_user_name(),
@@ -186,7 +193,7 @@ balsa_druid_page_user_prepare(GtkAssistant * druid, GtkWidget * page,
 }
 
 static LibBalsaMailbox*
-create_pop3_mbx(const gchar *name, const gchar* host, gboolean ssl, 
+create_pop3_mbx(const gchar *name, const gchar* host, gint security,
                 const gchar *login, const gchar *passwd,
                 gboolean remember)
 {
@@ -196,8 +203,8 @@ create_pop3_mbx(const gchar *name, const gchar* host, gboolean ssl,
 
     libbalsa_server_set_username(server, login);
     libbalsa_server_set_password(server, passwd);
-    libbalsa_server_set_host(server, host, ssl);
-    server->tls_mode        = LIBBALSA_TLS_ENABLED;
+    libbalsa_server_set_host(server, host, FALSE);
+    server->security        = security;
     server->remember_passwd = remember;
     mbx->name               = g_strdup(name && *name ? name : host);
     pop->check              = TRUE;
@@ -210,7 +217,7 @@ create_pop3_mbx(const gchar *name, const gchar* host, gboolean ssl,
 }
 
 static void
-create_imap_mbx(const gchar *name, const gchar* host, gboolean ssl,
+create_imap_mbx(const gchar *name, const gchar* host, gint security,
                 const gchar *login, const gchar *passwd,
                 gboolean remember)
 {
@@ -219,8 +226,17 @@ create_imap_mbx(const gchar *name, const gchar* host, gboolean ssl,
         LIBBALSA_SERVER(libbalsa_imap_server_new(login, host));
     libbalsa_server_set_username(server, login);
     libbalsa_server_set_password(server, passwd);
-    libbalsa_server_set_host(server, host, ssl);
-    server->tls_mode        = LIBBALSA_TLS_ENABLED;
+    libbalsa_server_set_host(server, host, security == NET_CLIENT_CRYPT_ENCRYPTED);
+    switch (security) {
+    case NET_CLIENT_CRYPT_STARTTLS:
+    	server->tls_mode   = LIBBALSA_TLS_REQUIRED;
+    	break;
+    case NET_CLIENT_CRYPT_STARTTLS_OPT:
+    	server->tls_mode   = LIBBALSA_TLS_ENABLED;
+    	break;
+    default:
+    	server->tls_mode   = LIBBALSA_TLS_DISABLED;
+    }
     server->remember_passwd = remember;
     mbnode = balsa_mailbox_node_new_imap_folder(server, NULL);
     mbnode->name = g_strdup(name && *name ? name : host);
@@ -252,18 +268,17 @@ balsa_druid_page_user_next(GtkAssistant * druid, GtkWidget * page,
         LibBalsaMailbox *mbx = NULL;
         const gchar *login = gtk_entry_get_text(GTK_ENTRY(user->login));
         const gchar *passwd = gtk_entry_get_text(GTK_ENTRY(user->passwd));
-        gboolean ssl = 
-            gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(user->using_ssl));
+        gint security = balsa_option_get_active(user->security) + NET_CLIENT_CRYPT_ENCRYPTED;
         gboolean remember = 
             balsa_option_get_active(user->remember_passwd) == 0;
         switch(balsa_option_get_active(user->incoming_type)) {
         case 0: /* POP */
-            mbx = create_pop3_mbx(host, host, ssl, login, passwd, remember);
+            mbx = create_pop3_mbx(host, host, security, login, passwd, remember);
             if(mbx)
                 config_mailbox_add(mbx, NULL);
             break;
         case 1: /* IMAP */
-            create_imap_mbx(host, host, ssl, login, passwd, remember);
+            create_imap_mbx(host, host, security, login, passwd, remember);
             break; 
         default: /* hm */;
         }
diff --git a/libinit_balsa/assistant_page_user.h b/libinit_balsa/assistant_page_user.h
index 0e0ed02..0a2b416 100644
--- a/libinit_balsa/assistant_page_user.h
+++ b/libinit_balsa/assistant_page_user.h
@@ -38,7 +38,7 @@ G_BEGIN_DECLS
         GtkWidget *page;
         GtkWidget *incoming_srv;
         GtkWidget *incoming_type;
-        GtkWidget *using_ssl;
+        GtkWidget *security;
         GtkWidget *login;
         GtkWidget *passwd;
         GtkWidget *remember_passwd;

Attachment: pgpEORAMgGWYO.pgp
Description: PGP signature

_______________________________________________
balsa-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/balsa-list

Reply via email to