/*
- * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2013 Hiroyuki Yamamoto and the Claws Mail team
+ * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2015 Hiroyuki Yamamoto and the Claws Mail team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
*/
#ifdef HAVE_CONFIG_H
#include "privacy.h"
#include "inputdialog.h"
#include "ssl_certificate.h"
+#include "passwordstore.h"
static gboolean cancelled;
static gboolean new_account;
&basic_page.uid_entry, prefs_set_data_from_entry, prefs_set_entry},
{"password", NULL, &tmp_ac_prefs.passwd, P_PASSWORD,
- &basic_page.pass_entry, prefs_set_data_from_entry, prefs_set_entry},
+ NULL, NULL, NULL},
{NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
};
{"smtp_user_id", NULL, &tmp_ac_prefs.smtp_userid, P_STRING,
&send_page.smtp_uid_entry, prefs_set_data_from_entry, prefs_set_entry},
{"smtp_password", NULL, &tmp_ac_prefs.smtp_passwd, P_PASSWORD,
- &send_page.smtp_pass_entry, prefs_set_data_from_entry, prefs_set_entry},
+ NULL, NULL, NULL},
{"pop_before_smtp", "FALSE", &tmp_ac_prefs.pop_before_smtp, P_BOOL,
&send_page.pop_bfr_smtp_checkbtn,
&ssl_page.entry_in_cert_file, prefs_set_data_from_entry, prefs_set_entry},
{"in_ssl_client_cert_pass", "", &tmp_ac_prefs.in_ssl_client_cert_pass, P_PASSWORD,
- &ssl_page.entry_in_cert_pass, prefs_set_data_from_entry, prefs_set_entry},
+ NULL, NULL, NULL},
{"out_ssl_client_cert_file", "", &tmp_ac_prefs.out_ssl_client_cert_file, P_STRING,
&ssl_page.entry_out_cert_file, prefs_set_data_from_entry, prefs_set_entry},
{"out_ssl_client_cert_pass", "", &tmp_ac_prefs.out_ssl_client_cert_pass, P_PASSWORD,
- &ssl_page.entry_out_cert_pass, prefs_set_data_from_entry, prefs_set_entry},
+ NULL, NULL, NULL},
#else
{"ssl_pop", "0", &tmp_ac_prefs.ssl_pop, P_ENUM,
NULL, NULL, NULL},
GtkWidget *auto_configure_lbl;
GtkListStore *menu;
GtkTreeIter iter;
+ gchar *buf;
struct BasicProtocol *protocol_optmenu;
gint i;
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"
- "has been built without IMAP and News support.</span>"));
+ no_imap_warn_label = gtk_label_new(g_strconcat("<span weight=\"bold\">",
+ _("Warning: this version of Claws Mail\n"
+ "has been built without IMAP and News support."), "</span>", NULL));
gtk_label_set_use_markup(GTK_LABEL(no_imap_warn_label), TRUE);
gtk_box_pack_start(GTK_BOX (optmenubox), no_imap_warn_icon, FALSE, FALSE, 0);
if (new_account) {
PrefsAccount *def_ac;
- gchar *buf;
prefs_set_dialog_to_default(basic_param);
buf = g_strdup_printf(_("Account%d"), ac_prefs->account_id);
g_free(id);
}
}
- } else
+ } else {
prefs_set_dialog(basic_param);
+ /* Passwords are handled outside of PrefParams. */
+ buf = passwd_store_get_account(ac_prefs->account_id,
+ PWS_ACCOUNT_RECV);
+ gtk_entry_set_text(GTK_ENTRY(page->pass_entry), buf);
+ g_free(buf);
+ }
+
page->vbox = vbox1;
page->page.widget = vbox1;
COMBOBOX_ADD (menu, _("Automatic"), 0);
COMBOBOX_ADD (menu, NULL, 0);
- COMBOBOX_ADD (menu, "LOGIN", IMAP_AUTH_LOGIN);
+ COMBOBOX_ADD (menu, _("Plain text"), IMAP_AUTH_PLAINTEXT);
COMBOBOX_ADD (menu, "CRAM-MD5", IMAP_AUTH_CRAM_MD5);
COMBOBOX_ADD (menu, "ANONYMOUS", IMAP_AUTH_ANON);
COMBOBOX_ADD (menu, "GSSAPI", IMAP_AUTH_GSSAPI);
COMBOBOX_ADD (menu, "DIGEST-MD5", IMAP_AUTH_DIGEST_MD5);
+ COMBOBOX_ADD (menu, "SCRAM-SHA-1", IMAP_AUTH_SCRAM_SHA1);
+ COMBOBOX_ADD (menu, "PLAIN", IMAP_AUTH_PLAIN);
+ COMBOBOX_ADD (menu, "LOGIN", IMAP_AUTH_LOGIN);
hbox1 = gtk_hbox_new (FALSE, 8);
gtk_widget_show (hbox1);
GtkWidget *pop_bfr_smtp_tm_spinbtn;
GtkWidget *pop_auth_timeout_lbl;
GtkWidget *pop_auth_minutes_lbl;
+ gchar *buf;
vbox1 = gtk_vbox_new (FALSE, VSPACING);
gtk_widget_show (vbox1);
if (new_account) {
prefs_set_dialog_to_default(send_param);
- } else
+ } else {
prefs_set_dialog(send_param);
+ /* Passwords are handled outside of PrefParams. */
+ buf = passwd_store_get_account(ac_prefs->account_id,
+ PWS_ACCOUNT_SEND);
+ gtk_entry_set_text(GTK_ENTRY(page->smtp_pass_entry), buf);
+ g_free(buf);
+ }
+
pop_bfr_smtp_tm_set_sens (NULL, NULL);
page->vbox = vbox1;
GtkWidget *hbox;
GtkWidget *hbox_spc;
GtkWidget *label;
+ gchar *buf;
vbox1 = gtk_vbox_new (FALSE, VSPACING);
gtk_widget_show (vbox1);
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"));
+ _("Automatically accept valid SSL certificates"));
PACK_CHECK_BUTTON(vbox7, use_nonblocking_ssl_checkbtn,
_("Use non-blocking SSL"));
if (new_account) {
prefs_set_dialog_to_default(ssl_param);
- } else
+ } else {
prefs_set_dialog(ssl_param);
+ /* Passwords are handled outside of PrefParams. */
+ buf = passwd_store_get_account(ac_prefs->account_id,
+ PWS_ACCOUNT_RECV_CERT);
+ gtk_entry_set_text(GTK_ENTRY(page->entry_in_cert_pass), buf);
+ g_free(buf);
+ buf = passwd_store_get_account(ac_prefs->account_id,
+ PWS_ACCOUNT_SEND_CERT);
+ gtk_entry_set_text(GTK_ENTRY(page->entry_out_cert_pass), buf);
+ g_free(buf);
+ }
+
page->vbox = vbox1;
page->page.widget = vbox1;
tmp_ac_prefs.account_name ? tmp_ac_prefs.account_name : "(null)");
prefs_set_data_from_dialog(basic_param);
+
+ /* Passwords are stored outside of PrefParams. */
+ passwd_store_set_account(tmp_ac_prefs.account_id,
+ PWS_ACCOUNT_RECV,
+ gtk_entry_get_text(GTK_ENTRY(basic_page.pass_entry)),
+ FALSE);
if (protocol == A_IMAP4 || protocol == A_NNTP) {
new_id = g_strdup_printf("#%s/%s",
static gint prefs_send_apply(void)
{
prefs_set_data_from_dialog(send_param);
+
+ /* Passwords are stored outside of PrefParams. */
+ passwd_store_set_account(tmp_ac_prefs.account_id,
+ PWS_ACCOUNT_SEND,
+ gtk_entry_get_text(GTK_ENTRY(send_page.smtp_pass_entry)),
+ FALSE);
+
return 0;
}
static gint prefs_ssl_apply(void)
{
prefs_set_data_from_dialog(ssl_param);
+
+ /* Passwords are stored outside of PrefParams. */
+ passwd_store_set_account(tmp_ac_prefs.account_id,
+ PWS_ACCOUNT_RECV_CERT,
+ gtk_entry_get_text(GTK_ENTRY(ssl_page.entry_in_cert_pass)),
+ FALSE);
+ passwd_store_set_account(tmp_ac_prefs.account_id,
+ PWS_ACCOUNT_SEND_CERT,
+ gtk_entry_get_text(GTK_ENTRY(ssl_page.entry_out_cert_pass)),
+ FALSE);
+
return 0;
}
#endif
{
SSLClientCertHookData *hookdata = (SSLClientCertHookData *)source;
PrefsAccount *account = (PrefsAccount *)hookdata->account;
+ gchar *pwd_id;
hookdata->cert_path = NULL;
hookdata->password = NULL;
if (!g_list_find(account_get_list(), account)) {
- g_warning("can't find sock account\n");
+ g_warning("can't find account");
return TRUE;
}
if (hookdata->is_smtp) {
if (account->out_ssl_client_cert_file && *account->out_ssl_client_cert_file)
hookdata->cert_path = account->out_ssl_client_cert_file;
- if (account->out_ssl_client_cert_pass && *account->out_ssl_client_cert_pass)
- hookdata->password = account->out_ssl_client_cert_pass;
+ pwd_id = PWS_ACCOUNT_SEND_CERT;
} else {
if (account->in_ssl_client_cert_file && *account->in_ssl_client_cert_file)
hookdata->cert_path = account->in_ssl_client_cert_file;
- if (account->in_ssl_client_cert_pass && *account->in_ssl_client_cert_pass)
- hookdata->password = account->in_ssl_client_cert_pass;
+ pwd_id = PWS_ACCOUNT_RECV_CERT;
}
+
+ hookdata->password = passwd_store_get_account(account->account_id, pwd_id);
return TRUE;
}
*ac_prefs = tmp_ac_prefs;
while (*p && !g_ascii_isdigit(*p)) p++;
id = atoi(p);
- if (id < 0) g_warning("wrong account id: %d\n", id);
+ if (id < 0) g_warning("wrong account id: %d", id);
ac_prefs->account_id = id;
if (ac_prefs->protocol == A_APOP) {
privacy_prefs = NULL;
}
+ if (ac_prefs->passwd != NULL && strlen(ac_prefs->passwd) > 1) {
+ passwd_store_set_account(ac_prefs->account_id,
+ PWS_ACCOUNT_RECV, ac_prefs->passwd, TRUE);
+ }
+ if (ac_prefs->smtp_passwd != NULL && strlen(ac_prefs->smtp_passwd) > 1) {
+ passwd_store_set_account(ac_prefs->account_id,
+ PWS_ACCOUNT_SEND, ac_prefs->smtp_passwd, TRUE);
+ }
+ if (ac_prefs->in_ssl_client_cert_pass != NULL
+ && strlen(ac_prefs->in_ssl_client_cert_pass) > 1) {
+ passwd_store_set_account(ac_prefs->account_id,
+ PWS_ACCOUNT_RECV_CERT, ac_prefs->in_ssl_client_cert_pass, TRUE);
+ }
+ if (ac_prefs->out_ssl_client_cert_pass != NULL
+ && strlen(ac_prefs->out_ssl_client_cert_pass) > 1) {
+ passwd_store_set_account(ac_prefs->account_id,
+ PWS_ACCOUNT_SEND_CERT, ac_prefs->out_ssl_client_cert_pass, TRUE);
+ }
+
ac_prefs->receive_in_progress = FALSE;
prefs_custom_header_read_config(ac_prefs);
#define WRITE_PARAM(PARAM_TABLE) \
if (prefs_write_param(PARAM_TABLE, pfile->fp) < 0) { \
- g_warning("failed to write configuration to file\n"); \
+ g_warning("failed to write configuration to file"); \
prefs_file_close_revert(pfile); \
g_free(privacy_prefs); \
privacy_prefs = NULL; \
}
if (prefs_file_close(pfile) < 0)
- g_warning("failed to write configuration to file\n");
+ g_warning("failed to write configuration to file");
}
#undef WRITE_PARAM
prefswindow_open_full(title, prefs_pages, ac_prefs, destroy_dialog,
&prefs_common.editaccountwin_width, &prefs_common.editaccountwin_height,
- TRUE, NULL, NULL);
+ TRUE, NULL, NULL, NULL);
g_free(title);
gtk_main();
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;
g_free(address);
gtk_label_set_text(GTK_LABEL(basic_page.auto_configure_lbl),
_("Failed (wrong address)"));
+ return;
}
- domain = strchr(address, '@') + 1;
if (protocol == A_POP3 || protocol == A_IMAP4) {
recv_data = g_new0(AutoConfigureData, 1);
case A_POP3:
recv_data->ssl_service = "pop3s";
recv_data->tls_service = "pop3";
- recv_data->domain = g_strdup(domain);
+ recv_data->address = g_strdup(address);
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->ssl_checkbtn = GTK_TOGGLE_BUTTON(ssl_page.pop_ssltunnel_radiobtn);
recv_data->default_port = 110;
recv_data->default_ssl_port = 995;
+ recv_data->uid_entry = GTK_ENTRY(basic_page.uid_entry);
break;
case A_IMAP4:
recv_data->ssl_service = "imaps";
recv_data->tls_service = "imap";
- recv_data->domain = g_strdup(domain);
+ recv_data->address = g_strdup(address);
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->ssl_checkbtn = GTK_TOGGLE_BUTTON(ssl_page.imap_ssltunnel_radiobtn);
recv_data->default_port = 143;
recv_data->default_ssl_port = 993;
+ recv_data->uid_entry = GTK_ENTRY(basic_page.uid_entry);
break;
default:
cm_return_if_fail(FALSE);
send_data->ssl_service = NULL;
send_data->tls_service = "submission";
- send_data->domain = g_strdup(domain);
+ send_data->address = g_strdup(address);
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->ssl_checkbtn = NULL;
send_data->default_port = 25;
send_data->default_ssl_port = -1;
+ send_data->uid_entry = NULL;
send_data->auth_checkbtn = GTK_TOGGLE_BUTTON(send_page.smtp_auth_checkbtn);
auto_configure_service(send_data);