summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/conf/inspircd.conf.example1
-rw-r--r--src/configparser.cpp22
2 files changed, 23 insertions, 0 deletions
diff --git a/docs/conf/inspircd.conf.example b/docs/conf/inspircd.conf.example
index f421eb0e8..62e0867aa 100644
--- a/docs/conf/inspircd.conf.example
+++ b/docs/conf/inspircd.conf.example
@@ -59,6 +59,7 @@
# #
# Syntax is as follows: #
#<include file="file.conf"> #
+#<include directory="modules"> #
#<include executable="/path/to/executable parameters"> #
# #
# Executable include example: #
diff --git a/src/configparser.cpp b/src/configparser.cpp
index abdf6f3de..b965bc015 100644
--- a/src/configparser.cpp
+++ b/src/configparser.cpp
@@ -394,9 +394,30 @@ void ParseStack::DoInclude(ConfigTag* tag, int flags)
flags |= FLAG_NO_INC;
if (tag->getBool("noexec", false))
flags |= FLAG_NO_EXEC;
+
if (!ParseFile(ServerInstance->Config->Paths.PrependConfig(name), flags, mandatorytag))
throw CoreException("Included");
}
+ else if (tag->readString("directory", name))
+ {
+ if (tag->getBool("noinclude", false))
+ flags |= FLAG_NO_INC;
+ if (tag->getBool("noexec", false))
+ flags |= FLAG_NO_EXEC;
+
+ const std::string includedir = ServerInstance->Config->Paths.PrependConfig(name);
+ std::vector<std::string> files;
+ if (!FileSystem::GetFileList(includedir, files, "*.conf"))
+ throw CoreException("Unable to read directory for include: " + includedir);
+
+ std::sort(files.begin(), files.end());
+ for (std::vector<std::string>::const_iterator iter = files.begin(); iter != files.end(); ++iter)
+ {
+ const std::string path = includedir + '/' + *iter;
+ if (!ParseFile(path, flags, mandatorytag))
+ throw CoreException("Included");
+ }
+ }
else if (tag->readString("executable", name))
{
if (flags & FLAG_NO_EXEC)
@@ -405,6 +426,7 @@ void ParseStack::DoInclude(ConfigTag* tag, int flags)
flags |= FLAG_NO_INC;
if (tag->getBool("noexec", true))
flags |= FLAG_NO_EXEC;
+
if (!ParseFile(name, flags, mandatorytag, true))
throw CoreException("Included");
}