@ -49,6 +49,7 @@ using namespace epee;
# include "cryptonote_core/tx_sanity_check.h"
# include "wallet_rpc_helpers.h"
# include "wallet2.h"
# include "wallet_args.h"
# include "cryptonote_basic/cryptonote_format_utils.h"
# include "net/parse.h"
# include "rpc/core_rpc_server_commands_defs.h"
@ -276,7 +277,7 @@ struct options {
const command_line : : arg_descriptor < bool > trusted_daemon = { " trusted-daemon " , tools : : wallet2 : : tr ( " Enable commands which rely on a trusted daemon " ) , false } ;
const command_line : : arg_descriptor < bool > untrusted_daemon = { " untrusted-daemon " , tools : : wallet2 : : tr ( " Disable commands which rely on a trusted daemon " ) , false } ;
const command_line : : arg_descriptor < std : : string > password = { " password " , tools : : wallet2 : : tr ( " Wallet password (escape/quote as needed) " ) , " " , true } ;
const command_line : : arg_descriptor < std : : string > password_file = { " password-file " , tools : : wallet2 : : tr ( " Wallet password file " ) , " " , true } ;
const command_line : : arg_descriptor < std : : string > password_file = wallet_args : : arg_password_file ( ) ;
const command_line : : arg_descriptor < int > daemon_port = { " daemon-port " , tools : : wallet2 : : tr ( " Use daemon instance at port <arg> instead of 18081 " ) , 0 } ;
const command_line : : arg_descriptor < std : : string > daemon_login = { " daemon-login " , tools : : wallet2 : : tr ( " Specify username[:password] for daemon RPC client " ) , " " , true } ;
const command_line : : arg_descriptor < std : : string > daemon_ssl = { " daemon-ssl " , tools : : wallet2 : : tr ( " Enable SSL on daemon RPC connections: enabled|disabled|autodetect " ) , " autodetect " } ;
@ -532,7 +533,7 @@ std::unique_ptr<tools::wallet2> make_basic(const boost::program_options::variabl
boost : : optional < tools : : password_container > get_password ( const boost : : program_options : : variables_map & vm , const options & opts , const std : : function < boost : : optional < tools : : password_container > ( const char * , bool ) > & password_prompter , const bool verify )
{
if ( command_line : : has_arg ( vm , opts . password ) & & command_line : : has_arg ( vm , opts . password_file ) )
if ( command_line : : has_arg ( vm , opts . password ) & & ! command_line : : is_arg_defaulted ( vm , opts . password_file ) )
{
THROW_WALLET_EXCEPTION ( tools : : error : : wallet_internal_error , tools : : wallet2 : : tr ( " can't specify more than one of --password and --password-file " ) ) ;
}
@ -542,10 +543,11 @@ boost::optional<tools::password_container> get_password(const boost::program_opt
return tools : : password_container { command_line : : get_arg ( vm , opts . password ) } ;
}
if ( command_line : : has_arg ( vm , opts . password_file ) )
if ( ! command_line : : is_arg_defaulted ( vm , opts . password_file ) )
{
std : : string password ;
bool r = epee : : file_io_utils : : load_file_to_string ( command_line : : get_arg ( vm , opts . password_file ) ,
const auto password_file = command_line : : get_arg ( vm , opts . password_file ) ;
bool r = epee : : file_io_utils : : load_file_to_string ( password_file ,
password ) ;
THROW_WALLET_EXCEPTION_IF ( ! r , tools : : error : : wallet_internal_error , tools : : wallet2 : : tr ( " the password file specified could not be read " ) ) ;