aboutsummaryrefslogtreecommitdiffstats
path: root/util/prosodyctl
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2024-03-27 15:35:15 +0000
committerMatthew Wild <mwild1@gmail.com>2024-03-27 15:35:15 +0000
commit655c972a7d8410f3bf6dfea72f833de95a576ba6 (patch)
tree413a0c7f6343258d751d7d67dd319f83947d4581 /util/prosodyctl
parentf7b35d516fd0e820e22d7ec1a51c98b456fd3375 (diff)
downloadprosody-655c972a7d8410f3bf6dfea72f833de95a576ba6.tar.gz
prosody-655c972a7d8410f3bf6dfea72f833de95a576ba6.zip
prosodyctl check: Warn about invalid domain names in the config file
This ensures that domain names of virtual hosts and components are valid in XMPP, and that they are encoded correctly.
Diffstat (limited to 'util/prosodyctl')
-rw-r--r--util/prosodyctl/check.lua51
1 files changed, 51 insertions, 0 deletions
diff --git a/util/prosodyctl/check.lua b/util/prosodyctl/check.lua
index 5de8e3a6..9d460158 100644
--- a/util/prosodyctl/check.lua
+++ b/util/prosodyctl/check.lua
@@ -738,6 +738,57 @@ local function check(arg)
end
end
+ -- Check hostname validity
+ do
+ local idna = require "util.encodings".idna;
+ local invalid_hosts = {};
+ local alabel_hosts = {};
+ for host in it.filter("*", pairs(configmanager.getconfig())) do
+ local _, h, _ = jid_split(host);
+ if not h or not idna.to_ascii(h) then
+ table.insert(invalid_hosts, host);
+ else
+ for label in h:gmatch("[^%.]+") do
+ if label:match("^xn%-%-") then
+ table.insert(alabel_hosts, host);
+ break;
+ end
+ end
+ end
+ end
+
+ if #invalid_hosts > 0 then
+ table.sort(invalid_hosts);
+ print("");
+ print(" Your configuration contains invalid host names:");
+ print(" "..table.concat(invalid_hosts, "\n "));
+ print("");
+ print(" Clients may not be able to log in to these hosts, or you may not be able to");
+ print(" communicate with remote servers.");
+ print(" Use a valid domain name to correct this issue.");
+ end
+
+ if #alabel_hosts > 0 then
+ table.sort(alabel_hosts);
+ print("");
+ print(" Your configuration contains incorrectly-encoded hostnames:");
+ for _, ahost in ipairs(alabel_hosts) do
+ print((" '%s' (should be '%s')"):format(ahost, idna.to_unicode(ahost)));
+ end
+ print("");
+ print(" Clients may not be able to log in to these hosts, or you may not be able to");
+ print(" communicate with remote servers.");
+ print(" To correct this issue, use the Unicode version of the domain in Prosody's config file.");
+ end
+
+ if #invalid_hosts > 0 or #alabel_hosts > 0 then
+ print("");
+ print("WARNING: Changing the name of a VirtualHost in Prosody's config file");
+ print(" WILL NOT migrate any existing data (user accounts, etc.) to the new name.");
+ ok = false;
+ end
+ end
+
print("Done.\n");
end
if not what or what == "dns" then