diff options
author | Stuart Wyatt <stuart@gogglespisano.com> | 2015-04-09 11:18:00 -0700 |
---|---|---|
committer | Stuart Wyatt <stuart@gogglespisano.com> | 2015-04-09 11:18:00 -0700 |
commit | 83bbbdc238bd2c72328115bccd5455c67c4bd376 (patch) | |
tree | 6b975756ab02b10aaa9622891273ba6caa7a136f /config/bind/bind.inc | |
parent | 029a810a52873332daa6f6fbb3a96310978e849d (diff) | |
download | pfsense-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/bind.inc')
-rw-r--r-- | config/bind/bind.inc | 11 |
1 files changed, 7 insertions, 4 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") { |