s4:scripting: Reformat shell scripts
[samba.git] / source4 / scripting / devel / rebuild_zone.sh
1 #!/bin/sh
2 # rebuild a zone file, adding all DCs
3
4 [ $# -eq 2 ] || {
5         echo "rebuild_zone.sh <sam.ldb> <zonefile>"
6         exit 1
7 }
8
9 LDB="$1"
10 ZFILE="$2"
11
12 dnshostname=$(bin/ldbsearch -H $LDB --scope=base -b '' dnsHostname | grep ^dns | cut -d' ' -f2)
13 host=$(echo $dnshostname | cut -d. -f1)
14 realm=$(echo $dnshostname | cut -d. -f2-)
15 GUIDs=$(bin/ldbsearch -H $LDB objectclass=ntdsdsa objectguid --cross-ncs | grep ^objectGUID | cut -d' ' -f2)
16 DOMAINGUID=$(bin/ldbsearch -H $LDB --scope=base objectguid | grep ^objectGUID | cut -d' ' -f2)
17
18 dcname()
19 {
20         GUID=$1
21         echo $(bin/ldbsearch -H $LDB objectguid=$GUID dn --cross-ncs | grep CN=NTDS.Settings | cut -d, -f2 | cut -d= -f2)
22 }
23
24 getip()
25 {
26         NAME=$1
27         ret=$(nmblookup $NAME | egrep '^[0-9]' | head -1 | cut -d' ' -f1)
28         test -n "$ret" || {
29                 echo "Unable to find IP for $NAME. Using XX.XX.XX.XX. Please edit" 1>&2
30                 echo "XX.XX.XX.XX"
31         }
32         echo $ret
33 }
34
35 echo "Generating header for host $host in realm $realm"
36 cat <<EOF >$ZFILE
37 ; -*- zone -*-
38 ; generated by rebuild_zone.sh
39 \$ORIGIN $realm.
40 \$TTL 1W
41 @               IN SOA  @   hostmaster (
42                                 $(date +%Y%m%d%H)   ; serial
43                                 2D              ; refresh
44                                 4H              ; retry
45                                 6W              ; expiry
46                                 1W )            ; minimum
47                         IN NS   $host
48
49 EOF
50
51 for GUID in $GUIDs; do
52         dc=$(dcname $GUID)
53         echo "Generating IP for DC $dc"
54         ip=$(getip $dc)
55         test -n "$ip" || exit 1
56         echo "  IN A $ip" >>$ZFILE
57 done
58
59 echo "; IP Addresses" >>$ZFILE
60 for GUID in $GUIDs; do
61         dc=$(dcname $GUID)
62         ip=$(getip $dc)
63         test -n "$ip" || exit 1
64         echo "$dc       IN A $ip" >>$ZFILE
65 done
66
67 for GUID in $GUIDs; do
68         dc=$(dcname $GUID)
69         ip=$(getip $dc)
70         test -n "$ip" || exit 1
71         echo "Generating zone body for DC $dc with IP $ip"
72         cat <<EOF >>$ZFILE
73 ;
74 ; Entries for $dc
75 gc._msdcs               IN A    $ip
76 $GUID._msdcs    IN CNAME        $dc
77 _gc._tcp                IN SRV 0 100 3268       $dc
78 _gc._tcp.Default-First-Site-Name._sites IN SRV 0 100 3268       $dc
79 _ldap._tcp.gc._msdcs    IN SRV 0 100 389        $dc
80 _ldap._tcp.Default-First-Site-Name._sites.gc._msdcs     IN SRV 0 100 389 $dc
81 _ldap._tcp              IN SRV 0 100 389        $dc
82 _ldap._tcp.dc._msdcs    IN SRV 0 100 389        $dc
83 _ldap._tcp.pdc._msdcs   IN SRV 0 100 389        $dc
84 _ldap._tcp.$DOMAINGUID.domains._msdcs           IN SRV 0 100 389 $dc
85 _ldap._tcp.Default-First-Site-Name._sites               IN SRV 0 100 389 $dc
86 _ldap._tcp.Default-First-Site-Name._sites.dc._msdcs     IN SRV 0 100 389 $dc
87 _kerberos._tcp          IN SRV 0 100 88         $dc
88 _kerberos._tcp.dc._msdcs        IN SRV 0 100 88 $dc
89 _kerberos._tcp.Default-First-Site-Name._sites   IN SRV 0 100 88 $dc
90 _kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs IN SRV 0 100 88 $dc
91 _kerberos._udp          IN SRV 0 100 88         $dc
92 _kerberos-master._tcp           IN SRV 0 100 88         $dc
93 _kerberos-master._udp           IN SRV 0 100 88         $dc
94 _kpasswd._tcp           IN SRV 0 100 464        $dc
95 _kpasswd._udp           IN SRV 0 100 464        $dc
96 EOF
97 done
98
99 cat <<EOF >>$ZFILE
100
101 ; kerberos hack
102 _kerberos               IN TXT  $(echo $realm | tr [a-z] [A-Z])
103 EOF
104
105 echo "Rebuilt zone file $ZFILE OK"
106
107 echo "Reloading bind config"
108 PATH="/usr/sbin:$PATH" rndc reload
109 exit 0