早期freebsd实现

源代码在线查看: zt

软件大小: 40554 K
上传用户: luyibo54618
关键词: freebsd
下载地址: 免注册下载 普通下载 VIP

相关代码

				#!/bin/sh				# -------------------------------------------------------------				#  Copyright (c) 1991 Regents of the University of Michigan.				#  All rights reserved.				#				#  Redistribution and use is permitted provided that this notice 				#  is preserved and that due credit is given to the University of 				#  Michigan. The name of the University may not be used to endorse 				#  or promote products derived from this software without specific 				#  prior written permission. This software is provided "as is" 				#  without express or implied warranty.				# -------------------------------------------------------------				RECURSE=0 				DEBUG=0 				XFER=/etc/named-xfer 				QUERY=/usr/local/bin/query								# -------------------------------------------------------------				#  Do args				#	-R	Recursive.  Grab all zones below give zone too.				#	-d	Debug.  Print handy debugging info.				# -------------------------------------------------------------				if [ $# = 0 ] ; then					echo "Usage: [-R] [-d] zone"					exit -1				fi				while [ $# != 1 ] ; do					case "$1" in						-R)						RECURSE=1						;;										-d)						DEBUG=1						;;										-?)						echo Illegal arg $1						exit -1						;;									esac					shift				done				ZONELIST=$1								while [ 1 ] ; do					#----------------------------------------------------					# Loop through the list of zones					#----------------------------------------------------					DONE=1					for ZONE in $ZONELIST ; do						#----------------------------------------------------						#  Get the addr of the zone's nameservers						#----------------------------------------------------						$QUERY -t NS -h $ZONE > /tmp/zt.$$ 2> /dev/null						if [ $? -ne 0 ] ; then							echo Zone $zone unknown or nameserver unavailable							exit -1						fi						NSLIST=`cat /tmp/zt.$$ | awk '/address/ { print $4 }'`						#----------------------------------------------------						#  Use named-xfer to bring over a copy of the zone						#  Use 0 as the serial # since will likely be less						#  than the current serial number in the SOA						#----------------------------------------------------						for I in $NSLIST ; do							if [ $DEBUG = 1 ] ; then								echo Trying nameserver at address $I							fi							$XFER -z $ZONE -f /tmp/$ZONE.$$ -s 0 $I							if [ $? = 1 ] ; then								grep -v ";" /tmp/$ZONE.$$ |								awk '{									if ($1 == "$ORIGIN") {										origin=$2										if (origin != old) {											old = origin											print $0										}									}									else										print $0								}' >> /tmp/zt.out.$$								if [ $DEBUG = 1 ] ; then									echo Got zone $ZONE								fi								break							elif [ $DEBUG = 1 ] ; then								echo Nameserver $I for $ZONE not working							fi						done						rm -f /tmp/zt.$$						#----------------------------------------------------						#  If we're doing a recursive query, capture the NS						#  records to build a new ZONELIST of subdomains						#----------------------------------------------------						SUBZONES=""						if [ $RECURSE = 1 -a -s /tmp/$ZONE.$$ ] ; then							awk '{								if ($1 == "$ORIGIN")									origin = substr($2, 1, length($2) - 1)								else if ($3 == "NS") {									sub = $1 "." origin									if (sub != zone)										print sub								}							}' zone=$ZONE /tmp/$ZONE.$$ > /tmp/zl.$$							if [ -s /tmp/zl.$$ ] ; then								SUBZONES=`echo $SUBZONES ; sort -u /tmp/zl.$$`								DONE=0							fi							rm -f /tmp/zl.$$						fi						rm -f /tmp/$ZONE.$$					done					#----------------------------------------------------					#  If we weren't recursive, or we were recursive and					#  have run out of subdomains, we're done					#----------------------------------------------------					if [ $DONE = 1 ] ; then						if [ -s /tmp/zt.out.$$ ] ; then							cat /tmp/zt.out.$$						else							echo "Could not perform a zone transfer of $1"						fi						rm -f /tmp/zt.out.$$						exit 0					else						ZONELIST=$SUBZONES					fi				done				exit 0							

相关资源