mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-09 07:22:08 -04:00
3233. [bug] 'rndc freeze/thaw' didn't work for inline zones.
[RT #26632]
This commit is contained in:
parent
9cdd98dc07
commit
56dc4c6730
5 changed files with 86 additions and 7 deletions
3
CHANGES
3
CHANGES
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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*
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
18
lib/dns/zt.c
18
lib/dns/zt.c
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue