xref: /minix3/external/bsd/bind/dist/contrib/scripts/zone-edit.sh.in (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek#!/bin/sh
2*00b67f09SDavid van Moolenbroek#
3*00b67f09SDavid van Moolenbroek# Copyright (C) 2010, 2012, 2014  Internet Systems Consortium, Inc. ("ISC")
4*00b67f09SDavid van Moolenbroek#
5*00b67f09SDavid van Moolenbroek# Permission to use, copy, modify, and/or distribute this software for any
6*00b67f09SDavid van Moolenbroek# purpose with or without fee is hereby granted, provided that the above
7*00b67f09SDavid van Moolenbroek# copyright notice and this permission notice appear in all copies.
8*00b67f09SDavid van Moolenbroek#
9*00b67f09SDavid van Moolenbroek# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10*00b67f09SDavid van Moolenbroek# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11*00b67f09SDavid van Moolenbroek# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12*00b67f09SDavid van Moolenbroek# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13*00b67f09SDavid van Moolenbroek# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14*00b67f09SDavid van Moolenbroek# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15*00b67f09SDavid van Moolenbroek# PERFORMANCE OF THIS SOFTWARE.
16*00b67f09SDavid van Moolenbroek
17*00b67f09SDavid van Moolenbroek# Id: zone-edit.sh.in,v 1.2 2010/12/21 23:47:08 tbox Exp
18*00b67f09SDavid van Moolenbroek
19*00b67f09SDavid van Moolenbroekdir=/tmp/zone-edit.$$
20*00b67f09SDavid van Moolenbroekmkdir ${dir} || exit 1
21*00b67f09SDavid van Moolenbroektrap "/bin/rm -rf ${dir}" 0
22*00b67f09SDavid van Moolenbroek
23*00b67f09SDavid van Moolenbroekprefix=@prefix@
24*00b67f09SDavid van Moolenbroekexec_prefix=@exec_prefix@
25*00b67f09SDavid van Moolenbroekbindir=@bindir@
26*00b67f09SDavid van Moolenbroeksbindir=@sbindir@
27*00b67f09SDavid van Moolenbroek
28*00b67f09SDavid van Moolenbroekdig=${bindir}/dig
29*00b67f09SDavid van Moolenbroekcheckzone=${sbindir}/named-checkzone
30*00b67f09SDavid van Moolenbroeknsupdate=${bindir}/nsupdate
31*00b67f09SDavid van Moolenbroek
32*00b67f09SDavid van Moolenbroekcase $# in
33*00b67f09SDavid van Moolenbroek0) echo "Usage: zone-edit <zone> [dig options] [ -- nsupdate options ]"; exit 0 ;;
34*00b67f09SDavid van Moolenbroekesac
35*00b67f09SDavid van Moolenbroek
36*00b67f09SDavid van Moolenbroek# What kind of echo are we using?
37*00b67f09SDavid van Moolenbroektry=`echo -n ""`
38*00b67f09SDavid van Moolenbroekif test "X$try" = "X-n "
39*00b67f09SDavid van Moolenbroekthen
40*00b67f09SDavid van Moolenbroek    echo_arg=""
41*00b67f09SDavid van Moolenbroek    bsc="\\c"
42*00b67f09SDavid van Moolenbroekelse
43*00b67f09SDavid van Moolenbroek    echo_arg="-n"
44*00b67f09SDavid van Moolenbroek    bsc=""
45*00b67f09SDavid van Moolenbroekfi
46*00b67f09SDavid van Moolenbroek
47*00b67f09SDavid van Moolenbroekzone="${1}"
48*00b67f09SDavid van Moolenbroekshift
49*00b67f09SDavid van Moolenbroekdigopts=
50*00b67f09SDavid van Moolenbroekwhile test $# -ne 0
51*00b67f09SDavid van Moolenbroekdo
52*00b67f09SDavid van Moolenbroek    case "${1}" in
53*00b67f09SDavid van Moolenbroek    --)
54*00b67f09SDavid van Moolenbroek	shift
55*00b67f09SDavid van Moolenbroek	break
56*00b67f09SDavid van Moolenbroek	;;
57*00b67f09SDavid van Moolenbroek    *)
58*00b67f09SDavid van Moolenbroek	digopts="$digopts $1"
59*00b67f09SDavid van Moolenbroek	shift
60*00b67f09SDavid van Moolenbroek	;;
61*00b67f09SDavid van Moolenbroek    esac
62*00b67f09SDavid van Moolenbroekdone
63*00b67f09SDavid van Moolenbroek
64*00b67f09SDavid van Moolenbroek${dig} axfr "$zone" $digopts |
65*00b67f09SDavid van Moolenbroekawk '$4 == "RRSIG" || $4 == "NSEC" || $4 == "NSEC3" || $4 == "NSEC3PARAM" { next; } { print; }' > ${dir}/old
66*00b67f09SDavid van Moolenbroek
67*00b67f09SDavid van Moolenbroekif test -s ${dir}/old
68*00b67f09SDavid van Moolenbroekthen
69*00b67f09SDavid van Moolenbroek    ${checkzone} -q -D "$zone" ${dir}/old > ${dir}/ooo
70*00b67f09SDavid van Moolenbroekfi
71*00b67f09SDavid van Moolenbroek
72*00b67f09SDavid van Moolenbroekif test -s ${dir}/ooo
73*00b67f09SDavid van Moolenbroekthen
74*00b67f09SDavid van Moolenbroek    cp ${dir}/ooo ${dir}/new
75*00b67f09SDavid van Moolenbroek    while :
76*00b67f09SDavid van Moolenbroek    do
77*00b67f09SDavid van Moolenbroek        if ${VISUAL:-${EDITOR:-/bin/ed}} ${dir}/new
78*00b67f09SDavid van Moolenbroek        then
79*00b67f09SDavid van Moolenbroek	    if ${checkzone} -q -D "$zone" ${dir}/new > ${dir}/nnn
80*00b67f09SDavid van Moolenbroek	    then
81*00b67f09SDavid van Moolenbroek	        sort ${dir}/ooo > ${dir}/s1
82*00b67f09SDavid van Moolenbroek	        sort ${dir}/nnn > ${dir}/s2
83*00b67f09SDavid van Moolenbroek	        comm -23 ${dir}/s1 ${dir}/s2 |
84*00b67f09SDavid van Moolenbroek		sed 's/^/update delete /' > ${dir}/ccc
85*00b67f09SDavid van Moolenbroek	        comm -13 ${dir}/s1 ${dir}/s2 |
86*00b67f09SDavid van Moolenbroek		sed 's/^/update add /' >> ${dir}/ccc
87*00b67f09SDavid van Moolenbroek	        if test -s ${dir}/ccc
88*00b67f09SDavid van Moolenbroek	        then
89*00b67f09SDavid van Moolenbroek		    cat ${dir}/ccc | more
90*00b67f09SDavid van Moolenbroek		    while :
91*00b67f09SDavid van Moolenbroek		    do
92*00b67f09SDavid van Moolenbroek		        echo ${echo_arg} "Update (u), Abort (a), Redo (r), Modify (m), Display (d) : $bsc"
93*00b67f09SDavid van Moolenbroek			read ans
94*00b67f09SDavid van Moolenbroek			case "$ans" in
95*00b67f09SDavid van Moolenbroek		        u)
96*00b67f09SDavid van Moolenbroek			    (
97*00b67f09SDavid van Moolenbroek			    echo zone "$zone"
98*00b67f09SDavid van Moolenbroek			    cat ${dir}/ccc
99*00b67f09SDavid van Moolenbroek			    echo send
100*00b67f09SDavid van Moolenbroek			    ) | ${nsupdate} "$@"
101*00b67f09SDavid van Moolenbroek			    break 2
102*00b67f09SDavid van Moolenbroek			    ;;
103*00b67f09SDavid van Moolenbroek			a)
104*00b67f09SDavid van Moolenbroek			    break 2
105*00b67f09SDavid van Moolenbroek			    ;;
106*00b67f09SDavid van Moolenbroek			d)
107*00b67f09SDavid van Moolenbroek			    cat ${dir}/ccc | more
108*00b67f09SDavid van Moolenbroek			    ;;
109*00b67f09SDavid van Moolenbroek			r)
110*00b67f09SDavid van Moolenbroek			    cp ${dir}/ooo ${dir}/new
111*00b67f09SDavid van Moolenbroek			    break
112*00b67f09SDavid van Moolenbroek			    ;;
113*00b67f09SDavid van Moolenbroek			m)
114*00b67f09SDavid van Moolenbroek			    break
115*00b67f09SDavid van Moolenbroek			    ;;
116*00b67f09SDavid van Moolenbroek		        esac
117*00b67f09SDavid van Moolenbroek		    done
118*00b67f09SDavid van Moolenbroek		else
119*00b67f09SDavid van Moolenbroek		    while :
120*00b67f09SDavid van Moolenbroek		    do
121*00b67f09SDavid van Moolenbroek		        echo ${echo_arg} "Abort (a), Redo (r), Modify (m) : $bsc"
122*00b67f09SDavid van Moolenbroek		        read ans
123*00b67f09SDavid van Moolenbroek		        case "$ans" in
124*00b67f09SDavid van Moolenbroek		        a)
125*00b67f09SDavid van Moolenbroek		            break 2
126*00b67f09SDavid van Moolenbroek		            ;;
127*00b67f09SDavid van Moolenbroek		        r)
128*00b67f09SDavid van Moolenbroek		            cp ${dir}/ooo ${dir}/new
129*00b67f09SDavid van Moolenbroek		    	    break
130*00b67f09SDavid van Moolenbroek		            ;;
131*00b67f09SDavid van Moolenbroek		        m)
132*00b67f09SDavid van Moolenbroek			    break
133*00b67f09SDavid van Moolenbroek		            ;;
134*00b67f09SDavid van Moolenbroek		        esac
135*00b67f09SDavid van Moolenbroek		    done
136*00b67f09SDavid van Moolenbroek	        fi
137*00b67f09SDavid van Moolenbroek	    else
138*00b67f09SDavid van Moolenbroek		while :
139*00b67f09SDavid van Moolenbroek		do
140*00b67f09SDavid van Moolenbroek		    echo ${echo_arg} "Abort (a), Redo (r), Modify (m) : $bsc"
141*00b67f09SDavid van Moolenbroek		    read ans
142*00b67f09SDavid van Moolenbroek		    case "$ans" in
143*00b67f09SDavid van Moolenbroek		    a)
144*00b67f09SDavid van Moolenbroek		        break 2
145*00b67f09SDavid van Moolenbroek		        ;;
146*00b67f09SDavid van Moolenbroek		    r)
147*00b67f09SDavid van Moolenbroek		        cp ${dir}/ooo ${dir}/new
148*00b67f09SDavid van Moolenbroek		    	break
149*00b67f09SDavid van Moolenbroek		        ;;
150*00b67f09SDavid van Moolenbroek		    m)
151*00b67f09SDavid van Moolenbroek			break
152*00b67f09SDavid van Moolenbroek		        ;;
153*00b67f09SDavid van Moolenbroek		    esac
154*00b67f09SDavid van Moolenbroek		done
155*00b67f09SDavid van Moolenbroek	    fi
156*00b67f09SDavid van Moolenbroek        fi
157*00b67f09SDavid van Moolenbroek    done
158*00b67f09SDavid van Moolenbroekfi
159