Merge pull request #82 from cogutvalera/issue_1171

Safer way to handle unlock command of cli_wallet #1171
This commit is contained in:
Peter Conrad 2018-10-28 10:51:22 +01:00 committed by GitHub
commit acfe075c5d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 14 deletions

View file

@ -34,7 +34,7 @@ endif()
SET (ORIGINAL_LIB_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) SET (ORIGINAL_LIB_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
SET(BOOST_COMPONENTS) SET(BOOST_COMPONENTS)
LIST(APPEND BOOST_COMPONENTS thread date_time system filesystem program_options signals serialization chrono unit_test_framework context locale iostreams) LIST(APPEND BOOST_COMPONENTS thread date_time system filesystem program_options signals serialization chrono unit_test_framework context locale iostreams regex)
SET( Boost_USE_STATIC_LIBS ON CACHE STRING "ON or OFF" ) SET( Boost_USE_STATIC_LIBS ON CACHE STRING "ON or OFF" )
IF( ECC_IMPL STREQUAL openssl ) IF( ECC_IMPL STREQUAL openssl )

View file

@ -32,6 +32,8 @@ namespace fc { namespace rpc {
void set_prompt( const string& prompt ); void set_prompt( const string& prompt );
void set_regex_secret( const string& expr );
private: private:
void run(); void run();

View file

@ -14,8 +14,16 @@
# endif # endif
#endif #endif
#include <boost/regex.hpp>
namespace fc { namespace rpc { namespace fc { namespace rpc {
static boost::regex& cli_regex_secret()
{
static boost::regex regex_expr;
return regex_expr;
}
static std::vector<std::string>& cli_commands() static std::vector<std::string>& cli_commands()
{ {
static std::vector<std::string>* cmds = new std::vector<std::string>(); static std::vector<std::string>* cmds = new std::vector<std::string>();
@ -72,6 +80,11 @@ void cli::set_prompt( const string& prompt )
_prompt = prompt; _prompt = prompt;
} }
void cli::set_regex_secret( const string& expr )
{
cli_regex_secret() = expr;
}
void cli::run() void cli::run()
{ {
while( !_run_complete.canceled() ) while( !_run_complete.canceled() )
@ -87,9 +100,9 @@ void cli::run()
{ {
break; break;
} }
std::cout << line << "\n";
line += char(EOF); line += char(EOF);
fc::variants args = fc::json::variants_from_string(line);; fc::variants args = fc::json::variants_from_string(line);
if( args.size() == 0 ) if( args.size() == 0 )
continue; continue;
@ -190,6 +203,19 @@ static int cli_completion(char *token, char ***array)
return total_matches; return total_matches;
} }
/***
* @brief regex match for secret information
* @param source the incoming text source
* @returns integer 1 in event of regex match for secret information, otherwise 0
*/
static int cli_check_secret(const char *source)
{
if (boost::regex_match(source, cli_regex_secret()))
return 1;
return 0;
}
/*** /***
* @brief Read input from the user * @brief Read input from the user
* @param prompt the prompt to display * @param prompt the prompt to display
@ -213,6 +239,7 @@ void cli::getline( const fc::string& prompt, fc::string& line)
{ {
rl_set_complete_func(my_rl_complete); rl_set_complete_func(my_rl_complete);
rl_set_list_possib_func(cli_completion); rl_set_list_possib_func(cli_completion);
rl_set_check_secret_func(cli_check_secret);
static fc::thread getline_thread("getline"); static fc::thread getline_thread("getline");
getline_thread.async( [&](){ getline_thread.async( [&](){
@ -222,16 +249,7 @@ void cli::getline( const fc::string& prompt, fc::string& line)
if( line_read == nullptr ) if( line_read == nullptr )
FC_THROW_EXCEPTION( fc::eof_exception, "" ); FC_THROW_EXCEPTION( fc::eof_exception, "" );
line = line_read; line = line_read;
try // we don't need here to add line in editline's history, cause it will be doubled
{
if (*line_read)
add_history(line_read);
}
catch(...)
{
free(line_read);
throw;
}
free(line_read); free(line_read);
}).wait(); }).wait();
} }

2
vendor/editline vendored

@ -1 +1 @@
Subproject commit 405f09188868eb69483c2efc55b9837c9ce04494 Subproject commit fbb1f8800adbb70264fa3893dc221f524e25708c