From 1beb05f3e2f02198f867e182cda61fb19728ce73 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 22 Mar 2021 18:14:37 -0700 Subject: [PATCH] remove dns_client_request() and related code continues the cleanup of dns_client started in the previous commit. --- bin/win32/BINDInstall/BINDInstall.vcxproj.in | 3 - lib/dns/client.c | 337 ----- lib/dns/win32/libdns.def.in | 5 - lib/samples/.gitignore | 1 - lib/samples/Makefile.am | 6 +- lib/samples/nsprobe.c | 1234 ------------------ lib/samples/win32/nsprobe.vcxproj.filters.in | 22 - lib/samples/win32/nsprobe.vcxproj.in | 127 -- lib/samples/win32/nsprobe.vcxproj.user | 3 - util/copyrights | 4 - win32utils/Configure | 2 - win32utils/bind9.sln.in | 2 - 12 files changed, 1 insertion(+), 1745 deletions(-) delete mode 100644 lib/samples/nsprobe.c delete mode 100644 lib/samples/win32/nsprobe.vcxproj.filters.in delete mode 100644 lib/samples/win32/nsprobe.vcxproj.in delete mode 100644 lib/samples/win32/nsprobe.vcxproj.user diff --git a/bin/win32/BINDInstall/BINDInstall.vcxproj.in b/bin/win32/BINDInstall/BINDInstall.vcxproj.in index 9e70c009b5..5ace7e97ef 100644 --- a/bin/win32/BINDInstall/BINDInstall.vcxproj.in +++ b/bin/win32/BINDInstall/BINDInstall.vcxproj.in @@ -305,9 +305,6 @@ {D42B8670-8DF6-4D90-90F7-DB5FB845AFAE} - - {CB2A29F6-E73B-40AB-8AC4-2C1AAE7280BD} - {F66D8B7E-721D-4602-99AD-820D19AD1313} diff --git a/lib/dns/client.c b/lib/dns/client.c index 701202503b..ee63e8a21c 100644 --- a/lib/dns/client.c +++ b/lib/dns/client.c @@ -56,9 +56,6 @@ #define RCTX_MAGIC ISC_MAGIC('R', 'c', 't', 'x') #define RCTX_VALID(c) ISC_MAGIC_VALID(c, RCTX_MAGIC) -#define REQCTX_MAGIC ISC_MAGIC('R', 'q', 'c', 'x') -#define REQCTX_VALID(c) ISC_MAGIC_VALID(c, REQCTX_MAGIC) - #define UCTX_MAGIC ISC_MAGIC('U', 'c', 't', 'x') #define UCTX_VALID(c) ISC_MAGIC_VALID(c, UCTX_MAGIC) @@ -103,7 +100,6 @@ struct dns_client { /* Locked */ dns_viewlist_t viewlist; ISC_LIST(struct resctx) resctxs; - ISC_LIST(struct reqctx) reqctxs; }; #define DEF_FIND_TIMEOUT 5 @@ -157,39 +153,6 @@ typedef struct resarg { bool canceled; } resarg_t; -/*% - * Internal state for a single DNS request - */ -typedef struct reqctx { - /* Unlocked */ - unsigned int magic; - isc_mutex_t lock; - dns_client_t *client; - unsigned int parseoptions; - - /* Locked */ - ISC_LINK(struct reqctx) link; - bool canceled; - dns_tsigkey_t *tsigkey; - dns_request_t *request; - dns_clientreqevent_t *event; -} reqctx_t; - -/*% - * Argument of an internal event for synchronous DNS request. - */ -typedef struct reqarg { - /* Unlocked */ - isc_appctx_t *actx; - dns_client_t *client; - isc_mutex_t lock; - - /* Locked */ - isc_result_t result; - dns_clientreqtrans_t *trans; - bool canceled; -} reqarg_t; - static void client_resfind(resctx_t *rctx, dns_fetchevent_t *event); @@ -415,7 +378,6 @@ dns_client_createx(isc_mem_t *mctx, isc_appctx_t *actx, isc_taskmgr_t *taskmgr, dns_view_freeze(view); /* too early? */ ISC_LIST_INIT(client->resctxs); - ISC_LIST_INIT(client->reqctxs); client->mctx = NULL; isc_mem_attach(mctx, &client->mctx); @@ -1404,302 +1366,3 @@ cleanup: } return (result); } - -/*% - * Simple request routines - */ -static void -request_done(isc_task_t *task, isc_event_t *event) { - dns_requestevent_t *reqev = NULL; - dns_request_t *request; - isc_result_t result, eresult; - reqctx_t *ctx; - - UNUSED(task); - - REQUIRE(event->ev_type == DNS_EVENT_REQUESTDONE); - reqev = (dns_requestevent_t *)event; - request = reqev->request; - result = eresult = reqev->result; - ctx = reqev->ev_arg; - REQUIRE(REQCTX_VALID(ctx)); - - isc_event_free(&event); - - LOCK(&ctx->lock); - - if (eresult == ISC_R_SUCCESS) { - result = dns_request_getresponse(request, ctx->event->rmessage, - ctx->parseoptions); - } - - if (ctx->tsigkey != NULL) { - dns_tsigkey_detach(&ctx->tsigkey); - } - - if (ctx->canceled) { - ctx->event->result = ISC_R_CANCELED; - } else { - ctx->event->result = result; - } - task = ctx->event->ev_sender; - ctx->event->ev_sender = ctx; - isc_task_sendanddetach(&task, ISC_EVENT_PTR(&ctx->event)); - - UNLOCK(&ctx->lock); -} - -static void -localrequest_done(isc_task_t *task, isc_event_t *event) { - reqarg_t *reqarg = event->ev_arg; - dns_clientreqevent_t *rev = (dns_clientreqevent_t *)event; - - UNUSED(task); - - REQUIRE(event->ev_type == DNS_EVENT_CLIENTREQDONE); - - LOCK(&reqarg->lock); - - reqarg->result = rev->result; - dns_client_destroyreqtrans(&reqarg->trans); - isc_event_free(&event); - - if (!reqarg->canceled) { - UNLOCK(&reqarg->lock); - - /* Exit from the internal event loop */ - isc_app_ctxsuspend(reqarg->actx); - } else { - /* - * We have already exited from the loop (due to some - * unexpected event). Just clean the arg up. - */ - UNLOCK(&reqarg->lock); - isc_mutex_destroy(&reqarg->lock); - isc_mem_put(reqarg->client->mctx, reqarg, sizeof(*reqarg)); - } -} - -isc_result_t -dns_client_request(dns_client_t *client, dns_message_t *qmessage, - dns_message_t *rmessage, const isc_sockaddr_t *server, - unsigned int options, unsigned int parseoptions, - dns_tsec_t *tsec, unsigned int timeout, - unsigned int udptimeout, unsigned int udpretries) { - isc_appctx_t *actx; - reqarg_t *reqarg; - isc_result_t result; - - REQUIRE(DNS_CLIENT_VALID(client)); - REQUIRE(qmessage != NULL); - REQUIRE(rmessage != NULL); - - if ((client->attributes & DNS_CLIENTATTR_OWNCTX) == 0 && - (options & DNS_CLIENTREQOPT_ALLOWRUN) == 0) - { - /* - * If the client is run under application's control, we need - * to create a new running (sub)environment for this - * particular resolution. - */ - return (ISC_R_NOTIMPLEMENTED); /* XXXTBD */ - } else { - actx = client->actx; - } - - reqarg = isc_mem_get(client->mctx, sizeof(*reqarg)); - - isc_mutex_init(&reqarg->lock); - - reqarg->actx = actx; - reqarg->client = client; - reqarg->trans = NULL; - reqarg->canceled = false; - - result = dns_client_startrequest( - client, qmessage, rmessage, server, options, parseoptions, tsec, - timeout, udptimeout, udpretries, client->task, - localrequest_done, reqarg, &reqarg->trans); - if (result != ISC_R_SUCCESS) { - isc_mutex_destroy(&reqarg->lock); - isc_mem_put(client->mctx, reqarg, sizeof(*reqarg)); - return (result); - } - - /* - * Start internal event loop. It blocks until the entire process - * is completed. - */ - result = isc_app_ctxrun(actx); - - LOCK(&reqarg->lock); - if (result == ISC_R_SUCCESS || result == ISC_R_SUSPEND) { - result = reqarg->result; - } - if (reqarg->trans != NULL) { - /* - * Unusual termination (perhaps due to signal). We need some - * tricky cleanup process. - */ - reqarg->canceled = true; - dns_client_cancelresolve(reqarg->trans); - - UNLOCK(&reqarg->lock); - - /* reqarg will be freed in the event handler. */ - } else { - UNLOCK(&reqarg->lock); - - isc_mutex_destroy(&reqarg->lock); - isc_mem_put(client->mctx, reqarg, sizeof(*reqarg)); - } - - return (result); -} - -isc_result_t -dns_client_startrequest(dns_client_t *client, dns_message_t *qmessage, - dns_message_t *rmessage, const isc_sockaddr_t *server, - unsigned int options, unsigned int parseoptions, - dns_tsec_t *tsec, unsigned int timeout, - unsigned int udptimeout, unsigned int udpretries, - isc_task_t *task, isc_taskaction_t action, void *arg, - dns_clientreqtrans_t **transp) { - isc_result_t result; - dns_view_t *view = NULL; - isc_task_t *tclone = NULL; - dns_clientreqevent_t *event = NULL; - reqctx_t *ctx = NULL; - dns_tsectype_t tsectype = dns_tsectype_none; - unsigned int reqoptions; - - REQUIRE(DNS_CLIENT_VALID(client)); - REQUIRE(qmessage != NULL); - REQUIRE(rmessage != NULL); - REQUIRE(transp != NULL && *transp == NULL); - - if (tsec != NULL) { - tsectype = dns_tsec_gettype(tsec); - if (tsectype != dns_tsectype_tsig) { - return (ISC_R_NOTIMPLEMENTED); /* XXX */ - } - } - - LOCK(&client->lock); - result = dns_viewlist_find(&client->viewlist, DNS_CLIENTVIEW_NAME, - qmessage->rdclass, &view); - UNLOCK(&client->lock); - if (result != ISC_R_SUCCESS) { - return (result); - } - - reqoptions = 0; - if ((options & DNS_CLIENTREQOPT_TCP) != 0) { - reqoptions |= DNS_REQUESTOPT_TCP; - } - - tclone = NULL; - isc_task_attach(task, &tclone); - event = (dns_clientreqevent_t *)isc_event_allocate( - client->mctx, tclone, DNS_EVENT_CLIENTREQDONE, action, arg, - sizeof(*event)); - - ctx = isc_mem_get(client->mctx, sizeof(*ctx)); - isc_mutex_init(&ctx->lock); - - ctx->client = client; - ISC_LINK_INIT(ctx, link); - ctx->parseoptions = parseoptions; - ctx->canceled = false; - ctx->event = event; - ctx->event->rmessage = rmessage; - ctx->tsigkey = NULL; - if (tsec != NULL) { - dns_tsec_getkey(tsec, &ctx->tsigkey); - } - - ctx->magic = REQCTX_MAGIC; - - LOCK(&client->lock); - ISC_LIST_APPEND(client->reqctxs, ctx, link); - isc_refcount_increment(&client->references); - UNLOCK(&client->lock); - - ctx->request = NULL; - result = dns_request_createvia(view->requestmgr, qmessage, NULL, server, - -1, reqoptions, ctx->tsigkey, timeout, - udptimeout, udpretries, client->task, - request_done, ctx, &ctx->request); - if (result == ISC_R_SUCCESS) { - dns_view_detach(&view); - *transp = (dns_clientreqtrans_t *)ctx; - return (ISC_R_SUCCESS); - } - - isc_refcount_decrement1(&client->references); - - LOCK(&client->lock); - ISC_LIST_UNLINK(client->reqctxs, ctx, link); - UNLOCK(&client->lock); - isc_mutex_destroy(&ctx->lock); - isc_mem_put(client->mctx, ctx, sizeof(*ctx)); - - isc_event_free(ISC_EVENT_PTR(&event)); - isc_task_detach(&tclone); - dns_view_detach(&view); - - return (result); -} - -void -dns_client_cancelrequest(dns_clientreqtrans_t *trans) { - reqctx_t *ctx; - - REQUIRE(trans != NULL); - ctx = (reqctx_t *)trans; - REQUIRE(REQCTX_VALID(ctx)); - - LOCK(&ctx->lock); - - if (!ctx->canceled) { - ctx->canceled = true; - if (ctx->request != NULL) { - dns_request_cancel(ctx->request); - } - } - - UNLOCK(&ctx->lock); -} - -void -dns_client_destroyreqtrans(dns_clientreqtrans_t **transp) { - reqctx_t *ctx; - isc_mem_t *mctx; - dns_client_t *client; - - REQUIRE(transp != NULL); - ctx = (reqctx_t *)*transp; - *transp = NULL; - REQUIRE(REQCTX_VALID(ctx)); - client = ctx->client; - REQUIRE(DNS_CLIENT_VALID(client)); - REQUIRE(ctx->event == NULL); - REQUIRE(ctx->request != NULL); - - dns_request_destroy(&ctx->request); - mctx = client->mctx; - - LOCK(&client->lock); - - INSIST(ISC_LINK_LINKED(ctx, link)); - ISC_LIST_UNLINK(client->reqctxs, ctx, link); - - UNLOCK(&client->lock); - - isc_mutex_destroy(&ctx->lock); - ctx->magic = 0; - - isc_mem_put(mctx, ctx, sizeof(*ctx)); - - dns_client_destroy(&client); -} diff --git a/lib/dns/win32/libdns.def.in b/lib/dns/win32/libdns.def.in index 80869fae80..ae4b42980e 100644 --- a/lib/dns/win32/libdns.def.in +++ b/lib/dns/win32/libdns.def.in @@ -133,19 +133,14 @@ dns_catz_zones_merge dns_cert_fromtext dns_cert_totext dns_client_addtrustedkey -dns_client_cancelrequest dns_client_cancelresolve dns_client_clearservers dns_client_createx dns_client_destroy -dns_client_destroyreqtrans dns_client_destroyrestrans dns_client_freeresanswer -dns_client_mctx -dns_client_request dns_client_resolve dns_client_setservers -dns_client_startrequest dns_client_startresolve dns_clientinfo_init dns_clientinfomethods_init diff --git a/lib/samples/.gitignore b/lib/samples/.gitignore index 78d0640e1e..3a07505250 100644 --- a/lib/samples/.gitignore +++ b/lib/samples/.gitignore @@ -1,4 +1,3 @@ -nsprobe process resolve sample-async diff --git a/lib/samples/Makefile.am b/lib/samples/Makefile.am index 9eb8ad1efb..2e73c9b0c6 100644 --- a/lib/samples/Makefile.am +++ b/lib/samples/Makefile.am @@ -7,14 +7,10 @@ AM_CPPFLAGS += \ noinst_PROGRAMS = \ resolve \ - sample-async \ - nsprobe + sample-async resolve_SOURCES = resolve.c resolve_LDADD = $(LIBISC_LIBS) $(LIBIRS_LIBS) $(LIBDNS_LIBS) sample_async_SOURCES = sample-async.c sample_async_LDADD = $(LIBISC_LIBS) $(LIBDNS_LIBS) - -nsprobe_SOURCES = nsprobe.c -nsprobe_LDADD = $(LIBISC_LIBS) $(LIBDNS_LIBS) diff --git a/lib/samples/nsprobe.c b/lib/samples/nsprobe.c deleted file mode 100644 index eb626086f0..0000000000 --- a/lib/samples/nsprobe.c +++ /dev/null @@ -1,1234 +0,0 @@ -/* - * Copyright (C) Internet Systems Consortium, Inc. ("ISC") - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, you can obtain one at https://mozilla.org/MPL/2.0/. - * - * See the COPYRIGHT file distributed with this work for additional - * information regarding copyright ownership. - */ - -#ifndef WIN32 -#include -#include -#include -#include -#endif /* ifndef WIN32 */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define MAX_PROBES 1000 - -static dns_client_t *client = NULL; -static isc_task_t *probe_task = NULL; -static isc_appctx_t *actx = NULL; -static isc_mem_t *mctx = NULL; -static unsigned int outstanding_probes = 0; -const char *cacheserver = "127.0.0.1"; -static FILE *input; - -typedef enum { - none, - exist, - nxdomain, - othererr, - multiplesoa, - multiplecname, - brokenanswer, - lame, - timedout, - notype, - unexpected -} query_result_t; - -struct server { - ISC_LINK(struct server) link; - - isc_sockaddr_t address; - query_result_t result_a; - query_result_t result_aaaa; -}; - -struct probe_ns { - ISC_LINK(struct probe_ns) link; - - dns_fixedname_t fixedname; - dns_name_t *name; - struct server *current_server; - ISC_LIST(struct server) servers; -}; - -struct probe_trans { - bool inuse; - char *domain; - dns_fixedname_t fixedname; - dns_name_t *qname; - const char **qlabel; - bool qname_found; - dns_clientrestrans_t *resid; - dns_message_t *qmessage; - dns_message_t *rmessage; - dns_clientreqtrans_t *reqid; - - /* NS list */ - struct probe_ns *current_ns; - ISC_LIST(struct probe_ns) nslist; -}; - -struct lcl_stat { - unsigned long valid; - unsigned long ignore; - unsigned long nxdomain; - unsigned long othererr; - unsigned long multiplesoa; - unsigned long multiplecname; - unsigned long brokenanswer; - unsigned long lame; - unsigned long unknown; -} server_stat, domain_stat; - -static unsigned long number_of_domains = 0; -static unsigned long number_of_servers = 0; -static unsigned long multiple_error_domains = 0; -static bool debug_mode = false; -static int verbose_level = 0; -static const char *qlabels[] = { "www.", "ftp.", NULL }; -static struct probe_trans probes[MAX_PROBES]; - -static isc_result_t -probe_domain(struct probe_trans *trans); -static void -reset_probe(struct probe_trans *trans); -static isc_result_t -fetch_nsaddress(struct probe_trans *trans); -static isc_result_t -probe_name(struct probe_trans *trans, dns_rdatatype_t type); - -/* Dump an rdataset for debug */ -static isc_result_t -print_rdataset(dns_rdataset_t *rdataset, dns_name_t *owner) { - isc_buffer_t target; - isc_result_t result; - isc_region_t r; - char t[4096]; - - if (!debug_mode) { - return (ISC_R_SUCCESS); - } - - isc_buffer_init(&target, t, sizeof(t)); - - if (!dns_rdataset_isassociated(rdataset)) { - return (ISC_R_SUCCESS); - } - result = dns_rdataset_totext(rdataset, owner, false, false, &target); - if (result != ISC_R_SUCCESS) { - return (result); - } - isc_buffer_usedregion(&target, &r); - printf("%.*s", (int)r.length, (char *)r.base); - - return (ISC_R_SUCCESS); -} - -static isc_result_t -print_name(dns_name_t *name) { - isc_result_t result; - isc_buffer_t target; - isc_region_t r; - char t[4096]; - - isc_buffer_init(&target, t, sizeof(t)); - result = dns_name_totext(name, true, &target); - if (result == ISC_R_SUCCESS) { - isc_buffer_usedregion(&target, &r); - printf("%.*s", (int)r.length, (char *)r.base); - } else { - printf("(invalid name)"); - } - - return (result); -} - -static isc_result_t -print_address(FILE *fp, isc_sockaddr_t *addr) { - char buf[NI_MAXHOST]; - - if (getnameinfo(&addr->type.sa, addr->length, buf, sizeof(buf), NULL, 0, - NI_NUMERICHOST) == 0) - { - fprintf(fp, "%s", buf); - } else { - fprintf(fp, "(invalid address)"); - } - - return (ISC_R_SUCCESS); -} - -static void -ctxs_destroy(isc_mem_t **mctxp, isc_appctx_t **actxp, isc_taskmgr_t **taskmgrp, - isc_socketmgr_t **socketmgrp, isc_timermgr_t **timermgrp) { - if (*taskmgrp != NULL) { - isc_taskmgr_destroy(taskmgrp); - } - - if (*timermgrp != NULL) { - isc_timermgr_destroy(timermgrp); - } - - if (*socketmgrp != NULL) { - isc_socketmgr_destroy(socketmgrp); - } - - if (*actxp != NULL) { - isc_appctx_destroy(actxp); - } - - if (*mctxp != NULL) { - isc_mem_destroy(mctxp); - } -} - -static isc_result_t -ctxs_init(isc_mem_t **mctxp, isc_appctx_t **actxp, isc_taskmgr_t **taskmgrp, - isc_socketmgr_t **socketmgrp, isc_timermgr_t **timermgrp) { - isc_result_t result; - - isc_mem_create(mctxp); - - result = isc_appctx_create(*mctxp, actxp); - if (result != ISC_R_SUCCESS) { - goto fail; - } - - result = isc_taskmgr_createinctx(*mctxp, 1, 0, taskmgrp); - if (result != ISC_R_SUCCESS) { - goto fail; - } - - result = isc_socketmgr_createinctx(*mctxp, socketmgrp); - if (result != ISC_R_SUCCESS) { - goto fail; - } - - result = isc_timermgr_createinctx(*mctxp, timermgrp); - if (result != ISC_R_SUCCESS) { - goto fail; - } - - return (ISC_R_SUCCESS); - -fail: - ctxs_destroy(mctxp, actxp, taskmgrp, socketmgrp, timermgrp); - - return (result); -} - -/* - * Common routine to make query data - */ -static isc_result_t -make_querymessage(dns_message_t *message, dns_name_t *qname0, - dns_rdatatype_t rdtype) { - dns_name_t *qname = NULL; - dns_rdataset_t *qrdataset = NULL; - isc_result_t result; - - message->opcode = dns_opcode_query; - message->rdclass = dns_rdataclass_in; - - result = dns_message_gettempname(message, &qname); - if (result != ISC_R_SUCCESS) { - goto cleanup; - } - - result = dns_message_gettemprdataset(message, &qrdataset); - if (result != ISC_R_SUCCESS) { - goto cleanup; - } - - dns_name_init(qname, NULL); - dns_name_clone(qname0, qname); - dns_rdataset_makequestion(qrdataset, message->rdclass, rdtype); - ISC_LIST_APPEND(qname->list, qrdataset, link); - dns_message_addname(message, qname, DNS_SECTION_QUESTION); - - return (ISC_R_SUCCESS); - -cleanup: - if (qname != NULL) { - dns_message_puttempname(message, &qname); - } - if (qrdataset != NULL) { - dns_message_puttemprdataset(message, &qrdataset); - } - return (result); -} - -/* - * Update statistics - */ -static inline void -increment_entry(unsigned long *entryp) { - (*entryp)++; - INSIST(*entryp != 0U); /* check overflow */ -} - -static void -update_stat(struct probe_trans *trans) { - struct probe_ns *pns; - struct server *server; - struct lcl_stat local_stat; - unsigned int err_count = 0; - const char *stattype; - - increment_entry(&number_of_domains); - memset(&local_stat, 0, sizeof(local_stat)); - - /* Update per sever statistics */ - for (pns = ISC_LIST_HEAD(trans->nslist); pns != NULL; - pns = ISC_LIST_NEXT(pns, link)) - { - for (server = ISC_LIST_HEAD(pns->servers); server != NULL; - server = ISC_LIST_NEXT(server, link)) - { - increment_entry(&number_of_servers); - - if (server->result_aaaa == exist || - server->result_aaaa == notype) { - /* - * Don't care about the result of A query if - * the answer to AAAA query was expected. - */ - stattype = "valid"; - increment_entry(&server_stat.valid); - increment_entry(&local_stat.valid); - } else if (server->result_a == exist) { - switch (server->result_aaaa) { - case exist: - case notype: - stattype = "valid"; - increment_entry(&server_stat.valid); - increment_entry(&local_stat.valid); - break; - case timedout: - stattype = "ignore"; - increment_entry(&server_stat.ignore); - increment_entry(&local_stat.ignore); - break; - case nxdomain: - stattype = "nxdomain"; - increment_entry(&server_stat.nxdomain); - increment_entry(&local_stat.nxdomain); - break; - case othererr: - stattype = "othererr"; - increment_entry(&server_stat.othererr); - increment_entry(&local_stat.othererr); - break; - case multiplesoa: - stattype = "multiplesoa"; - increment_entry( - &server_stat.multiplesoa); - increment_entry( - &local_stat.multiplesoa); - break; - case multiplecname: - stattype = "multiplecname"; - increment_entry( - &server_stat.multiplecname); - increment_entry( - &local_stat.multiplecname); - break; - case brokenanswer: - stattype = "brokenanswer"; - increment_entry( - &server_stat.brokenanswer); - increment_entry( - &local_stat.brokenanswer); - break; - case lame: - stattype = "lame"; - increment_entry(&server_stat.lame); - increment_entry(&local_stat.lame); - break; - default: - stattype = "unknown"; - increment_entry(&server_stat.unknown); - increment_entry(&local_stat.unknown); - break; - } - } else { - stattype = "unknown"; - increment_entry(&server_stat.unknown); - increment_entry(&local_stat.unknown); - } - - if (verbose_level > 1 || - (verbose_level == 1 && - strcmp(stattype, "valid") != 0 && - strcmp(stattype, "unknown") != 0)) - { - print_name(pns->name); - putchar('('); - print_address(stdout, &server->address); - printf(") for %s:%s\n", trans->domain, - stattype); - } - } - } - - /* Update per domain statistics */ - if (local_stat.ignore > 0U) { - if (verbose_level > 0) { - printf("%s:ignore\n", trans->domain); - } - increment_entry(&domain_stat.ignore); - err_count++; - } - if (local_stat.nxdomain > 0U) { - if (verbose_level > 0) { - printf("%s:nxdomain\n", trans->domain); - } - increment_entry(&domain_stat.nxdomain); - err_count++; - } - if (local_stat.othererr > 0U) { - if (verbose_level > 0) { - printf("%s:othererr\n", trans->domain); - } - increment_entry(&domain_stat.othererr); - err_count++; - } - if (local_stat.multiplesoa > 0U) { - if (verbose_level > 0) { - printf("%s:multiplesoa\n", trans->domain); - } - increment_entry(&domain_stat.multiplesoa); - err_count++; - } - if (local_stat.multiplecname > 0U) { - if (verbose_level > 0) { - printf("%s:multiplecname\n", trans->domain); - } - increment_entry(&domain_stat.multiplecname); - err_count++; - } - if (local_stat.brokenanswer > 0U) { - if (verbose_level > 0) { - printf("%s:brokenanswer\n", trans->domain); - } - increment_entry(&domain_stat.brokenanswer); - err_count++; - } - if (local_stat.lame > 0U) { - if (verbose_level > 0) { - printf("%s:lame\n", trans->domain); - } - increment_entry(&domain_stat.lame); - err_count++; - } - - if (err_count > 1U) { - increment_entry(&multiple_error_domains); - } - - /* - * We regard the domain as valid if and only if no authoritative server - * has a problem and at least one server is known to be valid. - */ - if (local_stat.valid > 0U && err_count == 0U) { - if (verbose_level > 1) { - printf("%s:valid\n", trans->domain); - } - increment_entry(&domain_stat.valid); - } - - /* - * If the domain has no available server or all servers have the - * 'unknown' result, the domain's result is also regarded as unknown. - */ - if (local_stat.valid == 0U && err_count == 0U) { - if (verbose_level > 1) { - printf("%s:unknown\n", trans->domain); - } - increment_entry(&domain_stat.unknown); - } -} - -/* - * Search for an existent name with an A RR - */ - -static isc_result_t -set_nextqname(struct probe_trans *trans) { - isc_result_t result; - unsigned int domainlen; - isc_buffer_t b; - char buf[4096]; /* XXX ad-hoc constant, but should be enough */ - - if (*trans->qlabel == NULL) { - return (ISC_R_NOMORE); - } - - if (strlcpy(buf, *trans->qlabel, sizeof(buf)) >= sizeof(buf)) { - return (ISC_R_NOSPACE); - } - - if ((domainlen = strlcat(buf, trans->domain, sizeof(buf))) >= - sizeof(buf)) { - return (ISC_R_NOSPACE); - } - - isc_buffer_init(&b, buf, domainlen); - isc_buffer_add(&b, domainlen); - trans->qname = dns_fixedname_initname(&trans->fixedname); - result = dns_name_fromtext(trans->qname, &b, dns_rootname, 0, NULL); - - trans->qlabel++; - - return (result); -} - -static void -request_done(isc_task_t *task, isc_event_t *event) { - struct probe_trans *trans = event->ev_arg; - dns_clientreqevent_t *rev = (dns_clientreqevent_t *)event; - dns_message_t *rmessage; - struct probe_ns *pns; - struct server *server; - isc_result_t result; - query_result_t *resultp; - dns_name_t *name; - dns_rdataset_t *rdataset; - dns_rdatatype_t type; - - REQUIRE(task == probe_task); - REQUIRE(trans != NULL && trans->inuse); - rmessage = rev->rmessage; - REQUIRE(rmessage == trans->rmessage); - INSIST(outstanding_probes > 0); - - server = trans->current_ns->current_server; - INSIST(server != NULL); - - if (server->result_a == none) { - type = dns_rdatatype_a; - resultp = &server->result_a; - } else { - resultp = &server->result_aaaa; - type = dns_rdatatype_aaaa; - } - - if (rev->result == ISC_R_SUCCESS) { - if ((rmessage->flags & DNS_MESSAGEFLAG_AA) == 0) { - *resultp = lame; - } else if (rmessage->rcode == dns_rcode_nxdomain) { - *resultp = nxdomain; - } else if (rmessage->rcode != dns_rcode_noerror) { - *resultp = othererr; - } else if (rmessage->counts[DNS_SECTION_ANSWER] == 0) { - /* no error but empty answer */ - *resultp = notype; - } else { - result = dns_message_firstname(rmessage, - DNS_SECTION_ANSWER); - while (result == ISC_R_SUCCESS) { - name = NULL; - dns_message_currentname( - rmessage, DNS_SECTION_ANSWER, &name); - for (rdataset = ISC_LIST_HEAD(name->list); - rdataset != NULL; - rdataset = ISC_LIST_NEXT(rdataset, link)) - { - (void)print_rdataset(rdataset, name); - - if (rdataset->type == - dns_rdatatype_cname || - rdataset->type == - dns_rdatatype_dname) - { - /* Should chase the chain? */ - *resultp = exist; - goto found; - } else if (rdataset->type == type) { - *resultp = exist; - goto found; - } - } - result = dns_message_nextname( - rmessage, DNS_SECTION_ANSWER); - } - - /* - * Something unexpected happened: the response - * contained a non-empty authoritative answer, but we - * could not find an expected result. - */ - *resultp = unexpected; - } - } else if (rev->result == DNS_R_RECOVERABLE || - rev->result == DNS_R_BADLABELTYPE) - { - /* Broken response. Try identifying known cases. */ - *resultp = brokenanswer; - - if (rmessage->counts[DNS_SECTION_ANSWER] > 0) { - result = dns_message_firstname(rmessage, - DNS_SECTION_ANSWER); - while (result == ISC_R_SUCCESS) { - /* - * Check to see if the response has multiple - * CNAME RRs. Update the result code if so. - */ - name = NULL; - dns_message_currentname( - rmessage, DNS_SECTION_ANSWER, &name); - for (rdataset = ISC_LIST_HEAD(name->list); - rdataset != NULL; - rdataset = ISC_LIST_NEXT(rdataset, link)) - { - if (rdataset->type == - dns_rdatatype_cname && - dns_rdataset_count(rdataset) > 1) { - *resultp = multiplecname; - goto found; - } - } - result = dns_message_nextname( - rmessage, DNS_SECTION_ANSWER); - } - } - - if (rmessage->counts[DNS_SECTION_AUTHORITY] > 0) { - result = dns_message_firstname(rmessage, - DNS_SECTION_AUTHORITY); - while (result == ISC_R_SUCCESS) { - /* - * Check to see if the response has multiple - * SOA RRs. Update the result code if so. - */ - name = NULL; - dns_message_currentname( - rmessage, DNS_SECTION_AUTHORITY, &name); - for (rdataset = ISC_LIST_HEAD(name->list); - rdataset != NULL; - rdataset = ISC_LIST_NEXT(rdataset, link)) - { - if (rdataset->type == - dns_rdatatype_soa && - dns_rdataset_count(rdataset) > 1) { - *resultp = multiplesoa; - goto found; - } - } - result = dns_message_nextname( - rmessage, DNS_SECTION_AUTHORITY); - } - } - } else if (rev->result == ISC_R_TIMEDOUT) { - *resultp = timedout; - } else { - fprintf(stderr, "unexpected result: %u (domain=%s, server=", - rev->result, trans->domain); - print_address(stderr, &server->address); - fputc('\n', stderr); - *resultp = unexpected; - } - -found: - INSIST(*resultp != none); - if (type == dns_rdatatype_a && *resultp == exist) { - trans->qname_found = true; - } - - dns_client_destroyreqtrans(&trans->reqid); - isc_event_free(&event); - dns_message_reset(trans->rmessage, DNS_MESSAGE_INTENTPARSE); - - result = probe_name(trans, type); - if (result == ISC_R_NOMORE) { - /* We've tried all addresses of all servers. */ - if (type == dns_rdatatype_a && trans->qname_found) { - /* - * If we've explored A RRs and found an existent - * record, we can move to AAAA. - */ - trans->current_ns = ISC_LIST_HEAD(trans->nslist); - probe_name(trans, dns_rdatatype_aaaa); - result = ISC_R_SUCCESS; - } else if (type == dns_rdatatype_a) { - /* - * No server provided an existent A RR of this name. - * Try next label. - */ - dns_fixedname_invalidate(&trans->fixedname); - trans->qname = NULL; - result = set_nextqname(trans); - if (result == ISC_R_SUCCESS) { - trans->current_ns = - ISC_LIST_HEAD(trans->nslist); - for (pns = trans->current_ns; pns != NULL; - pns = ISC_LIST_NEXT(pns, link)) { - for (server = ISC_LIST_HEAD( - pns->servers); - server != NULL; - server = ISC_LIST_NEXT(server, - link)) - { - INSIST(server->result_aaaa == - none); - server->result_a = none; - } - } - result = probe_name(trans, dns_rdatatype_a); - } - } - if (result != ISC_R_SUCCESS) { - /* - * We've explored AAAA RRs or failed to find a valid - * query label. Wrap up the result and move to the - * next domain. - */ - reset_probe(trans); - } - } else if (result != ISC_R_SUCCESS) { - reset_probe(trans); /* XXX */ - } -} - -static isc_result_t -probe_name(struct probe_trans *trans, dns_rdatatype_t type) { - isc_result_t result; - struct probe_ns *pns; - struct server *server; - - REQUIRE(trans->reqid == NULL); - REQUIRE(type == dns_rdatatype_a || type == dns_rdatatype_aaaa); - - for (pns = trans->current_ns; pns != NULL; - pns = ISC_LIST_NEXT(pns, link)) { - for (server = ISC_LIST_HEAD(pns->servers); server != NULL; - server = ISC_LIST_NEXT(server, link)) - { - if ((type == dns_rdatatype_a && - server->result_a == none) || - (type == dns_rdatatype_aaaa && - server->result_aaaa == none)) - { - pns->current_server = server; - goto found; - } - } - } - -found: - trans->current_ns = pns; - if (pns == NULL) { - return (ISC_R_NOMORE); - } - - INSIST(pns->current_server != NULL); - dns_message_reset(trans->qmessage, DNS_MESSAGE_INTENTRENDER); - result = make_querymessage(trans->qmessage, trans->qname, type); - if (result != ISC_R_SUCCESS) { - return (result); - } - result = dns_client_startrequest( - client, trans->qmessage, trans->rmessage, - &pns->current_server->address, 0, DNS_MESSAGEPARSE_BESTEFFORT, - NULL, 120, 0, 4, probe_task, request_done, trans, - &trans->reqid); - - return (result); -} - -/* - * Get IP addresses of NSes - */ - -static void -resolve_nsaddress(isc_task_t *task, isc_event_t *event) { - struct probe_trans *trans = event->ev_arg; - dns_clientresevent_t *rev = (dns_clientresevent_t *)event; - dns_name_t *name; - dns_rdataset_t *rdataset; - dns_rdata_t rdata = DNS_RDATA_INIT; - struct probe_ns *pns = trans->current_ns; - isc_result_t result; - - REQUIRE(task == probe_task); - REQUIRE(trans->inuse); - REQUIRE(pns != NULL); - INSIST(outstanding_probes > 0); - - for (name = ISC_LIST_HEAD(rev->answerlist); name != NULL; - name = ISC_LIST_NEXT(name, link)) - { - for (rdataset = ISC_LIST_HEAD(name->list); rdataset != NULL; - rdataset = ISC_LIST_NEXT(rdataset, link)) - { - (void)print_rdataset(rdataset, name); - - if (rdataset->type != dns_rdatatype_a) { - continue; - } - - for (result = dns_rdataset_first(rdataset); - result == ISC_R_SUCCESS; - result = dns_rdataset_next(rdataset)) - { - dns_rdata_in_a_t rdata_a; - struct server *server; - - dns_rdataset_current(rdataset, &rdata); - result = dns_rdata_tostruct(&rdata, &rdata_a, - NULL); - if (result != ISC_R_SUCCESS) { - continue; - } - - server = isc_mem_get(mctx, sizeof(*server)); - isc_sockaddr_fromin(&server->address, - &rdata_a.in_addr, 53); - ISC_LINK_INIT(server, link); - server->result_a = none; - server->result_aaaa = none; - ISC_LIST_APPEND(pns->servers, server, link); - } - } - } - - dns_client_freeresanswer(client, &rev->answerlist); - dns_client_destroyrestrans(&trans->resid); - isc_event_free(&event); - -next_ns: - trans->current_ns = ISC_LIST_NEXT(pns, link); - if (trans->current_ns == NULL) { - trans->current_ns = ISC_LIST_HEAD(trans->nslist); - dns_fixedname_invalidate(&trans->fixedname); - trans->qname = NULL; - result = set_nextqname(trans); - if (result == ISC_R_SUCCESS) { - result = probe_name(trans, dns_rdatatype_a); - } - } else { - result = fetch_nsaddress(trans); - if (result != ISC_R_SUCCESS) { - goto next_ns; /* XXX: this is unlikely to succeed */ - } - } - - if (result != ISC_R_SUCCESS) { - reset_probe(trans); - } -} - -static isc_result_t -fetch_nsaddress(struct probe_trans *trans) { - struct probe_ns *pns; - - pns = trans->current_ns; - REQUIRE(pns != NULL); - - return (dns_client_startresolve( - client, pns->name, dns_rdataclass_in, dns_rdatatype_a, 0, - probe_task, resolve_nsaddress, trans, &trans->resid)); -} - -/* - * Get NS RRset for a given domain - */ - -static void -reset_probe(struct probe_trans *trans) { - struct probe_ns *pns; - struct server *server; - isc_result_t result; - - REQUIRE(trans->resid == NULL); - REQUIRE(trans->reqid == NULL); - - update_stat(trans); - - dns_message_reset(trans->qmessage, DNS_MESSAGE_INTENTRENDER); - dns_message_reset(trans->rmessage, DNS_MESSAGE_INTENTPARSE); - - trans->inuse = false; - if (trans->domain != NULL) { - isc_mem_free(mctx, trans->domain); - } - trans->domain = NULL; - if (trans->qname != NULL) { - dns_fixedname_invalidate(&trans->fixedname); - } - trans->qname = NULL; - trans->qlabel = qlabels; - trans->qname_found = false; - trans->current_ns = NULL; - - while ((pns = ISC_LIST_HEAD(trans->nslist)) != NULL) { - ISC_LIST_UNLINK(trans->nslist, pns, link); - while ((server = ISC_LIST_HEAD(pns->servers)) != NULL) { - ISC_LIST_UNLINK(pns->servers, server, link); - isc_mem_put(mctx, server, sizeof(*server)); - } - isc_mem_put(mctx, pns, sizeof(*pns)); - } - - outstanding_probes--; - - result = probe_domain(trans); - if (result == ISC_R_NOMORE && outstanding_probes == 0) { - isc_app_ctxshutdown(actx); - } -} - -static void -resolve_ns(isc_task_t *task, isc_event_t *event) { - struct probe_trans *trans = event->ev_arg; - dns_clientresevent_t *rev = (dns_clientresevent_t *)event; - dns_name_t *name; - dns_rdataset_t *rdataset; - isc_result_t result = ISC_R_SUCCESS; - dns_rdata_t rdata = DNS_RDATA_INIT; - struct probe_ns *pns; - - REQUIRE(task == probe_task); - REQUIRE(trans->inuse); - INSIST(outstanding_probes > 0); - - for (name = ISC_LIST_HEAD(rev->answerlist); name != NULL; - name = ISC_LIST_NEXT(name, link)) - { - for (rdataset = ISC_LIST_HEAD(name->list); rdataset != NULL; - rdataset = ISC_LIST_NEXT(rdataset, link)) - { - (void)print_rdataset(rdataset, name); - - if (rdataset->type != dns_rdatatype_ns) { - continue; - } - - for (result = dns_rdataset_first(rdataset); - result == ISC_R_SUCCESS; - result = dns_rdataset_next(rdataset)) - { - dns_rdata_ns_t ns; - - dns_rdataset_current(rdataset, &rdata); - /* - * Extract the name from the NS record. - */ - result = dns_rdata_tostruct(&rdata, &ns, NULL); - if (result != ISC_R_SUCCESS) { - continue; - } - - pns = isc_mem_get(mctx, sizeof(*pns)); - - pns->name = - dns_fixedname_initname(&pns->fixedname); - ISC_LINK_INIT(pns, link); - ISC_LIST_APPEND(trans->nslist, pns, link); - ISC_LIST_INIT(pns->servers); - - dns_name_copynf(&ns.name, pns->name); - dns_rdata_reset(&rdata); - dns_rdata_freestruct(&ns); - } - } - } - - dns_client_freeresanswer(client, &rev->answerlist); - dns_client_destroyrestrans(&trans->resid); - isc_event_free(&event); - - if (!ISC_LIST_EMPTY(trans->nslist)) { - /* Go get addresses of NSes */ - trans->current_ns = ISC_LIST_HEAD(trans->nslist); - result = fetch_nsaddress(trans); - } else { - result = ISC_R_FAILURE; - } - - if (result == ISC_R_SUCCESS) { - return; - } - - reset_probe(trans); -} - -static isc_result_t -probe_domain(struct probe_trans *trans) { - isc_result_t result; - unsigned int domainlen; - isc_buffer_t b; - char buf[4096]; /* XXX ad hoc constant, but should be enough */ - char *cp; - - REQUIRE(trans != NULL); - REQUIRE(!trans->inuse); - REQUIRE(outstanding_probes < MAX_PROBES); - - /* Construct domain */ - cp = fgets(buf, sizeof(buf), input); - if (cp == NULL) { - return (ISC_R_NOMORE); - } - if ((cp = strchr(buf, '\n')) != NULL) { /* zap NL if any */ - *cp = '\0'; - } - trans->domain = isc_mem_strdup(mctx, buf); - - /* Start getting NS for the domain */ - domainlen = strlen(buf); - isc_buffer_init(&b, buf, domainlen); - isc_buffer_add(&b, domainlen); - trans->qname = dns_fixedname_initname(&trans->fixedname); - result = dns_name_fromtext(trans->qname, &b, dns_rootname, 0, NULL); - if (result != ISC_R_SUCCESS) { - goto cleanup; - } - result = dns_client_startresolve( - client, trans->qname, dns_rdataclass_in, dns_rdatatype_ns, 0, - probe_task, resolve_ns, trans, &trans->resid); - if (result != ISC_R_SUCCESS) { - goto cleanup; - } - - trans->inuse = true; - outstanding_probes++; - - return (ISC_R_SUCCESS); - -cleanup: - isc_mem_free(mctx, trans->domain); - dns_fixedname_invalidate(&trans->fixedname); - - return (result); -} - -ISC_NORETURN static void -usage(void); - -static void -usage(void) { - fprintf(stderr, "usage: nsprobe [-d] [-v [-v...]] [-c cache_address] " - "[input_file]\n"); - - exit(1); -} - -int -main(int argc, char *argv[]) { - int i, ch, error; - struct addrinfo hints, *res; - isc_result_t result; - isc_sockaddr_t sa; - isc_sockaddrlist_t servers; - isc_taskmgr_t *taskmgr = NULL; - isc_socketmgr_t *socketmgr = NULL; - isc_timermgr_t *timermgr = NULL; - - while ((ch = isc_commandline_parse(argc, argv, "c:dhv")) != -1) { - switch (ch) { - case 'c': - cacheserver = isc_commandline_argument; - break; - case 'd': - debug_mode = true; - break; - case 'h': - usage(); - break; - case 'v': - verbose_level++; - break; - default: - usage(); - break; - } - } - - argc -= isc_commandline_index; - argv += isc_commandline_index; - - /* Common set up */ - isc_lib_register(); - result = dns_lib_init(); - if (result != ISC_R_SUCCESS) { - fprintf(stderr, "dns_lib_init failed: %u\n", result); - exit(1); - } - - result = ctxs_init(&mctx, &actx, &taskmgr, &socketmgr, &timermgr); - if (result != ISC_R_SUCCESS) { - fprintf(stderr, "ctx create failed: %u\n", result); - exit(1); - } - - isc_app_ctxstart(actx); - - result = dns_client_createx(mctx, actx, taskmgr, socketmgr, timermgr, 0, - &client, NULL, NULL); - if (result != ISC_R_SUCCESS) { - fprintf(stderr, "dns_client_createx failed: %u\n", result); - exit(1); - } - - /* Set local cache server */ - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_DGRAM; - error = getaddrinfo(cacheserver, "53", &hints, &res); - if (error != 0) { - fprintf(stderr, "failed to convert server name (%s): %s\n", - cacheserver, gai_strerror(error)); - exit(1); - } - - if (res->ai_addrlen > sizeof(sa.type)) { - fprintf(stderr, - "assumption failure: addrlen is too long: %ld\n", - (long)res->ai_addrlen); - exit(1); - } - memmove(&sa.type.sa, res->ai_addr, res->ai_addrlen); - sa.length = (unsigned int)res->ai_addrlen; - freeaddrinfo(res); - ISC_LINK_INIT(&sa, link); - ISC_LIST_INIT(servers); - ISC_LIST_APPEND(servers, &sa, link); - result = dns_client_setservers(client, dns_rdataclass_in, NULL, - &servers); - if (result != ISC_R_SUCCESS) { - fprintf(stderr, "failed to set server: %u\n", result); - exit(1); - } - - /* Create the main task */ - probe_task = NULL; - result = isc_task_create(taskmgr, 0, &probe_task); - if (result != ISC_R_SUCCESS) { - fprintf(stderr, "failed to create task: %u\n", result); - exit(1); - } - - /* Open input file */ - if (argc == 0) { - input = stdin; - } else { - input = fopen(argv[0], "r"); - if (input == NULL) { - fprintf(stderr, "failed to open input file: %s\n", - argv[0]); - exit(1); - } - } - - /* Set up and start probe */ - for (i = 0; i < MAX_PROBES; i++) { - probes[i].inuse = false; - probes[i].domain = NULL; - dns_fixedname_init(&probes[i].fixedname); - probes[i].qname = NULL; - probes[i].qlabel = qlabels; - probes[i].qname_found = false; - probes[i].resid = NULL; - ISC_LIST_INIT(probes[i].nslist); - probes[i].reqid = NULL; - - probes[i].qmessage = NULL; - dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, - &probes[i].qmessage); - dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, - &probes[i].rmessage); - } - for (i = 0; i < MAX_PROBES; i++) { - result = probe_domain(&probes[i]); - if (result == ISC_R_NOMORE) { - break; - } else if (result != ISC_R_SUCCESS) { - fprintf(stderr, "failed to issue an initial probe\n"); - exit(1); - } - } - - /* Start event loop */ - isc_app_ctxrun(actx); - - /* Dump results */ - printf("Per domain results (out of %lu domains):\n", number_of_domains); - printf(" valid: %lu\n" - " ignore: %lu\n" - " nxdomain: %lu\n" - " othererr: %lu\n" - " multiplesoa: %lu\n" - " multiplecname: %lu\n" - " brokenanswer: %lu\n" - " lame: %lu\n" - " unknown: %lu\n" - " multiple errors: %lu\n", - domain_stat.valid, domain_stat.ignore, domain_stat.nxdomain, - domain_stat.othererr, domain_stat.multiplesoa, - domain_stat.multiplecname, domain_stat.brokenanswer, - domain_stat.lame, domain_stat.unknown, multiple_error_domains); - printf("Per server results (out of %lu servers):\n", number_of_servers); - printf(" valid: %lu\n" - " ignore: %lu\n" - " nxdomain: %lu\n" - " othererr: %lu\n" - " multiplesoa: %lu\n" - " multiplecname: %lu\n" - " brokenanswer: %lu\n" - " lame: %lu\n" - " unknown: %lu\n", - server_stat.valid, server_stat.ignore, server_stat.nxdomain, - server_stat.othererr, server_stat.multiplesoa, - server_stat.multiplecname, server_stat.brokenanswer, - server_stat.lame, server_stat.unknown); - - /* Cleanup */ - for (i = 0; i < MAX_PROBES; i++) { - dns_message_detach(&probes[i].qmessage); - dns_message_detach(&probes[i].rmessage); - } - isc_task_detach(&probe_task); - dns_client_destroy(&client); - dns_lib_shutdown(); - isc_app_ctxfinish(actx); - ctxs_destroy(&mctx, &actx, &taskmgr, &socketmgr, &timermgr); - - return (0); -} diff --git a/lib/samples/win32/nsprobe.vcxproj.filters.in b/lib/samples/win32/nsprobe.vcxproj.filters.in deleted file mode 100644 index d7e313b183..0000000000 --- a/lib/samples/win32/nsprobe.vcxproj.filters.in +++ /dev/null @@ -1,22 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Source Files - - - \ No newline at end of file diff --git a/lib/samples/win32/nsprobe.vcxproj.in b/lib/samples/win32/nsprobe.vcxproj.in deleted file mode 100644 index 4581683f27..0000000000 --- a/lib/samples/win32/nsprobe.vcxproj.in +++ /dev/null @@ -1,127 +0,0 @@ - - - - - Debug - @PLATFORM@ - - - Release - @PLATFORM@ - - - - {CB2A29F6-E73B-40AB-8AC4-2C1AAE7280BD} - Win32Proj - nsprobe - @WINDOWS_TARGET_PLATFORM_VERSION@ - - - - Application - true - MultiByte - @PLATFORM_TOOLSET@ - - - Application - false - true - MultiByte - @PLATFORM_TOOLSET@ - - - - - - - - - - - - - true - ..\..\..\Build\$(Configuration)\ - .\$(Configuration)\ - None - - - false - ..\..\..\Build\$(Configuration)\ - .\$(Configuration)\ - None - - - - - - Level4 - false - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - .\$(Configuration)\$(TargetName).pch - .\$(Configuration)\ - .\$(Configuration)\ - $(OutDir)$(TargetName).pdb - true - ..\..\..\config.h - .\;..\..\..\;@LIBXML2_INC@@OPENSSL_INC@..\..\isc\win32;..\..\isc\win32\include;..\..\isc\include;..\..\dns\win32\include;..\..\dns\include;%(AdditionalIncludeDirectories) - CompileAsC - - - Console - true - ..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt) - ..\..\isc\win32\$(Configuration);..\..\dns\win32\$(Configuration);%(AdditionalLibraryDirectories) - @OPENSSL_LIBCRYPTO@@OPENSSL_LIBSSL@libisc.lib;libdns.lib;ws2_32.lib;%(AdditionalDependencies) - - - - - Level1 - true - - - MaxSpeed - true - @INTRINSIC@ - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - OnlyExplicitInline - false - true - .\$(Configuration)\$(TargetName).pch - .\$(Configuration)\ - .\$(Configuration)\ - $(OutDir)$(TargetName).pdb - ..\..\..\config.h - .\;..\..\..\;@LIBXML2_INC@@OPENSSL_INC@..\..\isc\win32;..\..\isc\win32\include;..\..\isc\include;..\..\dns\win32\include;..\..\dns\include;%(AdditionalIncludeDirectories) - CompileAsC - - - Console - false - true - true - ..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt) - Default - ..\..\isc\win32\$(Configuration);..\..\dns\win32\$(Configuration);%(AdditionalLibraryDirectories) - @OPENSSL_LIBCRYPTO@@OPENSSL_LIBSSL@libisc.lib;libdns.lib;ws2_32.lib;%(AdditionalDependencies) - - - - - - - - {3840E563-D180-4761-AA9C-E6155F02EAFF} - - - {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} - - - - - - diff --git a/lib/samples/win32/nsprobe.vcxproj.user b/lib/samples/win32/nsprobe.vcxproj.user deleted file mode 100644 index ace9a86acb..0000000000 --- a/lib/samples/win32/nsprobe.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/util/copyrights b/util/copyrights index e46a3c90ce..f5d31b3c9b 100644 --- a/util/copyrights +++ b/util/copyrights @@ -2189,16 +2189,12 @@ ./lib/ns/win32/libns.vcxproj.in X 2017,2018,2019,2020 ./lib/ns/win32/libns.vcxproj.user X 2017,2018,2019,2020,2021 ./lib/ns/xfrout.c C 2017,2018,2019,2020,2021 -./lib/samples/nsprobe.c C 2009,2010,2011,2012,2013,2014,2015,2016,2018,2019,2020,2021 ./lib/samples/resolve.c C 2009,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021 ./lib/samples/rootkey.sh SH 2013,2016,2018,2019,2020,2021 ./lib/samples/sample-async.c C 2009,2013,2014,2015,2016,2018,2019,2020,2021 ./lib/samples/win32/async.vcxproj.filters.in X 2014,2015,2018,2019,2020 ./lib/samples/win32/async.vcxproj.in X 2014,2015,2016,2017,2018,2019,2020 ./lib/samples/win32/async.vcxproj.user X 2014,2018,2019,2020,2021 -./lib/samples/win32/nsprobe.vcxproj.filters.in X 2014,2015,2018,2019,2020 -./lib/samples/win32/nsprobe.vcxproj.in X 2014,2015,2016,2017,2018,2019,2020 -./lib/samples/win32/nsprobe.vcxproj.user X 2014,2018,2019,2020,2021 ./lib/samples/win32/resolve.vcxproj.filters.in X 2014,2015,2018,2019,2020 ./lib/samples/win32/resolve.vcxproj.in X 2014,2015,2016,2017,2018,2019,2020 ./lib/samples/win32/resolve.vcxproj.user X 2014,2018,2019,2020,2021 diff --git a/win32utils/Configure b/win32utils/Configure index 42660889d2..4d72e10603 100644 --- a/win32utils/Configure +++ b/win32utils/Configure @@ -133,8 +133,6 @@ my @projectlist = ("../bin/check/win32/checkconf.vcxproj", "../lib/samples/win32/resolve.vcxproj.filters", "../lib/samples/win32/async.vcxproj", "../lib/samples/win32/async.vcxproj.filters", - "../lib/samples/win32/nsprobe.vcxproj", - "../lib/samples/win32/nsprobe.vcxproj.filters", "../lib/win32/bindevt/bindevt.vcxproj", "../lib/win32/bindevt/bindevt.vcxproj.filters", "bind9.sln"); diff --git a/win32utils/bind9.sln.in b/win32utils/bind9.sln.in index 3da2ffe9a6..04ddd20d8e 100644 --- a/win32utils/bind9.sln.in +++ b/win32utils/bind9.sln.in @@ -29,8 +29,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "async", "..\lib\samples\win EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gai", "..\lib\samples\win32\gai.vcxproj", "{D42B8670-8DF6-4D90-90F7-DB5FB845AFAE}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nsprobe", "..\lib\samples\win32\nsprobe.vcxproj", "{CB2A29F6-E73B-40AB-8AC4-2C1AAE7280BD}" -EndProject @END SAMPLES Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "named", "..\bin\named\win32\named.vcxproj", "{723C65DA-A96C-4BA3-A34E-44F11CA346F9}" EndProject