diff --git a/scripts/pi-hole/js/db_queries.js b/scripts/pi-hole/js/db_queries.js index a550f6d30..6fe714dd5 100644 --- a/scripts/pi-hole/js/db_queries.js +++ b/scripts/pi-hole/js/db_queries.js @@ -378,6 +378,9 @@ $(function () { } // Substitute domain by "." if empty + // This was introduced by https://github.com/pi-hole/AdminLTE/pull/1244 but is considered obsolete since + // https://github.com/pi-hole/FTL/pull/1413. However, we keep the conversion here to keep user's + // statistic accurat when they import older data with empty domain fields var domain = data[2]; if (domain.length === 0) { domain = "."; diff --git a/scripts/pi-hole/js/index.js b/scripts/pi-hole/js/index.js index b92aa47da..e2adc112b 100644 --- a/scripts/pi-hole/js/index.js +++ b/scripts/pi-hole/js/index.js @@ -703,7 +703,7 @@ function updateTopLists() { $("#ad-frequency td").parent().remove(); var domaintable = $("#domain-frequency").find("tbody:last"); var adtable = $("#ad-frequency").find("tbody:last"); - var url, domain, percentage, urlText; + var url, domain, percentage; for (domain in data.top_queries) { if (Object.prototype.hasOwnProperty.call(data.top_queries, domain)) { // Sanitize domain @@ -713,8 +713,7 @@ function updateTopLists() { } domain = utils.escapeHtml(domain); - urlText = domain === "" ? "." : domain; - url = '' + urlText + ""; + url = '' + domain + ""; percentage = (data.top_queries[domain] / data.dns_queries_today) * 100; domaintable.append( " " + @@ -740,8 +739,7 @@ function updateTopLists() { } domain = utils.escapeHtml(domain); - urlText = domain === "" ? "." : domain; - url = '' + urlText + ""; + url = '' + domain + ""; percentage = (data.top_ads[domain] / data.ads_blocked_today) * 100; adtable.append( " " + diff --git a/scripts/pi-hole/js/queries.js b/scripts/pi-hole/js/queries.js index 18f09d729..19d883268 100644 --- a/scripts/pi-hole/js/queries.js +++ b/scripts/pi-hole/js/queries.js @@ -262,12 +262,7 @@ $(function () { $("td:eq(4)", row).addClass("text-underline pointer"); } - // Substitute domain by "." if empty var domain = data[2]; - if (domain.length === 0) { - domain = "."; - } - if (isCNAME) { var CNAMEDomain = data[8]; // Add domain in CNAME chain causing the query to have been blocked diff --git a/scripts/pi-hole/php/func.php b/scripts/pi-hole/php/func.php index bb59611a9..76a19cd8b 100644 --- a/scripts/pi-hole/php/func.php +++ b/scripts/pi-hole/php/func.php @@ -12,6 +12,11 @@ ini_set('pcre.recursion_limit', 1500); function validDomain($domain_name, &$message = null) { + // special handling of the root zone `.` + if ($domain_name == '.') { + return true; + } + if (!preg_match('/^((-|_)*[a-z\\d]((-|_)*[a-z\\d])*(-|_)*)(\\.(-|_)*([a-z\\d]((-|_)*[a-z\\d])*))*$/i', $domain_name)) { if ($message !== null) { $message = 'it contains invalid characters'; diff --git a/scripts/pi-hole/php/groups.php b/scripts/pi-hole/php/groups.php index 7dc02cd94..8ba2552d6 100644 --- a/scripts/pi-hole/php/groups.php +++ b/scripts/pi-hole/php/groups.php @@ -510,11 +510,14 @@ function verify_ID_array($arr) $res['groups'] = $groups; if ($res['type'] === ListType::whitelist || $res['type'] === ListType::blacklist) { // Convert domain name to international form - $utf8_domain = convertIDNAToUnicode($res['domain']); + // Skip this for the root zone `.` + if ($res['domain'] != '.') { + $utf8_domain = convertIDNAToUnicode($res['domain']); - // if domain and international form are different, show both - if ($res['domain'] !== $utf8_domain) { - $res['domain'] = $utf8_domain.' ('.$res['domain'].')'; + // if domain and international form are different, show both + if ($res['domain'] !== $utf8_domain) { + $res['domain'] = $utf8_domain.' ('.$res['domain'].')'; + } } } // Prevent domain and comment fields from returning any arbitrary javascript code which could be executed on the browser. @@ -595,8 +598,10 @@ function verify_ID_array($arr) $input = $domain; // Convert domain name to IDNA ASCII form for international domains - $domain = convertUnicodeToIDNA($domain); - + // Skip this for the root zone `.` + if ($domain != '.') { + $domain = convertUnicodeToIDNA($domain); + } if ($_POST['type'] != '2' && $_POST['type'] != '3') { // If not adding a RegEx, we convert the domain lower case and check whether it is valid $domain = strtolower($domain);