From c5bcc7dbe9af7f4124e7c78159fe36eae3a304d4 Mon Sep 17 00:00:00 2001
From: Karl-Johan Alm <karljohan-alm@garage.co.jp>
Date: Wed, 9 May 2018 16:49:59 +0900
Subject: [PATCH] util: warn about recursive -includeconf arguments in
 configuration files

Since -includeconf cannot be used recursively, the user would not see feedback that an -includeconf
in an -includeconf'd file was silently ignored.
---
 src/util.cpp | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/util.cpp b/src/util.cpp
index 7dd6884f7..6a2b2c1ed 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -790,6 +790,14 @@ void ArgsManager::ReadConfigFiles()
                 includeconf.insert(includeconf.end(), includeconf_net.begin(), includeconf_net.end());
             }
 
+            // Remove -includeconf from configuration, so we can warn about recursion
+            // later
+            {
+                LOCK(cs_args);
+                m_config_args.erase("-includeconf");
+                m_config_args.erase(std::string("-") + GetChainName() + ".includeconf");
+            }
+
             for (const std::string& to_include : includeconf) {
                 fs::ifstream include_config(GetConfigFile(to_include));
                 if (include_config.good()) {
@@ -799,6 +807,16 @@ void ArgsManager::ReadConfigFiles()
                     fprintf(stderr, "Failed to include configuration file %s\n", to_include.c_str());
                 }
             }
+
+            // Warn about recursive -includeconf
+            includeconf = GetArgs("-includeconf");
+            {
+                std::vector<std::string> includeconf_net(GetArgs(std::string("-") + GetChainName() + ".includeconf"));
+                includeconf.insert(includeconf.end(), includeconf_net.begin(), includeconf_net.end());
+            }
+            for (const std::string& to_include : includeconf) {
+                fprintf(stderr, "warning: -includeconf cannot be used from included files; ignoring -includeconf=%s\n", to_include.c_str());
+            }
         }
     }