add ipv6 support for resolving nameserver-hostnames
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
@@ -36,7 +36,7 @@ if ($userinfo['change_serversettings'] == '1') {
|
|||||||
$nameservers = explode(',', Settings::Get('system.nameservers'));
|
$nameservers = explode(',', Settings::Get('system.nameservers'));
|
||||||
foreach ($nameservers as $nameserver) {
|
foreach ($nameservers as $nameserver) {
|
||||||
$nameserver = trim($nameserver);
|
$nameserver = trim($nameserver);
|
||||||
$nameserver_ips = gethostbynamel($nameserver);
|
$nameserver_ips = gethostbynamel6($nameserver);
|
||||||
if (is_array($nameserver_ips) && count($nameserver_ips) > 0) {
|
if (is_array($nameserver_ips) && count($nameserver_ips) > 0) {
|
||||||
$ns_ips .= implode(",", $nameserver_ips);
|
$ns_ips .= implode(",", $nameserver_ips);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -399,7 +399,7 @@ class Action
|
|||||||
$nameservers = explode(',', Settings::Get('system.nameservers'));
|
$nameservers = explode(',', Settings::Get('system.nameservers'));
|
||||||
foreach ($nameservers as $nameserver) {
|
foreach ($nameservers as $nameserver) {
|
||||||
$nameserver = trim($nameserver);
|
$nameserver = trim($nameserver);
|
||||||
$nameserver_ips = gethostbynamel($nameserver);
|
$nameserver_ips = gethostbynamel6($nameserver);
|
||||||
if (is_array($nameserver_ips) && count($nameserver_ips) > 0) {
|
if (is_array($nameserver_ips) && count($nameserver_ips) > 0) {
|
||||||
$ns_ips .= implode(",", $nameserver_ips);
|
$ns_ips .= implode(",", $nameserver_ips);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -293,7 +293,7 @@ class EmailAccounts extends ApiCommand implements ResourceEntity
|
|||||||
* @param string $email_password
|
* @param string $email_password
|
||||||
* optional, update password
|
* optional, update password
|
||||||
*
|
*
|
||||||
* @access admin,customer
|
* @access admin, customer
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
@@ -405,7 +405,7 @@ class EmailAccounts extends ApiCommand implements ResourceEntity
|
|||||||
* @param bool $delete_userfiles
|
* @param bool $delete_userfiles
|
||||||
* optional, default false
|
* optional, default false
|
||||||
*
|
*
|
||||||
* @access admin,customer
|
* @access admin, customer
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
|||||||
33
lib/functions/phphelpers/function.gethostbynamel6.php
Normal file
33
lib/functions/phphelpers/function.gethostbynamel6.php
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ipv6 aware gethostbynamel function
|
||||||
|
*
|
||||||
|
* @param string $host
|
||||||
|
* @param boolean $try_a default true
|
||||||
|
* @return boolean|array
|
||||||
|
*/
|
||||||
|
function gethostbynamel6($host, $try_a = true)
|
||||||
|
{
|
||||||
|
$dns6 = dns_get_record($host, DNS_AAAA);
|
||||||
|
if ($try_a == true) {
|
||||||
|
$dns4 = dns_get_record($host, DNS_A);
|
||||||
|
$dns = array_merge($dns4, $dns6);
|
||||||
|
} else {
|
||||||
|
$dns = $dns6;
|
||||||
|
}
|
||||||
|
$ips = array();
|
||||||
|
foreach ($dns as $record) {
|
||||||
|
if ($record["type"] == "A") {
|
||||||
|
$ips[] = $record["ip"];
|
||||||
|
}
|
||||||
|
if ($record["type"] == "AAAA") {
|
||||||
|
$ips[] = $record["ipv6"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count($ips) < 1) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return $ips;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -43,14 +43,14 @@ abstract class DnsBase
|
|||||||
$nameserver = trim($nameserver);
|
$nameserver = trim($nameserver);
|
||||||
// DNS servers might be multi homed; allow transfer from all ip
|
// DNS servers might be multi homed; allow transfer from all ip
|
||||||
// addresses of the DNS server
|
// addresses of the DNS server
|
||||||
$nameserver_ips = gethostbynamel($nameserver);
|
$nameserver_ips = gethostbynamel6($nameserver);
|
||||||
// append dot to hostname
|
// append dot to hostname
|
||||||
if (substr($nameserver, - 1, 1) != '.') {
|
if (substr($nameserver, - 1, 1) != '.') {
|
||||||
$nameserver .= '.';
|
$nameserver .= '.';
|
||||||
}
|
}
|
||||||
// ignore invalid responses
|
// ignore invalid responses
|
||||||
if (! is_array($nameserver_ips)) {
|
if (! is_array($nameserver_ips)) {
|
||||||
// act like gethostbyname() and return unmodified hostname on error
|
// act like gethostbynamel6() and return unmodified hostname on error
|
||||||
$nameserver_ips = array(
|
$nameserver_ips = array(
|
||||||
$nameserver
|
$nameserver
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user