1 |
douglas |
845 |
#!/usr/local/bin/bash |
2 |
|
|
# Douglas Thrift |
3 |
|
|
# |
4 |
|
|
# Reverse |
5 |
|
|
# |
6 |
|
|
# $Id$ |
7 |
|
|
|
8 |
|
|
function usage() |
9 |
|
|
{ |
10 |
|
|
echo "Usage: `basename $0` [previous] hostname address" |
11 |
|
|
exit 1 |
12 |
|
|
} |
13 |
|
|
|
14 |
|
|
case $# in |
15 |
|
|
(2) |
16 |
|
|
if grep -Eq '^[-.a-z0-9]+$' <<<$1; then hostname=$1; else usage; fi |
17 |
|
|
if grep -Eq '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' <<<$2; then address=$2; else usage; fi |
18 |
|
|
;; |
19 |
|
|
(3) |
20 |
|
|
if grep -Eq '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' <<<$1; then previous=$1; else usage; fi |
21 |
|
|
if grep -Eq '^[-.a-z0-9]+$' <<<$2; then hostname=$2; else usage; fi |
22 |
|
|
if grep -Eq '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' <<<$3; then address=$3; else usage; fi |
23 |
|
|
;; |
24 |
|
|
(*) |
25 |
|
|
usage |
26 |
|
|
;; |
27 |
|
|
esac |
28 |
|
|
|
29 |
|
|
function reverse() |
30 |
|
|
{ |
31 |
|
|
echo "`sed -Ee 's/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/\4.\3.\2.\1/' <<<$1`.in-addr.arpa" |
32 |
|
|
} |
33 |
|
|
|
34 |
|
|
domainname=`reverse $address` |
35 |
|
|
zonefile=master/$domainname |
36 |
|
|
|
37 |
|
|
if [[ -z $previous ]]; then |
38 |
|
|
cat > $zonefile <<EOF |
39 |
|
|
\$ORIGIN . |
40 |
|
|
\$TTL 3600 ; 1 hour |
41 |
|
|
$domainname IN SOA ns.douglasthrift.net. admin.douglasthrift.net. ( |
42 |
|
|
`date +%Y%m%d`01 ; serial |
43 |
|
|
7200 ; refresh (2 hours) |
44 |
|
|
3600 ; retry (1 hour) |
45 |
|
|
604800 ; expire (1 week) |
46 |
|
|
3600 ; minimum (1 hour) |
47 |
|
|
) |
48 |
|
|
NS ns.douglasthrift.net. |
49 |
|
|
PTR $hostname. |
50 |
|
|
EOF |
51 |
|
|
cat >> named.conf <<EOF |
52 |
|
|
|
53 |
|
|
# $hostname |
54 |
|
|
zone "$domainname" { |
55 |
|
|
type master; |
56 |
|
|
file "$zonefile"; |
57 |
|
|
}; |
58 |
|
|
EOF |
59 |
|
|
else |
60 |
|
|
olddomainname=`reverse $previous` |
61 |
|
|
oldzonefile=master/$olddomainname |
62 |
|
|
sed -e "s/$olddomainname/$domainname/" -e "s/[0-9]{10} ; serial$/`date +%Y%m%d`01 ; serial/" $oldzonefile > $zonefile |
63 |
|
|
sed -i '' -e "s/$olddomainname/$domainname/" named.conf |
64 |
|
|
rm -f $oldzonefile |
65 |
|
|
fi |