summaryrefslogtreecommitdiff
path: root/scripts/nameserver_autogen/bind_tld_zonefile.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/nameserver_autogen/bind_tld_zonefile.sh')
-rwxr-xr-xscripts/nameserver_autogen/bind_tld_zonefile.sh126
1 files changed, 74 insertions, 52 deletions
diff --git a/scripts/nameserver_autogen/bind_tld_zonefile.sh b/scripts/nameserver_autogen/bind_tld_zonefile.sh
index 5c1459f..11edb24 100755
--- a/scripts/nameserver_autogen/bind_tld_zonefile.sh
+++ b/scripts/nameserver_autogen/bind_tld_zonefile.sh
@@ -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 [ ! "$ANO_ZONEFILE" ];then
- echo "You forgot to set some variables. read the source plzkthx."
- exit 0;
+if [ ! "$ZONEFILE_DIR" ];then
+ echo "You forgot to set some variables. read the source plzkthx." >&2
+ exit 1
fi
+# 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
+ 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
-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"
+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
- 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
+ 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