73eb75dc212911e4da58a3ce0a4672d3910193ebBrian Wellington/*
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Copyright (C) 2001, 2004, 2005, 2007, 2009-2011, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
73eb75dc212911e4da58a3ce0a4672d3910193ebBrian Wellington *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
73eb75dc212911e4da58a3ce0a4672d3910193ebBrian Wellington */
73eb75dc212911e4da58a3ce0a4672d3910193ebBrian Wellington
135bcc2e42a94543f11af2a4196b13552ab46d89Automatic Updater/* $Id: keydelete.c,v 1.18 2011/01/11 23:47:13 tbox Exp $ */
73eb75dc212911e4da58a3ce0a4672d3910193ebBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <config.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <stdlib.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <string.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <isc/app.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <isc/base64.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <isc/entropy.h>
8d1374958f66070fa674b8da10da355c11dd0b28Mark Andrews#include <isc/hash.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <isc/log.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <isc/mem.h>
3759f10fc543747668b1ca4b4671f35b0dea8445Francis Dupont#include <isc/print.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <isc/sockaddr.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <isc/socket.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <isc/task.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <isc/timer.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <isc/util.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
c40906dfad6dd6e3a3e3c94b8c8847bc9bc064e5Mark Andrews#include <pk11/site.h>
c40906dfad6dd6e3a3e3c94b8c8847bc9bc064e5Mark Andrews
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dns/dispatch.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dns/fixedname.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dns/keyvalues.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dns/message.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dns/name.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dns/request.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dns/result.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dns/tkey.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dns/tsig.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dns/view.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#include <dst/result.h>
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#define CHECK(str, x) { \
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington if ((x) != ISC_R_SUCCESS) { \
2fa9cf0bf962c80ab9194694c08d0e5d6a869232Brian Wellington fprintf(stderr, "I:%s: %s\n", (str), isc_result_totext(x)); \
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington exit(-1); \
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington } \
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington}
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#define RUNCHECK(x) RUNTIME_CHECK((x) == ISC_R_SUCCESS)
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#define PORT 5300
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington#define TIMEOUT 30
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellingtonstatic isc_mem_t *mctx;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellingtonstatic dns_tsigkey_t *tsigkey;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellingtonstatic dns_tsig_keyring_t *ring;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellingtonstatic dns_requestmgr_t *requestmgr;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellingtonstatic void
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellingtonrecvquery(isc_task_t *task, isc_event_t *event) {
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_requestevent_t *reqev = (dns_requestevent_t *)event;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_result_t result;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_message_t *query, *response;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington UNUSED(task);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington REQUIRE(reqev != NULL);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington if (reqev->result != ISC_R_SUCCESS) {
2fa9cf0bf962c80ab9194694c08d0e5d6a869232Brian Wellington fprintf(stderr, "I:request event result: %s\n",
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_result_totext(reqev->result));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington exit(-1);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington }
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington query = reqev->ev_arg;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington response = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington CHECK("dns_message_create", result);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington result = dns_request_getresponse(reqev->request, response,
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington DNS_MESSAGEPARSE_PRESERVEORDER);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington CHECK("dns_request_getresponse", result);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington if (response->rcode != dns_rcode_noerror) {
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington result = ISC_RESULTCLASS_DNSRCODE + response->rcode;
2fa9cf0bf962c80ab9194694c08d0e5d6a869232Brian Wellington fprintf(stderr, "I:response rcode: %s\n",
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_result_totext(result));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington exit(-1);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington }
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington result = dns_tkey_processdeleteresponse(query, response, ring);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington CHECK("dns_tkey_processdhresponse", result);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_message_destroy(&query);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_message_destroy(&response);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_request_destroy(&reqev->request);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_event_free(&event);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_app_shutdown();
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington return;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington}
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellingtonstatic void
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellingtonsendquery(isc_task_t *task, isc_event_t *event) {
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington struct in_addr inaddr;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_sockaddr_t address;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_result_t result;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_message_t *query;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_request_t *request;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_event_free(&event);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews result = ISC_R_FAILURE;
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews if (inet_pton(AF_INET, "10.53.0.1", &inaddr) != 1)
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews CHECK("inet_pton", result);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_sockaddr_fromin(&address, &inaddr, PORT);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington query = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington result = dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &query);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington CHECK("dns_message_create", result);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington result = dns_tkey_builddeletequery(query, tsigkey);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington CHECK("dns_tkey_builddeletequery", result);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington request = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington result = dns_request_create(requestmgr, query, &address,
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews DNS_REQUESTOPT_TCP, tsigkey, TIMEOUT,
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews task, recvquery, query, &request);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington CHECK("dns_request_create", result);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington}
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellingtonint
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellingtonmain(int argc, char **argv) {
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington char *keyname;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_taskmgr_t *taskmgr;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_timermgr_t *timermgr;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_socketmgr_t *socketmgr;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_socket_t *sock;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington unsigned int attrs, attrmask;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_sockaddr_t bind_any;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_dispatchmgr_t *dispatchmgr;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_dispatch_t *dispatchv4;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_view_t *view;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_entropy_t *ectx;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_tkeyctx_t *tctx;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dst_key_t *dstkey;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_log_t *log;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_logconfig_t *logconfig;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_task_t *task;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_result_t result;
23fdb6a5a3d3d0e427682b68eea9553d2d326ad4Mark Andrews int type;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(isc_app_start());
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
5226a9f307040f432c553253e013b55ee106084eBrian Wellington if (argc < 2) {
2fa9cf0bf962c80ab9194694c08d0e5d6a869232Brian Wellington fprintf(stderr, "I:no key to delete\n");
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington exit(-1);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington }
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington keyname = argv[1];
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_result_register();
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington mctx = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(isc_mem_create(0, 0, &mctx));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington ectx = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(isc_entropy_create(mctx, &ectx));
d58e33bfabfee19a035031dac633d36659738d56Evan Hunt RUNCHECK(isc_entropy_createfilesource(ectx, "../random.data"));
8d1374958f66070fa674b8da10da355c11dd0b28Mark Andrews RUNCHECK(isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington log = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington logconfig = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(isc_log_create(mctx, &log, &logconfig));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(dst_lib_init(mctx, ectx, ISC_ENTROPY_GOODONLY));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington taskmgr = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(isc_taskmgr_create(mctx, 1, 0, &taskmgr));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington task = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(isc_task_create(taskmgr, 0, &task));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington timermgr = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(isc_timermgr_create(mctx, &timermgr));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington socketmgr = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(isc_socketmgr_create(mctx, &socketmgr));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dispatchmgr = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(dns_dispatchmgr_create(mctx, NULL, &dispatchmgr));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_sockaddr_any(&bind_any);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington attrs = DNS_DISPATCHATTR_UDP |
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington DNS_DISPATCHATTR_MAKEQUERY |
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington DNS_DISPATCHATTR_IPV4;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington attrmask = DNS_DISPATCHATTR_UDP |
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington DNS_DISPATCHATTR_TCP |
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington DNS_DISPATCHATTR_IPV4 |
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington DNS_DISPATCHATTR_IPV6;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dispatchv4 = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr,
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington &bind_any, 4096, 4, 2, 3, 5,
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington attrs, attrmask, &dispatchv4));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington requestmgr = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr,
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dispatchmgr, dispatchv4, NULL,
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington &requestmgr));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington ring = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(dns_tsigkeyring_create(mctx, &ring));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington tctx = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(dns_tkeyctx_create(mctx, ectx, &tctx));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington view = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(dns_view_create(mctx, 0, "_test", &view));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_view_setkeyring(view, ring);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington sock = NULL;
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(isc_socket_create(socketmgr, PF_INET, isc_sockettype_udp,
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington &sock));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington RUNCHECK(isc_app_onrun(mctx, task, sendquery, NULL));
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dstkey = NULL;
23fdb6a5a3d3d0e427682b68eea9553d2d326ad4Mark Andrews type = DST_TYPE_PUBLIC | DST_TYPE_PRIVATE | DST_TYPE_KEY;
553ead32ff5b00284e574dcabc39115d4d74ec66Evan Hunt result = dst_key_fromnamedfile(keyname, NULL, type, mctx, &dstkey);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington CHECK("dst_key_fromnamedfile", result);
c40906dfad6dd6e3a3e3c94b8c8847bc9bc064e5Mark Andrews#ifndef PK11_MD5_DISABLE
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington result = dns_tsigkey_createfromkey(dst_key_name(dstkey),
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington DNS_TSIG_HMACMD5_NAME,
9f9b7f0e8d455b1c88e51ddcefdbf19b472e1ef2Mark Andrews dstkey, ISC_TRUE, NULL, 0, 0,
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington mctx, ring, &tsigkey);
9f9b7f0e8d455b1c88e51ddcefdbf19b472e1ef2Mark Andrews dst_key_free(&dstkey);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington CHECK("dns_tsigkey_createfromkey", result);
c40906dfad6dd6e3a3e3c94b8c8847bc9bc064e5Mark Andrews#else
c40906dfad6dd6e3a3e3c94b8c8847bc9bc064e5Mark Andrews dst_key_free(&dstkey);
c40906dfad6dd6e3a3e3c94b8c8847bc9bc064e5Mark Andrews CHECK("MD5 was disabled", ISC_R_NOTIMPLEMENTED);
c40906dfad6dd6e3a3e3c94b8c8847bc9bc064e5Mark Andrews#endif
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington (void)isc_app_run();
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_requestmgr_shutdown(requestmgr);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_requestmgr_detach(&requestmgr);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_dispatch_detach(&dispatchv4);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_dispatchmgr_destroy(&dispatchmgr);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_task_shutdown(task);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_task_detach(&task);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_taskmgr_destroy(&taskmgr);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_socket_detach(&sock);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_socketmgr_destroy(&socketmgr);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_timermgr_destroy(&timermgr);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
b053854c20cd164cc2fe2f3664a46d3e718e0d85Mark Andrews dns_tsigkeyring_detach(&ring);
b053854c20cd164cc2fe2f3664a46d3e718e0d85Mark Andrews
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_tsigkey_detach(&tsigkey);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_tkeyctx_destroy(&tctx);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dns_view_detach(&view);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_log_destroy(&log);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington dst_lib_destroy();
8d1374958f66070fa674b8da10da355c11dd0b28Mark Andrews isc_hash_destroy();
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_entropy_detach(&ectx);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_mem_destroy(&mctx);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington isc_app_finish();
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington return (0);
2f9db90bf69b4cdbabe2e574cd174ef2d3a2f12bBrian Wellington}