mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-08-04 14:04:49 +02:00
fix: increase consistency of rpcauth parsing
Previous rpcauth behavior was to sometimes ignore empty -rpcauth= settings, and other times treat them as errors. Empty rpcauth is now consistently treated as an error and prevents bitcoind from starting. Updates associated test cases. Also updates to non-deprecated logging macro. Co-Authored-By: Luke Dashjr <luke-jr+git@utopios.org> Co-Authored-By: Ryan Ofsky <ryan@ofsky.org>
This commit is contained in:
parent
2ad3689512
commit
27c976d11a
@ -314,8 +314,9 @@ static bool InitRPCAuthentication()
|
|||||||
LogPrintf("Config options rpcuser and rpcpassword will soon be deprecated. Locally-run instances may remove rpcuser to use cookie-based auth, or may be replaced with rpcauth. Please see share/rpcauth for rpcauth auth generation.\n");
|
LogPrintf("Config options rpcuser and rpcpassword will soon be deprecated. Locally-run instances may remove rpcuser to use cookie-based auth, or may be replaced with rpcauth. Please see share/rpcauth for rpcauth auth generation.\n");
|
||||||
strRPCUserColonPass = gArgs.GetArg("-rpcuser", "") + ":" + gArgs.GetArg("-rpcpassword", "");
|
strRPCUserColonPass = gArgs.GetArg("-rpcuser", "") + ":" + gArgs.GetArg("-rpcpassword", "");
|
||||||
}
|
}
|
||||||
if (gArgs.GetArg("-rpcauth", "") != "") {
|
|
||||||
LogPrintf("Using rpcauth authentication.\n");
|
if (!gArgs.GetArgs("-rpcauth").empty()) {
|
||||||
|
LogInfo("Using rpcauth authentication.\n");
|
||||||
for (const std::string& rpcauth : gArgs.GetArgs("-rpcauth")) {
|
for (const std::string& rpcauth : gArgs.GetArgs("-rpcauth")) {
|
||||||
std::vector<std::string> fields{SplitString(rpcauth, ':')};
|
std::vector<std::string> fields{SplitString(rpcauth, ':')};
|
||||||
const std::vector<std::string> salt_hmac{SplitString(fields.back(), '$')};
|
const std::vector<std::string> salt_hmac{SplitString(fields.back(), '$')};
|
||||||
|
@ -139,11 +139,12 @@ class HTTPBasicsTest(BitcoinTestFramework):
|
|||||||
init_error = 'Error: Unable to start HTTP server. See debug log for details.'
|
init_error = 'Error: Unable to start HTTP server. See debug log for details.'
|
||||||
|
|
||||||
self.log.info('Check -rpcauth are validated')
|
self.log.info('Check -rpcauth are validated')
|
||||||
self.log.info('Empty -rpcauth are ignored')
|
self.log.info('Empty -rpcauth are treated as error')
|
||||||
self.restart_node(0, extra_args=['-rpcauth'])
|
|
||||||
self.restart_node(0, extra_args=['-rpcauth='])
|
|
||||||
self.stop_node(0)
|
self.stop_node(0)
|
||||||
|
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth'])
|
||||||
|
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth='])
|
||||||
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=""'])
|
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=""'])
|
||||||
|
self.log.info('Check malformed -rpcauth')
|
||||||
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=foo'])
|
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=foo'])
|
||||||
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=foo:bar'])
|
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=foo:bar'])
|
||||||
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=foo:bar:baz'])
|
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=foo:bar:baz'])
|
||||||
@ -154,8 +155,7 @@ class HTTPBasicsTest(BitcoinTestFramework):
|
|||||||
# pw = bitcoin
|
# pw = bitcoin
|
||||||
rpcauth_user1 = '-rpcauth=user1:6dd184e5e69271fdd69103464630014f$eb3d7ce67c4d1ff3564270519b03b636c0291012692a5fa3dd1d2075daedd07b'
|
rpcauth_user1 = '-rpcauth=user1:6dd184e5e69271fdd69103464630014f$eb3d7ce67c4d1ff3564270519b03b636c0291012692a5fa3dd1d2075daedd07b'
|
||||||
rpcauth_user2 = '-rpcauth=user2:57b2f77c919eece63cfa46c2f06e46ae$266b63902f99f97eeaab882d4a87f8667ab84435c3799f2ce042ef5a994d620b'
|
rpcauth_user2 = '-rpcauth=user2:57b2f77c919eece63cfa46c2f06e46ae$266b63902f99f97eeaab882d4a87f8667ab84435c3799f2ce042ef5a994d620b'
|
||||||
self.restart_node(0, extra_args=[rpcauth_user1, rpcauth_user2, '-rpcauth=']) # fixed in subsequent commit
|
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=[rpcauth_user1, rpcauth_user2, '-rpcauth='])
|
||||||
self.stop_node(0)
|
|
||||||
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=[rpcauth_user1, '-rpcauth=', rpcauth_user2])
|
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=[rpcauth_user1, '-rpcauth=', rpcauth_user2])
|
||||||
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=', rpcauth_user1, rpcauth_user2])
|
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=', rpcauth_user1, rpcauth_user2])
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user