From a6af7cbc2ea6933bc4dc8a76afd2d207b64b80f0 Mon Sep 17 00:00:00 2001 From: andryyy Date: Tue, 26 May 2020 20:04:22 +0200 Subject: [PATCH] [Web] Expand IPv6 addresses for better comparison --- data/web/inc/ajax/dns_diagnostics.php | 11 ++++++++--- data/web/inc/functions.inc.php | 5 +++++ data/web/inc/spf.inc.php | 6 ------ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/data/web/inc/ajax/dns_diagnostics.php b/data/web/inc/ajax/dns_diagnostics.php index 1b4c6ea7..4ee6f92e 100644 --- a/data/web/inc/ajax/dns_diagnostics.php +++ b/data/web/inc/ajax/dns_diagnostics.php @@ -94,7 +94,7 @@ if ($_SESSION['mailcow_cc_role'] == "admin") { $records[] = array( $mailcow_hostname, 'AAAA', - $ip6 + expand_ipv6($ip6) ); $records[] = array( $ptr6, @@ -335,6 +335,11 @@ foreach ($records as $record) { } unset($current); } + elseif ($record[1] == 'AAAA') { + foreach ($currents as &$current) { + $current['ipv6'] = expand_ipv6($current['ipv6']); + } + } } if ($record[1] == 'CNAME' && count($currents) == 0) { @@ -346,8 +351,8 @@ foreach ($records as $record) { $currents = array(array('host' => $record[0], 'class' => 'IN', 'type' => 'CNAME', 'target' => $record[2])); $aaaa = dns_get_record($record[0], DNS_AAAA); $cname = dns_get_record($record[2], DNS_AAAA); - if (count($aaaa) == 0 || count($cname) == 0 || $aaaa[0]['ipv6'] != $cname[0]['ipv6']) { - $currents[0]['target'] = $aaaa[0]['ipv6'] . ' 1'; + if (count($aaaa) == 0 || count($cname) == 0 || expand_ipv6($aaaa[0]['ipv6']) != expand_ipv6($cname[0]['ipv6'])) { + $currents[0]['target'] = expand_ipv6($aaaa[0]['ipv6']) . ' 1'; } } else { diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php index 43639d04..6848a0dd 100644 --- a/data/web/inc/functions.inc.php +++ b/data/web/inc/functions.inc.php @@ -355,6 +355,11 @@ function pem_to_der($pem_key) { unset($lines[0]); return base64_decode(implode('', $lines)); } +function expand_ipv6($ip) { + $hex = unpack("H*hex", inet_pton($ip)); + $ip = substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hex['hex']), 0, -1); + return $ip; +} function generate_tlsa_digest($hostname, $port, $starttls = null) { if (!is_valid_domain_name($hostname)) { return "Not a valid hostname"; diff --git a/data/web/inc/spf.inc.php b/data/web/inc/spf.inc.php index 5e63b38b..bccbbeae 100644 --- a/data/web/inc/spf.inc.php +++ b/data/web/inc/spf.inc.php @@ -1,12 +1,6 @@