mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-18 01:08:53 -04:00
4856. [bug] 'rndc zonestatus' reported the wrong underlying type
for a inline slave zone. [RT #46875]
(cherry picked from commit 0b27aa0712)
This commit is contained in:
parent
33506bef10
commit
adfe58e8e5
4 changed files with 74 additions and 36 deletions
3
CHANGES
3
CHANGES
|
|
@ -1,3 +1,6 @@
|
|||
4856. [bug] 'rndc zonestatus' reported the wrong underlying type
|
||||
for a inline slave zone. [RT #46875]
|
||||
|
||||
4852. [bug] Handle strftime() failing in isc_time_formatISO8601ms.
|
||||
Add REQUIRE's and INSIST's to isc_time_formattimestamp,
|
||||
isc_time_formathttptimestamp, isc_time_formatISO8601,
|
||||
|
|
|
|||
|
|
@ -13186,7 +13186,7 @@ ns_server_zonestatus(ns_server_t *server, isc_lex_t *lex,
|
|||
isc_buffer_t **text)
|
||||
{
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
dns_zone_t *zone = NULL, *raw = NULL;
|
||||
dns_zone_t *zone = NULL, *raw = NULL, *mayberaw = NULL;
|
||||
const char *type, *file;
|
||||
char zonename[DNS_NAME_FORMATSIZE];
|
||||
isc_uint32_t serial, signed_serial, nodes;
|
||||
|
|
@ -13219,7 +13219,19 @@ ns_server_zonestatus(ns_server_t *server, isc_lex_t *lex,
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
zonetype = dns_zone_gettype(zone);
|
||||
/* Inline signing? */
|
||||
CHECK(dns_zone_getdb(zone, &db));
|
||||
dns_zone_getraw(zone, &raw);
|
||||
hasraw = ISC_TF(raw != NULL);
|
||||
if (hasraw) {
|
||||
mayberaw = raw;
|
||||
zonetype = dns_zone_gettype(raw);
|
||||
CHECK(dns_zone_getdb(raw, &rawdb));
|
||||
} else {
|
||||
mayberaw = zone;
|
||||
zonetype = dns_zone_gettype(zone);
|
||||
}
|
||||
|
||||
switch (zonetype) {
|
||||
case dns_zone_master:
|
||||
type = "master";
|
||||
|
|
@ -13246,15 +13258,8 @@ ns_server_zonestatus(ns_server_t *server, isc_lex_t *lex,
|
|||
type = "unknown";
|
||||
}
|
||||
|
||||
/* Inline signing? */
|
||||
CHECK(dns_zone_getdb(zone, &db));
|
||||
dns_zone_getraw(zone, &raw);
|
||||
hasraw = ISC_TF(raw != NULL);
|
||||
if (hasraw)
|
||||
CHECK(dns_zone_getdb(raw, &rawdb));
|
||||
|
||||
/* Serial number */
|
||||
serial = dns_zone_getserial(hasraw ? raw : zone);
|
||||
serial = dns_zone_getserial(mayberaw);
|
||||
snprintf(serbuf, sizeof(serbuf), "%u", serial);
|
||||
if (hasraw) {
|
||||
signed_serial = dns_zone_getserial(zone);
|
||||
|
|
@ -13272,8 +13277,8 @@ ns_server_zonestatus(ns_server_t *server, isc_lex_t *lex,
|
|||
DNS_ZONEKEY_MAINTAIN) != 0);
|
||||
|
||||
/* Master files */
|
||||
file = dns_zone_getfile(hasraw ? raw : zone);
|
||||
nfiles = dns_zone_getincludes(hasraw ? raw : zone, &incfiles);
|
||||
file = dns_zone_getfile(mayberaw);
|
||||
nfiles = dns_zone_getincludes(mayberaw, &incfiles);
|
||||
|
||||
/* Load time */
|
||||
dns_zone_getloadtime(zone, &loadtime);
|
||||
|
|
@ -13284,9 +13289,9 @@ ns_server_zonestatus(ns_server_t *server, isc_lex_t *lex,
|
|||
zonetype == dns_zone_stub ||
|
||||
zonetype == dns_zone_redirect)
|
||||
{
|
||||
dns_zone_getexpiretime(zone, &expiretime);
|
||||
dns_zone_getexpiretime(mayberaw, &expiretime);
|
||||
isc_time_formathttptimestamp(&expiretime, xbuf, sizeof(xbuf));
|
||||
dns_zone_getrefreshtime(zone, &refreshtime);
|
||||
dns_zone_getrefreshtime(mayberaw, &refreshtime);
|
||||
isc_time_formathttptimestamp(&refreshtime, rbuf, sizeof(rbuf));
|
||||
}
|
||||
|
||||
|
|
@ -13301,9 +13306,8 @@ ns_server_zonestatus(ns_server_t *server, isc_lex_t *lex,
|
|||
|
||||
/* Dynamic? */
|
||||
if (zonetype == dns_zone_master) {
|
||||
dynamic = dns_zone_isdynamic(hasraw ? raw : zone, ISC_TRUE);
|
||||
frozen = dynamic && !dns_zone_isdynamic(hasraw ? raw : zone,
|
||||
ISC_FALSE);
|
||||
dynamic = dns_zone_isdynamic(mayberaw, ISC_TRUE);
|
||||
frozen = dynamic && !dns_zone_isdynamic(mayberaw, ISC_FALSE);
|
||||
}
|
||||
|
||||
/* Next resign event */
|
||||
|
|
@ -13352,8 +13356,9 @@ ns_server_zonestatus(ns_server_t *server, isc_lex_t *lex,
|
|||
CHECK(putstr(text, file));
|
||||
for (i = 0; i < nfiles; i++) {
|
||||
CHECK(putstr(text, ", "));
|
||||
if (incfiles[i] != NULL)
|
||||
if (incfiles[i] != NULL) {
|
||||
CHECK(putstr(text, incfiles[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -13384,12 +13389,14 @@ ns_server_zonestatus(ns_server_t *server, isc_lex_t *lex,
|
|||
|
||||
if (secure) {
|
||||
CHECK(putstr(text, "\nsecure: yes"));
|
||||
if (hasraw)
|
||||
if (hasraw) {
|
||||
CHECK(putstr(text, "\ninline signing: yes"));
|
||||
else
|
||||
} else {
|
||||
CHECK(putstr(text, "\ninline signing: no"));
|
||||
} else
|
||||
}
|
||||
} else {
|
||||
CHECK(putstr(text, "\nsecure: no"));
|
||||
}
|
||||
|
||||
if (maintain) {
|
||||
CHECK(putstr(text, "\nkey maintenance: automatic"));
|
||||
|
|
@ -13397,10 +13404,11 @@ ns_server_zonestatus(ns_server_t *server, isc_lex_t *lex,
|
|||
CHECK(putstr(text, "\nnext key event: "));
|
||||
CHECK(putstr(text, kbuf));
|
||||
}
|
||||
} else if (allow)
|
||||
} else if (allow) {
|
||||
CHECK(putstr(text, "\nkey maintenance: on command"));
|
||||
else if (secure || hasraw)
|
||||
} else if (secure || hasraw) {
|
||||
CHECK(putstr(text, "\nkey maintenance: none"));
|
||||
}
|
||||
|
||||
if (!isc_time_isepoch(&resigntime)) {
|
||||
CHECK(putstr(text, "\nnext resign node: "));
|
||||
|
|
@ -13411,40 +13419,50 @@ ns_server_zonestatus(ns_server_t *server, isc_lex_t *lex,
|
|||
|
||||
if (dynamic) {
|
||||
CHECK(putstr(text, "\ndynamic: yes"));
|
||||
if (frozen)
|
||||
if (frozen) {
|
||||
CHECK(putstr(text, "\nfrozen: yes"));
|
||||
else
|
||||
} else {
|
||||
CHECK(putstr(text, "\nfrozen: no"));
|
||||
} else
|
||||
}
|
||||
} else {
|
||||
CHECK(putstr(text, "\ndynamic: no"));
|
||||
}
|
||||
|
||||
CHECK(putstr(text, "\nreconfigurable via modzone: "));
|
||||
CHECK(putstr(text, dns_zone_getadded(zone) ? "yes" : "no"));
|
||||
|
||||
cleanup:
|
||||
/* Indicate truncated output if possible. */
|
||||
if (result == ISC_R_NOSPACE)
|
||||
if (result == ISC_R_NOSPACE) {
|
||||
(void) putstr(text, "\n...");
|
||||
if ((result == ISC_R_SUCCESS || result == ISC_R_NOSPACE))
|
||||
}
|
||||
if ((result == ISC_R_SUCCESS || result == ISC_R_NOSPACE)) {
|
||||
(void) putnull(text);
|
||||
}
|
||||
|
||||
if (db != NULL)
|
||||
if (db != NULL) {
|
||||
dns_db_detach(&db);
|
||||
if (rawdb != NULL)
|
||||
}
|
||||
if (rawdb != NULL) {
|
||||
dns_db_detach(&rawdb);
|
||||
if (incfiles != NULL) {
|
||||
}
|
||||
if (incfiles != NULL && mayberaw != NULL) {
|
||||
int i;
|
||||
isc_mem_t *mctx = dns_zone_getmctx(hasraw ? raw : zone);
|
||||
isc_mem_t *mctx = dns_zone_getmctx(mayberaw);
|
||||
|
||||
for (i = 0; i < nfiles; i++)
|
||||
if (incfiles[i] != NULL)
|
||||
for (i = 0; i < nfiles; i++) {
|
||||
if (incfiles[i] != NULL) {
|
||||
isc_mem_free(mctx, incfiles[i]);
|
||||
}
|
||||
}
|
||||
isc_mem_free(mctx, incfiles);
|
||||
}
|
||||
if (raw != NULL)
|
||||
if (raw != NULL) {
|
||||
dns_zone_detach(&raw);
|
||||
if (zone != NULL)
|
||||
}
|
||||
if (zone != NULL) {
|
||||
dns_zone_detach(&zone);
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -99,3 +99,4 @@ rm -f ns3/a-file
|
|||
rm -f ns*/named.lock
|
||||
rm -f dig.out.*
|
||||
rm -f ns3/nzf-*
|
||||
rm -f rndc.out.ns*
|
||||
|
|
|
|||
|
|
@ -1084,5 +1084,21 @@ grep "DNSKEY 8 1 [0-9]* [0-9]* [0-9]* ${kskid} " dig.out.ns3.test$n > /dev/null
|
|||
if [ $ret != 0 ]; then echo "I:failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
n=`expr $n + 1`
|
||||
echo "I:check that zonestatus reports 'type: master' for a inline master zone ($n)"
|
||||
ret=0
|
||||
$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 zonestatus master > rndc.out.ns3.test$n
|
||||
grep "type: master" rndc.out.ns3.test$n > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo "I:failed"; fi
|
||||
|
||||
status=`expr $status + $ret`
|
||||
n=`expr $n + 1`
|
||||
echo "I:check that zonestatus reports 'type: slave' for a inline slave zone ($n)"
|
||||
ret=0
|
||||
$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 zonestatus bits > rndc.out.ns3.test$n
|
||||
grep "type: slave" rndc.out.ns3.test$n > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo "I:failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
echo "I:exit status: $status"
|
||||
[ $status -eq 0 ] || exit 1
|
||||
|
|
|
|||
Loading…
Reference in a new issue