1 |
#!/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 |