From 6edeb462320240d981ec307798c7841e50197758 Mon Sep 17 00:00:00 2001 From: Simeon Simeonov Date: Mon, 19 Mar 2018 13:24:40 +0100 Subject: Make it possible to set mp. encrypted password from the prefs_account_dialog --- src/prefs_account_dialog.c | 4 ++-- src/prefs_ui.c | 39 +++++++++++++++++++++++++++++++++++++++ src/prefs_ui.h | 1 + 3 files changed, 42 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/prefs_account_dialog.c b/src/prefs_account_dialog.c index e9cba13..e215b8e 100644 --- a/src/prefs_account_dialog.c +++ b/src/prefs_account_dialog.c @@ -267,7 +267,7 @@ static PrefsUIData ui_data[] = { {"user_id", &basic.uid_entry, prefs_set_data_from_entry, prefs_set_entry}, {"password", &basic.pass_entry, - prefs_set_data_from_entry, prefs_set_entry}, + prefs_set_data_from_epass_entry, prefs_set_entry}, /* Receive */ {"use_apop_auth", &receive.use_apop_chkbtn, @@ -313,7 +313,7 @@ static PrefsUIData ui_data[] = { {"smtp_user_id", &p_send.smtp_uid_entry, prefs_set_data_from_entry, prefs_set_entry}, {"smtp_password", &p_send.smtp_pass_entry, - prefs_set_data_from_entry, prefs_set_entry}, + prefs_set_data_from_epass_entry, prefs_set_entry}, {"pop_before_smtp", &p_send.pop_bfr_smtp_chkbtn, prefs_set_data_from_toggle, prefs_set_toggle}, diff --git a/src/prefs_ui.c b/src/prefs_ui.c index a3a8f74..5539f4a 100644 --- a/src/prefs_ui.c +++ b/src/prefs_ui.c @@ -36,6 +36,7 @@ #include "codeconv.h" #include "utils.h" #include "gtkutils.h" +#include "masterpassword.h" typedef enum { @@ -268,6 +269,44 @@ void prefs_set_data_from_entry(PrefParam *pparam) } } +void prefs_set_data_from_epass_entry(PrefParam *pparam) +{ +#if USE_SSL + PrefsUIData *ui_data; + gchar **str; + const gchar *entry_str; + + if (!master_password_active()) { + prefs_set_data_from_entry(pparam); + return; + } + + ui_data = (PrefsUIData *)pparam->ui_data; + g_return_if_fail(ui_data != NULL); + g_return_if_fail(*ui_data->widget != NULL); + + entry_str = gtk_entry_get_text(GTK_ENTRY(*ui_data->widget)); + + switch (pparam->type) { + case P_STRING: + str = (gchar **)pparam->data; + g_free(*str); + if ((entry_str != NULL) && (!mpes_string_prefix(entry_str))) { + debug_print("Encrypting GTK password entry\n"); + *str = encrypt_with_master_password(entry_str); + } else { + *str = entry_str[0] ? g_strdup(entry_str) : NULL; + } + break; + default: + g_warning("Invalid PrefType for GtkEntry widget: %d\n", + pparam->type); + } +#else + prefs_set_data_from_entry(pparam); +#endif +} + void prefs_set_entry(PrefParam *pparam) { PrefsUIData *ui_data; diff --git a/src/prefs_ui.h b/src/prefs_ui.h index cfdf353..f7bd903 100644 --- a/src/prefs_ui.h +++ b/src/prefs_ui.h @@ -164,6 +164,7 @@ void prefs_set_data_from_dialog (PrefParam *param); void prefs_set_dialog_to_default(PrefParam *param); void prefs_set_data_from_entry (PrefParam *pparam); +void prefs_set_data_from_epass_entry(PrefParam *pparam); void prefs_set_entry (PrefParam *pparam); void prefs_set_data_from_text (PrefParam *pparam); void prefs_set_text (PrefParam *pparam); -- cgit v1.3