@ -97,12 +97,6 @@ static bool AppInitRPC(int argc, char* argv[])
UniValue CallRPC ( const string & strMethod , const UniValue & params )
UniValue CallRPC ( const string & strMethod , const UniValue & params )
{
{
if ( mapArgs [ " -rpcuser " ] = = " " & & mapArgs [ " -rpcpassword " ] = = " " )
throw runtime_error ( strprintf (
_ ( " You must set rpcpassword=<password> in the configuration file: \n %s \n "
" If the file does not exist, create it with owner-readable-only file permissions. " ) ,
GetConfigFile ( ) . string ( ) . c_str ( ) ) ) ;
// Connect to localhost
// Connect to localhost
bool fUseSSL = GetBoolArg ( " -rpcssl " , false ) ;
bool fUseSSL = GetBoolArg ( " -rpcssl " , false ) ;
boost : : asio : : io_service io_service ;
boost : : asio : : io_service io_service ;
@ -116,10 +110,24 @@ UniValue CallRPC(const string& strMethod, const UniValue& params)
if ( ! fConnected )
if ( ! fConnected )
throw CConnectionFailed ( " couldn't connect to server " ) ;
throw CConnectionFailed ( " couldn't connect to server " ) ;
// Find credentials to use
std : : string strRPCUserColonPass ;
if ( mapArgs [ " -rpcpassword " ] = = " " ) {
// Try fall back to cookie-based authentication if no password is provided
if ( ! GetAuthCookie ( & strRPCUserColonPass ) ) {
throw runtime_error ( strprintf (
_ ( " You must set rpcpassword=<password> in the configuration file: \n %s \n "
" If the file does not exist, create it with owner-readable-only file permissions. " ) ,
GetConfigFile ( ) . string ( ) . c_str ( ) ) ) ;
}
} else {
strRPCUserColonPass = mapArgs [ " -rpcuser " ] + " : " + mapArgs [ " -rpcpassword " ] ;
}
// HTTP basic authentication
// HTTP basic authentication
string strUserPass64 = EncodeBase64 ( mapArgs [ " -rpcuser " ] + " : " + mapArgs [ " -rpcpassword " ] ) ;
map < string , string > mapRequestHeaders ;
map < string , string > mapRequestHeaders ;
mapRequestHeaders [ " Authorization " ] = string ( " Basic " ) + strUserPass64 ;
mapRequestHeaders [ " Authorization " ] = string ( " Basic " ) + EncodeBase64 ( strRPCUserColonPass ) ;
// Send request
// Send request
string strRequest = JSONRPCRequest ( strMethod , params , 1 ) ;
string strRequest = JSONRPCRequest ( strMethod , params , 1 ) ;