summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2016-01-08 10:59:46 -0200
committerRenato Botelho <renato@netgate.com>2016-01-08 10:59:46 -0200
commitcf68834439b2c1540b6f7d576a863e7e35cfaac9 (patch)
tree51f4eb366a2f766bb06ea981074bcffb751d4602 /src
parentd13a5e7d616cfd2362d9d4ed95ed28f1bd3e8b1e (diff)
downloadpfsense-cf68834439b2c1540b6f7d576a863e7e35cfaac9.zip
pfsense-cf68834439b2c1540b6f7d576a863e7e35cfaac9.tar.gz
Fix reverse DNS zone names on dhcpd conf. It should fix #5041
Diffstat (limited to 'src')
-rw-r--r--src/etc/inc/services.inc36
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])) {
OpenPOWER on IntegriCloud