]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configparser.cpp
Fix being able to see the modes of private/secret channels.
[user/henk/code/inspircd.git] / src / configparser.cpp
index abdf6f3de07e2f0cb58c3f989e750bd6704445e6..0102c910c3bf21c72276d04acb2dc3baa25c50ad 100644 (file)
@@ -1,6 +1,12 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
+ *   Copyright (C) 2018 linuxdaemon <linuxdaemon.irc@gmail.com>
+ *   Copyright (C) 2013-2014, 2016-2020 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2013 ChrisTX <xpipe@hotmail.de>
+ *   Copyright (C) 2012-2014 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2012 Robby <robby@chatbelgie.be>
+ *   Copyright (C) 2010 Craig Edwards <brain@inspircd.org>
  *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
  *
  * This file is part of InspIRCd.  InspIRCd is free software: you can
@@ -394,9 +400,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 +432,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");
        }
@@ -638,9 +666,10 @@ bool ConfigTag::getBool(const std::string &key, bool def)
        if(!readString(key, result))
                return def;
 
-       if (result == "yes" || result == "true" || result == "1" || result == "on")
+       if (stdalgo::string::equalsci(result, "yes") || stdalgo::string::equalsci(result, "true") || stdalgo::string::equalsci(result, "on") || result == "1")
                return true;
-       if (result == "no" || result == "false" || result == "0" || result == "off")
+
+       if (stdalgo::string::equalsci(result, "no") || stdalgo::string::equalsci(result, "false") || stdalgo::string::equalsci(result, "off") || result == "0")
                return false;
 
        ServerInstance->Logs->Log("CONFIG", LOG_DEFAULT, "Value of <" + tag + ":" + key + "> at " + getTagLocation() +