Compare commits

...
Author SHA1 Message Date
Mark Andrews 54048a8f7f clang-format 2020-02-19 01:11:41 +00:00
Mark Andrews 1b7a65da19 clang-format 2020-02-19 01:11:41 +00:00
Mark Andrews 803585db37 silence cppcheck 2020-02-19 01:11:41 +00:00
Mark Andrews 325debfb53 printout raw zone as well 2020-02-19 01:11:41 +00:00
Mark Andrews 7e4adc87e0 Print out zone structure 2020-02-19 01:11:40 +00:00
6 changed files with 377 additions and 0 deletions
+2
View File
@@ -288,6 +288,8 @@ named_control_docommand(isccc_sexpr_t *message, bool readonly,
result = named_server_tsiglist(named_g_server, text);
} else if (command_compare(command, NAMED_COMMAND_VALIDATION)) {
result = named_server_validation(named_g_server, lex, text);
} else if (command_compare(command, "zonedebug")) {
result = named_server_zonedebug(named_g_server, lex, text);
} else if (command_compare(command, NAMED_COMMAND_ZONESTATUS)) {
result = named_server_zonestatus(named_g_server, lex, text);
} else {
+3
View File
@@ -333,6 +333,9 @@ isc_result_t
named_server_signing(named_server_t *server, isc_lex_t *lex,
isc_buffer_t **text);
isc_result_t
named_server_zonedebug(named_server_t *server, isc_lex_t *lex,
isc_buffer_t **text);
/*%
* Lists status information for a given zone (e.g., name, type, files,
* load time, expiry, etc).
+32
View File
@@ -14431,6 +14431,38 @@ putnull(isc_buffer_t **b) {
return (putuint8(b, 0));
}
isc_result_t
named_server_zonedebug(named_server_t *server, isc_lex_t *lex,
isc_buffer_t **text) {
char zonename[DNS_NAME_FORMATSIZE];
dns_zone_t *zone = NULL, *raw = NULL;
isc_result_t result = ISC_R_SUCCESS;
CHECK(zone_from_args(server, lex, NULL, &zone, zonename, text, true));
if (zone == NULL) {
result = ISC_R_UNEXPECTEDEND;
goto cleanup;
}
dns_zone_getraw(zone, &raw);
if (raw != NULL) {
CHECK(putstr(text, "secure zone:\n"));
}
dns_zone_debug(zone, *text);
if (raw != NULL) {
CHECK(putstr(text, "\nraw zone:\n"));
dns_zone_debug(zone, *text);
dns_zone_detach(&raw);
}
result = ISC_R_SUCCESS;
cleanup:
if (zone != NULL) {
dns_zone_detach(&zone);
}
return (result);
}
isc_result_t
named_server_zonestatus(named_server_t *server, isc_lex_t *lex,
isc_buffer_t **text) {
+3
View File
@@ -2538,4 +2538,7 @@ dns_zone_verifydb(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver);
* \li #DNS_R_VERIFYFAILURE any other case
*/
void
dns_zone_debug(dns_zone_t *zone, isc_buffer_t *text);
#endif /* DNS_ZONE_H */
+1
View File
@@ -1173,6 +1173,7 @@ dns_zone_clearqueryonacl
dns_zone_clearupdateacl
dns_zone_clearxfracl
dns_zone_create
dns_zone_debug
dns_zone_detach
dns_zone_dialup
dns_zone_dlzpostload
+336
View File
@@ -11,6 +11,7 @@
/*! \file */
#include <ctype.h>
#include <errno.h>
#include <inttypes.h>
#include <stdbool.h>
@@ -20947,3 +20948,338 @@ done:
return (result);
}
void
dns_zone_debug(dns_zone_t *zone, isc_buffer_t *text) {
char namebuf[DNS_NAME_FORMATSIZE];
char sockaddrbuf[ISC_SOCKADDR_FORMATSIZE];
dns_forward_t *forward;
dns_include_t *include;
dns_notify_t *notify;
dns_nsec3chain_t *nsec3chain;
dns_signing_t *signing;
isc_event_t *event;
size_t i;
REQUIRE(DNS_ZONE_VALID(zone));
LOCK_ZONE(zone);
isc_buffer_printf(text, "zone=%p\n", zone);
#define P(x) (isprint((x)&0xff) ? ((x)&0xff) : '.')
isc_buffer_printf(text, "magic=%u(%08x/%c%c%c%c)\n", zone->magic,
zone->magic, P(zone->magic >> 24),
P(zone->magic >> 16), P(zone->magic >> 8),
P(zone->magic));
#ifdef DNS_ZONE_CHECKLOCK
isc_buffer_printf(text, "locked=%u\n", zone->locked);
#endif
isc_buffer_printf(text, "mctx=%p\n", zone->mctx);
isc_buffer_printf(text, "erefs=%" PRIuFAST32 "\n",
isc_refcount_current(&zone->erefs));
isc_buffer_printf(text, "db=%p\n", zone->db);
isc_buffer_printf(text, "zmgr=%p\n", zone->zmgr);
isc_buffer_printf(text, "link.prev=%p, link.next=%p\n",
ISC_LIST_PREV(zone, link), ISC_LIST_NEXT(zone, link));
isc_buffer_printf(text, "timer=%p\n", zone->timer);
isc_buffer_printf(text, "irefs=%" PRIuFAST32 "\n",
isc_refcount_current(&zone->irefs));
dns_name_format(&zone->origin, namebuf, sizeof(namebuf));
isc_buffer_printf(text, "origin=%s\n", namebuf);
#define MAYBENULL(x) (((x) != NULL) ? (x) : "<null>")
isc_buffer_printf(text, "masterfile=%s\n", MAYBENULL(zone->masterfile));
isc_buffer_printf(text, "includes:\n");
for (include = ISC_LIST_HEAD(zone->includes); include != NULL;
include = ISC_LIST_NEXT(include, link))
{
isc_buffer_printf(text, "\t%s\n", include->name);
}
isc_buffer_printf(text, "newincludes:\n");
for (include = ISC_LIST_HEAD(zone->newincludes); include != NULL;
include = ISC_LIST_NEXT(include, link))
{
isc_buffer_printf(text, "\t%s\n", include->name);
}
isc_buffer_printf(text, "nincludes=%u\n", zone->nincludes);
isc_buffer_printf(text, "masterformat=%u\n", zone->masterformat);
isc_buffer_printf(text, "masterstyle=%p\n", zone->masterstyle);
isc_buffer_printf(text, "journal=%s\n", MAYBENULL(zone->journal));
isc_buffer_printf(text, "journalsize=%d\n", zone->journalsize);
isc_buffer_printf(text, "rdclass=%u\n", zone->rdclass);
isc_buffer_printf(text, "type=%u\n", zone->type);
isc_buffer_printf(text, "flags=%016" PRIxFAST64 "\n",
atomic_load(&zone->flags));
isc_buffer_printf(text, "options=%016" PRIxFAST64 "\n",
atomic_load(&zone->options));
isc_buffer_printf(text, "db_argc=%u\n", zone->db_argc);
isc_buffer_printf(text, "db_argv=%p:\n", zone->db_argv);
for (i = 0; zone->db_argv != NULL && i < zone->db_argc; i++) {
isc_buffer_printf(text, "\t%s\n", zone->db_argv[i]);
}
#define TIMESTAMP(v) \
do { \
if (isc_time_isepoch(&zone->v)) { \
isc_buffer_printf(text, #v "=<epoch>\n"); \
} else { \
isc_time_formattimestamp(&zone->v, namebuf, \
sizeof(namebuf)); \
isc_buffer_printf(text, #v "=%s\n", namebuf); \
} \
} while (0)
TIMESTAMP(expiretime);
TIMESTAMP(refreshtime);
TIMESTAMP(dumptime);
TIMESTAMP(loadtime);
TIMESTAMP(notifytime);
TIMESTAMP(resigntime);
TIMESTAMP(keywarntime);
TIMESTAMP(signingtime);
TIMESTAMP(nsec3chaintime);
TIMESTAMP(refreshkeytime);
isc_buffer_printf(text, "refreshkeyinterval=%u\n",
zone->refreshkeyinterval);
isc_buffer_printf(text, "refreshkeycount=%u\n", zone->refreshkeycount);
isc_buffer_printf(text, "refresh=%u\n", zone->refresh);
isc_buffer_printf(text, "retry=%u\n", zone->retry);
isc_buffer_printf(text, "expire=%u\n", zone->expire);
isc_buffer_printf(text, "minimum=%u\n", zone->minimum);
isc_buffer_printf(text, "key_expiry=%ld\n", (long)zone->key_expiry);
isc_buffer_printf(text, "log_key_expired_timer=%ld\n",
(long)zone->log_key_expired_timer);
isc_buffer_printf(text, "keydirectory=%s\n",
MAYBENULL(zone->keydirectory));
isc_buffer_printf(text, "maxrefresh=%u\n", zone->maxrefresh);
isc_buffer_printf(text, "minrefresh=%u\n", zone->minrefresh);
isc_buffer_printf(text, "maxretry=%u\n", zone->maxretry);
isc_buffer_printf(text, "minretry=%u\n", zone->minretry);
isc_buffer_printf(text, "maxrecords=%u\n", zone->maxrecords);
isc_buffer_printf(text, "masters=%p\n", zone->masters);
isc_buffer_printf(text, "masterdscps=%p\n", zone->masterdscps);
isc_buffer_printf(text, "masterkeynames=%p\n", zone->masterkeynames);
isc_buffer_printf(text, "mastersok=%p\n", zone->mastersok);
isc_buffer_printf(text, "masterscnt=%u\n", zone->masterscnt);
for (i = 0; i < zone->masterscnt; i++) {
bool ok;
isc_dscp_t dscp;
isc_sockaddr_format(&zone->masters[i], sockaddrbuf,
sizeof(sockaddrbuf));
if (zone->masterkeynames != NULL &&
zone->masterkeynames[i] != NULL) {
dns_name_format(zone->masterkeynames[i], namebuf,
sizeof(namebuf));
} else {
namebuf[0] = 0;
}
dscp = zone->masterdscps != NULL ? zone->masterdscps[i] : 0;
ok = zone->mastersok != NULL ? zone->mastersok[i] : true;
isc_buffer_printf(text, "\t%s key=%s dscp=%06x ok=%u\n",
sockaddrbuf, namebuf, dscp, ok);
}
isc_buffer_printf(text, "curmaster=%u\n", zone->curmaster);
#define SOCKADDR(v) \
do { \
isc_sockaddr_format(&zone->v, sockaddrbuf, \
sizeof(sockaddrbuf)); \
isc_buffer_printf(text, #v "=%s\n", sockaddrbuf); \
} while (0)
SOCKADDR(masteraddr);
isc_buffer_printf(text, "notifytype=%u\n", zone->notifytype);
isc_buffer_printf(text, "notify=%p\n", zone->notify);
isc_buffer_printf(text, "notifykeynames=%p\n", zone->notifykeynames);
isc_buffer_printf(text, "notifydscp=%p\n", zone->notifydscp);
isc_buffer_printf(text, "notifycnt=%u\n", zone->notifycnt);
for (i = 0; i < zone->notifycnt; i++) {
isc_dscp_t dscp;
isc_sockaddr_format(&zone->notify[i], sockaddrbuf,
sizeof(sockaddrbuf));
if (zone->notifykeynames != NULL &&
zone->notifykeynames[i] != NULL) {
dns_name_format(zone->notifykeynames[i], namebuf,
sizeof(namebuf));
} else {
namebuf[0] = 0;
}
dscp = zone->notifydscp != NULL ? zone->notifydscp[i] : 0;
isc_buffer_printf(text, "\t%s key=%s dscp=%06x\n", sockaddrbuf,
namebuf, dscp);
}
SOCKADDR(notifyfrom);
isc_buffer_printf(text, "task=%p\n", zone->task);
isc_buffer_printf(text, "loadtask=%p\n", zone->loadtask);
SOCKADDR(notifysrc4);
SOCKADDR(notifysrc6);
SOCKADDR(xfrsource4);
SOCKADDR(xfrsource6);
SOCKADDR(altxfrsource4);
SOCKADDR(altxfrsource4);
SOCKADDR(sourceaddr);
isc_buffer_printf(text, "notifysrc4dscp=%06x\n", zone->notifysrc4dscp);
isc_buffer_printf(text, "notifysrc6dscp=%06x\n", zone->notifysrc6dscp);
isc_buffer_printf(text, "xfrsource4dscp=%06x\n", zone->xfrsource4dscp);
isc_buffer_printf(text, "xfrsource6dscp=%06x\n", zone->xfrsource6dscp);
isc_buffer_printf(text, "altxfrsource4dscp=%06x\n",
zone->altxfrsource4dscp);
isc_buffer_printf(text, "altxfrsource6dscp=%06x\n",
zone->altxfrsource6dscp);
isc_buffer_printf(text, "xfr=%p\n", zone->xfr);
isc_buffer_printf(text, "tsigkey=%p\n", zone->tsigkey);
isc_buffer_printf(text, "update_acl=%p\n", zone->update_acl);
isc_buffer_printf(text, "forward_acl=%p\n", zone->forward_acl);
isc_buffer_printf(text, "notify_acl=%p\n", zone->notify_acl);
isc_buffer_printf(text, "query_acl=%p\n", zone->query_acl);
isc_buffer_printf(text, "queryon_acl=%p\n", zone->queryon_acl);
isc_buffer_printf(text, "xfr_acl=%p\n", zone->xfr_acl);
isc_buffer_printf(text, "update_disabled=%u\n", zone->update_disabled);
isc_buffer_printf(text, "zero_no_soa_ttl=%u\n", zone->zero_no_soa_ttl);
isc_buffer_printf(text, "notify:\n");
for (notify = ISC_LIST_HEAD(zone->notifies); notify != NULL;
notify = ISC_LIST_NEXT(notify, link))
{
isc_buffer_printf(text, "\t%p\n", notify);
}
isc_buffer_printf(text, "request=%p\n", zone->request);
isc_buffer_printf(text, "lctx=%p\n", zone->lctx);
isc_buffer_printf(text, "readio=%p\n", zone->readio);
isc_buffer_printf(text, "dctx=%p\n", zone->dctx);
isc_buffer_printf(text, "writeio=%p\n", zone->writeio);
isc_buffer_printf(text, "maxxfrin=%u\n", zone->maxxfrin);
isc_buffer_printf(text, "maxxfrout=%u\n", zone->maxxfrout);
isc_buffer_printf(text, "idlein=%u\n", zone->idlein);
isc_buffer_printf(text, "idleout=%u\n", zone->idleout);
// isc_event_t ctlevent;
isc_buffer_printf(text, "ssutable=%p\n", zone->ssutable);
isc_buffer_printf(text, "sigvalidityinterval=%u\n",
zone->sigvalidityinterval);
isc_buffer_printf(text, "keyvalidityinterval=%u\n",
zone->keyvalidityinterval);
isc_buffer_printf(text, "sigresigninginterval=%u\n",
zone->sigresigninginterval);
isc_buffer_printf(text, "view=%p\n", zone->view);
isc_buffer_printf(text, "prev_view=%p\n", zone->prev_view);
isc_buffer_printf(text, "kasp=%p\n", zone->kasp);
isc_buffer_printf(text, "checkmx=%p\n", zone->checkmx);
isc_buffer_printf(text, "checksrv=%p\n", zone->checksrv);
isc_buffer_printf(text, "checkns=%p\n", zone->checkns);
isc_buffer_printf(text, "statelink.prev=%p, statelink.next=%p\n",
ISC_LIST_PREV(zone, statelink),
ISC_LIST_NEXT(zone, statelink));
isc_buffer_printf(text, "statelist=%p\n", zone->statelist);
isc_buffer_printf(text, "stats=%p\n", zone->stats);
isc_buffer_printf(text, "statlevel=%u\n", zone->statlevel);
isc_buffer_printf(text, "requeststats_on=%u\n", zone->requeststats_on);
isc_buffer_printf(text, "requeststats=%p\n", zone->requeststats);
isc_buffer_printf(text, "rcvquerystats=%p\n", zone->rcvquerystats);
isc_buffer_printf(text, "dnssecsignstats=%p\n", zone->dnssecsignstats);
isc_buffer_printf(text, "dnssecrefreshstats=%p\n",
zone->dnssecrefreshstats);
isc_buffer_printf(text, "notifydelay=%u\n", zone->notifydelay);
isc_buffer_printf(text, "isself=%p\n", zone->isself);
isc_buffer_printf(text, "isselfarg=%p\n", zone->isselfarg);
isc_buffer_printf(text, "strnamerd=%s\n", MAYBENULL(zone->strnamerd));
isc_buffer_printf(text, "strname=%s\n", MAYBENULL(zone->strname));
isc_buffer_printf(text, "strrdclass=%s\n", MAYBENULL(zone->strrdclass));
isc_buffer_printf(text, "strviewname=%s\n",
MAYBENULL(zone->strviewname));
isc_buffer_printf(text, "compact_serial=%u\n", zone->compact_serial);
isc_buffer_printf(text, "signing:\n");
for (signing = ISC_LIST_HEAD(zone->signing); signing != NULL;
signing = ISC_LIST_NEXT(signing, link))
{
isc_buffer_printf(text,
"\t=%p db=%p dbiterator=%p\n"
"\talg=%u keyid=%u deleteit=%u done=%u\n",
signing, signing->db, signing->dbiterator,
signing->algorithm, signing->keyid,
signing->deleteit, signing->done);
}
isc_buffer_printf(text, "nsec3chain:\n");
for (nsec3chain = ISC_LIST_HEAD(zone->nsec3chain); nsec3chain != NULL;
nsec3chain = ISC_LIST_NEXT(nsec3chain, link))
{
namebuf[0] = 0;
for (i = 0;
i < nsec3chain->nsec3param.salt_length &&
i < (sizeof(namebuf) / 2) && i < sizeof(nsec3chain->salt);
i++)
{
snprintf(namebuf + (i * 2), sizeof(namebuf) - (i * 2),
"%02X", nsec3chain->salt[i]);
}
isc_buffer_printf(text,
"\t=%p hash=%u iterations=%u flags=%u "
"salt_length=%u\n\tsalt=%s\n"
"\tseen_nsec=%u delete_nsec=%u "
"save_delete_nsec=%u\n",
nsec3chain, nsec3chain->nsec3param.hash,
nsec3chain->nsec3param.iterations,
nsec3chain->nsec3param.flags,
nsec3chain->nsec3param.salt_length, namebuf,
nsec3chain->seen_nsec,
nsec3chain->delete_nsec,
nsec3chain->save_delete_nsec);
}
isc_buffer_printf(text, "setnsec3param_queue:\n");
for (event = ISC_LIST_HEAD(zone->setnsec3param_queue); event != NULL;
event = ISC_LIST_NEXT(event, ev_link))
{
isc_buffer_printf(text, "\t=%p\n", event);
}
isc_buffer_printf(text, "signatures=%u\n", zone->signatures);
isc_buffer_printf(text, "nodes=%u\n", zone->nodes);
isc_buffer_printf(text, "privatetype=%u\n", zone->privatetype);
isc_buffer_printf(text, "keyopts=%016" PRIxFAST64 "\n",
atomic_load(&zone->keyopts));
isc_buffer_printf(text, "added=%u\n", zone->added);
isc_buffer_printf(text, "automatic=%u\n", zone->automatic);
isc_buffer_printf(text, "rpzs=%p\n", zone->rpzs);
isc_buffer_printf(text, "rpz_num=%u\n", zone->rpz_num);
isc_buffer_printf(text, "catzs=%p\n", zone->catzs);
isc_buffer_printf(text, "parentcatz=%p\n", zone->parentcatz);
isc_buffer_printf(text, "updatemethod=%u\n", zone->updatemethod);
isc_buffer_printf(text, "requestixfr=%u\n", zone->requestixfr);
isc_buffer_printf(text, "requestexpire=%u\n", zone->requestexpire);
isc_buffer_printf(text, "forwards:\n");
for (forward = ISC_LIST_HEAD(zone->forwards); forward != NULL;
forward = ISC_LIST_NEXT(forward, link))
{
isc_buffer_printf(text, "\t=%p\n", forward);
}
isc_buffer_printf(text, "raw=%p\n", zone->raw);
isc_buffer_printf(text, "secure=%p\n", zone->secure);
isc_buffer_printf(text, "sourceserialset=%u\n", zone->sourceserialset);
isc_buffer_printf(text, "sourceserial=%u\n", zone->sourceserial);
isc_buffer_printf(text, "maxttl=%u\n", zone->maxttl);
// dns_diff_t rss_diff;
isc_buffer_printf(text, "rss_events:\n");
for (event = ISC_LIST_HEAD(zone->rss_events); event != NULL;
event = ISC_LIST_NEXT(event, ev_link))
{
isc_buffer_printf(text, "\t=%p\n", event);
}
isc_buffer_printf(text, "rss_post:\n");
for (event = ISC_LIST_HEAD(zone->rss_post); event != NULL;
event = ISC_LIST_NEXT(event, ev_link))
{
isc_buffer_printf(text, "\t=%p\n", event);
}
isc_buffer_printf(text, "rss_newver=%p\n", zone->rss_newver);
isc_buffer_printf(text, "rss_oldver=%p\n", zone->rss_oldver);
isc_buffer_printf(text, "rss_db=%p\n", zone->rss_db);
isc_buffer_printf(text, "rss_raw=%p\n", zone->rss_raw);
isc_buffer_printf(text, "rss_event=%p\n", zone->rss_event);
isc_buffer_printf(text, "rss_state=%p\n", zone->rss_state);
isc_buffer_printf(text, "gluecachestats=%p", zone->gluecachestats);
UNLOCK_ZONE(zone);
}