Merge pull request #318

fb20071 simplewallet: allow a different password for the watch-only wallet (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2015-06-14 13:09:14 +02:00
commit 66a5c9e50f
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD
3 changed files with 14 additions and 8 deletions

View File

@ -81,14 +81,15 @@ namespace tools
m_empty = true; m_empty = true;
} }
bool password_container::read_password() bool password_container::read_password(const char *message)
{ {
clear(); clear();
bool r; bool r;
if (is_cin_tty()) if (is_cin_tty())
{ {
std::cout << "password: "; if (message)
std::cout << message << ": ";
r = read_from_tty(); r = read_from_tty();
} }
else else

View File

@ -48,7 +48,7 @@ namespace tools
bool empty() const { return m_empty; } bool empty() const { return m_empty; }
const std::string& password() const { return m_password; } const std::string& password() const { return m_password; }
void password(std::string&& val) { m_password = std::move(val); m_empty = false; } void password(std::string&& val) { m_password = std::move(val); m_empty = false; }
bool read_password(); bool read_password(const char *message = "password");
private: private:
bool read_from_file(); bool read_from_file();

View File

@ -768,18 +768,23 @@ bool simple_wallet::save_watch_only(const std::vector<std::string> &args/* = std
{ {
bool success = false; bool success = false;
tools::password_container pwd_container; tools::password_container pwd_container;
success = pwd_container.read_password();
success = pwd_container.read_password("Password for the new watch-only wallet");
if (!success) if (!success)
{ {
fail_msg_writer() << "failed to read wallet password"; fail_msg_writer() << "failed to read wallet password";
return true; return true;
} }
std::string password = pwd_container.password();
/* verify password before using so user doesn't accidentally set a new password for rewritten wallet */ success = pwd_container.read_password("Enter new password again");
success = m_wallet->verify_password(pwd_container.password());
if (!success) if (!success)
{ {
fail_msg_writer() << "invalid password"; fail_msg_writer() << "failed to read wallet password";
return true;
}
if (password != pwd_container.password())
{
fail_msg_writer() << "passwords do not match";
return true; return true;
} }