3523e19da21545ade45394cb64d7462f20b77347Tinderbox User * Copyright (C) 2000-2005, 2007, 2009, 2013, 2016, 2017 Internet Systems Consortium, Inc. ("ISC")
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/.
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein/* $Id: byaddr.c,v 1.41 2009/09/02 23:48:02 tbox Exp $ */
125a916d1a0c01f139ced5736145703df28d07cfDavid Lawrence#include <isc/string.h> /* Required for HP/UX (and others?) */
38c19e577915221b1783791cbb4f4e3ceea20019Mark Andrews * XXXRTH We could use a static event...
cadf8d687b9719b87c121d5cc8b028b1ddccc642Evan Huntdns_byaddr_createptrname(isc_netaddr_t *address, isc_boolean_t nibble,
38c19e577915221b1783791cbb4f4e3ceea20019Mark Andrews * We dropped bitstring labels, so all lookups will use nibbles.
cadf8d687b9719b87c121d5cc8b028b1ddccc642Evan Huntdns_byaddr_createptrname2(isc_netaddr_t *address, unsigned int options,
cadf8d687b9719b87c121d5cc8b028b1ddccc642Evan Hunt * We create the text representation and then convert to a
cadf8d687b9719b87c121d5cc8b028b1ddccc642Evan Hunt * dns_name_t. This is not maximally efficient, but it keeps all
cadf8d687b9719b87c121d5cc8b028b1ddccc642Evan Hunt * of the knowledge of wire format in the dns_name_ routines.
cadf8d687b9719b87c121d5cc8b028b1ddccc642Evan Hunt "%u.%u.%u.%u.in-addr.arpa.",
38c19e577915221b1783791cbb4f4e3ceea20019Mark Andrews for (i = 15; i >= 0; i--) {
f95231835fdcd8d5f58486c9f9993602f27fe157Mark Andrews remaining = sizeof(textname) - (cp - textname);
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews return (dns_name_fromtext(name, &buffer, dns_rootname, 0, NULL));
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews /* Unlocked. */
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews /* Locked by lock. */
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews#define BYADDR_MAGIC ISC_MAGIC('B', 'y', 'A', 'd')
cadf8d687b9719b87c121d5cc8b028b1ddccc642Evan Hunt#define VALID_BYADDR(b) ISC_MAGIC_VALID(b, BYADDR_MAGIC)
cadf8d687b9719b87c121d5cc8b028b1ddccc642Evan Huntcopy_ptr_targets(dns_byaddr_t *byaddr, dns_rdataset_t *rdataset) {
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews * The caller must be holding the byaddr's lock.
cadf8d687b9719b87c121d5cc8b028b1ddccc642Evan Hunt result = dns_name_dup(&ptr.ptr, byaddr->mctx, name);
cadf8d687b9719b87c121d5cc8b028b1ddccc642Evan Hunt ISC_LIST_APPEND(byaddr->event->names, name, link);
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrewslookup_done(isc_task_t *task, isc_event_t *event) {
125a916d1a0c01f139ced5736145703df28d07cfDavid Lawrence REQUIRE(event->ev_type == DNS_EVENT_LOOKUPDONE);
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews result = copy_ptr_targets(byaddr, levent->rdataset);
38c19e577915221b1783791cbb4f4e3ceea20019Mark Andrews isc_task_sendanddetach(&byaddr->task, (isc_event_t **)&byaddr->event);
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews REQUIRE(event->ev_type == DNS_EVENT_BYADDRDONE);
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrewsdns_byaddr_create(isc_mem_t *mctx, isc_netaddr_t *address, dns_view_t *view,
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews isc_taskaction_t action, void *arg, dns_byaddr_t **byaddrp)
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews byaddr->event = isc_mem_get(mctx, sizeof(*byaddr->event));
47b26abe77184f9bedc68e36bdad03332cf67570David Lawrence ISC_EVENT_INIT(byaddr->event, sizeof(*byaddr->event), 0, NULL,
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews result = dns_byaddr_createptrname2(address, options,
47b26abe77184f9bedc68e36bdad03332cf67570David Lawrence result = dns_lookup_create(mctx, dns_fixedname_name(&byaddr->name),
cd71050434eb719ac56ce7cdc350964475c5bc47Mark Andrews isc_mem_putanddetach(&mctx, byaddr, sizeof(*byaddr));