[Web] Fix: spf record validation failed with redirect
When using a redirect in your SPF record, the web UI validation failed when your record contained a ipv6 address. In web/inc/ajax/dns_diagnostics.php the function get_spf_allowed_hosts is called with the second parameter to be true to expand ipv6 addresses. But when called for redirects, the value was not set to true, so it defaulted back to false. This caused an unexpanded ipv6 address to be added to the array and the in_array match for ipv6 never matched as it is always called with expand_ipv6. While looking at the code i noted some messed up in the indention, which is also "fixed" by this commit.master
parent
8a83587800
commit
b39ac8f649
|
@ -24,7 +24,7 @@ function get_spf_allowed_hosts($check_domain, $expand_ipv6 = false) {
|
||||||
$mod = explode('=', $mech);
|
$mod = explode('=', $mech);
|
||||||
if ($mod[0] == 'redirect') // handle a redirect
|
if ($mod[0] == 'redirect') // handle a redirect
|
||||||
{
|
{
|
||||||
$hosts = get_spf_allowed_hosts($mod[1]);
|
$hosts = get_spf_allowed_hosts($mod[1],true);
|
||||||
return $hosts;
|
return $hosts;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,13 +79,13 @@ function get_spf_allowed_hosts($check_domain, $expand_ipv6 = false) {
|
||||||
}
|
}
|
||||||
foreach ($hosts as &$host) {
|
foreach ($hosts as &$host) {
|
||||||
if (filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
|
if (filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
|
||||||
if ($expand_ipv6 === true) {
|
if ($expand_ipv6 === true) {
|
||||||
$hex = unpack("H*hex", inet_pton($host));
|
$hex = unpack("H*hex", inet_pton($host));
|
||||||
$host = substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hex['hex']), 0, -1);
|
$host = substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hex['hex']), 0, -1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$host = $host;
|
$host = $host;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $hosts;
|
return $hosts;
|
||||||
|
|
Loading…
Reference in New Issue