changeset 1199:dfda92fd4ec3 draft

rewrite bind tld zonefile generators
author cathugger <cathugger@cock.li>
date Fri, 17 Nov 2017 08:59:16 +0000
parents 93f2650b65c0
children 79ed5d9678a8
files scripts/nameserver_autogen/bind_tld_zonefile.sh scripts/nameserver_autogen/bind_tld_zonefile_all.sh
diffstat 2 files changed, 88 insertions(+), 120 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/nameserver_autogen/bind_tld_zonefile.sh	Tue Mar 21 02:16:12 2017 +0000
+++ b/scripts/nameserver_autogen/bind_tld_zonefile.sh	Fri Nov 17 08:59:16 2017 +0000
@@ -1,65 +1,87 @@
 #!/bin/bash
-#made for bash. not sure if all /bin/sh work.
-#be sure to edit these variables first.
+# made for bash. not sure if all /bin/sh work.
+# be sure to set these variables first.
+#RESDB_PATH=/var/db/resdb
+#ZONEFILE_DIR=/etc/namedb
+# optional:
+: ${TLDS:=ano}
+: ${RDNS_PREFIX:=21}
 
-#ANO_ZONEFILE=/etc/namedb/ano
-#RDNS_ZONEFILE=/etc/namedb/1.in-addr.arpa
-#RESDB_PATH=/services/resdb/resdb
+if [ ! "$ZONEFILE_DIR" ];then
+ echo "You forgot to set some variables. read the source plzkthx." >&2
+ exit 1
+fi
 
-if [ ! "$ANO_ZONEFILE" ];then
- echo "You forgot to set some variables. read the source plzkthx."
- exit 0;
+# convert to hex
+if [ "*" != "$RDNS_PREFIX" ];then
+ X=""
+ for PFX in $RDNS_PREFIX;do
+  C=`printf "%02X\n" $PFX 2>/dev/null`
+  [ -z "$X" ] && X="$C" || X="$X $C"
+ done
+ RDNS_PREFIX="$X"
 fi
 
 
