From 579854f5a5c9d00f25320fa4e93d49375ea2c592 Mon Sep 17 00:00:00 2001 From: "Michael Kaufmann (d00p)" Date: Fri, 11 Mar 2016 21:23:26 +0100 Subject: [PATCH] handle the case when gethostbynamel() returns false to act like gethostbyname() in support for multi homed name servers Signed-off-by: Michael Kaufmann (d00p) --- scripts/jobs/cron_tasks.inc.dns.10.bind.php | 24 ++++++++++++--------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/scripts/jobs/cron_tasks.inc.dns.10.bind.php b/scripts/jobs/cron_tasks.inc.dns.10.bind.php index a69f0fd5..bc7e6fe3 100644 --- a/scripts/jobs/cron_tasks.inc.dns.10.bind.php +++ b/scripts/jobs/cron_tasks.inc.dns.10.bind.php @@ -33,19 +33,23 @@ class bind { if (Settings::Get('system.nameservers') != '') { $nameservers = explode(',', Settings::Get('system.nameservers')); foreach ($nameservers as $nameserver) { + $nameserver = trim($nameserver); // DNS servers might be multi homed; allow transfer from all ip // addresses of the DNS server - $nameserver_ips = gethostbynamel(trim($nameserver)); - // ignore invalid responses - if (is_array($nameserver_ips)) { - if (substr($nameserver, -1, 1) != '.') { - $nameserver.= '.'; - } - $this->nameservers[] = array( - 'hostname' => trim($nameserver), - 'ips' => $nameserver_ips - ); + $nameserver_ips = gethostbynamel($nameserver); + // append dot to hostname + if (substr($nameserver, -1, 1) != '.') { + $nameserver.= '.'; } + // ignore invalid responses + if (!is_array($nameserver_ips)) { + // act like gethostbyname() and return unmodified hostname on error + $nameserver_ips = array($nameserver); + } + $this->nameservers[] = array( + 'hostname' => $nameserver, + 'ips' => $nameserver_ips + ); } }