Skip to content

Commit 230652c

Browse files
author
MarcoFalke
committed
Merge #13799: Ignore unknown config file options; warn instead of error
247d574 Ignore unknown config file options for now (Pieter Wuille) 04ce0d8 Report when unknown config file options are ignored (Pieter Wuille) Pull request description: As reported by @satwo on IRC a few days ago, the current mechanism of treating unknown config file options as errors is problematic for options like `-rpcclienttimeout` which aren't defined for `bitcoind`. A full solution would be to either make all binaries be aware of each other's options, or to permit config file options that only apply to specific binaries (`bitcoind`, `bitcoin-qt`, `bitcoin-cli`). Both of these seem too invasive to introduce for 0.17. As a compromise, this PR makes it ignores those options, but still warn about it in the log file. Tree-SHA512: dfddc771b91df3031a9c98d9f3292f8f4fcd1b97ebb7317b2f457e12d9f205dc63f42721302e7258dbb53f273d7cc041a65a0a9120972769555784e1f1cc9aef
2 parents 77168f7 + 247d574 commit 230652c

File tree

4 files changed

+14
-8
lines changed

4 files changed

+14
-8
lines changed

src/bitcoind.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ static bool AppInit(int argc, char* argv[])
9696
fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", gArgs.GetArg("-datadir", "").c_str());
9797
return false;
9898
}
99-
if (!gArgs.ReadConfigFiles(error)) {
99+
if (!gArgs.ReadConfigFiles(error, true)) {
100100
fprintf(stderr, "Error reading configuration file: %s\n", error.c_str());
101101
return false;
102102
}

src/interfaces/node.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class NodeImpl : public Node
5353
{
5454
return gArgs.ParseParameters(argc, argv, error);
5555
}
56-
bool readConfigFiles(std::string& error) override { return gArgs.ReadConfigFiles(error); }
56+
bool readConfigFiles(std::string& error) override { return gArgs.ReadConfigFiles(error, true); }
5757
bool softSetArg(const std::string& arg, const std::string& value) override { return gArgs.SoftSetArg(arg, value); }
5858
bool softSetBoolArg(const std::string& arg, bool value) override { return gArgs.SoftSetBoolArg(arg, value); }
5959
void selectParams(const std::string& network) override { SelectParams(network); }

src/util.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -859,9 +859,13 @@ bool ArgsManager::ReadConfigStream(std::istream& stream, std::string& error, boo
859859
}
860860

861861
// Check that the arg is known
862-
if (!IsArgKnown(strKey) && !ignore_invalid_keys) {
863-
error = strprintf("Invalid configuration value %s", option.first.c_str());
864-
return false;
862+
if (!IsArgKnown(strKey)) {
863+
if (!ignore_invalid_keys) {
864+
error = strprintf("Invalid configuration value %s", option.first.c_str());
865+
return false;
866+
} else {
867+
LogPrintf("Ignoring unknown configuration value %s\n", option.first);
868+
}
865869
}
866870
}
867871
return true;

test/functional/feature_includeconf.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@ def run_test(self):
5555
self.stop_node(0, expected_stderr="warning: -includeconf cannot be used from included files; ignoring -includeconf=relative2.conf")
5656

5757
self.log.info("-includeconf cannot contain invalid arg")
58-
with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "w", encoding="utf8") as f:
59-
f.write("foo=bar\n")
60-
self.nodes[0].assert_start_raises_init_error(expected_msg="Error reading configuration file: Invalid configuration value foo")
58+
59+
# Commented out as long as we ignore invalid arguments in configuration files
60+
#with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "w", encoding="utf8") as f:
61+
# f.write("foo=bar\n")
62+
#self.nodes[0].assert_start_raises_init_error(expected_msg="Error reading configuration file: Invalid configuration value foo")
6163

6264
self.log.info("-includeconf cannot be invalid path")
6365
os.remove(os.path.join(self.options.tmpdir, "node0", "relative.conf"))

0 commit comments

Comments
 (0)