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