result = dns_db_newversion(gdb, &gversion);
check_result(result, "dns_db_newversion()");
- dns_zoneverify_dnssec(gdb, gversion, gorigin, mctx, ignore_kskflag,
- keyset_kskonly);
+ dns_zoneverify_dnssec(NULL, gdb, gversion, gorigin, mctx,
+ ignore_kskflag, keyset_kskonly);
dns_db_closeversion(gdb, &gversion, ISC_FALSE);
dns_db_detach(&gdb);
* present in the DNSKEY RRSET.
*/
void
-dns_zoneverify_dnssec(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *origin,
- isc_mem_t *mctx, isc_boolean_t ignore_kskflag,
+dns_zoneverify_dnssec(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
+ dns_name_t *origin, isc_mem_t *mctx,
+ isc_boolean_t ignore_kskflag,
isc_boolean_t keyset_kskonly);
ISC_LANG_ENDDECLS
#include <dns/dnssec.h>
#include <dns/fixedname.h>
#include <dns/keyvalues.h>
+#include <dns/log.h>
#include <dns/name.h>
#include <dns/nsec.h>
#include <dns/nsec3.h>
#include <dns/result.h>
#include <dns/secalg.h>
#include <dns/types.h>
+#include <dns/zone.h>
#include <dns/zoneverify.h>
#include <dst/dst.h>
#include <isc/buffer.h>
#include <isc/heap.h>
#include <isc/iterated_hash.h>
+#include <isc/log.h>
#include <isc/mem.h>
#include <isc/region.h>
#include <isc/result.h>
typedef struct vctx {
isc_mem_t * mctx;
+ dns_zone_t * zone;
dns_db_t * db;
dns_dbversion_t * ver;
dns_name_t * origin;
exit(1);
}
+/*%
+ * Log a zone verification error described by 'fmt' and the variable arguments
+ * following it. Either use dns_zone_logv() or print to stderr, depending on
+ * whether the function was invoked from within named or by a standalone tool,
+ * respectively.
+ */
+static void
+zoneverify_log_error(const vctx_t *vctx, const char *fmt, ...) {
+ va_list ap;
+
+ va_start(ap, fmt);
+ if (vctx->zone != NULL) {
+ dns_zone_logv(vctx->zone, DNS_LOGCATEGORY_GENERAL,
+ ISC_LOG_ERROR, NULL, fmt, ap);
+ } else {
+ vfprintf(stderr, fmt, ap);
+ fprintf(stderr, "\n");
+ }
+ va_end(ap);
+}
+
+/*%
+ * If invoked from a standalone tool, print a message described by 'fmt' and
+ * the variable arguments following it to stderr.
+ */
+static void
+zoneverify_print(const vctx_t *vctx, const char *fmt, ...) {
+ va_list ap;
+
+ if (vctx->zone != NULL) {
+ return;
+ }
+
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+}
+
static void
check_result(isc_result_t result, const char *message) {
if (result != ISC_R_SUCCESS)
}
static isc_result_t
-vctx_init(vctx_t *vctx, isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *ver,
- dns_name_t *origin)
+vctx_init(vctx_t *vctx, isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *ver, dns_name_t *origin)
{
isc_result_t result;
memset(vctx, 0, sizeof(*vctx));
vctx->mctx = mctx;
+ vctx->zone = zone;
vctx->db = db;
vctx->ver = ver;
vctx->origin = origin;
}
void
-dns_zoneverify_dnssec(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *origin,
- isc_mem_t *mctx, isc_boolean_t ignore_kskflag,
+dns_zoneverify_dnssec(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
+ dns_name_t *origin, isc_mem_t *mctx,
+ isc_boolean_t ignore_kskflag,
isc_boolean_t keyset_kskonly)
{
char algbuf[80];
isc_result_t result, vresult = ISC_R_UNSET;
vctx_t vctx;
- result = vctx_init(&vctx, mctx, db, ver, origin);
+ result = vctx_init(&vctx, mctx, zone, db, ver, origin);
if (result != ISC_R_SUCCESS) {
return;
}