zone-edit.sh.in revision bf8267aa453e5d2a735ed732a043b77a0b355b20
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User#!/bin/sh
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User#
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User#
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# Permission to use, copy, modify, and/or distribute this software for any
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User# purpose with or without fee is hereby granted, provided that the above
8c225507766814e78e168b17a24b8a47ca7f8c37Tinderbox User# copyright notice and this permission notice appear in all copies.
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User#
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# PERFORMANCE OF THIS SOFTWARE.
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
f9ce6280cec79deb16ff6d9807aa493ff23e10d9Tinderbox User# $Id: zone-edit.sh.in,v 1.2 2010/12/21 23:47:08 tbox Exp $
c313914d0e66b20969215e519bbf2ab4ecf39512Tinderbox User
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox Userdir=/tmp/zone-edit.$$
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox Usermkdir ${dir} || exit 1
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunttrap "/bin/rm -rf ${dir}" 0
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox Userprefix=@prefix@
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox Userexec_prefix=@exec_prefix@
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox Userbindir=@bindir@
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox Usersbindir=@sbindir@
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntdig=${bindir}/dig
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox Usercheckzone=${sbindir}/named-checkzone
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox Usernsupdate=${bindir}/nsupdate
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntcase $# in
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt0) echo "Usage: zone-edit <zone> [dig options] [ -- nsupdate options ]"; exit 0 ;;
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox Useresac
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# What kind of echo are we using?
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunttry=`echo -n ""`
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntif test "X$try" = "X-n "
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntthen
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt echo_arg=""
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User bsc="\\c"
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox Userelse
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User echo_arg="-n"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt bsc=""
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userfi
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userzone="${1}"
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Usershift
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userdigopts=
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userwhile test $# -ne 0
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userdo
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User case "${1}" in
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User --)
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User shift
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User break
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User ;;
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User *)
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User digopts="$digopts $1"
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User shift
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User ;;
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User esac
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userdone
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User${dig} axfr "$zone" $digopts |
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userawk '$4 == "RRSIG" || $4 == "NSEC" || $4 == "NSEC3" || $4 == "NSEC3PARAM" { next; } { print; }' > ${dir}/old
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userif test -s ${dir}/old
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userthen
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User ${checkzone} -q -D "$zone" ${dir}/old > ${dir}/ooo
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userfi
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userif test -s ${dir}/ooo
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userthen
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User cp ${dir}/ooo ${dir}/new
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User while :
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox User do
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User if ${VISUAL:-${EDITOR:-/bin/ed}} ${dir}/new
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox User then
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User if ${checkzone} -q -D "$zone" ${dir}/new > ${dir}/nnn
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User then
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User sort ${dir}/ooo > ${dir}/s1
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User sort ${dir}/nnn > ${dir}/s2
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User comm -23 ${dir}/s1 ${dir}/s2 |
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User sed 's/^/update delete /' > ${dir}/ccc
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User comm -13 ${dir}/s1 ${dir}/s2 |
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User sed 's/^/update add /' >> ${dir}/ccc
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User if test -s ${dir}/ccc
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User then
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User cat ${dir}/ccc | more
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User while :
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User do
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User echo ${echo_arg} "Update (u), Abort (a), Redo (r), Modify (m), Display (d) : $bsc"
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User read ans
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User case "$ans" in
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User u)
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User (
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User echo zone "$zone"
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User cat ${dir}/ccc
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User echo send
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User ) | ${nsupdate} "$@"
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User break 2
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User ;;
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User a)
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User break 2
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User ;;
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User d)
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User cat ${dir}/ccc | more
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User ;;
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User r)
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User cp ${dir}/ooo ${dir}/new
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User break
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User ;;
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User m)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt break
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User ;;
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User esac
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User done
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User else
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User while :
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User do
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User echo ${echo_arg} "Abort (a), Redo (r), Modify (m) : $bsc"
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User read ans
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User case "$ans" in
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User a)
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User break 2
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User ;;
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User r)
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User cp ${dir}/ooo ${dir}/new
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User break
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User ;;
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User m)
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User break
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User ;;
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User esac
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User done
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User fi
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User else
111d5ef471ecec90671f480afd8f93e550a80917Tinderbox User while :
111d5ef471ecec90671f480afd8f93e550a80917Tinderbox User do
111d5ef471ecec90671f480afd8f93e550a80917Tinderbox User echo ${echo_arg} "Abort (a), Redo (r), Modify (m) : $bsc"
111d5ef471ecec90671f480afd8f93e550a80917Tinderbox User read ans
111d5ef471ecec90671f480afd8f93e550a80917Tinderbox User case "$ans" in
111d5ef471ecec90671f480afd8f93e550a80917Tinderbox User a)
111d5ef471ecec90671f480afd8f93e550a80917Tinderbox User break 2
111d5ef471ecec90671f480afd8f93e550a80917Tinderbox User ;;
111d5ef471ecec90671f480afd8f93e550a80917Tinderbox User r)
d605cf32834fd19b7d16848655cdb5e458f34aa5Tinderbox User cp ${dir}/ooo ${dir}/new
d605cf32834fd19b7d16848655cdb5e458f34aa5Tinderbox User break
d605cf32834fd19b7d16848655cdb5e458f34aa5Tinderbox User ;;
d605cf32834fd19b7d16848655cdb5e458f34aa5Tinderbox User m)
d605cf32834fd19b7d16848655cdb5e458f34aa5Tinderbox User break
d605cf32834fd19b7d16848655cdb5e458f34aa5Tinderbox User ;;
d605cf32834fd19b7d16848655cdb5e458f34aa5Tinderbox User esac
d605cf32834fd19b7d16848655cdb5e458f34aa5Tinderbox User done
d605cf32834fd19b7d16848655cdb5e458f34aa5Tinderbox User fi
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User fi
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User done
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox Userfi
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User