diff options
author | Matthew Wild <mwild1@gmail.com> | 2024-03-27 15:35:15 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2024-03-27 15:35:15 +0000 |
commit | 655c972a7d8410f3bf6dfea72f833de95a576ba6 (patch) | |
tree | 413a0c7f6343258d751d7d67dd319f83947d4581 /util | |
parent | f7b35d516fd0e820e22d7ec1a51c98b456fd3375 (diff) | |
download | prosody-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')
-rw-r--r-- | util/prosodyctl/check.lua | 51 |
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 |