From 26522d212b4b84ae4cbbdde8c7ab0ff55577a591 Mon Sep 17 00:00:00 2001 From: Alfredo Garcia Date: Wed, 24 Jun 2020 12:21:25 -0300 Subject: [PATCH 1/2] only allow duplicates for certain options of the config --- src/util.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/util.cpp b/src/util.cpp index 82d705ea8..5d88aba88 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -627,10 +627,21 @@ void ReadConfigFile(const std::string& confPath, set setOptions; setOptions.insert("*"); + const vector allowed_duplicates = {"addnode", "connect", "rpcallowip"}; + set unique_options; + for (boost::program_options::detail::config_file_iterator it(streamConfig, setOptions), end; it != end; ++it) { string strKey = string("-") + it->string_key; string strValue = it->value[0]; + + if (find(allowed_duplicates.begin(), allowed_duplicates.end(), it->string_key) == allowed_duplicates.end()) + { + if (!unique_options.insert(strKey).second) { + throw std::runtime_error(strprintf("Not allowed duplicated option %s found.", strKey)); + } + } + InterpretNegativeSetting(strKey, strValue); // Don't overwrite existing settings so command line settings override zcash.conf if (mapSettingsRet.count(strKey) == 0) From 6abcf40a3e1c0c557a89d315d9e20cd8bfa089a2 Mon Sep 17 00:00:00 2001 From: Alfredo Garcia Date: Wed, 29 Jul 2020 08:45:02 -0300 Subject: [PATCH 2/2] add more allowed duplicates Co-authored-by: Daira Hopwood --- src/util.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index 5d88aba88..ef2ae9b74 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -627,7 +627,23 @@ void ReadConfigFile(const std::string& confPath, set setOptions; setOptions.insert("*"); - const vector allowed_duplicates = {"addnode", "connect", "rpcallowip"}; + const vector allowed_duplicates = { + "addnode", + "bind", + "connect", + "debug", + "externalip", + "fundingstream", + "loadblock", + "onlynet", + "rpcallowip", + "rpcauth", + "rpcbind", + "seednode", + "uacomment", + "whitebind", + "whitelist" + }; set unique_options; for (boost::program_options::detail::config_file_iterator it(streamConfig, setOptions), end; it != end; ++it) @@ -638,7 +654,7 @@ void ReadConfigFile(const std::string& confPath, if (find(allowed_duplicates.begin(), allowed_duplicates.end(), it->string_key) == allowed_duplicates.end()) { if (!unique_options.insert(strKey).second) { - throw std::runtime_error(strprintf("Not allowed duplicated option %s found.", strKey)); + throw std::runtime_error(strprintf("Option '%s' is duplicated, which is not allowed.", strKey)); } }