From cf68834439b2c1540b6f7d576a863e7e35cfaac9 Mon Sep 17 00:00:00 2001 From: Renato Botelho Date: Fri, 8 Jan 2016 10:59:46 -0200 Subject: Fix reverse DNS zone names on dhcpd conf. It should fix #5041 --- src/etc/inc/services.inc | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/etc/inc/services.inc b/src/etc/inc/services.inc index 0a1d56a..2e58cce 100644 --- a/src/etc/inc/services.inc +++ b/src/etc/inc/services.inc @@ -659,15 +659,39 @@ EOPP; } else { $newzone['domain-name'] = $config['system']['domain']; } - $revsubnet = explode(".", $subnet); - $revsubnet = array_reverse($revsubnet); - foreach ($revsubnet as $octet) { - if ($octet != "0") { + + $revsubnet = array_reverse(explode('.',$subnet)); + + /* Take care of full classes first */ + switch ($ifcfgsn) { + case 8: + $start_octet = 3; + break; + case 16: + $start_octet = 2; + break; + case 24: + $start_octet = 1; + break; + default: + $start_octet = 0; + /* Add subnet bitmask to first octet */ + $revsubnet[0] .= '-' . $ifcfgsn; break; + + } + + $ptr_domain = ''; + for ($octet = 0; $octet <= 3; $octet++) { + if ($octet < $start_octet) { + continue; } - array_shift($revsubnet); + $ptr_domain .= (empty($ptr_domain) ? '' : '.'); + $ptr_domain .= $revsubnet[$octet]; } - $newzone['ptr-domain'] = implode(".", $revsubnet) . ".in-addr.arpa"; + $ptr_domain .= ".in-addr.arpa"; + $newzone['ptr-domain'] = $ptr_domain; + unset($ptr_domain, $revsubnet, $start_octet); } if (is_array($dhcpifconf['dnsserver']) && ($dhcpifconf['dnsserver'][0])) { -- cgit v1.1