aboutsummaryrefslogtreecommitdiffstats
path: root/config/bind
diff options
context:
space:
mode:
authorStuart Wyatt <stuart@gogglespisano.com>2015-04-09 11:18:00 -0700
committerStuart Wyatt <stuart@gogglespisano.com>2015-04-09 11:18:00 -0700
commit83bbbdc238bd2c72328115bccd5455c67c4bd376 (patch)
tree6b975756ab02b10aaa9622891273ba6caa7a136f /config/bind
parent029a810a52873332daa6f6fbb3a96310978e849d (diff)
downloadpfsense-packages-83bbbdc238bd2c72328115bccd5455c67c4bd376.tar.gz
pfsense-packages-83bbbdc238bd2c72328115bccd5455c67c4bd376.tar.bz2
pfsense-packages-83bbbdc238bd2c72328115bccd5455c67c4bd376.zip
BIND - add support for multiple views per zone configuration
Often a zone configuration can be identical for LAN/local and WAN/pulic views, especially when using NAT reflection. This change allows those zones to only be entered once in the configuration and then applied to both the local and public views. The change converts the zone's 'view' field from a single selection to an array multiple selection. Since an old value of 'local' is the same as an array value with only one element for 'local', this change is backwards compatible with existing configurations. For that reason, I'm leaving the field name as 'view' rather than changing it to 'views' When the zones are being added to the view clause, it will now check to see if the view is in the zone's view list rather than checking to see if it is a simple match before including the zone in the view. By setting the old varible $zoneview to the matching view from the list, the existing code needs very little change.
Diffstat (limited to 'config/bind')
-rw-r--r--config/bind/bind.inc11
-rw-r--r--config/bind/bind_zones.xml4
2 files changed, 10 insertions, 5 deletions
diff --git a/config/bind/bind.inc b/config/bind/bind.inc
index 4d579689..d5af73b6 100644
--- a/config/bind/bind.inc
+++ b/config/bind/bind.inc
@@ -346,7 +346,7 @@ EOD;
$custom_root_zone = true;
}
$zonetype = $zone['type'];
- $zoneview = $zone['view'];
+ $zoneviewlist = explode(',', $zone['view']);
$zonecustom = base64_decode($zone['custom']);
$zoneipslave = $zone['slaveip'];
$zoneforwarders = $zone['forwarders'];
@@ -358,8 +358,10 @@ EOD;
// Ensure zone view folder exists
if ($zonetype != "forward") {
- if (!(is_dir(CHROOT_LOCALBASE."/etc/namedb/$zonetype/$zoneview"))) {
- mkdir(CHROOT_LOCALBASE."/etc/namedb/$zonetype/$zoneview", 0755, true);
+ foreach ($zoneviewlist as $zoneview) {
+ if (!(is_dir(CHROOT_LOCALBASE."/etc/namedb/$zonetype/$zoneview"))) {
+ mkdir(CHROOT_LOCALBASE."/etc/namedb/$zonetype/$zoneview", 0755, true);
+ }
}
}
@@ -383,7 +385,8 @@ EOD;
$zoneallowtransfer = str_replace(',', '; ', $zone['allowtransfer']);
}
- if ($zoneview == $viewname) {
+ if (in_array($viewname, $zoneviewlist)) {
+ $zoneview = $viewname;
// Add zone name
if ($zonereverso == "on") {
if ($zonereversv6o == "on") {
diff --git a/config/bind/bind_zones.xml b/config/bind/bind_zones.xml
index 667fd608..17af9538 100644
--- a/config/bind/bind_zones.xml
+++ b/config/bind/bind_zones.xml
@@ -154,11 +154,13 @@
<field>
<fielddescr>View</fielddescr>
<fieldname>view</fieldname>
- <description><![CDATA[Select the View that this zone will belong.]]></description>
+ <description><![CDATA[Select(CTRL+click) views that this zone will belong.]]></description>
<type>select_source</type>
<source><![CDATA[$config['installedpackages']['bindviews']['config']]]></source>
<source_name>name</source_name>
<source_value>name</source_value>
+ <multiple/>
+ <size>02</size>
</field>
<field>
<fielddescr>Reverse Zone</fielddescr>