Forget entered master password before trying to change it.

This makes sure the user always has to input current master
password before he is allowed to change it.
This commit is contained in:
Andrej Kacian 2016-02-07 19:51:20 +01:00
parent b7477fbe53
commit fb564a461e
2 changed files with 17 additions and 7 deletions

View file

@ -117,6 +117,17 @@ const gboolean master_password_is_correct(const gchar *input)
return FALSE;
}
void master_password_forget()
{
/* If master password is currently in memory (entered by user),
* get rid of it. User will have to enter the new one again. */
if (_master_password != NULL) {
memset(_master_password, 0, strlen(_master_password));
g_free(_master_password);
}
_master_password = NULL;
}
void master_password_change(const gchar *newp)
{
gchar *pwd, *newpwd;
@ -124,6 +135,10 @@ void master_password_change(const gchar *newp)
GList *cur;
PrefsAccount *acc;
/* Make sure the user has to enter the master password before
* being able to change it. */
master_password_forget();
oldp = master_password();
g_return_if_fail(oldp != NULL);
@ -190,13 +205,7 @@ void master_password_change(const gchar *newp)
}
}
/* If master password is currently in memory (entered by user),
* get rid of it. User will have to enter the new one again. */
if (_master_password != NULL) {
memset(_master_password, 0, strlen(_master_password));
g_free(_master_password);
}
_master_password = NULL;
master_password_forget();
}
#endif

View file

@ -29,6 +29,7 @@
#ifndef PASSWORD_CRYPTO_OLD
const gboolean master_password_is_set();
const gboolean master_password_is_correct(const gchar *input);
void master_password_forget();
void master_password_change(const gchar *newp);
#endif