mr_9.c revision 15a44745412679c30a6d022733925af70a38b715
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews/*
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence * Copyright (C) 1998-2000 Internet Software Consortium.
2baa66562a2f119edffded961d3391f87ff98ec0Ondřej Surý *
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence * Permission to use, copy, modify, and distribute this software for any
bd5040035c8bb3fe4acdaf6a1f26423b58302188Mark Andrews * purpose with or without fee is hereby granted, provided that the above
bd5040035c8bb3fe4acdaf6a1f26423b58302188Mark Andrews * copyright notice and this permission notice appear in all copies.
bd5040035c8bb3fe4acdaf6a1f26423b58302188Mark Andrews *
2baa66562a2f119edffded961d3391f87ff98ec0Ondřej Surý * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
2baa66562a2f119edffded961d3391f87ff98ec0Ondřej Surý * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
2baa66562a2f119edffded961d3391f87ff98ec0Ondřej Surý * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
a14613fce99dee3cad5bf842fd6be78f8e463582Brian Wellington * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence */
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence/* $Id: mr_9.c,v 1.29 2000/07/27 09:49:20 tale Exp $ */
a5d43b72413db3edd6b36a58f9bdf2cf6ff692f2Bob Halley
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein/* Reviewed: Wed Mar 15 21:30:35 EST 2000 by tale */
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff#ifndef RDATA_GENERIC_MR_9_C
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#define RDATA_GENERIC_MR_9_C
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley#define RRTYPE_MR_ATTRIBUTES (0)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halleystatic inline isc_result_t
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halleyfromtext_mr(ARGS_FROMTEXT) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein isc_token_t token;
dc97fe4ed08488d314ab5bc8e99ed839542cf411David Lawrence dns_name_t name;
dc97fe4ed08488d314ab5bc8e99ed839542cf411David Lawrence isc_buffer_t buffer;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley REQUIRE(type == 9);
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein UNUSED(rdclass);
50453ad879d0d93854de5a3385776bd799e8f35cBob Halley
50453ad879d0d93854de5a3385776bd799e8f35cBob Halley RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
7005cfed8cd3296d356883dcb414979f22e06b13Brian Wellington dns_name_init(&name, NULL);
7005cfed8cd3296d356883dcb414979f22e06b13Brian Wellington buffer_fromregion(&buffer, &token.value.as_region);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein origin = (origin != NULL) ? origin : dns_rootname;
6f7660093e70d3a7c80738b681ac0f5c1b661c00Mark Andrews return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
6f7660093e70d3a7c80738b681ac0f5c1b661c00Mark Andrews}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
d8dcd6ad4617cc8d7df979bd62101fa9c4bac1bcBob Halleystatic inline isc_result_t
d8dcd6ad4617cc8d7df979bd62101fa9c4bac1bcBob Halleytotext_mr(ARGS_TOTEXT) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein isc_region_t region;
baf7c7e589f313f10b29d9119811fc4d36c2e4bcMark Andrews dns_name_t name;
baf7c7e589f313f10b29d9119811fc4d36c2e4bcMark Andrews dns_name_t prefix;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein isc_boolean_t sub;
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff REQUIRE(rdata->type == 9);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
6286983c506433d642b23e64845c50be30f2a7f6Mark Andrews dns_name_init(&name, NULL);
6286983c506433d642b23e64845c50be30f2a7f6Mark Andrews dns_name_init(&prefix, NULL);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff dns_rdata_toregion(rdata, &region);
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff dns_name_fromregion(&name, &region);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff sub = name_prefix(&name, tctx->origin, &prefix);
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein return (dns_name_totext(&prefix, sub, target));
703e1c0bb66f3cd3d300358ca0c1fdf3cb5fb1c5Brian Wellington}
703e1c0bb66f3cd3d300358ca0c1fdf3cb5fb1c5Brian Wellington
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinstatic inline isc_result_t
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfromwire_mr(ARGS_FROMWIRE) {
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff dns_name_t name;
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff REQUIRE(type == 9);
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein UNUSED(rdclass);
4108eed5092156cf0407a97a9bd8ab7775164694Brian Wellington
4108eed5092156cf0407a97a9bd8ab7775164694Brian Wellington dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
3f123dcc2fe5d2cd08ca91b732741d86a4036906Brian Wellington dns_name_init(&name, NULL);
3f123dcc2fe5d2cd08ca91b732741d86a4036906Brian Wellington return (dns_name_fromwire(&name, source, dctx, downcase, target));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
64b92523f9333ba053f4b2860335583be455b0b3Brian Wellington
64b92523f9333ba053f4b2860335583be455b0b3Brian Wellingtonstatic inline isc_result_t
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeintowire_mr(ARGS_TOWIRE) {
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence dns_name_t name;
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence isc_region_t region;
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence REQUIRE(rdata->type == 9);
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrence dns_name_init(&name, NULL);
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrence dns_rdata_toregion(rdata, &region);
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrence dns_name_fromregion(&name, &region);
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrence
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrence return (dns_name_towire(&name, cctx, target));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrencestatic inline int
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincompare_mr(ARGS_COMPARE) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein dns_name_t name1;
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence dns_name_t name2;
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence isc_region_t region1;
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence isc_region_t region2;
2e61d171bc1fa47ea4d551b87546ebcf78f61e4aMark Andrews
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence REQUIRE(rdata1->type == rdata2->type);
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews REQUIRE(rdata1->rdclass == rdata2->rdclass);
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews REQUIRE(rdata1->type == 9);
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews dns_name_init(&name1, NULL);
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews dns_name_init(&name2, NULL);
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews dns_rdata_toregion(rdata1, &region1);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein dns_rdata_toregion(rdata2, &region2);
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein dns_name_fromregion(&name1, &region1);
529ff4b4959fb157194f985394951108ff5286e4Brian Wellington dns_name_fromregion(&name2, &region2);
a14613fce99dee3cad5bf842fd6be78f8e463582Brian Wellington
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein return (dns_name_rdatacompare(&name1, &name2));
489b76292622f5bc18bf1a18845f8166a73bd797Brian Wellington}
489b76292622f5bc18bf1a18845f8166a73bd797Brian Wellington
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinstatic inline isc_result_t
bff8ac12a8c099257bdbf7d0c55d2d5b77591926Mark Andrewsfromstruct_mr(ARGS_FROMSTRUCT) {
bff8ac12a8c099257bdbf7d0c55d2d5b77591926Mark Andrews dns_rdata_mr_t *mr = source;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein isc_region_t region;
fd837244be31850a764863688bce11df9ce972f4Andreas Gustafsson
fd837244be31850a764863688bce11df9ce972f4Andreas Gustafsson REQUIRE(type == 9);
cffc2e06f906dd048af4cc27d487deb157f5a082Mark Andrews REQUIRE(source != NULL);
cffc2e06f906dd048af4cc27d487deb157f5a082Mark Andrews REQUIRE(mr->common.rdtype == type);
cffc2e06f906dd048af4cc27d487deb157f5a082Mark Andrews REQUIRE(mr->common.rdclass == rdclass);
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt dns_name_toregion(&mr->mr, &region);
aaaf8d4f4873d21e55c3ffb4f656203d08339865Mark Andrews return (isc_buffer_copyregion(target, &region));
43fe2897fc80bbec2115310ca79d432a252f3ea4Mark Andrews}
43fe2897fc80bbec2115310ca79d432a252f3ea4Mark Andrews
43fe2897fc80bbec2115310ca79d432a252f3ea4Mark Andrewsstatic inline isc_result_t
70e854766f5304f43e94212dc38ebaefe214148cMark Andrewstostruct_mr(ARGS_TOSTRUCT) {
70e854766f5304f43e94212dc38ebaefe214148cMark Andrews isc_region_t region;
70e854766f5304f43e94212dc38ebaefe214148cMark Andrews dns_rdata_mr_t *mr = target;
f02c22d58ac88777655e0b407b22b07864d39184Evan Hunt dns_name_t name;
f02c22d58ac88777655e0b407b22b07864d39184Evan Hunt
f02c22d58ac88777655e0b407b22b07864d39184Evan Hunt REQUIRE(rdata->type == 9);
a44bf3209afdb58360a82cf42e653dee5e0d4f26Automatic Updater REQUIRE(target != NULL);
a44bf3209afdb58360a82cf42e653dee5e0d4f26Automatic Updater
a44bf3209afdb58360a82cf42e653dee5e0d4f26Automatic Updater mr->common.rdclass = rdata->rdclass;
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews mr->common.rdtype = rdata->type;
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews ISC_LINK_INIT(&mr->common, link);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
d878b8d87c3f46a25ccae9f5cfe6e39af67562e0Evan Hunt dns_name_init(&name, NULL);
d878b8d87c3f46a25ccae9f5cfe6e39af67562e0Evan Hunt dns_rdata_toregion(rdata, &region);
d878b8d87c3f46a25ccae9f5cfe6e39af67562e0Evan Hunt dns_name_fromregion(&name, &region);
9a97696b543b9957049a663b4f73245589c47921Mark Andrews dns_name_init(&mr->mr, NULL);
4417904b159f826f2009fd3453744057c0d9c82eMark Andrews RETERR(name_duporclone(&name, mctx, &mr->mr));
4417904b159f826f2009fd3453744057c0d9c82eMark Andrews mr->mctx = mctx;
4417904b159f826f2009fd3453744057c0d9c82eMark Andrews return (ISC_R_SUCCESS);
43501e6570e9081d459fb5c1a81b73c2c53c5df0Mark Andrews}
43501e6570e9081d459fb5c1a81b73c2c53c5df0Mark Andrews
43501e6570e9081d459fb5c1a81b73c2c53c5df0Mark Andrewsstatic inline void
43501e6570e9081d459fb5c1a81b73c2c53c5df0Mark Andrewsfreestruct_mr(ARGS_FREESTRUCT) {
2b66a51a7d72e9cc07917fb583ad528b0539d2a3Mark Andrews dns_rdata_mr_t *mr = source;
2b66a51a7d72e9cc07917fb583ad528b0539d2a3Mark Andrews
2b66a51a7d72e9cc07917fb583ad528b0539d2a3Mark Andrews REQUIRE(source != NULL);
8b56b8956fc1e6c70efacb4f71db28d0d1f0c577Mark Andrews REQUIRE(mr->common.rdtype == 9);
8b56b8956fc1e6c70efacb4f71db28d0d1f0c577Mark Andrews
8b56b8956fc1e6c70efacb4f71db28d0d1f0c577Mark Andrews if (mr->mctx == NULL)
19d80ce5844e00a021643759adcbe27c11b485a0Witold Krecicki return;
19d80ce5844e00a021643759adcbe27c11b485a0Witold Krecicki dns_name_free(&mr->mr, mr->mctx);
19d80ce5844e00a021643759adcbe27c11b485a0Witold Krecicki mr->mctx = NULL;
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews}
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrewsstatic inline isc_result_t
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrewsadditionaldata_mr(ARGS_ADDLDATA) {
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews REQUIRE(rdata->type == 9);
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews
4e9775118dbf128dd296f01638733ba221f76c34Mark Andrews UNUSED(rdata);
4e9775118dbf128dd296f01638733ba221f76c34Mark Andrews UNUSED(add);
4e9775118dbf128dd296f01638733ba221f76c34Mark Andrews UNUSED(arg);
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrews
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrews return (ISC_R_SUCCESS);
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrews}
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrews
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrewsstatic inline isc_result_t
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrewsdigest_mr(ARGS_DIGEST) {
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrews isc_region_t r;
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrews dns_name_t name;
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrews
294ef74e5ad68d898207c4fb36d8b18d526a11f6Curtis Blackburn REQUIRE(rdata->type == 9);
294ef74e5ad68d898207c4fb36d8b18d526a11f6Curtis Blackburn
294ef74e5ad68d898207c4fb36d8b18d526a11f6Curtis Blackburn dns_rdata_toregion(rdata, &r);
294ef74e5ad68d898207c4fb36d8b18d526a11f6Curtis Blackburn dns_name_init(&name, NULL);
294ef74e5ad68d898207c4fb36d8b18d526a11f6Curtis Blackburn dns_name_fromregion(&name, &r);
294ef74e5ad68d898207c4fb36d8b18d526a11f6Curtis Blackburn
294ef74e5ad68d898207c4fb36d8b18d526a11f6Curtis Blackburn return (dns_name_digest(&name, digest, arg));
294ef74e5ad68d898207c4fb36d8b18d526a11f6Curtis Blackburn}
294ef74e5ad68d898207c4fb36d8b18d526a11f6Curtis Blackburn
a16f42441a0bdfc911aafe841a975af55181f2f0Mukund Sivaraman#endif /* RDATA_GENERIC_MR_9_C */
a16f42441a0bdfc911aafe841a975af55181f2f0Mukund Sivaraman