# HG changeset patch # User Tero Marttila # Date 1387408668 -7200 # Node ID cb4607af86639f9adb96dbd8566f03f1a32a61c1 # Parent 2fb003b8ac4c9dbf41f2e33d30555a86fb74d25d add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism.. diff -r 2fb003b8ac4c -r cb4607af8663 bin/update --- 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 diff -r 2fb003b8ac4c -r cb4607af8663 lib/update.updates --- 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 +} diff -r 2fb003b8ac4c -r cb4607af8663 lib/update.utils --- 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 }