comparison scripts/nameserver_autogen/bind_tld_zonefile.sh @ 1199:dfda92fd4ec3 draft

rewrite bind tld zonefile generators
author cathugger <cathugger@cock.li>
date Fri, 17 Nov 2017 08:59:16 +0000
parents 56c959ab3e05
children 7490236529e9
comparison
equal deleted inserted replaced
1198:93f2650b65c0 1199:dfda92fd4ec3
1 #!/bin/bash 1 #!/bin/bash
2 #made for bash. not sure if all /bin/sh work. 2 # made for bash. not sure if all /bin/sh work.
3 #be sure to edit these variables first. 3 # be sure to set these variables first.
4 #RESDB_PATH=/var/db/resdb
5 #ZONEFILE_DIR=/etc/namedb
6 # optional:
7 : ${TLDS:=ano}
8 : ${RDNS_PREFIX:=21}
4 9
5 #ANO_ZONEFILE=/etc/namedb/ano 10 if [ ! "$ZONEFILE_DIR" ];then
6 #RDNS_ZONEFILE=/etc/namedb/1.in-addr.arpa 11 echo "You forgot to set some variables. read the source plzkthx." >&2
7 #RESDB_PATH=/services/resdb/resdb 12 exit 1
13 fi
8 14
9 if [ ! "$ANO_ZONEFILE" ];then 15 # convert to hex
10 echo "You forgot to set some variables. read the source plzkthx." 16 if [ "*" != "$RDNS_PREFIX" ];then
11 exit 0; 17 X=""
18 for PFX in $RDNS_PREFIX;do
19 C=`printf "%02X\n" $PFX 2>/dev/null`
20 [ -z "$X" ] && X="$C" || X="$X $C"
21 done
22 RDNS_PREFIX="$X"
12 fi 23 fi
13 24
14 25
15 echo -n "generating ipv4 reverse lookup zonefile for 21/8..." 26 cd "$RESDB_PATH/db/ip" || exit 1
27 for PFX in $RDNS_PREFIX;do
28 cd "$RESDB_PATH/db/ip/$PFX" 2>/dev/null || continue
29 IP=$[0x$PFX]
30 DOM=$IP.in-addr.arpa
31 RDNS_ZONEFILE="$ZONEFILE_DIR/$DOM"
32 echo -n "generating IPv4 reverse lookup zonefile for $IP/8..." >&2
16 33
17 echo "; this zonefile genreated on: `date -u`" > "$RDNS_ZONEFILE" 34 echo "; this zonefile genreated on: `date -u`" > "$RDNS_ZONEFILE".tmp
18 echo '$TTL 3600' >> "$RDNS_ZONEFILE" 35 echo '$TTL 3600' >> "$RDNS_ZONEFILE".tmp
19 echo '@ IN SOA @ root ('`date -u +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$RDNS_ZONEFILE" 36 echo '$ORIGIN' $DOM >> "$RDNS_ZONEFILE".tmp
20 echo '@ IN NS @' >> "$RDNS_ZONEFILE" 37 echo '@ IN SOA @ root ('`date -u +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$RDNS_ZONEFILE".tmp
21 echo '@ IN A 127.0.0.1' >> "$RDNS_ZONEFILE" 38 echo '@ IN NS @' >> "$RDNS_ZONEFILE".tmp
39 echo '@ IN A 127.0.0.1' >> "$RDNS_ZONEFILE".tmp
22 40
23 for i in `ls ${RESDB_PATH}/db/ip/15/*/*/ns/*`;do 41 for i in */*/ns/*;do
24 f=$(basename $i) 42 [ -e "$i" ] || continue
25 a=$(basename $(dirname $i)) 43 f=$(basename $i)
26 b=$(basename $(dirname $(dirname $i))) 44 a=$(basename $(dirname $i))
27 c=$(basename $(dirname $(dirname $(dirname $i)))) 45 b=$(basename $(dirname $(dirname $i)))
28 printf "%d.%d IN NS %s\n" $[0x${b}] $[0x${c}] ${f}. 46 c=$(basename $(dirname $(dirname $(dirname $i))))
29 done >> "$RDNS_ZONEFILE" 47 printf "%d.%d IN NS %s\n" $[0x${b}] $[0x${c}] ${f}.
30 echo done. 48 done >> "$RDNS_ZONEFILE".tmp
31 49 mv -f "$RDNS_ZONEFILE".tmp "$RDNS_ZONEFILE"
32 cd ${RESDB_PATH}/db/dom/ano 50 echo " done." >&2
33 51 done
34 echo -n generating .ano TLD zonefile...
35
36 echo "; this zonefile genreated on: `date -u`" > "$ANO_ZONEFILE"
37 echo '$TTL 3600' >> "$ANO_ZONEFILE"
38 echo '@ IN SOA @ root ('`date -u +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$ANO_ZONEFILE"
39 echo '@ IN NS @' >> "$ANO_ZONEFILE"
40 echo '@ IN A 127.0.0.1' >> "$ANO_ZONEFILE"
41 52
42 53
43 for name in *;do 54 cd "$RESDB_PATH/db/dom"
44 if [ -e "${name}/ns/" ];then 55 for TLD in $TLDS;do
45 for server in "$name"/ns/*;do 56 cd "$RESDB_PATH/db/dom/$TLD" 2>/dev/null || continue
46 if grep '\.ano$' <<< "$name" > /dev/null;then 57 ANO_ZONEFILE="$ZONEFILE_DIR/$TLD"
47 true 58 echo -n "generating .${TLD} TLD zonefile..." >&2
48 fi 59
49 if grep '\.ano$' <<< "$server" > /dev/null;then 60 echo "; this zonefile genreated on: `date -u`" > "$ANO_ZONEFILE".tmp
50 true 61 echo '$TTL 3600' >> "$ANO_ZONEFILE".tmp
51 fi 62 echo '$ORIGIN' $TLD >> "$ANO_ZONEFILE".tmp
52 fqserver=`cut -d/ -f3- <<< $server` 63 echo '@ IN SOA @ root ('`date -u +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$ANO_ZONEFILE".tmp
53 echo -e "${name}\tIN NS\t${fqserver}." 64 echo '@ IN NS @' >> "$ANO_ZONEFILE".tmp
54 for ip in `cat ${server}`;do 65 echo '@ IN A 127.0.0.1' >> "$ANO_ZONEFILE".tmp
55 if grep ':' <<< "$ip" > /dev/null;then 66
56 echo -e "${fqserver}.\tIN AAAA\t$ip" 67 for name in *;do
57 else 68 if [ -e "$name/ns/" ];then
58 echo -e "${fqserver}.\tIN A\t$ip" 69 for server in "$name"/ns/*;do
59 fi 70 [ -e "$server" ] || continue
71 fqserver=`cut -d/ -f3- <<< "$server"`
72 echo -e "${name}\tIN NS\t${fqserver}."
73 for ip in $(cat $server);do
74 if grep ':' <<< "$ip" > /dev/null;then
75 printf '%s.\tIN AAAA\t%s\n' "${fqserver}" "${ip}"
76 else
77 printf '%s.\tIN A\t%s\n' "${fqserver}" "${ip}"
78 fi
79 done
60 done 80 done
61 done 81 fi
62 fi 82 done >> "$ANO_ZONEFILE".tmp
63 done >> "$ANO_ZONEFILE" 83 mv -f "$ANO_ZONEFILE".tmp "$ANO_ZONEFILE"
64 echo done. 84 echo " done." >&2
65 echo might want to send a sighup to your named now. 85 done
86
87 echo might want to send a sighup to your named now. >&2