configmanager: nameprep VirtualHost and Component names
authorMatthew Wild <mwild1@gmail.com>
Thu, 31 Jul 2014 05:56:21 +0000 (06:56 +0100)
committerMatthew Wild <mwild1@gmail.com>
Thu, 31 Jul 2014 05:56:21 +0000 (06:56 +0100)
core/configmanager.lua

index d175b54b3efd9feaaaf5e57b27a5dd382fe5498f..c8aa7b9a08c107db23b5a637beb05585e33bb718 100644 (file)
@@ -17,6 +17,9 @@ local envload = require"util.envload".envload;
 local deps = require"util.dependencies";
 local path_sep = package.config:sub(1,1);
 
+local have_encodings, encodings = pcall(require, "util.encodings");
+local nameprep = have_encodings and encodings.stringprep.nameprep or function (host) return host:lower(); end
+
 module "configmanager"
 
 local parsers = {};
@@ -170,6 +173,7 @@ do
                
                rawset(env, "__currenthost", "*") -- Default is global
                function env.VirtualHost(name)
+                       name = nameprep(name);
                        if rawget(config, name) and rawget(config[name], "component_module") then
                                error(format("Host %q clashes with previously defined %s Component %q, for services use a sub-domain like conference.%s",
                                        name, config[name].component_module:gsub("^%a+$", { component = "external", muc = "MUC"}), name, name), 0);
@@ -187,6 +191,7 @@ do
                env.Host, env.host = env.VirtualHost, env.VirtualHost;
                
                function env.Component(name)
+                       name = nameprep(name);
                        if rawget(config, name) and rawget(config[name], "defined") and not rawget(config[name], "component_module") then
                                error(format("Component %q clashes with previously defined Host %q, for services use a sub-domain like conference.%s",
                                        name, name, name), 0);