Skip to content

Commit

Permalink
Handle errors when path and/or password is incorrect, fix #336
Browse files Browse the repository at this point in the history
  • Loading branch information
paolostivanin committed Feb 9, 2024
1 parent af69923 commit 8cbf824
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 14 deletions.
13 changes: 11 additions & 2 deletions src/change-db-cb.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include "secret-schema.h"
#include "change-file-cb.h"


int
change_db (AppData *app_data)
{
Expand Down Expand Up @@ -37,18 +36,28 @@ change_db (AppData *app_data)
gtk_widget_hide (changedb_diag);
return RETRY_CHANGE;
}
gchar *old_db_path = g_strdup (app_data->db_data->db_path);
g_free (app_data->db_data->db_path);
app_data->db_data->db_path = g_strdup (new_db_path);
update_cfg_file (app_data);
gcry_free (app_data->db_data->key);
app_data->db_data->key = prompt_for_password (app_data, NULL, NULL, FALSE);
if (app_data->db_data->key == NULL) {
gtk_widget_hide (changedb_diag);
revert_db_path (app_data, old_db_path);
return RETRY_CHANGE;
}
secret_password_store (OTPCLIENT_SCHEMA, SECRET_COLLECTION_DEFAULT, "main_pwd", app_data->db_data->key, NULL, on_password_stored, NULL, "string", "main_pwd", NULL);
GError *err = NULL;
load_new_db (app_data, &err);
if (err != NULL) {
show_message_dialog (app_data->main_window, err->message, GTK_MESSAGE_ERROR);
g_clear_error (&err);
gtk_widget_hide (changedb_diag);
revert_db_path (app_data, old_db_path);
return RETRY_CHANGE;
}
g_free (old_db_path);
break;
case GTK_RESPONSE_CANCEL:
gtk_widget_destroy (changedb_diag);
Expand Down Expand Up @@ -78,4 +87,4 @@ change_db_cb_shortcut (GtkWidget *w __attribute__((unused)),
gpointer user_data)
{
change_db_cb (NULL, NULL, user_data);
}
}
11 changes: 11 additions & 0 deletions src/db-actions.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,14 @@ update_cfg_file (AppData *app_data)
g_free (cfg_file_path);
g_key_file_free (kf);
}


void
revert_db_path (AppData *app_data,
gchar *old_db_path)
{
g_free (app_data->db_data->db_path);
app_data->db_data->db_path = g_strdup (old_db_path);
update_cfg_file (app_data);
g_free (old_db_path);
}
13 changes: 8 additions & 5 deletions src/db-actions.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@ G_BEGIN_DECLS
#define ACTION_OPEN 5
#define ACTION_SAVE 10

void select_file_icon_pressed_cb (GtkEntry *entry,
gint position,
GdkEventButton *event,
gpointer data);
void select_file_icon_pressed_cb (GtkEntry *entry,
gint position,
GdkEventButton *event,
gpointer data);

void update_cfg_file (AppData *app_data);
void update_cfg_file (AppData *app_data);

void revert_db_path (AppData *app_data,
gchar *old_db_path);

G_END_DECLS
26 changes: 19 additions & 7 deletions src/new-db-cb.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,24 +34,36 @@ new_db (AppData *app_data)
g_string_free (new_db_path_with_suffix, TRUE);
return RETRY_CHANGE;
} else {
gchar *old_db_path = g_strdup (app_data->db_data->db_path);
g_free (app_data->db_data->db_path);
app_data->db_data->db_path = g_strdup (new_db_path_with_suffix->str);
update_cfg_file (app_data);
gcry_free (app_data->db_data->key);
app_data->db_data->key = prompt_for_password (app_data, NULL, NULL, FALSE);
if (app_data->db_data->key == NULL) {
gtk_widget_hide (newdb_diag);
revert_db_path (app_data, old_db_path);
return RETRY_CHANGE;
}
secret_password_store (OTPCLIENT_SCHEMA, SECRET_COLLECTION_DEFAULT, "main_pwd", app_data->db_data->key, NULL, on_password_stored, NULL, "string", "main_pwd", NULL);
GError *err = NULL;
write_db_to_disk (app_data->db_data, &err);
if (err != NULL) {
show_message_dialog (app_data->main_window, err->message, GTK_MESSAGE_ERROR);
g_clear_error (&err);
} else {
load_new_db (app_data, &err);
if (err != NULL) {
show_message_dialog (app_data->main_window, err->message, GTK_MESSAGE_ERROR);
g_clear_error (&err);
}
gtk_widget_hide (newdb_diag);
revert_db_path (app_data, old_db_path);
return RETRY_CHANGE;
}
load_new_db (app_data, &err);
if (err != NULL) {
show_message_dialog (app_data->main_window, err->message, GTK_MESSAGE_ERROR);
g_clear_error (&err);
gtk_widget_hide (newdb_diag);
revert_db_path (app_data, old_db_path);
return RETRY_CHANGE;
}
g_free (old_db_path);
}
g_string_free (new_db_path_with_suffix, TRUE);
break;
Expand All @@ -63,7 +75,7 @@ new_db (AppData *app_data)
}
gtk_widget_destroy (newdb_diag);

return TRUE;
return CHANGE_OK;
}


Expand Down

0 comments on commit 8cbf824

Please sign in to comment.