From 8df132a0bfa81b5b8564236d13bfce76c2aabd76 Mon Sep 17 00:00:00 2001 From: Blackyfff Date: Mon, 30 Aug 2021 03:10:13 +0200 Subject: [PATCH] Refactoring; Fix: PTR for @-hostname; Fix: symbolic link loop Signed-off-by: Blackyfff --- usr/lib/ffdns/dns-functions.sh | 6 +- usr/lib/ffdns/update-dns-functions.sh | 136 +++++++++++++++++++++++ usr/lib/ffdns/update-dns.sh | 151 ++++---------------------- 3 files changed, 164 insertions(+), 129 deletions(-) create mode 100755 usr/lib/ffdns/update-dns-functions.sh diff --git a/usr/lib/ffdns/dns-functions.sh b/usr/lib/ffdns/dns-functions.sh index e8f3573..bbad2c6 100755 --- a/usr/lib/ffdns/dns-functions.sh +++ b/usr/lib/ffdns/dns-functions.sh @@ -118,7 +118,11 @@ GetReverseDomains() { } ExpandHostname() { Hostname="$1" - [ -n "${Hostname##*.}" ] && Hostname="$Hostname"".""$2" + if [ "$Hostname" = "@" ]; then + Hostname="$2" + else + [ -n "${Hostname##*.}" ] && Hostname="$Hostname"".""$2" + fi echo "$Hostname" } SEDifyHostname() { diff --git a/usr/lib/ffdns/update-dns-functions.sh b/usr/lib/ffdns/update-dns-functions.sh new file mode 100755 index 0000000..beed12d --- /dev/null +++ b/usr/lib/ffdns/update-dns-functions.sh @@ -0,0 +1,136 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-3.0 +# +# freifunk-franken dns-scipts (c) 2021 Blackyfff + +SetupCache() { + mkdir -p "$TempFolder""cache" + + for IView in $InternalViews; do + rm -f "$TempFolder""$IView"".conf" + done + rm -f "$TempFolder""$ExternalView"".conf" +} +GetMasterFile() { + curl -s -S -f "$RemoteLocation""db.""$MasterDomain" --output "$CachedMasterFile" && \ + [ -f "$CachedMasterFile" ] && \ + { + echo "" + echo "_dnsscript_version IN TXT ""$DNSSCRIPT_VERSION" | NormalizeZoneFileFormatting + } >> "$CachedMasterFile" || : + if [ ! -f "$CachedMasterFile" ]; then + cp "$ZoneFilesFolder""db.""$FirstInternalView"".""$MasterDomain" "$CachedMasterFile" + sed -i -e '/^_dnsscript_version.*/,$d' "$CachedMasterFile" + echo "_dnsscript_version IN TXT ""$DNSSCRIPT_VERSION" | NormalizeZoneFileFormatting >> "$CachedMasterFile" + fi +} +DoServeMasterZone() { + [ -n "$SubCommunityDomain" ] || \ + GetAllZoneNameservers "$MasterDomain" "$CachedMasterFile" | \ + awk '{for(i=NF;i>0;--i) if($i=="'"$DNSSCRIPT_SERVER_NAME"'") {printf 1}}' +} +DoServeOnlyExternZone() { + if [ -n "$MasterExternDomain" ] && [ -z "$ServeMasterZone" ]; then + GetAllSubNameservers "$CommunityDomain" "$CommunityExternPrefix" "$CachedMasterFile" | \ + awk '{for(i=NF;i>0;--i) if($i=="'"$DNSSCRIPT_SERVER_NAME"'") {printf 1}}' + fi +} +RemoveDNSSECKeysFromCacheFile() { + sed -i -e '/^\s*_dnsseckeys\./d' "$CachedMasterFile" +} +UpdateMasterZone() { + LocalMasterSerial=$((PostFetchMasterSerial)) + if [ -n "$ServeMasterZone" ]; then + ZoneTempFolder="$TempFolder""cache/""$MasterDomain""/" + + UpdateMaster="$(UpdateDNSSECEntryCache "$MasterDomain" "$ZoneTempFolder" "$CachedMasterFile" "$DNSSECKeyFolder")" + if [ $((PostFetchMasterSerial)) -gt $((PreFetchMasterSerial)) ] || [ $UpdateMaster -ne 0 ]; then + cp -f "$CachedMasterFile" "$CachedMasterFile""I" + for KeyFile in "$ZoneTempFolder"*; do + [ "$KeyFile" = "$ZoneTempFolder""*" ] || \ + cat "$KeyFile" >> "$CachedMasterFile""I" + done + LocalMasterSerial="$(GetZoneFileSerial "$MasterFile")" + + if [ $((PostFetchMasterSerial)) -le $((LocalMasterSerial)) ]; then + LocalMasterSerial=$((LocalMasterSerial+1)) + sed -i -e 's/^\(\s*\)'"$PostFetchMasterSerial"'\(\s*;\s*[Ss]erial.*\)$/\1'"$LocalMasterSerial"'\3/g' "$CachedMasterFile""I" + sed -i -e 's/^\(\s*\S\+\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Ss][Oo][Aa]\s\+\S\+\s\+\S\+\s\+\)'"$PostFetchMasterSerial"'\(\s\+.*\)$/\1'"$LocalMasterSerial"'\3/g' "$CachedMasterFile""I" + else + LocalMasterSerial=$((PostFetchMasterSerial)) + fi + mv "$CachedMasterFile""I" "$MasterFile" + ReloadZone "$MasterDomain" "$InternalViews" "$ZoneFilesFolder" + + fi + InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "$MasterDomain" "$MasterFile" "$TempFolder" "$DNSSECPolicy" + if [ -n "$ExternalView" ]; then + InsertZoneToIncludeFile "$MasterDomain" "$ExternFile" "$TempFolder""$ExternalView"".conf" "$DNSSECPolicy" + fi + fi + + echo "$LocalMasterSerial" +} +UpdateExternal() { + CachedZoneFile="$TempFolder""cache/db.""$InternalDomain""E" + + UpdateExternView=0 + if [ -n "$ExternalView" ] || [ -n "$ExternDomain" ]; then + SerialExtern="$(GetZoneFileSerial "$ExternalZoneFile")" + if [ $((SerialIntern)) -gt $((SerialExtern)) ]; then + sed -e '/^[^;]*\s\(10\.\|[fF][cdCD][0-9a-fA-F]\{2\}:\)\S*\s*\(;.*\)\?$/d;s/^[^;^@]*\s\+\([^;]*\)\s[Ii][Nn]\s\+[Ss][Oo][Aa]\s/@ \1 IN SOA /g' "$InternalZoneFile" \ + > "$ExternalZoneFile" + UpdateExternView=1 + ReloadZone "$InternalDomain" "$ExternalView" "$ZoneFilesFolder" + fi + fi + + if [ -n "$ExternDomain" ]; then + ExtDomainFile="$ZoneFilesFolder""db.""$FirstInternalView"".""$ExternDomain" + ZoneTempFolder="$TempFolder""cache/""$ExternDomain""/" + cp -f "$ExternalZoneFile" "$CachedZoneFile" + [ -z "$DNSSECKeyFolder" ] || sed -i -e '/^\s*_dnsseckeys\./d' "$CachedZoneFile" + [ -n "$(sed -e '/^\s*\(@\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Nn][Ss]\)\s/!d' "$CachedZoneFile")" ] || \ + sed -i -e 's/^\s*\(@\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Ss][Oo][Aa]\)\s\+\S\+\s\+\S\+\s/\1 '"$DNSSCRIPT_SERVER_NAME"'. '"$DNSSCRIPT_CONTACT_EMAIL"' /g' "$CachedZoneFile" + + sed -i -e 's/^\s*'"$CommunityExternPrefix"'\s/@ /g;/^\s*\(@\|\S\+\.\)\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Dd][Ss]\s/d' "$CachedZoneFile" + + UpdateExternDomain="$(UpdateDNSSECEntryCache "$ExternDomain" "$ZoneTempFolder" "$CachedZoneFile" "$DNSSECKeyFolder")" + if [ $UpdateExternView -ne 0 ] || [ $UpdateExternDomain -ne 0 ]; then + for KeyFile in "$ZoneTempFolder"*; do + [ "$KeyFile" = "$ZoneTempFolder""*" ] || \ + cat "$KeyFile" >> "$CachedZoneFile" + done + LocalExtDomainMasterSerial="$(GetZoneFileSerial "$ExtDomainFile")" + + if [ $((SerialIntern)) -le $((LocalExtDomainMasterSerial)) ]; then + LocalExtDomainMasterSerial=$((LocalExtDomainMasterSerial+1)) + sed -i -e 's/^\(\s*\)'"$SerialIntern"'\(\s*;\s*[Ss]erial.*\)$/\1'"$LocalExtDomainMasterSerial"'\3/g' "$CachedZoneFile" + sed -i -e 's/^\(\s*\S\+\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Ss][Oo][Aa]\s\+\S\+\s\+\S\+\s\+\)'"$SerialIntern"'\(\s\+.*\)$/\1'"$LocalExtDomainMasterSerial"'\3/g' "$CachedZoneFile" + fi + mv "$CachedZoneFile" "$ExtDomainFile" + ReloadZone "$ExternDomain" "$InternalViews" "$ZoneFilesFolder" + ReloadZone "$ExternDomain" "$ExternalView" "$ZoneFilesFolder" + fi + + InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "$ExternDomain" "$ExtDomainFile" "$TempFolder" "$DNSSECPolicy" + InsertZoneToViews "$ExternalView" "$ZoneFilesFolder" "$ExternDomain" "$ExtDomainFile" "$TempFolder" "$DNSSECPolicy" + fi +} +UpdateReverseZones() { + for Subnet in $1; do + ReverseDomains="$(GetReverseDomains "$Subnet")" + for RDomain in $ReverseDomains; do + ReverseZoneFile="$(GetReverseZoneFileFromZone "${RDomain%*.}")" + if [ -n "$RemoteLocation" ]; then + ! curl -s -f "$RemoteLocation""static.""$ReverseZoneFile" \ + --output "$ZoneFilesFolder""static.""$ReverseZoneFile" && \ + rm -f "$ZoneFilesFolder""static.""$ReverseZoneFile" + fi + ./update-rdnszone.sh "$RDomain" "$2" "$ZoneFilesFolder""$ReverseZoneFile" "$TTLReReExMi" "$InternalViews" + for IView in $InternalViews; do + InsertZoneToIncludeFile "${RDomain%*.}" "$ZoneFilesFolder""$ReverseZoneFile" "$TempFolder""$IView"".conf" + done + done + done +} \ No newline at end of file diff --git a/usr/lib/ffdns/update-dns.sh b/usr/lib/ffdns/update-dns.sh index 8636d17..6209638 100755 --- a/usr/lib/ffdns/update-dns.sh +++ b/usr/lib/ffdns/update-dns.sh @@ -8,7 +8,7 @@ # exit script when command fails set -e -export DNSSCRIPT_VERSION="0.8.3" +export DNSSCRIPT_VERSION="0.8.4" . /etc/ffdns/community.conf . /etc/ffdns/local.conf @@ -19,6 +19,7 @@ export DNSSCRIPT_BIND_RELOAD_VER cd /usr/lib/ffdns/ . ./dns-functions.sh +. ./update-dns-functions.sh MasterDomain="$CommunityDomain" [ -z "$SubCommunityDomain" ] || MasterDomain="$SubCommunityDomain"".""$MasterDomain" @@ -27,126 +28,40 @@ if [ -n "$CommunityExternPrefix" ];then [ -z "$SubCommunityDomain" ] || MasterExternDomain="$SubCommunityDomain"".""$MasterExternDomain" fi -FirstInternal="$( echo "$InternalViews" | sed -ne 's/^\(\S\+\)\s.*$/\1/p')" +FirstInternalView="$( echo "$InternalViews" | sed -ne 's/^\(\S\+\)\s.*$/\1/p')" # ForwardZones: "/" ; optionaly multiple " ""/" no spaces in full filename -ForwardZones="$MasterDomain""/""$ZoneFilesFolder""db.""$FirstInternal"".""$MasterDomain" +ForwardZones="$MasterDomain""/""$ZoneFilesFolder""db.""$FirstInternalView"".""$MasterDomain" BindIcvpnAclTmp="$TempFolder""icvpn-acl.conf" BindIcvpnAcl="$BindIncludeFileFolder""icvpn-acl.conf" [ -n "$DNSSECPolicy" ] || DNSSECKeyFolder="" -mkdir -p "$TempFolder""cache" - -for IView in $InternalViews; do - rm -f "$TempFolder""$IView"".conf" -done -rm -f "$TempFolder""$ExternalView"".conf" +SetupCache CachedMasterFile="$TempFolder""cache/db.""$MasterDomain" PreFetchMasterSerial="$(GetZoneFileSerial "$CachedMasterFile")" -curl -s -S -f "$RemoteLocation""db.""$MasterDomain" --output "$CachedMasterFile" && \ - [ -f "$CachedMasterFile" ] && \ - { - echo "" - echo "_dnsscript_version IN TXT ""$DNSSCRIPT_VERSION" | NormalizeZoneFileFormatting - } >> "$CachedMasterFile" || : +GetMasterFile PostFetchMasterSerial="$(GetZoneFileSerial "$CachedMasterFile")" -[ -n "$SubCommunityDomain" ] || ServeMasterZone="$( GetAllZoneNameservers "$MasterDomain" "$CachedMasterFile" | awk '{for(i=NF;i>0;--i) if($i=="'"$DNSSCRIPT_SERVER_NAME"'") {printf 1}}')" -if [ -n "$MasterExternDomain" ]; then + +ServeMasterZone="$(DoServeMasterZone)" + +if [ -n "$ServeMasterZone" ] || [ -n "$(DoServeOnlyExternZone)" ]; then + RemoveDNSSECKeysFromCacheFile + if [ -n "$ServeMasterZone" ]; then - ServeExtZone="1" + MasterFile="$ZoneFilesFolder""db.""$FirstInternalView"".""$MasterDomain" + cp -f "$CachedMasterFile" "$MasterFile" + FileForExternGeneration="$MasterFile" else - ServeExtZone="$( GetAllSubNameservers "$CommunityDomain" "$CommunityExternPrefix" "$CachedMasterFile" | awk '{for(i=NF;i>0;--i) if($i=="'"$DNSSCRIPT_SERVER_NAME"'") {printf 1}}')" - fi -else - ServeExtZone="" -fi - -UpdateExternal() { - CachedZoneFile="$TempFolder""cache/db.""$InternalDomain""E" - - UpdateExternView=0 - if [ -n "$ExternalView" ] || [ -n "$ExternDomain" ]; then - SerialExtern="$(GetZoneFileSerial "$ExternalZoneFile")" - if [ $((SerialIntern)) -gt $((SerialExtern)) ]; then - sed -e '/^[^;]*\s\(10\.\|[fF][cdCD][0-9a-fA-F]\{2\}:\)\S*\s*\(;.*\)\?$/d;s/^[^;^@]*\s\+\([^;]*\)\s[Ii][Nn]\s\+[Ss][Oo][Aa]\s/@ \1 IN SOA /g' "$InternalZoneFile" \ - > "$ExternalZoneFile" - UpdateExternView=1 - ReloadZone "$InternalDomain" "$ExternalView" "$ZoneFilesFolder" - fi + FileForExternGeneration="$CachedMasterFile" fi - if [ -n "$ExternDomain" ]; then - ExtDomainFile="$ZoneFilesFolder""db.""$FirstInternal"".""$ExternDomain" - ZoneTempFolder="$TempFolder""cache/""$ExternDomain""/" - cp -f "$ExternalZoneFile" "$CachedZoneFile" - [ -z "$DNSSECKeyFolder" ] || sed -i -e '/^\s*_dnsseckeys\./d' "$CachedZoneFile" - [ -n "$(sed -e '/^\s*\(@\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Nn][Ss]\)\s/!d' "$CachedZoneFile")" ] || \ - sed -i -e 's/^\s*\(@\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Ss][Oo][Aa]\)\s\+\S\+\s\+\S\+\s/\1 '"$DNSSCRIPT_SERVER_NAME"'. '"$DNSSCRIPT_CONTACT_EMAIL"' /g' "$CachedZoneFile" - - sed -i -e 's/^\s*'"$CommunityExternPrefix"'\s/@ /g;/^\s*\(@\|\S\+\.\)\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Dd][Ss]\s/d' "$CachedZoneFile" - - UpdateExternDomain="$(UpdateDNSSECEntryCache "$ExternDomain" "$ZoneTempFolder" "$CachedZoneFile" "$DNSSECKeyFolder")" - if [ $UpdateExternView -ne 0 ] || [ $UpdateExternDomain -ne 0 ]; then - for KeyFile in "$ZoneTempFolder"*; do - [ "$KeyFile" = "$ZoneTempFolder""*" ] || \ - cat "$KeyFile" >> "$CachedZoneFile" - done - LocalExtDomainMasterSerial="$(GetZoneFileSerial "$ExtDomainFile")" - - if [ $((SerialIntern)) -le $((LocalExtDomainMasterSerial)) ]; then - LocalExtDomainMasterSerial=$((LocalExtDomainMasterSerial+1)) - sed -i -e 's/^\(\s*\)'"$SerialIntern"'\(\s*;\s*[Ss]erial.*\)$/\1'"$LocalExtDomainMasterSerial"'\3/g' "$CachedZoneFile" - sed -i -e 's/^\(\s*\S\+\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Ss][Oo][Aa]\s\+\S\+\s\+\S\+\s\+\)'"$SerialIntern"'\(\s\+.*\)$/\1'"$LocalExtDomainMasterSerial"'\3/g' "$CachedZoneFile" - fi - mv "$CachedZoneFile" "$ExtDomainFile" - ReloadZone "$ExternDomain" "$InternalViews" "$ZoneFilesFolder" - ReloadZone "$ExternDomain" "$ExternalView" "$ZoneFilesFolder" - fi - - InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "$ExternDomain" "$ExtDomainFile" "$TempFolder" "$DNSSECPolicy" - InsertZoneToViews "$ExternalView" "$ZoneFilesFolder" "$ExternDomain" "$ExtDomainFile" "$TempFolder" "$DNSSECPolicy" - fi -} - -if [ -n "$ServeMasterZone" ] || [ -n "$ServeExtZone" ]; then - sed -i -e '/^\s*_dnsseckeys\./d' "$CachedMasterFile" - FileForExternGeneration="$CachedMasterFile" if [ -n "$ExternalView" ]; then ExternFile="$ZoneFilesFolder""db.""$ExternalView"".""$MasterDomain" else ExternFile="$ZoneFilesFolder""db.extern.""$MasterDomain" fi - LocalMasterSerial=$((PostFetchMasterSerial)) - if [ -n "$ServeMasterZone" ]; then - MasterFile="$ZoneFilesFolder""db.""$FirstInternal"".""$MasterDomain" - FileForExternGeneration="$MasterFile" - ZoneTempFolder="$TempFolder""cache/""$MasterDomain""/" - - UpdateMaster="$(UpdateDNSSECEntryCache "$MasterDomain" "$ZoneTempFolder" "$CachedMasterFile" "$DNSSECKeyFolder")" - if [ $((PostFetchMasterSerial)) -gt $((PreFetchMasterSerial)) ] || [ $UpdateMaster -ne 0 ]; then - cp -f "$CachedMasterFile" "$CachedMasterFile""I" - for KeyFile in "$ZoneTempFolder"*; do - [ "$KeyFile" = "$ZoneTempFolder""*" ] || \ - cat "$KeyFile" >> "$CachedMasterFile""I" - done - LocalMasterSerial="$(GetZoneFileSerial "$MasterFile")" - if [ $((PostFetchMasterSerial)) -le $((LocalMasterSerial)) ]; then - LocalMasterSerial=$((LocalMasterSerial+1)) - sed -i -e 's/^\(\s*\)'"$PostFetchMasterSerial"'\(\s*;\s*[Ss]erial.*\)$/\1'"$LocalMasterSerial"'\3/g' "$CachedMasterFile""I" - sed -i -e 's/^\(\s*\S\+\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Ss][Oo][Aa]\s\+\S\+\s\+\S\+\s\+\)'"$PostFetchMasterSerial"'\(\s\+.*\)$/\1'"$LocalMasterSerial"'\3/g' "$CachedMasterFile""I" - else - LocalMasterSerial=$((PostFetchMasterSerial)) - fi - mv "$CachedMasterFile""I" "$MasterFile" - ReloadZone "$MasterDomain" "$InternalViews" "$ZoneFilesFolder" - - fi - InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "$MasterDomain" "$MasterFile" "$TempFolder" "$DNSSECPolicy" - if [ -n "$ExternalView" ]; then - InsertZoneToIncludeFile "$MasterDomain" "$ExternFile" "$TempFolder""$ExternalView"".conf" "$DNSSECPolicy" - fi - fi + LocalMasterSerial="$(UpdateMasterZone)" InternalZoneFile="$FileForExternGeneration" ExternalZoneFile="$ExternFile" @@ -157,23 +72,11 @@ if [ -n "$ServeMasterZone" ] || [ -n "$ServeExtZone" ]; then fi if [ -z "$MasterFile" ]; then - MasterFile="$ZoneFilesFolder""db.""$FirstInternal"".""$MasterDomain" + MasterFile="$ZoneFilesFolder""db.""$FirstInternalView"".""$MasterDomain" cp -f "$CachedMasterFile" "$MasterFile" fi -for Subnet in $CommunitySubnets; do - ReverseDomains="$(GetReverseDomains "$Subnet")" - for RDomain in $ReverseDomains; do - ReverseZoneFile="$(GetReverseZoneFileFromZone "${RDomain%*.}")" - ! curl -s -f "$RemoteLocation""static.""$ReverseZoneFile" \ - --output "$ZoneFilesFolder""static.""$ReverseZoneFile" && \ - rm -f "$ZoneFilesFolder""static.""$ReverseZoneFile" - ./update-rdnszone.sh "$RDomain" "$ForwardZones" "$ZoneFilesFolder""$ReverseZoneFile" "$TTLReReExMi" "$InternalViews" - for IView in $InternalViews; do - InsertZoneToIncludeFile "${RDomain%*.}" "$ZoneFilesFolder""$ReverseZoneFile" "$TempFolder""$IView"".conf" - done - done -done +UpdateReverseZones "$CommunitySubnets" "$ForwardZones" "$RemoteLocation" # set shorter TTL for Hoods TTLReReExMi="420 360 180 1800 360" @@ -183,7 +86,7 @@ DNSSECKeyFolder="" for Hood in $Hoods; do HoodDomain="${Hood%%\#*}"".""$MasterDomain" Subnets="$(echo "${Hood#*\#}" | sed -e 's/#/ /g')" - HoodZoneFile="$ZoneFilesFolder""db.""$FirstInternal"".""$HoodDomain" + HoodZoneFile="$ZoneFilesFolder""db.""$FirstInternalView"".""$HoodDomain" if [ ! -f "$HoodZoneFile" ]; then { echo "\$TTL ${TTLReReExMi%% *}" @@ -194,7 +97,7 @@ for Hood in $Hoods; do echo " ""$(echo "$TTLReReExMi" | awk '{print $4}')"" ; Expire" echo " ""$(echo "$TTLReReExMi" | awk '{print $5}')"" ) ; Negative Cache TTL" echo ";" - echo "@ IN NS $DNSSCRIPT_SERVER_NAME"".""" + echo "@ IN NS ""$DNSSCRIPT_SERVER_NAME"".""" GetOwnGlueRecords "$MasterDomain" "$HoodDomain" "$MasterFile" echo ";" } > "$HoodZoneFile" @@ -205,16 +108,8 @@ for Hood in $Hoods; do InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "$HoodDomain" "$HoodZoneFile" "$TempFolder" "$DNSSECPolicy" HoodForwardZones="$ForwardZones $HoodDomain""/""$HoodZoneFile" - for Subnet in $Subnets; do - ReverseDomains="$(GetReverseDomains "$Subnet")" - for RDomain in $ReverseDomains; do - ReverseZoneFileFullPath="$ZoneFilesFolder""$(GetReverseZoneFileFromZone "${RDomain%*.}")" - ./update-rdnszone.sh "$RDomain" "$HoodForwardZones" "$ReverseZoneFileFullPath" "$TTLReReExMi" "$InternalViews" - for IView in $InternalViews; do - InsertZoneToIncludeFile "${RDomain%*.}" "$ReverseZoneFileFullPath" "$TempFolder""$IView"".conf" - done - done - done + UpdateReverseZones "$Subnets" "$HoodForwardZones" + if [ -n "$MasterExternDomain" ]; then HoodExternDomain="${Hood%%\#*}"".""$MasterExternDomain" else