mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-02 15:05:16 +00:00
[1213] Common IXFR test functions now in separate file
This commit is contained in:
@@ -965,6 +965,7 @@ AC_OUTPUT([doc/version.ent
|
|||||||
tests/system/glue/setup.sh
|
tests/system/glue/setup.sh
|
||||||
tests/system/glue/nsx1/b10-config.db
|
tests/system/glue/nsx1/b10-config.db
|
||||||
tests/system/bindctl/nsx1/b10-config.db.template
|
tests/system/bindctl/nsx1/b10-config.db.template
|
||||||
|
tests/system/ixfr/ixfr_init.sh
|
||||||
tests/system/ixfr/in-1/setup.sh
|
tests/system/ixfr/in-1/setup.sh
|
||||||
tests/system/ixfr/in-1/tests.sh
|
tests/system/ixfr/in-1/tests.sh
|
||||||
tests/system/ixfr/in-1/nsx2/b10-config.db
|
tests/system/ixfr/in-1/nsx2/b10-config.db
|
||||||
@@ -997,6 +998,7 @@ AC_OUTPUT([doc/version.ent
|
|||||||
chmod +x src/lib/python/isc/log/tests/log_console.py
|
chmod +x src/lib/python/isc/log/tests/log_console.py
|
||||||
chmod +x tests/system/conf.sh
|
chmod +x tests/system/conf.sh
|
||||||
chmod +x tests/system/run.sh
|
chmod +x tests/system/run.sh
|
||||||
|
chmod +x tests/system/ixfr/ixfr_init.sh
|
||||||
chmod +x tests/system/ixfr/in-1/setup.sh
|
chmod +x tests/system/ixfr/in-1/setup.sh
|
||||||
chmod +x tests/system/ixfr/in-1/tests.sh
|
chmod +x tests/system/ixfr/in-1/tests.sh
|
||||||
])
|
])
|
||||||
|
@@ -5,48 +5,49 @@ See COPYRIGHT in the source root or http://isc.org/copyright.html for terms.
|
|||||||
This is a simple test environment for running BIND 10 system tests
|
This is a simple test environment for running BIND 10 system tests
|
||||||
involving multiple name servers. It was originally developed for BIND
|
involving multiple name servers. It was originally developed for BIND
|
||||||
9, and has been ported to test BIND 10 implementations. Ideally we
|
9, and has been ported to test BIND 10 implementations. Ideally we
|
||||||
should share the same framework for both versions, so some part of
|
should share the same framework for both versions, so some part of the
|
||||||
the original setup are kept, even though they are BIND 9 specific and
|
original setup are kept, even though they are BIND 9 specific and not
|
||||||
not currently used.
|
currently used.
|
||||||
|
|
||||||
Also, these tests generally rely on BIND 9 programs, most commonly its
|
Also, these tests generally rely on BIND 9 programs, most commonly
|
||||||
dig, and will sometimes be its name server (named). So, the test
|
its dig, and will sometimes be its name server (named). So, the test
|
||||||
environment assumes that there's a source tree of BIND 9 where its
|
environment assumes that there's a source tree of BIND 9 where its
|
||||||
programs are built, and that an environment variable "BIND9_TOP" is
|
programs are built, and that an environment variable "BIND9_TOP" is set
|
||||||
set to point to the top directory of the source tree.
|
to point to the top directory of the source tree.
|
||||||
|
|
||||||
There are multiple test suites, each in a separate subdirectory and
|
There are multiple test suites, each in a separate subdirectory and
|
||||||
involving a different DNS setup. They are:
|
involving a different DNS setup. They are:
|
||||||
|
|
||||||
bindctl/ Some basic management operations using the bindctl tool
|
bindctl/ Some basic management operations using the bindctl tool
|
||||||
glue/ Glue handling tests
|
glue/ Glue handling tests
|
||||||
|
ixfr/ Incremental transfer tests
|
||||||
|
|
||||||
(the following tests are planned to be added soon)
|
(the following tests are planned to be added soon)
|
||||||
dnssec/ DNSSEC tests
|
dnssec/ DNSSEC tests
|
||||||
masterfile/ Master file parser
|
masterfile/ Master file parser
|
||||||
xfer/ Zone transfer tests
|
axfr/ Full-transfer tests
|
||||||
|
|
||||||
Typically each test suite sets up 2-5 instances of BIND 10 (or BIND 9
|
Typically each test suite sets up 2-5 instances of BIND 10 (or BIND 9
|
||||||
named) and then performs one or more tests against them. Within the
|
named) and then performs one or more tests against them. Within the test
|
||||||
test suite subdirectory, each instance has a separate subdirectory
|
suite subdirectory, each instance has a separate subdirectory containing
|
||||||
containing its configuration data. By convention, these
|
its configuration data. By convention, these subdirectories are named
|
||||||
subdirectories are named "nsx1", "nsx2", etc for BIND 10 ("x" means
|
"nsx1", "nsx2", etc for BIND 10 ("x" means BIND 10), and "ns1", "ns2",
|
||||||
BIND 10), and "ns1", "ns2", etc. for BIND 9.
|
etc. for BIND 9.
|
||||||
|
|
||||||
The tests are completely self-contained and do not require access to
|
The tests are completely self-contained and do not require access to
|
||||||
the real DNS. Generally, one of the test servers (ns[x]1) is set up
|
the real DNS. Generally, one of the test servers (ns[x]1) is set up as
|
||||||
as a root name server and is listed in the hints file of the others.
|
a root name server and is listed in the hints file of the others.
|
||||||
|
|
||||||
To enable all servers to run on the same machine, they bind to
|
To enable all servers to run on the same machine, they bind to separate
|
||||||
separate virtual IP address on the loopback interface. ns[x]1 runs on
|
virtual IP address on the loopback interface. ns[x]1 runs on 10.53.0.1,
|
||||||
10.53.0.1, ns[x]2 on 10.53.0.2, etc. Before running any tests, you
|
ns[x]2 on 10.53.0.2, etc. Before running any tests, you must set up
|
||||||
must set up these addresses by running "ifconfig.sh up" as root.
|
these addresses by running "ifconfig.sh up" as root.
|
||||||
|
|
||||||
Mac OS X:
|
Mac OS X:
|
||||||
If you wish to make the interfaces survive across reboots
|
If you wish to make the interfaces survive across reboots copy
|
||||||
copy org.isc.bind.system and org.isc.bind.system to
|
org.isc.bind.system and org.isc.bind.system to /Library/LaunchDaemons
|
||||||
/Library/LaunchDaemons then run
|
then run "launchctl load /Library/LaunchDaemons/org.isc.bind.system.plist"
|
||||||
"launchctl load /Library/LaunchDaemons/org.isc.bind.system.plist" as
|
as root.
|
||||||
root.
|
|
||||||
|
|
||||||
The servers use port 53210 instead of the usual port 53, so they can be
|
The servers use port 53210 instead of the usual port 53, so they can be
|
||||||
run without root privileges once the interfaces have been set up.
|
run without root privileges once the interfaces have been set up.
|
||||||
|
@@ -51,7 +51,7 @@ export RNDC=$BIND9_TOP/bin/rndc/rndc
|
|||||||
export TESTSOCK=$BIND9_TOP/bin/tests/system/testsock.pl
|
export TESTSOCK=$BIND9_TOP/bin/tests/system/testsock.pl
|
||||||
export DIGCOMP=$BIND9_TOP/bin/tests/system/digcomp.pl
|
export DIGCOMP=$BIND9_TOP/bin/tests/system/digcomp.pl
|
||||||
|
|
||||||
export SUBDIRS="bindctl glue"
|
export SUBDIRS="bindctl glue ixfr/in-1"
|
||||||
#SUBDIRS="dnssec masterfile xfer"
|
#SUBDIRS="dnssec masterfile xfer"
|
||||||
|
|
||||||
# PERL will be an empty string if no perl interpreter was found. A similar
|
# PERL will be an empty string if no perl interpreter was found. A similar
|
||||||
|
@@ -21,11 +21,11 @@
|
|||||||
|
|
||||||
sh clean.sh
|
sh clean.sh
|
||||||
|
|
||||||
# Set up the IXFR server - Load an old version of the zone.
|
# Set up the initial version of the IXFR server - Load an old version of the zone.
|
||||||
|
|
||||||
cp -f ns1/named_nonotify.conf ns1/named.conf
|
cp -f ns1/named_nonotify.conf ns1/named.conf
|
||||||
cp -f $IXFR_TOP/largezone_n-4.db ns1/zone.db
|
cp -f $IXFR_TOP/largezone_n-4.db ns1/zone.db
|
||||||
|
|
||||||
# Set up the IXFR client
|
# Set up the IXFR client - load the same version of the zone.
|
||||||
|
|
||||||
${B10_LOADZONE} -o . -d @builddir@/nsx2/zone.sqlite3 $IXFR_TOP/largezone_n-4.db
|
${B10_LOADZONE} -o . -d @builddir@/nsx2/zone.sqlite3 $IXFR_TOP/largezone_n-4.db
|
||||||
|
@@ -27,94 +27,32 @@
|
|||||||
# file to ensure that the debug message recording the sending of the IXFR
|
# file to ensure that the debug message recording the sending of the IXFR
|
||||||
# request and the receipt of the single update is recorded.
|
# request and the receipt of the single update is recorded.
|
||||||
|
|
||||||
. @abs_top_builddir@/tests/system/conf.sh
|
. ../ixfr_init.sh
|
||||||
|
|
||||||
IXFR_SERVER=10.53.0.1 # BIND 9
|
SERVER_NAME=ns1
|
||||||
IXFR_CLIENT=10.53.0.2 # BIND 10
|
SERVER_IP=10.53.0.1 # BIND 9
|
||||||
|
|
||||||
# Short-hand for getting SOA - just supply address of the server
|
CLIENT_NAME=nsx2
|
||||||
DIG_SOA="$DIG +norecurse +short -p $DNS_PORT example. SOA"
|
CLIENT_IP=10.53.0.2 # BIND 10
|
||||||
|
|
||||||
status=0
|
status=0
|
||||||
|
|
||||||
# do_rndc
|
|
||||||
#
|
|
||||||
# Controls the BIND 9 IXFR server. Called do_rndc (instead of rndc) to avoid
|
|
||||||
# confusion if rndc itself is in the search path.
|
|
||||||
#
|
|
||||||
# $* - Command to execute (which may be multiple tokens)
|
|
||||||
do_rndc () {
|
|
||||||
$RNDC -c $SYSTEM_TOP/common/rndc.conf -s $IXFR_SERVER -p $RNDC_PORT $* 2>&1 \
|
|
||||||
| sed 's/^/I:ns1 /'
|
|
||||||
}
|
|
||||||
|
|
||||||
# wait_for_update
|
|
||||||
#
|
|
||||||
# Given a serial number and a server, poll the nameserver until the SOA serial
|
|
||||||
# number is different from that given. The poll takes place every five seconds
|
|
||||||
# for a minute.
|
|
||||||
#
|
|
||||||
# $1 - Server to check
|
|
||||||
# $2 - Serial number to check against
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# 0 - Serial number is different (requires another poll to obatin it)
|
|
||||||
# 1 - Serial number has not changed
|
|
||||||
wait_for_update() {
|
|
||||||
for i in 1 2 3 4 5 6 7 8 9 10 11 12
|
|
||||||
do
|
|
||||||
new_serial=`$DIG_SOA @$1 | $AWK '{print $3}'`
|
|
||||||
if [ "$new_serial" != "$2" ];
|
|
||||||
then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$new_serial" = "$2" ];
|
|
||||||
then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# update_server_zone
|
|
||||||
#
|
|
||||||
# Reloads the example. zone in the IXFR server and waits a maximum of 50
|
|
||||||
# seconds for it to be served.
|
|
||||||
#
|
|
||||||
# $1 - Name of new zone file (should be in the default directory).
|
|
||||||
update_server_zone() {
|
|
||||||
old_serial=`$DIG_SOA @$IXFR_SERVER | $AWK '{print $3}'`
|
|
||||||
echo "I:ns1 IXFR server loading $1"
|
|
||||||
cp $1 ns1/zone.db
|
|
||||||
do_rndc reload
|
|
||||||
wait_for_update $IXFR_SERVER $old_serial
|
|
||||||
|
|
||||||
if [ $? -ne 0 ];
|
|
||||||
then
|
|
||||||
echo "R:ns1 FAIL IXFR server did not update zone after reload"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
new_serial=`$DIG_SOA @$IXFR_SERVER | $AWK '{print $3}'`
|
|
||||||
echo "R:ns1 IXFR server was at serial $old_serial, now at $new_serial"
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# The current state of the nameservers is that they should both be running the
|
# The current state of the nameservers is that they should both be running the
|
||||||
# "n - 4" version of the zone.
|
# "n - 4" version of the zone.
|
||||||
#
|
|
||||||
|
# Store the SOA serial number of the BIND 10 client for later use.
|
||||||
|
|
||||||
|
old_client_serial=`$DIG_SOA @$CLIENT_IP | $AWK '{print $3}'`
|
||||||
|
echo "I:SOA serial of IXFR client is $old_client_serial"
|
||||||
|
|
||||||
# Load the BIND 9 system (the IXFR server) with the "n - 2" and "n" version of
|
# Load the BIND 9 system (the IXFR server) with the "n - 2" and "n" version of
|
||||||
# the zones. With ixfr-from-differences set to "yes", the nameserver should
|
# the zones. With ixfr-from-differences set to "yes", the nameserver should
|
||||||
# generate the differences between them.
|
# generate the differences between them.
|
||||||
|
|
||||||
echo "I:updating IXFR-server for ixfr-in tests"
|
echo "I:updating IXFR-server for ixfr-in tests"
|
||||||
|
update_server_zone $SERVER_NAME $SERVER_IP $IXFR_TOP/largezone_n-2.db
|
||||||
update_server_zone $IXFR_TOP/largezone_n-2.db
|
if [ $? != 0 ];
|
||||||
if [ $? != 0 ]; then
|
then
|
||||||
status=1
|
status=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -122,8 +60,9 @@ fi
|
|||||||
# the second sometimes gets lost.
|
# the second sometimes gets lost.
|
||||||
|
|
||||||
sleep 5
|
sleep 5
|
||||||
update_server_zone $IXFR_TOP/largezone_n-0.db
|
update_server_zone $SERVER_NAME $SERVER_IP $IXFR_TOP/largezone_n-0.db
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ];
|
||||||
|
then
|
||||||
status=1
|
status=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -132,20 +71,43 @@ fi
|
|||||||
|
|
||||||
echo "I:notifying IXFR-client of presence of new zones"
|
echo "I:notifying IXFR-client of presence of new zones"
|
||||||
cp ns1/named_notify.conf ns1/named.conf
|
cp ns1/named_notify.conf ns1/named.conf
|
||||||
do_rndc reconfig
|
|
||||||
do_rndc notify example
|
|
||||||
|
|
||||||
# Store the SOA serial number of the latest zone in the BIND 9 server
|
do_rndc $SERVER_NAME $SERVER_IP reconfig
|
||||||
server_serial=`$DIG_SOA @$IXFR_SERVER | $AWK '{print $3}'`
|
if [ $? != 0 ];
|
||||||
echo "I:SOA serial of IXFR server is $server_serial"
|
then
|
||||||
|
status=1
|
||||||
|
fi
|
||||||
|
|
||||||
client_serial=`$DIG_SOA @$IXFR_CLIENT | $AWK '{print $3}'`
|
# TODO: Need to alter configuration of BIND 10 server such that it accepts
|
||||||
echo "I:SOA serial of IXFR client is $client_serial"
|
# NOTIFYs from and sens IXFR requests to the BIND 9 master.
|
||||||
|
|
||||||
# Now compare the two zones - they should be the same.
|
do_rndc $SERVER_NAME $SERVER_IP notify example
|
||||||
|
if [ $? != 0 ];
|
||||||
|
then
|
||||||
|
status=1
|
||||||
|
fi
|
||||||
|
|
||||||
# Check the BIND 10 log, looking for the IXFR messages that
|
# Wait for the client to update itself.
|
||||||
# indicate that it has initiated an IXFR.
|
|
||||||
|
wait_for_update $CLIENT_NAME $CLIENT_IP $old_client_serial
|
||||||
|
if [ $? != 0 ];
|
||||||
|
then
|
||||||
|
status=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Has updated, get the latest serial of the client and server - they
|
||||||
|
# should be the same.
|
||||||
|
client_serial=`$DIG_SOA @$CLIENT_IP | $AWK '{print $3}'`
|
||||||
|
server_serial=`$DIG_SOA @$SERVER_IP | $AWK '{print $3}'`
|
||||||
|
if [ "$client_serial" != "$server_serial" ];
|
||||||
|
then
|
||||||
|
echo "I: FAIL - client serial not same as server serial after update"
|
||||||
|
status=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TODO: Check the BIND 10 log, looking for the IXFR messages that indicate that
|
||||||
|
# it has initiated an IXFR and that it received the update within a single
|
||||||
|
# packet.
|
||||||
|
|
||||||
echo "I:exit status: $status"
|
echo "I:exit status: $status"
|
||||||
exit $status
|
exit $status
|
||||||
|
208
tests/system/ixfr/ixfr_init.sh
Executable file
208
tests/system/ixfr/ixfr_init.sh
Executable file
@@ -0,0 +1,208 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (C) 2011 Internet Software Consortium.
|
||||||
|
#
|
||||||
|
# Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
# purpose with or without fee is hereby granted, provided that the above
|
||||||
|
# copyright notice and this permission notice appear in all copies.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||||
|
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
# PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
# \file
|
||||||
|
# This file should be run by all IXFR tests before going anything else. It
|
||||||
|
# includes the main configuration script that defines the various environment
|
||||||
|
# variables, as well as defining useful shell subroutines.
|
||||||
|
|
||||||
|
. /home/stephen/bind10/tests/system/conf.sh
|
||||||
|
|
||||||
|
# Useful symbols used in the IXFR tests.
|
||||||
|
|
||||||
|
# Short-hand for getting SOA - just supply address of the server
|
||||||
|
DIG_SOA="$DIG +norecurse +short -p $DNS_PORT example. SOA"
|
||||||
|
|
||||||
|
# \brief Check Arguments
|
||||||
|
#
|
||||||
|
# All functions take the name of the server as the firsrt argument and its IP
|
||||||
|
# address as the second. This function is passed "$*" and just checks that
|
||||||
|
# both $1 and $2 are defined.
|
||||||
|
#
|
||||||
|
# \arg $* Arguments passed to caller
|
||||||
|
#
|
||||||
|
# \return status 0 => $1 and $2 are defined, 1 => they are not.
|
||||||
|
check_name_ip() {
|
||||||
|
|
||||||
|
if [ "$1" = "" ];
|
||||||
|
then
|
||||||
|
echo "R:FAIL name of server not supplied"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$2" = "" ];
|
||||||
|
then
|
||||||
|
echo "R:FAIL IP address of server not supplied"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# \brief Perform RNDC Command
|
||||||
|
#
|
||||||
|
# Controls the BIND 9 IXFR server. Called do_rndc (instead of rndc) to avoid
|
||||||
|
# confusion if rndc itself is in the search path.
|
||||||
|
#
|
||||||
|
# $1 - Name of the server (ns1, nsx2 etc.)
|
||||||
|
# $2 - IP address of the server
|
||||||
|
# $* - Command to execute (which may be multiple tokens)
|
||||||
|
do_rndc () {
|
||||||
|
|
||||||
|
# If the following checks fail, the code is wrong.
|
||||||
|
|
||||||
|
check_name_ip $*
|
||||||
|
if [ $? -ne 0 ];
|
||||||
|
then
|
||||||
|
echo "R:FAIL do_rndc - name or ip address of server not supplied"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
name=$1
|
||||||
|
shift
|
||||||
|
ip=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [ "$1" = "" ];
|
||||||
|
then
|
||||||
|
echo "R:FAIL do_rndc - rndc command not supplied"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
$RNDC -c $SYSTEM_TOP/common/rndc.conf -s $ip -p $RNDC_PORT $* 2>&1 \
|
||||||
|
| sed "s/^/I:$name /"
|
||||||
|
}
|
||||||
|
|
||||||
|
# wait_for_update
|
||||||
|
#
|
||||||
|
# Given a serial number and a server, poll the nameserver until the SOA serial
|
||||||
|
# number is different from that given. The poll takes place every five seconds
|
||||||
|
# for a minute.
|
||||||
|
#
|
||||||
|
# $1 - Name of the server
|
||||||
|
# $2 - IP address of the server
|
||||||
|
# $3 - Serial number to check against
|
||||||
|
#
|
||||||
|
# Returns:
|
||||||
|
# 0 - Serial number is different (requires another poll to obtain it)
|
||||||
|
# 1 - Serial number has not changed
|
||||||
|
wait_for_update() {
|
||||||
|
|
||||||
|
# If the following checks fail, the code is wrong.
|
||||||
|
|
||||||
|
check_name_ip $*
|
||||||
|
if [ $? -ne 0 ];
|
||||||
|
then
|
||||||
|
echo "R:FAIL wait_for_update - name or ip address of system not supplied"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
name=$1
|
||||||
|
shift
|
||||||
|
ip=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
serial=$1
|
||||||
|
shift
|
||||||
|
if [ "$serial" = "" ];
|
||||||
|
then
|
||||||
|
echo "R:FAIL wait_for_update - serial number not supplied"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Now poll the server looking for the new serial number
|
||||||
|
|
||||||
|
for i in 1 2 3 4 5 6 7 8 9 10 11 12
|
||||||
|
do
|
||||||
|
if [ $i -gt 1 ];
|
||||||
|
then
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
new_serial=`$DIG_SOA @$ip | $AWK '{print $3}'`
|
||||||
|
if [ "$new_serial" != "$serial" ];
|
||||||
|
then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "R:$name FAIL serial number has not updated"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# update_server_zone
|
||||||
|
#
|
||||||
|
# Reloads the example. zone in the BIND 9 IXFR server and waits a maximum of
|
||||||
|
# one minute for it to be served.
|
||||||
|
#
|
||||||
|
# $1 - Name of the server (ns1, nsx2 etc.)
|
||||||
|
# $2 - IP address of the server
|
||||||
|
# $3 - Zone file to load
|
||||||
|
# $* - Command to execute (which may be multiple tokens)
|
||||||
|
update_server_zone() {
|
||||||
|
|
||||||
|
# If the following checks fail, the code is wrong.
|
||||||
|
|
||||||
|
check_name_ip $*
|
||||||
|
if [ $? -ne 0 ];
|
||||||
|
then
|
||||||
|
echo "R:FAIL update_server_zone - name or ip address of server not supplied"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
name=$1
|
||||||
|
shift
|
||||||
|
ip=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
file=$1
|
||||||
|
shift
|
||||||
|
if [ "$file" = "" ];
|
||||||
|
then
|
||||||
|
echo "R:FAIL update_server_zone - new zone file not supplied"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -e $file ];
|
||||||
|
then
|
||||||
|
echo "R:FAIL update_server_zone - zone file does not exist: $file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
old_serial=`$DIG_SOA @$ip | $AWK '{print $3}'`
|
||||||
|
|
||||||
|
echo "I:$name IXFR server loading $1"
|
||||||
|
cp $file $name/zone.db
|
||||||
|
do_rndc $name $ip reload
|
||||||
|
if [ $? -ne 0 ];
|
||||||
|
then
|
||||||
|
return 1 # Message will have already been output
|
||||||
|
fi
|
||||||
|
|
||||||
|
wait_for_update $name $ip $old_serial
|
||||||
|
if [ $? -ne 0 ];
|
||||||
|
then
|
||||||
|
echo "R:$name FAIL IXFR server did not update zone after reload"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
new_serial=`$DIG_SOA @$ip | $AWK '{print $3}'`
|
||||||
|
echo "I:$name was at serial $old_serial, now at $new_serial"
|
||||||
|
return 0
|
||||||
|
}
|
Reference in New Issue
Block a user