]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configparser.cpp
Skip module tags which don't have a module specified.
[user/henk/code/inspircd.git] / src / configparser.cpp
index 4748fa847a2b7c249fee0bad3c435adc80ea8b54..b68c52cbba60703aab3d9d172de346cf7bf03849 100644 (file)
@@ -36,7 +36,10 @@ enum ParseFlags
        FLAG_NO_EXEC = 2,
 
        // All includes are disabled.
-       FLAG_NO_INC = 4
+       FLAG_NO_INC = 4,
+
+       // &env.FOO; is disabled.
+       FLAG_NO_ENV = 8
 };
 
 // Represents the position within a config file.
@@ -243,9 +246,13 @@ struct Parser
                                }
                                else if (varname.compare(0, 4, "env.") == 0)
                                {
+                                       if (flags & FLAG_NO_ENV)
+                                               throw CoreException("XML environment entity reference in file included with noenv=\"yes\"");
+
                                        const char* envstr = getenv(varname.c_str() + 4);
                                        if (!envstr)
                                                throw CoreException("Undefined XML environment entity reference '&" + varname + ";'");
+
                                        value.append(envstr);
                                }
                                else
@@ -415,6 +422,8 @@ void ParseStack::DoInclude(ConfigTag* tag, int flags)
                        flags |= FLAG_NO_INC;
                if (tag->getBool("noexec", false))
                        flags |= FLAG_NO_EXEC;
+               if (tag->getBool("noenv", false))
+                       flags |= FLAG_NO_ENV;
 
                if (!ParseFile(ServerInstance->Config->Paths.PrependConfig(name), flags, mandatorytag))
                        throw CoreException("Included");
@@ -425,13 +434,15 @@ void ParseStack::DoInclude(ConfigTag* tag, int flags)
                        flags |= FLAG_NO_INC;
                if (tag->getBool("noexec", false))
                        flags |= FLAG_NO_EXEC;
+               if (tag->getBool("noenv", false))
+                       flags |= FLAG_NO_ENV;
 
                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()); 
+               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;
@@ -447,6 +458,8 @@ void ParseStack::DoInclude(ConfigTag* tag, int flags)
                        flags |= FLAG_NO_INC;
                if (tag->getBool("noexec", true))
                        flags |= FLAG_NO_EXEC;
+               if (tag->getBool("noenv", true))
+                       flags |= FLAG_NO_ENV;
 
                if (!ParseFile(name, flags, mandatorytag, true))
                        throw CoreException("Included");