add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism.. dns-new
authorTero Marttila <terom@paivola.fi>
Thu, 19 Dec 2013 01:17:48 +0200
branchdns-new
changeset 610 cb4607af8663
parent 609 2fb003b8ac4c
child 611 52d058780506
add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
bin/update
lib/update.updates
lib/update.utils
--- 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
 }