1*00b67f09SDavid van Moolenbroek#!/bin/sh 2*00b67f09SDavid van Moolenbroek# 3*00b67f09SDavid van Moolenbroek# Portions Copyright (C) 2004, 2006, 2007, 2012, 2014 Internet Systems Consortium, Inc. ("ISC") 4*00b67f09SDavid van Moolenbroek# Portions Copyright (C) 1999-2001 Internet Software Consortium. 5*00b67f09SDavid van Moolenbroek# 6*00b67f09SDavid van Moolenbroek# Permission to use, copy, modify, and/or distribute this software for any 7*00b67f09SDavid van Moolenbroek# purpose with or without fee is hereby granted, provided that the above 8*00b67f09SDavid van Moolenbroek# copyright notice and this permission notice appear in all copies. 9*00b67f09SDavid van Moolenbroek# 10*00b67f09SDavid van Moolenbroek# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 11*00b67f09SDavid van Moolenbroek# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 12*00b67f09SDavid van Moolenbroek# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 13*00b67f09SDavid van Moolenbroek# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 14*00b67f09SDavid van Moolenbroek# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 15*00b67f09SDavid van Moolenbroek# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16*00b67f09SDavid van Moolenbroek# PERFORMANCE OF THIS SOFTWARE. 17*00b67f09SDavid van Moolenbroek 18*00b67f09SDavid van Moolenbroek# Id: named-bootconf.sh,v 1.12 2007/06/19 23:47:07 tbox Exp 19*00b67f09SDavid van Moolenbroek 20*00b67f09SDavid van Moolenbroek# NetBSD: named-bootconf.sh,v 1.5 1998/12/15 01:00:53 tron Exp 21*00b67f09SDavid van Moolenbroek# 22*00b67f09SDavid van Moolenbroek# Copyright (c) 1995, 1998 The NetBSD Foundation, Inc. 23*00b67f09SDavid van Moolenbroek# All rights reserved. 24*00b67f09SDavid van Moolenbroek# 25*00b67f09SDavid van Moolenbroek# This code is derived from software contributed to The NetBSD Foundation 26*00b67f09SDavid van Moolenbroek# by Matthias Scheler. 27*00b67f09SDavid van Moolenbroek# 28*00b67f09SDavid van Moolenbroek# Redistribution and use in source and binary forms, with or without 29*00b67f09SDavid van Moolenbroek# modification, are permitted provided that the following conditions 30*00b67f09SDavid van Moolenbroek# are met: 31*00b67f09SDavid van Moolenbroek# 1. Redistributions of source code must retain the above copyright 32*00b67f09SDavid van Moolenbroek# notice, this list of conditions and the following disclaimer. 33*00b67f09SDavid van Moolenbroek# 2. Redistributions in binary form must reproduce the above copyright 34*00b67f09SDavid van Moolenbroek# notice, this list of conditions and the following disclaimer in the 35*00b67f09SDavid van Moolenbroek# documentation and/or other materials provided with the distribution. 36*00b67f09SDavid van Moolenbroek# 37*00b67f09SDavid van Moolenbroek# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 38*00b67f09SDavid van Moolenbroek# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 39*00b67f09SDavid van Moolenbroek# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 40*00b67f09SDavid van Moolenbroek# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 41*00b67f09SDavid van Moolenbroek# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 42*00b67f09SDavid van Moolenbroek# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 43*00b67f09SDavid van Moolenbroek# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 44*00b67f09SDavid van Moolenbroek# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 45*00b67f09SDavid van Moolenbroek# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 46*00b67f09SDavid van Moolenbroek# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 47*00b67f09SDavid van Moolenbroek# POSSIBILITY OF SUCH DAMAGE. 48*00b67f09SDavid van Moolenbroek 49*00b67f09SDavid van Moolenbroekif [ ${OPTIONFILE-X} = X ]; then 50*00b67f09SDavid van Moolenbroek WORKDIR=/tmp/`date +%s`.$$ 51*00b67f09SDavid van Moolenbroek ( umask 077 ; mkdir $WORKDIR ) || { 52*00b67f09SDavid van Moolenbroek echo "unable to create work directory '$WORKDIR'" >&2 53*00b67f09SDavid van Moolenbroek exit 1 54*00b67f09SDavid van Moolenbroek } 55*00b67f09SDavid van Moolenbroek OPTIONFILE=$WORKDIR/options 56*00b67f09SDavid van Moolenbroek ZONEFILE=$WORKDIR/zones 57*00b67f09SDavid van Moolenbroek COMMENTFILE=$WORKDIR/comments 58*00b67f09SDavid van Moolenbroek export OPTIONFILE ZONEFILE COMMENTFILE 59*00b67f09SDavid van Moolenbroek touch $OPTIONFILE $ZONEFILE $COMMENTFILE 60*00b67f09SDavid van Moolenbroek DUMP=1 61*00b67f09SDavid van Moolenbroekelse 62*00b67f09SDavid van Moolenbroek DUMP=0 63*00b67f09SDavid van Moolenbroekfi 64*00b67f09SDavid van Moolenbroek 65*00b67f09SDavid van Moolenbroekwhile read CMD ARGS; do 66*00b67f09SDavid van Moolenbroek class= 67*00b67f09SDavid van Moolenbroek CMD=`echo "${CMD}" | tr '[A-Z]' '[a-z]'` 68*00b67f09SDavid van Moolenbroek case $CMD in 69*00b67f09SDavid van Moolenbroek \; ) 70*00b67f09SDavid van Moolenbroek echo \# $ARGS >>$COMMENTFILE 71*00b67f09SDavid van Moolenbroek ;; 72*00b67f09SDavid van Moolenbroek cache ) 73*00b67f09SDavid van Moolenbroek set - X $ARGS 74*00b67f09SDavid van Moolenbroek shift 75*00b67f09SDavid van Moolenbroek if [ $# -eq 2 ]; then 76*00b67f09SDavid van Moolenbroek (echo "" 77*00b67f09SDavid van Moolenbroek cat $COMMENTFILE 78*00b67f09SDavid van Moolenbroek echo "zone \"$1\" {" 79*00b67f09SDavid van Moolenbroek echo " type hint;" 80*00b67f09SDavid van Moolenbroek echo " file \"$2\";" 81*00b67f09SDavid van Moolenbroek echo "};") >>$ZONEFILE 82*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 83*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 84*00b67f09SDavid van Moolenbroek fi 85*00b67f09SDavid van Moolenbroek ;; 86*00b67f09SDavid van Moolenbroek directory ) 87*00b67f09SDavid van Moolenbroek set - X $ARGS 88*00b67f09SDavid van Moolenbroek shift 89*00b67f09SDavid van Moolenbroek if [ $# -eq 1 ]; then 90*00b67f09SDavid van Moolenbroek (cat $COMMENTFILE 91*00b67f09SDavid van Moolenbroek echo " directory \"$1\";") >>$OPTIONFILE 92*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 93*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 94*00b67f09SDavid van Moolenbroek 95*00b67f09SDavid van Moolenbroek DIRECTORY=$1 96*00b67f09SDavid van Moolenbroek export DIRECTORY 97*00b67f09SDavid van Moolenbroek fi 98*00b67f09SDavid van Moolenbroek ;; 99*00b67f09SDavid van Moolenbroek forwarders ) 100*00b67f09SDavid van Moolenbroek (cat $COMMENTFILE 101*00b67f09SDavid van Moolenbroek echo " forwarders {" 102*00b67f09SDavid van Moolenbroek for ARG in $ARGS; do 103*00b67f09SDavid van Moolenbroek echo " $ARG;" 104*00b67f09SDavid van Moolenbroek done 105*00b67f09SDavid van Moolenbroek echo " };") >>$OPTIONFILE 106*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 107*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 108*00b67f09SDavid van Moolenbroek ;; 109*00b67f09SDavid van Moolenbroek include ) 110*00b67f09SDavid van Moolenbroek if [ "$ARGS" != "" ]; then 111*00b67f09SDavid van Moolenbroek (cd ${DIRECTORY-.}; cat $ARGS) | $0 112*00b67f09SDavid van Moolenbroek fi 113*00b67f09SDavid van Moolenbroek ;; 114*00b67f09SDavid van Moolenbroek limit ) 115*00b67f09SDavid van Moolenbroek ARGS=`echo "${ARGS}" | tr '[A-Z]' '[a-z]'` 116*00b67f09SDavid van Moolenbroek set - X $ARGS 117*00b67f09SDavid van Moolenbroek shift 118*00b67f09SDavid van Moolenbroek if [ $# -eq 2 ]; then 119*00b67f09SDavid van Moolenbroek cat $COMMENTFILE >>$OPTIONFILE 120*00b67f09SDavid van Moolenbroek case $1 in 121*00b67f09SDavid van Moolenbroek datasize | files | transfers-in | transfers-per-ns ) 122*00b67f09SDavid van Moolenbroek echo " $1 $2;" >>$OPTIONFILE 123*00b67f09SDavid van Moolenbroek ;; 124*00b67f09SDavid van Moolenbroek esac 125*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 126*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 127*00b67f09SDavid van Moolenbroek fi 128*00b67f09SDavid van Moolenbroek ;; 129*00b67f09SDavid van Moolenbroek options ) 130*00b67f09SDavid van Moolenbroek ARGS=`echo "${ARGS}" | tr '[A-Z]' '[a-z]'` 131*00b67f09SDavid van Moolenbroek cat $COMMENTFILE >>$OPTIONFILE 132*00b67f09SDavid van Moolenbroek for ARG in $ARGS; do 133*00b67f09SDavid van Moolenbroek case $ARG in 134*00b67f09SDavid van Moolenbroek fake-iquery ) 135*00b67f09SDavid van Moolenbroek echo " fake-iquery yes;" >>$OPTIONFILE 136*00b67f09SDavid van Moolenbroek ;; 137*00b67f09SDavid van Moolenbroek forward-only ) 138*00b67f09SDavid van Moolenbroek echo " forward only;" >>$OPTIONFILE 139*00b67f09SDavid van Moolenbroek ;; 140*00b67f09SDavid van Moolenbroek no-fetch-glue ) 141*00b67f09SDavid van Moolenbroek echo " fetch-glue no;" >>$OPTIONFILE 142*00b67f09SDavid van Moolenbroek ;; 143*00b67f09SDavid van Moolenbroek no-recursion ) 144*00b67f09SDavid van Moolenbroek echo " recursion no;" >>$OPTIONFILE 145*00b67f09SDavid van Moolenbroek ;; 146*00b67f09SDavid van Moolenbroek esac 147*00b67f09SDavid van Moolenbroek done 148*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 149*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 150*00b67f09SDavid van Moolenbroek ;; 151*00b67f09SDavid van Moolenbroek primary|primary/* ) 152*00b67f09SDavid van Moolenbroek case $CMD in 153*00b67f09SDavid van Moolenbroek primary/chaos ) 154*00b67f09SDavid van Moolenbroek class="chaos " 155*00b67f09SDavid van Moolenbroek ;; 156*00b67f09SDavid van Moolenbroek primary/hs ) 157*00b67f09SDavid van Moolenbroek class="hesiod " 158*00b67f09SDavid van Moolenbroek ;; 159*00b67f09SDavid van Moolenbroek esac 160*00b67f09SDavid van Moolenbroek set - X $ARGS 161*00b67f09SDavid van Moolenbroek shift 162*00b67f09SDavid van Moolenbroek if [ $# -eq 2 ]; then 163*00b67f09SDavid van Moolenbroek (echo "" 164*00b67f09SDavid van Moolenbroek cat $COMMENTFILE 165*00b67f09SDavid van Moolenbroek echo "zone \"$1\" ${class}{" 166*00b67f09SDavid van Moolenbroek echo " type master;" 167*00b67f09SDavid van Moolenbroek echo " file \"$2\";" 168*00b67f09SDavid van Moolenbroek echo "};") >>$ZONEFILE 169*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 170*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 171*00b67f09SDavid van Moolenbroek fi 172*00b67f09SDavid van Moolenbroek ;; 173*00b67f09SDavid van Moolenbroek secondary|secondary/* ) 174*00b67f09SDavid van Moolenbroek case $CMD in 175*00b67f09SDavid van Moolenbroek secondary/chaos ) 176*00b67f09SDavid van Moolenbroek class="chaos " 177*00b67f09SDavid van Moolenbroek ;; 178*00b67f09SDavid van Moolenbroek secondary/hs ) 179*00b67f09SDavid van Moolenbroek class="hesiod " 180*00b67f09SDavid van Moolenbroek ;; 181*00b67f09SDavid van Moolenbroek esac 182*00b67f09SDavid van Moolenbroek set - X $ARGS 183*00b67f09SDavid van Moolenbroek shift 184*00b67f09SDavid van Moolenbroek if [ $# -gt 2 ]; then 185*00b67f09SDavid van Moolenbroek ZONE=$1 186*00b67f09SDavid van Moolenbroek shift 187*00b67f09SDavid van Moolenbroek PRIMARIES=$1 188*00b67f09SDavid van Moolenbroek while [ $# -gt 2 ]; do 189*00b67f09SDavid van Moolenbroek shift 190*00b67f09SDavid van Moolenbroek PRIMARIES="$PRIMARIES $1" 191*00b67f09SDavid van Moolenbroek done 192*00b67f09SDavid van Moolenbroek (echo "" 193*00b67f09SDavid van Moolenbroek cat $COMMENTFILE 194*00b67f09SDavid van Moolenbroek echo "zone \"$ZONE\" ${class}{" 195*00b67f09SDavid van Moolenbroek echo " type slave;" 196*00b67f09SDavid van Moolenbroek echo " file \"$2\";" 197*00b67f09SDavid van Moolenbroek echo " masters {" 198*00b67f09SDavid van Moolenbroek for PRIMARY in $PRIMARIES; do 199*00b67f09SDavid van Moolenbroek echo " $PRIMARY;" 200*00b67f09SDavid van Moolenbroek done 201*00b67f09SDavid van Moolenbroek echo " };" 202*00b67f09SDavid van Moolenbroek echo "};") >>$ZONEFILE 203*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 204*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 205*00b67f09SDavid van Moolenbroek fi 206*00b67f09SDavid van Moolenbroek ;; 207*00b67f09SDavid van Moolenbroek stub|stub/* ) 208*00b67f09SDavid van Moolenbroek case $CMD in 209*00b67f09SDavid van Moolenbroek stub/chaos ) 210*00b67f09SDavid van Moolenbroek class="chaos " 211*00b67f09SDavid van Moolenbroek ;; 212*00b67f09SDavid van Moolenbroek stub/hs ) 213*00b67f09SDavid van Moolenbroek class="hesiod " 214*00b67f09SDavid van Moolenbroek ;; 215*00b67f09SDavid van Moolenbroek esac 216*00b67f09SDavid van Moolenbroek set - X $ARGS 217*00b67f09SDavid van Moolenbroek shift 218*00b67f09SDavid van Moolenbroek if [ $# -gt 2 ]; then 219*00b67f09SDavid van Moolenbroek ZONE=$1 220*00b67f09SDavid van Moolenbroek shift 221*00b67f09SDavid van Moolenbroek PRIMARIES=$1 222*00b67f09SDavid van Moolenbroek while [ $# -gt 2 ]; do 223*00b67f09SDavid van Moolenbroek shift 224*00b67f09SDavid van Moolenbroek PRIMARIES="$PRIMARIES $1" 225*00b67f09SDavid van Moolenbroek done 226*00b67f09SDavid van Moolenbroek (echo "" 227*00b67f09SDavid van Moolenbroek cat $COMMENTFILE 228*00b67f09SDavid van Moolenbroek echo "zone \"$ZONE\" ${class}{" 229*00b67f09SDavid van Moolenbroek echo " type stub;" 230*00b67f09SDavid van Moolenbroek echo " file \"$2\";" 231*00b67f09SDavid van Moolenbroek echo " masters {" 232*00b67f09SDavid van Moolenbroek for PRIMARY in $PRIMARIES; do 233*00b67f09SDavid van Moolenbroek echo " $PRIMARY;" 234*00b67f09SDavid van Moolenbroek done 235*00b67f09SDavid van Moolenbroek echo " };" 236*00b67f09SDavid van Moolenbroek echo "};") >>$ZONEFILE 237*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 238*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 239*00b67f09SDavid van Moolenbroek fi 240*00b67f09SDavid van Moolenbroek ;; 241*00b67f09SDavid van Moolenbroek slave ) 242*00b67f09SDavid van Moolenbroek cat $COMMENTFILE >>$OPTIONFILE 243*00b67f09SDavid van Moolenbroek echo " forward only;" >>$OPTIONFILE 244*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 245*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 246*00b67f09SDavid van Moolenbroek ;; 247*00b67f09SDavid van Moolenbroek sortlist ) 248*00b67f09SDavid van Moolenbroek (cat $COMMENTFILE 249*00b67f09SDavid van Moolenbroek echo " topology {" 250*00b67f09SDavid van Moolenbroek for ARG in $ARGS; do 251*00b67f09SDavid van Moolenbroek case $ARG in 252*00b67f09SDavid van Moolenbroek *.0.0.0 ) 253*00b67f09SDavid van Moolenbroek echo " $ARG/8;" 254*00b67f09SDavid van Moolenbroek ;; 255*00b67f09SDavid van Moolenbroek *.0.0 ) 256*00b67f09SDavid van Moolenbroek echo " $ARG/16;" 257*00b67f09SDavid van Moolenbroek ;; 258*00b67f09SDavid van Moolenbroek *.0 ) 259*00b67f09SDavid van Moolenbroek echo " $ARG/24;" 260*00b67f09SDavid van Moolenbroek ;; 261*00b67f09SDavid van Moolenbroek * ) 262*00b67f09SDavid van Moolenbroek echo " $ARG;" 263*00b67f09SDavid van Moolenbroek ;; 264*00b67f09SDavid van Moolenbroek esac 265*00b67f09SDavid van Moolenbroek done 266*00b67f09SDavid van Moolenbroek echo " };") >>$OPTIONFILE 267*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 268*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 269*00b67f09SDavid van Moolenbroek ;; 270*00b67f09SDavid van Moolenbroek tcplist | xfrnets ) 271*00b67f09SDavid van Moolenbroek (cat $COMMENTFILE 272*00b67f09SDavid van Moolenbroek echo " allow-transfer {" 273*00b67f09SDavid van Moolenbroek for ARG in $ARGS; do 274*00b67f09SDavid van Moolenbroek case $ARG in 275*00b67f09SDavid van Moolenbroek *.0.0.0 ) 276*00b67f09SDavid van Moolenbroek echo " $ARG/8;" 277*00b67f09SDavid van Moolenbroek ;; 278*00b67f09SDavid van Moolenbroek *.0.0 ) 279*00b67f09SDavid van Moolenbroek echo " $ARG/16;" 280*00b67f09SDavid van Moolenbroek ;; 281*00b67f09SDavid van Moolenbroek *.0 ) 282*00b67f09SDavid van Moolenbroek echo " $ARG/24;" 283*00b67f09SDavid van Moolenbroek ;; 284*00b67f09SDavid van Moolenbroek * ) 285*00b67f09SDavid van Moolenbroek echo " $ARG;" 286*00b67f09SDavid van Moolenbroek ;; 287*00b67f09SDavid van Moolenbroek esac 288*00b67f09SDavid van Moolenbroek done 289*00b67f09SDavid van Moolenbroek echo " };") >>$OPTIONFILE 290*00b67f09SDavid van Moolenbroek rm -f $COMMENTFILE 291*00b67f09SDavid van Moolenbroek touch $COMMENTFILE 292*00b67f09SDavid van Moolenbroek ;; 293*00b67f09SDavid van Moolenbroek esac 294*00b67f09SDavid van Moolenbroekdone 295*00b67f09SDavid van Moolenbroek 296*00b67f09SDavid van Moolenbroekif [ $DUMP -eq 1 ]; then 297*00b67f09SDavid van Moolenbroek echo "" 298*00b67f09SDavid van Moolenbroek echo "options {" 299*00b67f09SDavid van Moolenbroek cat $OPTIONFILE 300*00b67f09SDavid van Moolenbroek echo "};" 301*00b67f09SDavid van Moolenbroek cat $ZONEFILE $COMMENTFILE 302*00b67f09SDavid van Moolenbroek 303*00b67f09SDavid van Moolenbroek rm -f $OPTIONFILE $ZONEFILE $COMMENTFILE 304*00b67f09SDavid van Moolenbroek rmdir $WORKDIR 305*00b67f09SDavid van Moolenbroekfi 306*00b67f09SDavid van Moolenbroek 307*00b67f09SDavid van Moolenbroekexit 0 308