afsdb_18.c revision a134177ed9f82189504191d90f3ed9e97c2b47cb
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley/*
ca41b452ede6feaa9d8739ec3cae19389a7b0d03Bob Halley * Copyright (C) 1999-2001, 2003-2005, 2007, 2009, 2014-2017 Internet Systems Consortium, Inc. ("ISC")
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence *
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley * This Source Code Form is subject to the terms of the Mozilla Public
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley * License, v. 2.0. If a copy of the MPL was not distributed with this
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley * file, You can obtain one at http://mozilla.org/MPL/2.0/.
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence */
15a44745412679c30a6d022733925af70a38b715David Lawrence
15a44745412679c30a6d022733925af70a38b715David Lawrence/* $Id: afsdb_18.c,v 1.49 2009/12/04 22:06:37 tbox Exp $ */
15a44745412679c30a6d022733925af70a38b715David Lawrence
15a44745412679c30a6d022733925af70a38b715David Lawrence/* Reviewed: Wed Mar 15 14:59:00 PST 2000 by explorer */
15a44745412679c30a6d022733925af70a38b715David Lawrence
15a44745412679c30a6d022733925af70a38b715David Lawrence/* RFC1183 */
15a44745412679c30a6d022733925af70a38b715David Lawrence
15a44745412679c30a6d022733925af70a38b715David Lawrence#ifndef RDATA_GENERIC_AFSDB_18_C
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley#define RDATA_GENERIC_AFSDB_18_C
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington#define RRTYPE_AFSDB_ATTRIBUTES (0)
9c3531d72aeaad6c5f01efe6a1c82023e1379e4dDavid Lawrence
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halleystatic inline isc_result_t
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halleyfromtext_afsdb(ARGS_FROMTEXT) {
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_token_t token;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_buffer_t buffer;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_name_t name;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_boolean_t ok;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley REQUIRE(type == dns_rdatatype_afsdb);
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley UNUSED(type);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley UNUSED(rdclass);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley UNUSED(callbacks);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley /*
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington * Subtype.
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence */
eefea43215016bce437ab4a7441b2851fd182960David Lawrence RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington ISC_FALSE));
440be4c866f6935ac069db79a414304507a664c2Michael Graff if (token.value.as_ulong > 0xffffU)
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley RETTOK(ISC_R_RANGE);
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington RETERR(uint16_tobuffer(token.value.as_ulong, target));
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington /*
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington * Hostname.
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington */
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington ISC_FALSE));
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington dns_name_init(&name, NULL);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley buffer_fromregion(&buffer, &token.value.as_region);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley if (origin == NULL)
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley origin = dns_rootname;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley ok = ISC_TRUE;
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley if ((options & DNS_RDATA_CHECKNAMES) != 0)
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley ok = dns_name_ishostname(&name, ISC_FALSE);
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley RETTOK(DNS_R_BADNAME);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley if (!ok && callbacks != NULL)
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley warn_badname(&name, lexer, callbacks);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley return (ISC_R_SUCCESS);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley}
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellingtonstatic inline isc_result_t
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellingtontotext_afsdb(ARGS_TOTEXT) {
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington dns_name_t name;
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington dns_name_t prefix;
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley isc_region_t region;
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley char buf[sizeof("64000 ")];
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley isc_boolean_t sub;
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley unsigned int num;
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley REQUIRE(rdata->type == dns_rdatatype_afsdb);
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley REQUIRE(rdata->length != 0);
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley dns_name_init(&name, NULL);
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley dns_name_init(&prefix, NULL);
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley dns_rdata_toregion(rdata, &region);
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley num = uint16_fromregion(&region);
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley isc_region_consume(&region, 2);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley snprintf(buf, sizeof(buf), "%u ", num);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley RETERR(str_totext(buf, target));
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley dns_name_fromregion(&name, &region);
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence sub = name_prefix(&name, tctx->origin, &prefix);
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley return (dns_name_totext(&prefix, sub, target));
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley}
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halleystatic inline isc_result_t
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halleyfromwire_afsdb(ARGS_FROMWIRE) {
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence dns_name_t name;
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley isc_region_t sr;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_region_t tr;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley REQUIRE(type == dns_rdatatype_afsdb);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley UNUSED(type);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley UNUSED(rdclass);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley dns_name_init(&name, NULL);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley isc_buffer_activeregion(source, &sr);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley isc_buffer_availableregion(target, &tr);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley if (tr.length < 2)
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley return (ISC_R_NOSPACE);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley if (sr.length < 2)
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley return (ISC_R_UNEXPECTEDEND);
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence memmove(tr.base, sr.base, 2);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley isc_buffer_forward(source, 2);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley isc_buffer_add(target, 2);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley return (dns_name_fromwire(&name, source, dctx, options, target));
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley}
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halleystatic inline isc_result_t
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellingtontowire_afsdb(ARGS_TOWIRE) {
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_region_t tr;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_region_t sr;
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington dns_name_t name;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_offsets_t offsets;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley REQUIRE(rdata->type == dns_rdatatype_afsdb);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley REQUIRE(rdata->length != 0);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_buffer_availableregion(target, &tr);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_rdata_toregion(rdata, &sr);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley if (tr.length < 2)
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley return (ISC_R_NOSPACE);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley memmove(tr.base, sr.base, 2);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_region_consume(&sr, 2);
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence isc_buffer_add(target, 2);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_name_init(&name, offsets);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_name_fromregion(&name, &sr);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley return (dns_name_towire(&name, cctx, target));
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley}
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley
a829555ed724caa56b1ff7716d7eda2266491eafBob Halleystatic inline int
a829555ed724caa56b1ff7716d7eda2266491eafBob Halleycompare_afsdb(ARGS_COMPARE) {
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley int result;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_name_t name1;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_name_t name2;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_region_t region1;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_region_t region2;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
0e58c0998df1ccd1a289b2c3f078e7d03d9331d3Bob Halley REQUIRE(rdata1->type == rdata2->type);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley REQUIRE(rdata1->rdclass == rdata2->rdclass);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley REQUIRE(rdata1->type == dns_rdatatype_afsdb);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley REQUIRE(rdata1->length != 0);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley REQUIRE(rdata2->length != 0);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley result = memcmp(rdata1->data, rdata2->data, 2);
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley if (result != 0)
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley return (result < 0 ? -1 : 1);
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley dns_name_init(&name1, NULL);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley dns_name_init(&name2, NULL);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_rdata_toregion(rdata1, &region1);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley dns_rdata_toregion(rdata2, &region2);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley isc_region_consume(&region1, 2);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley isc_region_consume(&region2, 2);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley dns_name_fromregion(&name1, &region1);
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley dns_name_fromregion(&name2, &region2);
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer
33e482fa3e8befab0d9aaf32ed47b4695e0e6ba3Andreas Gustafsson return (dns_name_rdatacompare(&name1, &name2));
33e482fa3e8befab0d9aaf32ed47b4695e0e6ba3Andreas Gustafsson}
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellingtonstatic inline isc_result_t
a6f31a3fd079f37ad0a7c75ef2d50842cd01811cBrian Wellingtonfromstruct_afsdb(ARGS_FROMSTRUCT) {
a6f31a3fd079f37ad0a7c75ef2d50842cd01811cBrian Wellington dns_rdata_afsdb_t *afsdb = source;
a6f31a3fd079f37ad0a7c75ef2d50842cd01811cBrian Wellington isc_region_t region;
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer REQUIRE(type == dns_rdatatype_afsdb);
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington REQUIRE(source != NULL);
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington REQUIRE(afsdb->common.rdclass == rdclass);
a6f31a3fd079f37ad0a7c75ef2d50842cd01811cBrian Wellington REQUIRE(afsdb->common.rdtype == type);
aa3f41bafce993fbd2109ea3803cbce909db1c95Brian Wellington
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington UNUSED(type);
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington UNUSED(rdclass);
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington RETERR(uint16_tobuffer(afsdb->subtype, target));
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer dns_name_toregion(&afsdb->server, &region);
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer return (isc_buffer_copyregion(target, &region));
a6f31a3fd079f37ad0a7c75ef2d50842cd01811cBrian Wellington}
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellingtonstatic inline isc_result_t
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halleytostruct_afsdb(ARGS_TOSTRUCT) {
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley isc_region_t region;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_rdata_afsdb_t *afsdb = target;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_name_t name;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
0e58c0998df1ccd1a289b2c3f078e7d03d9331d3Bob Halley REQUIRE(rdata->type == dns_rdatatype_afsdb);
0e58c0998df1ccd1a289b2c3f078e7d03d9331d3Bob Halley REQUIRE(target != NULL);
0e58c0998df1ccd1a289b2c3f078e7d03d9331d3Bob Halley REQUIRE(rdata->length != 0);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley afsdb->common.rdclass = rdata->rdclass;
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley afsdb->common.rdtype = rdata->type;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley ISC_LINK_INIT(&afsdb->common, link);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_name_init(&afsdb->server, NULL);
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_rdata_toregion(rdata, &region);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley afsdb->subtype = uint16_fromregion(&region);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_region_consume(&region, 2);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_name_init(&name, NULL);
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence dns_name_fromregion(&name, &region);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley RETERR(name_duporclone(&name, mctx, &afsdb->server));
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley afsdb->mctx = mctx;
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington return (ISC_R_SUCCESS);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley}
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halleystatic inline void
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halleyfreestruct_afsdb(ARGS_FREESTRUCT) {
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_rdata_afsdb_t *afsdb = source;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley REQUIRE(source != NULL);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley REQUIRE(afsdb->common.rdtype == dns_rdatatype_afsdb);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley if (afsdb->mctx == NULL)
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley return;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_name_free(&afsdb->server, afsdb->mctx);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley afsdb->mctx = NULL;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley}
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halleystatic inline isc_result_t
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halleyadditionaldata_afsdb(ARGS_ADDLDATA) {
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_name_t name;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_offsets_t offsets;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley isc_region_t region;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley REQUIRE(rdata->type == dns_rdatatype_afsdb);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_name_init(&name, offsets);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_rdata_toregion(rdata, &region);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley isc_region_consume(&region, 2);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_name_fromregion(&name, &region);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley return ((add)(arg, &name, dns_rdatatype_a));
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley}
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halleystatic inline isc_result_t
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halleydigest_afsdb(ARGS_DIGEST) {
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley isc_region_t r1, r2;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_name_t name;
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence
e44487bfc23599b6b240e09d83d1c862fecfcc82Michael Graff REQUIRE(rdata->type == dns_rdatatype_afsdb);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_rdata_toregion(rdata, &r1);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley r2 = r1;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley isc_region_consume(&r2, 2);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley r1.length = 2;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley RETERR((digest)(arg, &r1));
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_name_init(&name, NULL);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_name_fromregion(&name, &r2);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley return (dns_name_digest(&name, digest, arg));
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley}
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halleystatic inline isc_boolean_t
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halleycheckowner_afsdb(ARGS_CHECKOWNER) {
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington REQUIRE(type == dns_rdatatype_afsdb);
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley UNUSED(name);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley UNUSED(type);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley UNUSED(rdclass);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley UNUSED(wildcard);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley return (ISC_TRUE);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley}
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
a829555ed724caa56b1ff7716d7eda2266491eafBob Halleystatic inline isc_boolean_t
a829555ed724caa56b1ff7716d7eda2266491eafBob Halleychecknames_afsdb(ARGS_CHECKNAMES) {
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley isc_region_t region;
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley dns_name_t name;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley REQUIRE(rdata->type == dns_rdatatype_afsdb);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley UNUSED(owner);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley dns_rdata_toregion(rdata, &region);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley isc_region_consume(&region, 2);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley dns_name_init(&name, NULL);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley dns_name_fromregion(&name, &region);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley if (!dns_name_ishostname(&name, ISC_FALSE)) {
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley if (bad != NULL)
e44487bfc23599b6b240e09d83d1c862fecfcc82Michael Graff dns_name_clone(&name, bad);
e44487bfc23599b6b240e09d83d1c862fecfcc82Michael Graff return (ISC_FALSE);
e44487bfc23599b6b240e09d83d1c862fecfcc82Michael Graff }
960d37edc3f4e4d99afd26feab9bed4aa88a499cBrian Wellington return (ISC_TRUE);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley}
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halleystatic inline int
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halleycasecompare_afsdb(ARGS_COMPARE) {
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence return (compare_afsdb(rdata1, rdata2));
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley}
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley#endif /* RDATA_GENERIC_AFSDB_18_C */
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley