diff options
author | Riccardo Spagni <ric@spagni.net> | 2016-01-12 14:43:38 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2016-01-12 14:43:38 +0200 |
commit | d31d4247265c2c40e0a12a929eae0864624ffa52 (patch) | |
tree | d22dd13bec1c24e19df86d8f65a6d96bf1e51399 /src | |
parent | Merge pull request #601 (diff) | |
parent | use load_file_to_string and exit with error on file read errors (diff) | |
download | monero-d31d4247265c2c40e0a12a929eae0864624ffa52.tar.xz |
Merge pull request #603
c5baf30 use load_file_to_string and exit with error on file read errors (Fabian Hirschmann)
7b2d27f remove new lines at the end of the password only (Fabian Hirschmann)
302cc9c add --password-file option (Fabian Hirschmann)
Diffstat (limited to 'src')
-rw-r--r-- | src/simplewallet/simplewallet.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp index 00bdc689d..2484cd3a5 100644 --- a/src/simplewallet/simplewallet.cpp +++ b/src/simplewallet/simplewallet.cpp @@ -37,6 +37,7 @@ #include <thread> #include <iostream> #include <sstream> +#include <fstream> #include <ctype.h> #include <boost/lexical_cast.hpp> #include <boost/program_options.hpp> @@ -84,6 +85,7 @@ namespace const command_line::arg_descriptor<std::string> arg_daemon_address = {"daemon-address", sw::tr("Use daemon instance at <host>:<port>"), ""}; const command_line::arg_descriptor<std::string> arg_daemon_host = {"daemon-host", sw::tr("Use daemon instance at host <arg> instead of localhost"), ""}; const command_line::arg_descriptor<std::string> arg_password = {"password", sw::tr("Wallet password"), "", true}; + const command_line::arg_descriptor<std::string> arg_password_file = {"password-file", sw::tr("Wallet password file"), "", true}; const command_line::arg_descriptor<std::string> arg_electrum_seed = {"electrum-seed", sw::tr("Specify Electrum seed for wallet recovery/creation"), ""}; const command_line::arg_descriptor<bool> arg_restore_deterministic_wallet = {"restore-deterministic-wallet", sw::tr("Recover wallet using Electrum-style mnemonic seed"), false}; const command_line::arg_descriptor<bool> arg_non_deterministic = {"non-deterministic", sw::tr("Create non-deterministic view and spend keys"), false}; @@ -793,11 +795,33 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm) if (m_daemon_address.empty()) m_daemon_address = std::string("http://") + m_daemon_host + ":" + std::to_string(m_daemon_port); + if (has_arg(vm, arg_password) && has_arg(vm, arg_password_file)) + { + fail_msg_writer() << tr("can't specify more than one of --password and --password-file"); + return false; + } + tools::password_container pwd_container; if (command_line::has_arg(vm, arg_password)) { pwd_container.password(command_line::get_arg(vm, arg_password)); } + else if (command_line::has_arg(vm, arg_password_file)) + { + std::string password; + bool r = epee::file_io_utils::load_file_to_string(command_line::get_arg(vm, arg_password_file), + password); + if (!r) + { + fail_msg_writer() << tr("the password file specified could not be read"); + return false; + } + + // Remove line breaks the user might have inserted + password.erase(std::remove(password.begin() - 1, password.end(), '\n'), password.end()); + password.erase(std::remove(password.end() - 1, password.end(), '\r'), password.end()); + pwd_container.password(password.c_str()); + } else { bool r = pwd_container.read_password(); @@ -2418,6 +2442,7 @@ int main(int argc, char* argv[]) command_line::add_arg(desc_params, arg_generate_new_wallet); command_line::add_arg(desc_params, arg_generate_from_view_key); command_line::add_arg(desc_params, arg_password); + command_line::add_arg(desc_params, arg_password_file); command_line::add_arg(desc_params, arg_daemon_address); command_line::add_arg(desc_params, arg_daemon_host); command_line::add_arg(desc_params, arg_daemon_port); |