2021-08-30 03:10:13 +02:00
#!/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 " "/"
2021-10-19 01:56:14 +02:00
UpdateMaster = " $( UpdateDNSSECEntryCache " $MasterDomain " " $ZoneTempFolder " " $CachedMasterFile " " $DNSSECKeyFolder " " $InternalUpstreamIP " ) "
2021-08-30 21:57:28 +02:00
if [ $(( PostFetchMasterSerial)) -gt $(( PreFetchMasterSerial)) ] || [ $UpdateMaster -ne 0 ] || [ ! -f " $MasterFile " ] ; then
2021-08-30 03:10:13 +02:00
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))
2021-10-13 01:09:49 +02:00
sed -i -e 's/^\(\s*\)' " $PostFetchMasterSerial " '\(\s*;\s*[Ss]erial.*\)$/\1' " $LocalMasterSerial " '\2/g' " $CachedMasterFile " "I"
2021-08-30 03:10:13 +02:00
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 "
2021-10-19 01:56:14 +02:00
UpdateExternDomain = " $( UpdateDNSSECEntryCache " $ExternDomain " " $ZoneTempFolder " " $CachedZoneFile " " $DNSSECKeyFolder " " $InternalUpstreamIP " ) "
2021-08-30 03:10:13 +02:00
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))
2021-10-13 01:09:49 +02:00
sed -i -e 's/^\(\s*\)' " $SerialIntern " '\(\s*;\s*[Ss]erial.*\)$/\1' " $LocalExtDomainMasterSerial " '\2/g' " $CachedZoneFile "
2021-08-30 03:10:13 +02:00
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
}