Use GLib's implementation of Base64 instead of our own.
[claws.git] / src / prefs_account.c
index d9d52bb316236fa99dcaee3c692a1eb9b4a78312..3db4b33733c2b217e7a6a09e4856c4d6fdf86cd1 100644 (file)
@@ -57,7 +57,6 @@
 #include "smtp.h"
 #include "imap.h"
 #include "remotefolder.h"
-#include "base64.h"
 #include "combobox.h"
 #include "setup.h"
 #include "quote_fmt.h"
@@ -269,6 +268,7 @@ typedef struct SSLPage
        GtkWidget *entry_out_cert_file;
        GtkWidget *entry_out_cert_pass;
 
+       GtkWidget *ssl_certs_auto_accept_checkbtn;
        GtkWidget *use_nonblocking_ssl_checkbtn;
 } SSLPage;
 
@@ -729,6 +729,10 @@ static PrefParam ssl_param[] = {
         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},
@@ -769,6 +773,9 @@ static PrefParam ssl_param[] = {
        {"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 */
@@ -2413,6 +2420,7 @@ static void ssl_create_widget_func(PrefsPage * _page,
        GtkWidget *entry_out_cert_pass;
 
        GtkWidget *vbox7;
+       GtkWidget *ssl_certs_auto_accept_checkbtn;
        GtkWidget *use_nonblocking_ssl_checkbtn;
        GtkWidget *hbox;
        GtkWidget *hbox_spc;
@@ -2545,6 +2553,9 @@ static void ssl_create_widget_func(PrefsPage * _page,
        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"));
 
@@ -2587,6 +2598,7 @@ static void ssl_create_widget_func(PrefsPage * _page,
        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;
@@ -3390,6 +3402,7 @@ static gboolean sslcert_get_password(gpointer source, gpointer data)
 #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();
@@ -3404,6 +3417,7 @@ static gboolean sslcert_get_password(gpointer source, gpointer data)
        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);
@@ -3474,6 +3488,7 @@ void prefs_account_read_config(PrefsAccount *ac_prefs, const gchar *label)
        gchar *rcpath;
        gint id;
        gchar **strv, **cur;
+       gsize len;
 
        cm_return_if_fail(ac_prefs != NULL);
        cm_return_if_fail(label != NULL);
@@ -3507,7 +3522,8 @@ void prefs_account_read_config(PrefsAccount *ac_prefs, const gchar *label)
        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)
@@ -3515,10 +3531,13 @@ void prefs_account_read_config(PrefsAccount *ac_prefs, const gchar *label)
                        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);
@@ -3539,8 +3558,7 @@ static void create_privacy_prefs(gpointer key, gpointer _value, gpointer user_da
        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);
 }
@@ -3828,7 +3846,7 @@ static void auto_configure_cb (GtkWidget *widget, gpointer data)
 
        address = gtk_editable_get_chars(GTK_EDITABLE(basic_page.addr_entry), 0, -1);
 
-       if (strchr(address, '@') < 0) {
+       if (strchr(address, '@') == NULL) {
                g_free(address);
                gtk_label_set_text(GTK_LABEL(basic_page.auto_configure_lbl),
                           _("Failed (wrong address)"));
@@ -3888,7 +3906,7 @@ static void auto_configure_cb (GtkWidget *widget, gpointer data)
        send_data->ssl_checkbtn = NULL;
        send_data->default_port = 25;
        send_data->default_ssl_port = -1;
-       send_data->auth_checkbtn = send_page.smtp_auth_checkbtn;
+       send_data->auth_checkbtn = GTK_TOGGLE_BUTTON(send_page.smtp_auth_checkbtn);
 
        auto_configure_service(send_data);