diff options
author | Antenore Gatta <antenore@simbiosi.org> | 2019-04-02 02:26:56 +0300 |
---|---|---|
committer | Antenore Gatta <antenore@simbiosi.org> | 2019-04-02 02:26:56 +0300 |
commit | 0f8f61e8c576e75e48cb34813cf1fbed55839711 (patch) | |
tree | 9350335b41d249763ec95d5ddcf1ec71eab3c11f /src/remmina_unlock.c | |
parent | fd3b2962ad820a74083cff6e031e5fcae39ae253 (diff) |
WIP: core unlock code
Diffstat (limited to 'src/remmina_unlock.c')
-rw-r--r-- | src/remmina_unlock.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/src/remmina_unlock.c b/src/remmina_unlock.c index 203dd29ab..8d3b4a658 100644 --- a/src/remmina_unlock.c +++ b/src/remmina_unlock.c @@ -38,6 +38,7 @@ #include <glib/gprintf.h> #include "config.h" +#include "remmina_sodium.h" #include "remmina_pref.h" #include "remmina_unlock.h" #include "remmina_public.h" @@ -67,27 +68,44 @@ static void remmina_unlock_timer_destroy(gpointer user_data) g_timer_destroy(remmina_unlock_dialog->timer); } -static void remmina_button_unlock_clicked(GtkButton *btn, gpointer user_data) +static void remmina_unlock_unlock_clicked(GtkButton *btn, gpointer user_data) { TRACE_CALL(__func__); //g_timer_reset(remmina_unlock_dialog->timer); - gtk_widget_destroy(GTK_WIDGET(remmina_unlock_dialog->dialog)); - remmina_unlock_dialog->dialog = NULL; + gchar *unlock_password; + const gchar *entry_passwd; + gint rc; + + unlock_password = remmina_pref_get_value("unlock_password"); + entry_passwd = gtk_entry_get_text(remmina_unlock_dialog->entry_unlock); + rc = remmina_sodium_pwhash_str_verify(unlock_password, entry_passwd); + g_info("remmina_sodium_pwhash_str_verify returned %i", rc); + + if (rc == 0) { + g_info("Passphrase veryfied succesfully"); + gtk_widget_destroy(GTK_WIDGET(remmina_unlock_dialog->dialog)); + remmina_unlock_dialog->dialog = NULL; + } else { + g_warning ("Passphrase is wrong, to reset it, you can edit the remmina.pref file by hand"); + } } -static void remmina_button_unlock_cancel_clicked(GtkButton *btn, gpointer user_data) +static void remmina_unlock_cancel_clicked(GtkButton *btn, gpointer user_data) { TRACE_CALL(__func__); + remmina_unlock_dialog->retval = 0; gtk_widget_destroy(GTK_WIDGET(remmina_unlock_dialog->dialog)); remmina_unlock_dialog->dialog = NULL; } -void remmina_unlock_new(GtkWindow *parent) +gint remmina_unlock_new(GtkWindow *parent) { TRACE_CALL(__func__); remmina_unlock_dialog = g_new0(RemminaUnlockDialog, 1); + remmina_unlock_dialog->retval = 1; + gtk_widget_destroy(GTK_WIDGET(remmina_unlock_dialog->dialog)); //if (remmina_unlock_dialog->unlock_init) remmina_unlock_dialog->builder = remmina_public_gtk_builder_new_from_file("remmina_unlock.glade"); @@ -103,13 +121,17 @@ void remmina_unlock_new(GtkWindow *parent) remmina_unlock_dialog->button_unlock_cancel = GTK_BUTTON(GET_OBJ("button_unlock_cancel")); g_signal_connect(remmina_unlock_dialog->button_unlock, "clicked", - G_CALLBACK(remmina_button_unlock_clicked), (gpointer)remmina_unlock_dialog); + G_CALLBACK(remmina_unlock_unlock_clicked), (gpointer)remmina_unlock_dialog); g_signal_connect(remmina_unlock_dialog->button_unlock_cancel, "clicked", - G_CALLBACK(remmina_button_unlock_cancel_clicked), (gpointer)remmina_unlock_dialog); + G_CALLBACK(remmina_unlock_cancel_clicked), (gpointer)remmina_unlock_dialog); + g_signal_connect (remmina_unlock_dialog->dialog, "close", + G_CALLBACK (remmina_unlock_cancel_clicked), (gpointer)remmina_unlock_dialog); /* Connect signals */ gtk_builder_connect_signals(remmina_unlock_dialog->builder, NULL); - if (remmina_pref_get_boolean("use_master_password")) + if (remmina_pref_get_boolean("use_master_password") && + (g_strcmp0(remmina_pref_get_value("unlock_password"), "") != 0)) gtk_dialog_run(remmina_unlock_dialog->dialog); + return(remmina_unlock_dialog->retval); } |