#!/bin/bash
# vim: set ft=sh :
set -ue
ROOT=$(pwd)
BIN=$ROOT/bin
PROCESS_ZONE=$BIN/process-zone
EXPAND_ZONE=$BIN/expand-zone
SETTINGS=$ROOT/settings
ZONES=$ROOT/zones
SERIALS=$ROOT/serials
PROCESS_ARGS='--input-charset latin-1'
FORWARD_MX=mail
REVERSE_ZONE=194.197.235
REVERSE_DOMAIN=paivola.fi
function log {
echo "$*" >&2
}
function die {
log "$*"
exit 1
}
function log_cmd {
local msg=$1; shift
#log ">>>" "$@"
echo -n "$msg... " >&2
"$@" && log "OK" >&2 || die "Failed"
}
[ -d $SETTINGS ] || die "Missing settings: $SETTINGS"
[ -d $SERIALS ] || die "Missing serials: $SERIALS"
[ -d $ZONES ] || die "Missing zones: $ZONES"
function expand_zone {
local output=$1; shift
$EXPAND_ZONE -o $output "$@"
}
function process_zone {
local output=$1; shift
$PROCESS_ZONE $PROCESS_ARGS -o $output "$@"
}
function copy_zone_part {
local zone=$1
local part=$2
local name=$zone.zone.$part
log_cmd "Copying zone $zone/$part: zones/$name"
cp $SETTINGS/$name $ZONES/$name
}
function update_zone {
local zone=$1
local name=$zone.zone
log_cmd "Generating $zone zone headers: zones/$name" \
expand_zone $ZONES/$name $SETTINGS/$zone.zone \
--serial $SERIALS/$zone.serial --update-serial \
--expand zones=$ZONES
}
function update_zone_view {
local zone=$1
local view=$2
local name=$view/$zone.zone
log_cmd "Generating $zone:$view zone headers: zones/$name" \
expand_zone $ZONES/$name $SETTINGS/$zone.zone \
--serial $SERIALS/$zone.serial --update-serial \
--expand zones=$ZONES \
--expand view=$view
}
function main {
log_cmd "Generating external forward zone: zones/external/paivola.zone.hosts" \
process_zone $ZONES/external/paivola.zone.hosts $SETTINGS/paivola.txt --forward-zone
log_cmd "Generating internal forward zone: zones/internal/paivola.zone.hosts" \
process_zone $ZONES/internal/paivola.zone.hosts $SETTINGS/paivola.txt --forward-zone --forward-txt --forward-mx $FORWARD_MX
log_cmd "Generating reverse zones: zones/paivola-reverse.zone.hosts" \
process_zone $ZONES/paivola-reverse.zone.hosts $SETTINGS/paivola.txt --reverse-zone $REVERSE_ZONE --reverse-domain $REVERSE_DOMAIN
copy_zone_part paivola auto
copy_zone_part paivola services
copy_zone_part paivola internal
copy_zone_part paivola external
update_zone paivola-reverse
update_zone_view paivola internal
update_zone_view paivola external
}
main