zone-edit.sh.in revision 1.1 1 1.1 christos #!/bin/sh
2 1.1 christos #
3 1.1 christos # Copyright (C) Internet Systems Consortium, Inc. ("ISC")
4 1.1 christos #
5 1.1 christos # This Source Code Form is subject to the terms of the Mozilla Public
6 1.1 christos # License, v. 2.0. If a copy of the MPL was not distributed with this
7 1.1 christos # file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 1.1 christos #
9 1.1 christos # See the COPYRIGHT file distributed with this work for additional
10 1.1 christos # information regarding copyright ownership.
11 1.1 christos
12 1.1 christos dir=/tmp/zone-edit.$$
13 1.1 christos mkdir ${dir} || exit 1
14 1.1 christos trap "/bin/rm -rf ${dir}" 0
15 1.1 christos
16 1.1 christos prefix=@prefix@
17 1.1 christos exec_prefix=@exec_prefix@
18 1.1 christos bindir=@bindir@
19 1.1 christos sbindir=@sbindir@
20 1.1 christos
21 1.1 christos dig=${bindir}/dig
22 1.1 christos checkzone=${sbindir}/named-checkzone
23 1.1 christos nsupdate=${bindir}/nsupdate
24 1.1 christos
25 1.1 christos case $# in
26 1.1 christos 0) echo "Usage: zone-edit <zone> [dig options] [ -- nsupdate options ]"; exit 0 ;;
27 1.1 christos esac
28 1.1 christos
29 1.1 christos # What kind of echo are we using?
30 1.1 christos try=`echo -n ""`
31 1.1 christos if test "X$try" = "X-n "
32 1.1 christos then
33 1.1 christos echo_arg=""
34 1.1 christos bsc="\\c"
35 1.1 christos else
36 1.1 christos echo_arg="-n"
37 1.1 christos bsc=""
38 1.1 christos fi
39 1.1 christos
40 1.1 christos zone="${1}"
41 1.1 christos shift
42 1.1 christos digopts=
43 1.1 christos while test $# -ne 0
44 1.1 christos do
45 1.1 christos case "${1}" in
46 1.1 christos --)
47 1.1 christos shift
48 1.1 christos break
49 1.1 christos ;;
50 1.1 christos *)
51 1.1 christos digopts="$digopts $1"
52 1.1 christos shift
53 1.1 christos ;;
54 1.1 christos esac
55 1.1 christos done
56 1.1 christos
57 1.1 christos ${dig} axfr "$zone" $digopts |
58 1.1 christos awk '$4 == "RRSIG" || $4 == "NSEC" || $4 == "NSEC3" || $4 == "NSEC3PARAM" { next; } { print; }' > ${dir}/old
59 1.1 christos
60 1.1 christos if test -s ${dir}/old
61 1.1 christos then
62 1.1 christos ${checkzone} -q -D "$zone" ${dir}/old > ${dir}/ooo
63 1.1 christos fi
64 1.1 christos
65 1.1 christos if test -s ${dir}/ooo
66 1.1 christos then
67 1.1 christos cp ${dir}/ooo ${dir}/new
68 1.1 christos while :
69 1.1 christos do
70 1.1 christos if ${VISUAL:-${EDITOR:-/bin/ed}} ${dir}/new
71 1.1 christos then
72 1.1 christos if ${checkzone} -q -D "$zone" ${dir}/new > ${dir}/nnn
73 1.1 christos then
74 1.1 christos sort ${dir}/ooo > ${dir}/s1
75 1.1 christos sort ${dir}/nnn > ${dir}/s2
76 1.1 christos comm -23 ${dir}/s1 ${dir}/s2 |
77 1.1 christos sed 's/^/update delete /' > ${dir}/ccc
78 1.1 christos comm -13 ${dir}/s1 ${dir}/s2 |
79 1.1 christos sed 's/^/update add /' >> ${dir}/ccc
80 1.1 christos if test -s ${dir}/ccc
81 1.1 christos then
82 1.1 christos cat ${dir}/ccc | more
83 1.1 christos while :
84 1.1 christos do
85 1.1 christos echo ${echo_arg} "Update (u), Abort (a), Redo (r), Modify (m), Display (d) : $bsc"
86 1.1 christos read ans
87 1.1 christos case "$ans" in
88 1.1 christos u)
89 1.1 christos (
90 1.1 christos echo zone "$zone"
91 1.1 christos cat ${dir}/ccc
92 1.1 christos echo send
93 1.1 christos ) | ${nsupdate} "$@"
94 1.1 christos break 2
95 1.1 christos ;;
96 1.1 christos a)
97 1.1 christos break 2
98 1.1 christos ;;
99 1.1 christos d)
100 1.1 christos cat ${dir}/ccc | more
101 1.1 christos ;;
102 1.1 christos r)
103 1.1 christos cp ${dir}/ooo ${dir}/new
104 1.1 christos break
105 1.1 christos ;;
106 1.1 christos m)
107 1.1 christos break
108 1.1 christos ;;
109 1.1 christos esac
110 1.1 christos done
111 1.1 christos else
112 1.1 christos while :
113 1.1 christos do
114 1.1 christos echo ${echo_arg} "Abort (a), Redo (r), Modify (m) : $bsc"
115 1.1 christos read ans
116 1.1 christos case "$ans" in
117 1.1 christos a)
118 1.1 christos break 2
119 1.1 christos ;;
120 1.1 christos r)
121 1.1 christos cp ${dir}/ooo ${dir}/new
122 1.1 christos break
123 1.1 christos ;;
124 1.1 christos m)
125 1.1 christos break
126 1.1 christos ;;
127 1.1 christos esac
128 1.1 christos done
129 1.1 christos fi
130 1.1 christos else
131 1.1 christos while :
132 1.1 christos do
133 1.1 christos echo ${echo_arg} "Abort (a), Redo (r), Modify (m) : $bsc"
134 1.1 christos read ans
135 1.1 christos case "$ans" in
136 1.1 christos a)
137 1.1 christos break 2
138 1.1 christos ;;
139 1.1 christos r)
140 1.1 christos cp ${dir}/ooo ${dir}/new
141 1.1 christos break
142 1.1 christos ;;
143 1.1 christos m)
144 1.1 christos break
145 1.1 christos ;;
146 1.1 christos esac
147 1.1 christos done
148 1.1 christos fi
149 1.1 christos fi
150 1.1 christos done
151 1.1 christos fi
152