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