-echo -n "generating ipv4 reverse lookup zonefile for 21/8..."
-
-echo "; this zonefile genreated on: `date -u`" > "$RDNS_ZONEFILE"
-echo '$TTL 3600' >> "$RDNS_ZONEFILE"
-echo '@ IN SOA @ root ('`date -u +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$RDNS_ZONEFILE"
-echo '@ IN NS @' >> "$RDNS_ZONEFILE"
-echo '@ IN A 127.0.0.1' >> "$RDNS_ZONEFILE"
+cd "$RESDB_PATH/db/ip" || exit 1
+for PFX in $RDNS_PREFIX;do
+ cd "$RESDB_PATH/db/ip/$PFX" 2>/dev/null || continue
+ IP=$[0x$PFX]
+ DOM=$IP.in-addr.arpa
+ RDNS_ZONEFILE="$ZONEFILE_DIR/$DOM"
+ echo -n "generating IPv4 reverse lookup zonefile for $IP/8..." >&2
 
-for i in `ls ${RESDB_PATH}/db/ip/15/*/*/ns/*`;do
- f=$(basename $i)
- a=$(basename $(dirname $i))
- b=$(basename $(dirname $(dirname $i)))
- c=$(basename $(dirname $(dirname $(dirname $i))))
- printf "%d.%d IN NS %s\n" $[0x${b}] $[0x${c}] ${f}.
-done >> "$RDNS_ZONEFILE"
-echo done.
+ echo "; this zonefile genreated on: `date -u`" > "$RDNS_ZONEFILE".tmp
+ echo '$TTL 3600' >> "$RDNS_ZONEFILE".tmp
+ echo '$ORIGIN' $DOM >> "$RDNS_ZONEFILE".tmp
+ echo '@ IN SOA @ root ('`date -u +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$RDNS_ZONEFILE".tmp
+ echo '@ IN NS @' >> "$RDNS_ZONEFILE".tmp
+ echo '@ IN A 127.0.0.1' >> "$RDNS_ZONEFILE".tmp
 
-cd ${RESDB_PATH}/db/dom/ano
-
-echo -n generating .ano TLD zonefile... 
-
-echo "; this zonefile genreated on: `date -u`" > "$ANO_ZONEFILE"
-echo '$TTL 3600' >> "$ANO_ZONEFILE"
-echo '@ IN SOA @ root ('`date -u +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$ANO_ZONEFILE"
-echo '@ IN NS @' >> "$ANO_ZONEFILE"
-echo '@ IN A 127.0.0.1' >> "$ANO_ZONEFILE"
+ for i in */*/ns/*;do
+  [ -e "$i" ] || continue
+  f=$(basename $i)
+  a=$(basename $(dirname $i))
+  b=$(basename $(dirname $(dirname $i)))
+  c=$(basename $(dirname $(dirname $(dirname $i))))
+  printf "%d.%d IN NS %s\n" $[0x${b}] $[0x${c}] ${f}.
+ done >> "$RDNS_ZONEFILE".tmp
+ mv -f "$RDNS_ZONEFILE".tmp "$RDNS_ZONEFILE"
+ echo " done." >&2
+done
 
 
-for name in *;do
- if [ -e "${name}/ns/" ];then
-  for server in "$name"/ns/*;do
-   if grep '\.ano$' <<< "$name" > /dev/null;then
-    true
-   fi
-   if grep '\.ano$' <<< "$server" > /dev/null;then
-    true
-   fi
-   fqserver=`cut -d/ -f3- <<< $server`
-   echo -e "${name}\tIN NS\t${fqserver}."
-   for ip in `cat ${server}`;do 
-    if grep ':' <<< "$ip" > /dev/null;then
-     echo -e "${fqserver}.\tIN AAAA\t$ip"
-    else
-     echo -e "${fqserver}.\tIN A\t$ip"
-    fi
+cd "$RESDB_PATH/db/dom"
+for TLD in $TLDS;do
+ cd "$RESDB_PATH/db/dom/$TLD" 2>/dev/null || continue
+ ANO_ZONEFILE="$ZONEFILE_DIR/$TLD"
+ echo -n "generating .${TLD} TLD zonefile..." >&2
+
+ echo "; this zonefile genreated on: `date -u`" > "$ANO_ZONEFILE".tmp
+ echo '$TTL 3600' >> "$ANO_ZONEFILE".tmp
+ echo '$ORIGIN' $TLD >> "$ANO_ZONEFILE".tmp
+ echo '@ IN SOA @ root ('`date -u +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$ANO_ZONEFILE".tmp
+ echo '@ IN NS @' >> "$ANO_ZONEFILE".tmp
+ echo '@ IN A 127.0.0.1' >> "$ANO_ZONEFILE".tmp
+
+ for name in *;do
+  if [ -e "$name/ns/" ];then
+   for server in "$name"/ns/*;do
+    [ -e "$server" ] || continue
+    fqserver=`cut -d/ -f3- <<< "$server"`
+    echo -e "${name}\tIN NS\t${fqserver}."
+    for ip in $(cat $server);do
+     if grep ':' <<< "$ip" > /dev/null;then
+      printf '%s.\tIN AAAA\t%s\n' "${fqserver}" "${ip}"
+     else
+      printf '%s.\tIN A\t%s\n' "${fqserver}" "${ip}"
+     fi
+    done
    done
-  done
- fi
-done >> "$ANO_ZONEFILE"
-echo done.
-echo might want to send a sighup to your named now.
+  fi
+ done >> "$ANO_ZONEFILE".tmp
+ mv -f "$ANO_ZONEFILE".tmp "$ANO_ZONEFILE"
+ echo " done." >&2
+done
+
+echo might want to send a sighup to your named now. >&2
--- a/scripts/nameserver_autogen/bind_tld_zonefile_all.sh	Tue Mar 21 02:16:12 2017 +0000
+++ b/scripts/nameserver_autogen/bind_tld_zonefile_all.sh	Fri Nov 17 08:59:16 2017 +0000
@@ -1,68 +1,14 @@
-#!/bin/bash
-#made for bash. not sure if all /bin/sh work.
-#be sure to edit these variables first.
-
-#ZONEFILE_DIR=/etc/namedb
+#!/bin/sh
+# be sure to set these variables first.
+#ANO_ZONEFILE=/etc/namedb/ano
 #RDNS_ZONEFILE=/etc/namedb/21.in-addr.arpa
-#RESDB_PATH=/var/db/resdb
-
-if [ ! "$ZONEFILE_DIR" ];then
- echo "You forgot to set some variables. read the source plzkthx."
- exit 0;
+#RESDB_PATH=/services/resdb/resdb
+if [ ! "$ANO_ZONEFILE" ];then
+ echo "You forgot to set some variables. read the source plzkthx." >&2
+ exit 1
 fi
-
-
-echo -n "generating ipv4 reverse lookup zonefile for 21/8..."
-
-echo "; this zonefile genreated on: `date -u`" > "$RDNS_ZONEFILE"
-echo '$TTL 3600' >> "$RDNS_ZONEFILE"
-echo '@ IN SOA @ root ('`date -u +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$RDNS_ZONEFILE"
-echo '@ IN NS @' >> "$RDNS_ZONEFILE"
-echo '@ IN A 127.0.0.1' >> "$RDNS_ZONEFILE"
-
-for i in `ls ${RESDB_PATH}/db/ip/15/*/*/ns/*`;do #this is for 21.
- f=$(basename $i)
- a=$(basename $(dirname $i))
- b=$(basename $(dirname $(dirname $i)))
- c=$(basename $(dirname $(dirname $(dirname $i))))
- printf "%d.%d IN NS %s\n" $[0x${b}] $[0x${c}] ${f}.
-done >> "$RDNS_ZONEFILE"
-echo done.
-
-for GOHERE in ${RESDB_PATH}/db/dom/*;do
-
- cd ${GOHERE}
- TLD=$(basename ${GOHERE})
- ANO_ZONEFILE=${ZONEFILE_DIR}/${TLD}
- echo -n generating .${TLD} TLD zonefile... 
- echo "; this zonefile genreated on: `date -u`" > "$ANO_ZONEFILE"
- echo '$TTL 3600' >> "$ANO_ZONEFILE"
- echo '@ IN SOA @ root ('`date -u +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$ANO_ZONEFILE"
- echo '@ IN NS @' >> "$ANO_ZONEFILE"
- echo '@ IN A 127.0.0.1' >> "$ANO_ZONEFILE"
-
- for name in *;do
-  if [ -e "${name}/ns/" ];then
-   for server in "$name"/ns/*;do
-    if grep '\.ano$' <<< "$name" > /dev/null;then
-     true
-    fi
-    if grep '\.ano$' <<< "$server" > /dev/null;then
-     true
-    fi
-    fqserver=`cut -d/ -f3- <<< $server`
-    echo -e "${name}\tIN NS\t${fqserver}."
-    for ip in $(cat ${server});do 
-     if grep ':' <<< "$ip" > /dev/null;then
-      printf '%s.\tIN AAAA\t%s\n' "${fqserver}" "${ip}"
-     else
-      printf '%s.\tIN A\t%s\n' "${fqserver}" "${ip}"
-     fi
-    done
-   done
-  fi
- done >> "$ANO_ZONEFILE"
- echo done with ${TLD}
-done
-
-echo might want to send a sighup to your named now.
+# compat
+export ZONEFILE_DIR=`dirname $RDNS_ZONEFILE`
+TLDS='!' `dirname $0`/bind_tld_zonefile.sh
+export ZONEFILE_DIR=`dirname $ANO_ZONEFILE`
+RDNS_PREFIX='!' TLDS='*' `dirname $0`/bind_tld_zonefile.sh