Home | History | Annotate | Line # | Download | only in scripts
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