diff options
author | Renato Botelho <renato@netgate.com> | 2016-01-08 10:59:46 -0200 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2016-01-08 10:59:46 -0200 |
commit | cf68834439b2c1540b6f7d576a863e7e35cfaac9 (patch) | |
tree | 51f4eb366a2f766bb06ea981074bcffb751d4602 | |
parent | d13a5e7d616cfd2362d9d4ed95ed28f1bd3e8b1e (diff) | |
download | pfsense-cf68834439b2c1540b6f7d576a863e7e35cfaac9.zip pfsense-cf68834439b2c1540b6f7d576a863e7e35cfaac9.tar.gz |
Fix reverse DNS zone names on dhcpd conf. It should fix #5041
-rw-r--r-- | src/etc/inc/services.inc | 36 |
1 files 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])) { |