3233. [bug] 'rndc freeze/thaw' didn't work for inline zones.

[RT #26632]
This commit is contained in:
Mark Andrews 2011-12-02 02:44:01 +00:00
parent 9cdd98dc07
commit 56dc4c6730
5 changed files with 86 additions and 7 deletions

View file

@ -1,3 +1,6 @@
3233. [bug] 'rndc freeze/thaw' didn't work for inline zones.
[RT #26632]
3232. [bug] Zero zone->curmaster before return in
dns_zone_setmasterswithkeys(). [RT #26732]

View file

@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: server.c,v 1.631 2011/11/29 00:49:25 marka Exp $ */
/* $Id: server.c,v 1.632 2011/12/02 02:44:01 marka Exp $ */
/*! \file */
@ -7383,7 +7383,7 @@ ns_server_freeze(ns_server_t *server, isc_boolean_t freeze, char *args,
isc_buffer_t *text)
{
isc_result_t result, tresult;
dns_zone_t *zone = NULL;
dns_zone_t *zone = NULL, *raw = NULL;
dns_zonetype_t type;
char classstr[DNS_RDATACLASS_FORMATSIZE];
char zonename[DNS_NAME_FORMATSIZE];
@ -7415,6 +7415,12 @@ ns_server_freeze(ns_server_t *server, isc_boolean_t freeze, char *args,
isc_result_totext(tresult));
return (tresult);
}
dns_zone_getraw(zone, &raw);
if (raw != NULL) {
dns_zone_detach(&zone);
dns_zone_attach(raw, &zone);
dns_zone_detach(&raw);
}
type = dns_zone_gettype(zone);
if (type != dns_zone_master) {
dns_zone_detach(&zone);

View file

@ -12,7 +12,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
# $Id: clean.sh,v 1.6 2011/10/30 22:59:45 each Exp $
# $Id: clean.sh,v 1.7 2011/12/02 02:44:01 marka Exp $
rm -f */named.memstats
rm -f */named.run
@ -53,3 +53,5 @@ rm -f */*.jbk
rm -f random.data
rm -f dig.out.ns*.test*
rm -f signing.out*
rm -f freeze.test*
rm -f thaw.test*

View file

@ -14,7 +14,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
# $Id: tests.sh,v 1.6 2011/10/28 06:20:05 each Exp $
# $Id: tests.sh,v 1.7 2011/12/02 02:44:01 marka Exp $
SYSTEMTESTTOP=..
. $SYSTEMTESTTOP/conf.sh
@ -548,5 +548,61 @@ done
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
n=`expr $n + 1`
echo "I:checking rndc freeze/thaw of dynamic inline zone ($n)"
ret=0
$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 freeze dynamic > freeze.test$n 2>&1 || ret=1
sleep 1
awk '$2 == ";" && $3 == "serial" { print $1 + 1, $2, $3; next; }
{ print; }
END { print "freeze1.dynamic. 0 TXT freeze1"; } ' ns3/dynamic.db > ns3/dynamic.db.new
mv ns3/dynamic.db.new ns3/dynamic.db
$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 thaw dynamic > thaw.test$n 2>&1 || ret=1
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
n=`expr $n + 1`
echo "I:check added record freeze1.dynamic ($n)"
for i in 1 2 3 4 5 6 7 8 9
do
ret=0
$DIG $DIGOPTS @10.53.0.3 -p 5300 freeze1.dynamic TXT > dig.out.ns3.test$n
grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
grep "ANSWER: 2," dig.out.ns3.test$n > /dev/null || ret=1
test $ret = 0 && break
sleep 1
done
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
# allow 1 second so that file time stamps change
sleep 1
n=`expr $n + 1`
echo "I:checking rndc freeze/thaw of server ($n)"
ret=0
$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 freeze > freeze.test$n 2>&1 || ret=1
sleep 1
awk '$2 == ";" && $3 == "serial" { print $1 + 1, $2, $3; next; }
{ print; }
END { print "freeze2.dynamic. 0 TXT freeze2"; } ' ns3/dynamic.db > ns3/dynamic.db.new
mv ns3/dynamic.db.new ns3/dynamic.db
$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 thaw > thaw.test$n 2>&1 || ret=1
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
n=`expr $n + 1`
echo "I:check added record freeze2.dynamic ($n)"
for i in 1 2 3 4 5 6 7 8 9
do
ret=0
$DIG $DIGOPTS @10.53.0.3 -p 5300 freeze2.dynamic TXT > dig.out.ns3.test$n
grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
grep "ANSWER: 2," dig.out.ns3.test$n > /dev/null || ret=1
test $ret = 0 && break
sleep 1
done
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
exit $status

View file

@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: zt.c,v 1.56 2011/09/07 00:50:06 marka Exp $ */
/* $Id: zt.c,v 1.57 2011/12/02 02:44:01 marka Exp $ */
/*! \file */
@ -357,15 +357,25 @@ freezezones(dns_zone_t *zone, void *uap) {
isc_result_t result = ISC_R_SUCCESS;
char classstr[DNS_RDATACLASS_FORMATSIZE];
char zonename[DNS_NAME_FORMATSIZE];
dns_zone_t *raw = NULL;
dns_view_t *view;
const char *vname;
const char *sep;
int level;
if (dns_zone_gettype(zone) != dns_zone_master)
dns_zone_getraw(zone, &raw);
if (raw != NULL)
zone = raw;
if (dns_zone_gettype(zone) != dns_zone_master) {
if (raw != NULL)
dns_zone_detach(&raw);
return (ISC_R_SUCCESS);
if (!dns_zone_isdynamic(zone, ISC_TRUE))
}
if (!dns_zone_isdynamic(zone, ISC_TRUE)) {
if (raw != NULL)
dns_zone_detach(&raw);
return (ISC_R_SUCCESS);
}
frozen = dns_zone_getupdatedisabled(zone);
if (freeze) {
@ -402,6 +412,8 @@ freezezones(dns_zone_t *zone, void *uap) {
freeze ? "freezing" : "thawing",
zonename, classstr, sep, vname,
isc_result_totext(result));
if (raw != NULL)
dns_zone_detach(&raw);
return (result);
}