add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
--- a/bin/update Thu Dec 19 00:55:22 2013 +0200
+++ b/bin/update Thu Dec 19 01:17:48 2013 +0200
@@ -60,20 +60,19 @@
done
log "Updating reverse host zones..."
- update_hosts_reverse var/zones/hosts/194.197.235 194.197.235.0/24 \
- "etc/hosts/paivola.fi" etc/hosts/*.paivola.fi
-
- update_hosts_reverse var/zones/hosts/10 10.0.0.0/8 \
- "etc/hosts/*.pvl"
-
- update_hosts_reverse var/zones/hosts/10.0 10.0.0.0/16 \
- "etc/hosts/test.pvl"
-
- update_hosts_reverse var/zones/hosts/192.168 192.168.0.0/16 \
- "etc/hosts/*.pvl"
-
- update_hosts_reverse var/zones/hosts/fdc4:4cef:395a fdc4:4cef:395a::/48 \
- "etc/hosts/test.pvl"
+ for zone in $(list_dirs etc/reverse-zones-hosts); do
+ update_hosts_reverse "var/zones/hosts/$zone" "$zone" \
+ etc/reverse-zones-hosts/$zone/*
+ done
+# for zone in $(list_files etc/zones); do
+# for reverse_hosts in $(zone_includes_grep var/include-cache/$zone etc/zones/$zone reverse-hosts/); do
+# prefix="${reverse_hosts%_*}"
+# hosts="${reverse_hosts#*_}"
+#
+# update_hosts_reverse "var/zones/reverse-hosts/${prefix}_${hosts}" "$prefix" \
+# "etc/hosts/$hosts"
+# done
+# done
}
function run_zones {
@@ -85,7 +84,7 @@
log "Updating zone serials..."
for zone in $(list_files etc/zones); do
update_serial "var/serials/$zone" "etc/zones/$zone" \
- $(zone_includes var/include-cache/$zone etc/zones/$zone var/zones)
+ $(zone_includes var/include-cache/$zone etc/zones/$zone var/zones/)
done
@@ -117,7 +116,7 @@
parse_args "$@"
## Input dirs
- for dir in etc etc/dhcp etc/zones; do
+ for dir in etc etc/zones etc/hosts opt; do
[ -d $dir ] || die "Missing directory: $dir"
done
@@ -127,7 +126,7 @@
done
# sub-$ZONES
- for dir in var/zones/hosts var/zones/includes; do
+ for dir in var/zones/includes var/zones/hosts var/zones/reverse-hosts; do
ensure_dir $dir
done
--- a/lib/update.updates Thu Dec 19 00:55:22 2013 +0200
+++ b/lib/update.updates Thu Dec 19 01:17:48 2013 +0200
@@ -123,13 +123,26 @@
function zone_includes {
local cache="$1"
local src="$2"
- local dir="$3"
+ local prefix="${3:-}"
if [ ! -e "$cache" -o "$cache" -ot "$src" ]; then
read_zone_includes "$src" > "$cache"
fi
while read include; do
- echo -n "$dir/$include "
+ echo -n "$prefix$include "
done < "$cache"
}
+
+## Search for prefix-matching includes in zone file
+function zone_includes_grep {
+ local cache="$1"
+ local src="$2"
+ local prefix="$3"
+
+ for include in $(zone_includes $cache $src); do
+ if [ "${include#$prefix}" != "$include" ]; then
+ echo -n " ${include#$prefix}"
+ fi
+ done
+}
--- a/lib/update.utils Thu Dec 19 00:55:22 2013 +0200
+++ b/lib/update.utils Thu Dec 19 01:17:48 2013 +0200
@@ -81,11 +81,13 @@
done
}
-## List names of files in dirs..
+## List names of dirs in dir:
function list_dirs {
- for dir in "$@"; do
- for file in $dir/*; do
- echo -n "${file#$dir/}"
- done
+ local dir="$1"
+
+ for file in $dir/*; do
+ [ -d "$file" ] || continue
+
+ echo -n "${file#$dir/} "
done
}