#include "smtp.h"
#include "imap.h"
#include "remotefolder.h"
-#include "base64.h"
#include "combobox.h"
#include "setup.h"
#include "quote_fmt.h"
GtkWidget *pass_label;
GtkWidget *uid_entry;
GtkWidget *pass_entry;
+ GtkWidget *auto_configure_btn;
+ GtkWidget *auto_configure_cancel_btn;
+ GtkWidget *auto_configure_lbl;
} BasicPage;
typedef struct ReceivePage
GtkWidget *msgid_checkbtn;
GtkWidget *xmailer_checkbtn;
- GtkWidget *xnewsreader_checkbtn;
GtkWidget *customhdr_checkbtn;
GtkWidget *msgid_with_addr_checkbtn;
GtkWidget *smtp_auth_checkbtn;
GtkWidget *entry_out_cert_file;
GtkWidget *entry_out_cert_pass;
+ GtkWidget *ssl_certs_auto_accept_checkbtn;
GtkWidget *use_nonblocking_ssl_checkbtn;
} SSLPage;
&send_page.xmailer_checkbtn,
prefs_set_data_from_toggle, prefs_set_toggle},
- {"generate_xnewsreader", "TRUE", &tmp_ac_prefs.gen_xnewsreader, P_BOOL,
- &send_page.xnewsreader_checkbtn,
- prefs_set_data_from_toggle, prefs_set_toggle},
-
{"add_custom_header", "FALSE", &tmp_ac_prefs.add_customhdr, P_BOOL,
&send_page.customhdr_checkbtn,
prefs_set_data_from_toggle, prefs_set_toggle},
prefs_account_enum_set_data_from_radiobtn,
prefs_account_enum_set_radiobtn},
+ {"ssl_certs_auto_accept", "0", &tmp_ac_prefs.ssl_certs_auto_accept, P_BOOL,
+ &ssl_page.ssl_certs_auto_accept_checkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
{"use_nonblocking_ssl", "1", &tmp_ac_prefs.use_nonblocking_ssl, P_BOOL,
&ssl_page.use_nonblocking_ssl_checkbtn,
prefs_set_data_from_toggle, prefs_set_toggle},
{"out_ssl_client_cert_pass", "", &tmp_ac_prefs.out_ssl_client_cert_pass, P_PASSWORD,
NULL, NULL, NULL},
+ {"ssl_certs_auto_accept", "0", &tmp_ac_prefs.ssl_certs_auto_accept, P_BOOL,
+ NULL, NULL, NULL},
+
{"use_nonblocking_ssl", "1", &tmp_ac_prefs.use_nonblocking_ssl, P_BOOL,
NULL, NULL, NULL},
#endif /* USE_GNUTLS */
static void pop_bfr_smtp_tm_set_sens (GtkWidget *widget,
gpointer data);
+#if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
+static void auto_configure_cb (GtkWidget *widget,
+ gpointer data);
+
+#endif
static void prefs_account_edit_custom_header (void);
* system choice. */
static void privacy_system_activated(GtkWidget *combobox)
{
- const gchar *system_id;
- gint privacy_enabled_int;
- GtkTreeIter iter;
- GtkListStore *menu = GTK_LIST_STORE(gtk_combo_box_get_model(
- GTK_COMBO_BOX(combobox)));
-
- gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combobox), &iter);
-
- gtk_tree_model_get(GTK_TREE_MODEL(menu), &iter,
- COMBOBOX_PRIVACY_PLUGIN_ID, &system_id,
- COMBOBOX_DATA, &privacy_enabled_int,
- -1);
-
gtk_widget_set_sensitive (privacy_page.save_clear_text_checkbtn,
!gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(privacy_page.encrypt_to_self_checkbtn)));
GtkWidget *pass_label;
GtkWidget *uid_entry;
GtkWidget *pass_entry;
+ GtkWidget *auto_configure_btn;
+ GtkWidget *auto_configure_cancel_btn;
+ GtkWidget *auto_configure_lbl;
GtkListStore *menu;
GtkTreeIter iter;
gtk_label_set_justify(GTK_LABEL(optlabel), GTK_JUSTIFY_CENTER);
gtk_box_pack_start(GTK_BOX (optmenubox), optlabel, FALSE, FALSE, 0);
+ auto_configure_btn = gtk_button_new_with_label(_("Auto-configure"));
+ gtk_box_pack_start(GTK_BOX (optmenubox), auto_configure_btn, FALSE, FALSE, 0);
+ auto_configure_cancel_btn = gtk_button_new_with_label(_("Cancel"));
+ gtk_box_pack_start(GTK_BOX (optmenubox), auto_configure_cancel_btn, FALSE, FALSE, 0);
+ auto_configure_lbl = gtk_label_new("");
+ gtk_label_set_justify(GTK_LABEL(auto_configure_lbl), GTK_JUSTIFY_LEFT);
+ gtk_box_pack_start(GTK_BOX (optmenubox), auto_configure_lbl, FALSE, FALSE, 0);
+#if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
+ gtk_widget_show(auto_configure_btn);
+ gtk_widget_show(auto_configure_lbl);
+ g_signal_connect (G_OBJECT (auto_configure_btn), "clicked",
+ G_CALLBACK (auto_configure_cb), NULL);
+ g_signal_connect (G_OBJECT (auto_configure_cancel_btn), "clicked",
+ G_CALLBACK (auto_configure_cb), NULL);
+#endif
+
no_imap_warn_icon = gtk_image_new_from_stock
(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_SMALL_TOOLBAR);
no_imap_warn_label = gtk_label_new(_("<span weight=\"bold\">Warning: this version of Claws Mail\n"
page->pass_label = pass_label;
page->uid_entry = uid_entry;
page->pass_entry = pass_entry;
+ page->auto_configure_btn = auto_configure_btn;
+ page->auto_configure_cancel_btn = auto_configure_cancel_btn;
+ page->auto_configure_lbl = auto_configure_lbl;
if (new_account) {
PrefsAccount *def_ac;
GtkWidget *frame;
GtkWidget *msgid_checkbtn;
GtkWidget *xmailer_checkbtn;
- GtkWidget *xnewsreader_checkbtn;
GtkWidget *hbox;
GtkWidget *customhdr_checkbtn;
GtkWidget *customhdr_edit_btn;
_("Send account mail address in Message-ID"));
PACK_CHECK_BUTTON (vbox2, xmailer_checkbtn,
- _("Generate X-Mailer header"));
-
- PACK_CHECK_BUTTON (vbox2, xnewsreader_checkbtn,
- _("Generate X-Newsreader header"));
+ _("Add user agent header"));
hbox = gtk_hbox_new (FALSE, 12);
gtk_widget_show (hbox);
page->msgid_checkbtn = msgid_checkbtn;
page->xmailer_checkbtn = xmailer_checkbtn;
- page->xnewsreader_checkbtn = xnewsreader_checkbtn;
page->customhdr_checkbtn = customhdr_checkbtn;
page->msgid_with_addr_checkbtn = checkbtn_msgid_with_addr;
GtkWidget *entry_out_cert_pass;
GtkWidget *vbox7;
+ GtkWidget *ssl_certs_auto_accept_checkbtn;
GtkWidget *use_nonblocking_ssl_checkbtn;
GtkWidget *hbox;
GtkWidget *hbox_spc;
gtk_widget_show (vbox7);
gtk_box_pack_start (GTK_BOX (vbox1), vbox7, FALSE, FALSE, 0);
+ PACK_CHECK_BUTTON(vbox7, ssl_certs_auto_accept_checkbtn,
+ _("Automatically accept unknown valid SSL certificates"));
+
PACK_CHECK_BUTTON(vbox7, use_nonblocking_ssl_checkbtn,
_("Use non-blocking SSL"));
page->entry_out_cert_file = entry_out_cert_file;
page->entry_out_cert_pass = entry_out_cert_pass;
+ page->ssl_certs_auto_accept_checkbtn = ssl_certs_auto_accept_checkbtn;
page->use_nonblocking_ssl_checkbtn = use_nonblocking_ssl_checkbtn;
tmp_ac_prefs = *ac_prefs;
GtkWidget *trash_folder_entry;
GtkWidget *imap_use_trash_checkbtn;
GtkSizeGroup *size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+
#define PACK_HBOX(hbox) \
{ \
hbox = gtk_hbox_new (FALSE, 8); \
page->vbox = vbox1;
page->page.widget = vbox1;
+
+ g_object_unref(G_OBJECT(size_group));
}
static gint prefs_basic_apply(void)
#if !GLIB_CHECK_VERSION(2,32,0)
pass_data.cond = g_cond_new();
#else
+ pass_data.cond = g_new0(GCond, 1);
g_cond_init(pass_data.cond);
#endif
pass_data.mutex = cm_mutex_new();
g_cond_free(pass_data.cond);
#else
g_cond_clear(pass_data.cond);
+ g_free(pass_data.cond);
#endif
g_mutex_unlock(pass_data.mutex);
cm_mutex_free(pass_data.mutex);
gchar *rcpath;
gint id;
gchar **strv, **cur;
+ gsize len;
cm_return_if_fail(ac_prefs != NULL);
cm_return_if_fail(label != NULL);
if (privacy_prefs != NULL) {
strv = g_strsplit(privacy_prefs, ",", 0);
for (cur = strv; *cur != NULL; cur++) {
- gchar *encvalue, *value;
+ gchar *encvalue, *tmp;
+ gchar value[1024];
encvalue = strchr(*cur, '=');
if (encvalue == NULL)
encvalue[0] = '\0';
encvalue++;
- value = g_malloc0(strlen(encvalue));
- if (base64_decode(value, encvalue, strlen(encvalue)) > 0)
+ tmp = g_base64_decode(encvalue, &len);
+ if (len > 0) {
+ g_strlcat(value, tmp, 1024);
+ value[len] = '\0';
g_hash_table_insert(ac_prefs->privacy_prefs, g_strdup(*cur), g_strdup(value));
- g_free(value);
+ }
+ g_free(tmp);
}
g_strfreev(strv);
g_free(privacy_prefs);
if (str->len > 0)
g_string_append_c(str, ',');
- encvalue = g_malloc0(B64LEN(strlen(value)) + 1);
- base64_encode(encvalue, (gchar *) value, strlen(value));
+ encvalue = g_base64_encode(value, strlen(value));
g_string_append_printf(str, "%s=%s", (gchar *) key, encvalue);
g_free(encvalue);
}
}
}
+#if (defined USE_GNUTLS && GLIB_CHECK_VERSION(2,22,0))
+static void auto_configure_cb (GtkWidget *widget, gpointer data)
+{
+ gchar *address = NULL;
+ const gchar *domain = NULL;
+ AutoConfigureData *recv_data;
+ AutoConfigureData *send_data;
+ static GCancellable *recv_cancel = NULL;
+ static GCancellable *send_cancel = NULL;
+ RecvProtocol protocol;
+ struct BasicProtocol *protocol_optmenu = (struct BasicProtocol *) basic_page.protocol_optmenu;
+ GtkWidget *optmenu = protocol_optmenu->combobox;
+
+ if (!recv_cancel) {
+ recv_cancel = g_cancellable_new();
+ send_cancel = g_cancellable_new();
+ }
+
+ if (widget == basic_page.auto_configure_cancel_btn) {
+ g_cancellable_cancel(recv_cancel);
+ g_cancellable_cancel(send_cancel);
+ g_object_unref(recv_cancel);
+ g_object_unref(send_cancel);
+ recv_cancel = NULL;
+ send_cancel = NULL;
+ return;
+ }
+
+ protocol = combobox_get_active_data(GTK_COMBO_BOX(optmenu));
+
+ address = gtk_editable_get_chars(GTK_EDITABLE(basic_page.addr_entry), 0, -1);
+
+ if (strchr(address, '@') == NULL) {
+ g_free(address);
+ gtk_label_set_text(GTK_LABEL(basic_page.auto_configure_lbl),
+ _("Failed (wrong address)"));
+ }
+ domain = strchr(address, '@') + 1;
+
+ if (protocol == A_POP3 || protocol == A_IMAP4) {
+ recv_data = g_new0(AutoConfigureData, 1);
+ recv_data->configure_button = GTK_BUTTON(basic_page.auto_configure_btn);
+ recv_data->cancel_button = GTK_BUTTON(basic_page.auto_configure_cancel_btn);
+ recv_data->info_label = GTK_LABEL(basic_page.auto_configure_lbl);
+ recv_data->cancel = recv_cancel;
+ switch(protocol) {
+ case A_POP3:
+ recv_data->ssl_service = "pop3s";
+ recv_data->tls_service = "pop3";
+ recv_data->domain = g_strdup(domain);
+ recv_data->hostname_entry = GTK_ENTRY(basic_page.recvserv_entry);
+ recv_data->set_port = GTK_TOGGLE_BUTTON(advanced_page.popport_checkbtn);
+ recv_data->port = GTK_SPIN_BUTTON(advanced_page.popport_spinbtn);
+ recv_data->tls_checkbtn = GTK_TOGGLE_BUTTON(ssl_page.pop_starttls_radiobtn);
+ recv_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(ssl_page.pop_ssltunnel_radiobtn);
+ recv_data->default_port = 110;
+ recv_data->default_ssl_port = 995;
+ break;
+ case A_IMAP4:
+ recv_data->ssl_service = "imaps";
+ recv_data->tls_service = "imap";
+ recv_data->domain = g_strdup(domain);
+ recv_data->hostname_entry = GTK_ENTRY(basic_page.recvserv_entry);
+ recv_data->set_port = GTK_TOGGLE_BUTTON(advanced_page.imapport_checkbtn);
+ recv_data->port = GTK_SPIN_BUTTON(advanced_page.imapport_spinbtn);
+ recv_data->tls_checkbtn = GTK_TOGGLE_BUTTON(ssl_page.imap_starttls_radiobtn);
+ recv_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(ssl_page.imap_ssltunnel_radiobtn);
+ recv_data->default_port = 143;
+ recv_data->default_ssl_port = 993;
+ break;
+ default:
+ cm_return_if_fail(FALSE);
+ }
+ auto_configure_service(recv_data);
+ }
+
+ send_data = g_new0(AutoConfigureData, 1);
+ send_data->configure_button = GTK_BUTTON(basic_page.auto_configure_btn);
+ send_data->cancel_button = GTK_BUTTON(basic_page.auto_configure_cancel_btn);
+ send_data->info_label = GTK_LABEL(basic_page.auto_configure_lbl);
+ send_data->cancel = send_cancel;
+
+ send_data->ssl_service = NULL;
+ send_data->tls_service = "submission";
+ send_data->domain = g_strdup(domain);
+ send_data->hostname_entry = GTK_ENTRY(basic_page.smtpserv_entry);
+ send_data->set_port = GTK_TOGGLE_BUTTON(advanced_page.smtpport_checkbtn);
+ send_data->port = GTK_SPIN_BUTTON(advanced_page.smtpport_spinbtn);
+ send_data->tls_checkbtn = GTK_TOGGLE_BUTTON(ssl_page.smtp_starttls_radiobtn);
+ send_data->ssl_checkbtn = NULL;
+ send_data->default_port = 25;
+ send_data->default_ssl_port = -1;
+ send_data->auth_checkbtn = GTK_TOGGLE_BUTTON(send_page.smtp_auth_checkbtn);
+
+ auto_configure_service(send_data);
+
+ g_free(address);
+}
+#endif
+
static void prefs_account_sigfile_radiobtn_cb(GtkWidget *widget, gpointer data)
{
gtk_widget_set_sensitive(GTK_WIDGET(signature_browse_button), TRUE);
gtk_widget_hide(send_page.msgid_checkbtn);
} else
gtk_widget_show(send_page.msgid_checkbtn);
- if (protocol == A_NNTP) {
- gtk_widget_hide(send_page.xmailer_checkbtn);
- gtk_widget_show(send_page.xnewsreader_checkbtn);
- } else {
- gtk_widget_show(send_page.xmailer_checkbtn);
- gtk_widget_hide(send_page.xnewsreader_checkbtn);
- }
+
+ gtk_widget_show(send_page.xmailer_checkbtn);
}
}
gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
+
switch(protocol) {
case A_NNTP:
#ifndef HAVE_LIBETPAN
gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
#endif
gtk_widget_show(send_page.msgid_checkbtn);
- gtk_widget_hide(send_page.xmailer_checkbtn);
- gtk_widget_show(send_page.xnewsreader_checkbtn);
+ gtk_widget_show(send_page.xmailer_checkbtn);
gtk_widget_show(basic_page.nntpserv_label);
gtk_widget_show(basic_page.nntpserv_entry);
gtk_table_set_row_spacing (GTK_TABLE (basic_page.serv_table),
case A_LOCAL:
gtk_widget_show(send_page.msgid_checkbtn);
gtk_widget_show(send_page.xmailer_checkbtn);
- gtk_widget_hide(send_page.xnewsreader_checkbtn);
gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
gtk_widget_hide(basic_page.nntpserv_label);
TRUE);
gtk_widget_hide(send_page.msgid_checkbtn);
gtk_widget_show(send_page.xmailer_checkbtn);
- gtk_widget_hide(send_page.xnewsreader_checkbtn);
gtk_widget_hide(basic_page.nntpserv_label);
gtk_widget_hide(basic_page.nntpserv_entry);
gtk_table_set_row_spacing (GTK_TABLE (basic_page.serv_table),
case A_NONE:
gtk_widget_show(send_page.msgid_checkbtn);
gtk_widget_show(send_page.xmailer_checkbtn);
- gtk_widget_hide(send_page.xnewsreader_checkbtn);
gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
gtk_widget_hide(basic_page.nntpserv_label);
gtk_widget_hide(receive_page.low_bandwidth_checkbtn);
break;
case A_POP3:
+ /* continue to default: */
default:
gtk_widget_show(send_page.msgid_checkbtn);
gtk_widget_show(send_page.xmailer_checkbtn);
- gtk_widget_hide(send_page.xnewsreader_checkbtn);
gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
gtk_widget_hide(basic_page.nntpserv_label);