Home | History | Annotate | Line # | Download | only in generic
      1 /*	$NetBSD: mf_4.c,v 1.1 2024/02/18 20:57:42 christos Exp $	*/
      2 
      3 /*
      4  * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
      5  *
      6  * SPDX-License-Identifier: MPL-2.0
      7  *
      8  * This Source Code Form is subject to the terms of the Mozilla Public
      9  * License, v. 2.0. If a copy of the MPL was not distributed with this
     10  * file, you can obtain one at https://mozilla.org/MPL/2.0/.
     11  *
     12  * See the COPYRIGHT file distributed with this work for additional
     13  * information regarding copyright ownership.
     14  */
     15 
     16 #ifndef RDATA_GENERIC_MF_4_C
     17 #define RDATA_GENERIC_MF_4_C
     18 
     19 #define RRTYPE_MF_ATTRIBUTES (0)
     20 
     21 static isc_result_t
     22 fromtext_mf(ARGS_FROMTEXT) {
     23 	isc_token_t token;
     24 	dns_name_t name;
     25 	isc_buffer_t buffer;
     26 
     27 	REQUIRE(type == dns_rdatatype_mf);
     28 
     29 	UNUSED(type);
     30 	UNUSED(rdclass);
     31 	UNUSED(callbacks);
     32 
     33 	RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
     34 				      false));
     35 
     36 	dns_name_init(&name, NULL);
     37 	buffer_fromregion(&buffer, &token.value.as_region);
     38 	if (origin == NULL) {
     39 		origin = dns_rootname;
     40 	}
     41 	RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
     42 	return (ISC_R_SUCCESS);
     43 }
     44 
     45 static isc_result_t
     46 totext_mf(ARGS_TOTEXT) {
     47 	isc_region_t region;
     48 	dns_name_t name;
     49 	dns_name_t prefix;
     50 	bool sub;
     51 
     52 	REQUIRE(rdata->type == dns_rdatatype_mf);
     53 	REQUIRE(rdata->length != 0);
     54 
     55 	dns_name_init(&name, NULL);
     56 	dns_name_init(&prefix, NULL);
     57 
     58 	dns_rdata_toregion(rdata, &region);
     59 	dns_name_fromregion(&name, &region);
     60 
     61 	sub = name_prefix(&name, tctx->origin, &prefix);
     62 
     63 	return (dns_name_totext(&prefix, sub, target));
     64 }
     65 
     66 static isc_result_t
     67 fromwire_mf(ARGS_FROMWIRE) {
     68 	dns_name_t name;
     69 
     70 	REQUIRE(type == dns_rdatatype_mf);
     71 
     72 	UNUSED(type);
     73 	UNUSED(rdclass);
     74 
     75 	dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
     76 
     77 	dns_name_init(&name, NULL);
     78 	return (dns_name_fromwire(&name, source, dctx, options, target));
     79 }
     80 
     81 static isc_result_t
     82 towire_mf(ARGS_TOWIRE) {
     83 	dns_name_t name;
     84 	dns_offsets_t offsets;
     85 	isc_region_t region;
     86 
     87 	REQUIRE(rdata->type == dns_rdatatype_mf);
     88 	REQUIRE(rdata->length != 0);
     89 
     90 	dns_compress_setmethods(cctx, DNS_COMPRESS_GLOBAL14);
     91 
     92 	dns_name_init(&name, offsets);
     93 	dns_rdata_toregion(rdata, &region);
     94 	dns_name_fromregion(&name, &region);
     95 
     96 	return (dns_name_towire(&name, cctx, target));
     97 }
     98 
     99 static int
    100 compare_mf(ARGS_COMPARE) {
    101 	dns_name_t name1;
    102 	dns_name_t name2;
    103 	isc_region_t region1;
    104 	isc_region_t region2;
    105 
    106 	REQUIRE(rdata1->type == rdata2->type);
    107 	REQUIRE(rdata1->rdclass == rdata2->rdclass);
    108 	REQUIRE(rdata1->type == dns_rdatatype_mf);
    109 	REQUIRE(rdata1->length != 0);
    110 	REQUIRE(rdata2->length != 0);
    111 
    112 	dns_name_init(&name1, NULL);
    113 	dns_name_init(&name2, NULL);
    114 
    115 	dns_rdata_toregion(rdata1, &region1);
    116 	dns_rdata_toregion(rdata2, &region2);
    117 
    118 	dns_name_fromregion(&name1, &region1);
    119 	dns_name_fromregion(&name2, &region2);
    120 
    121 	return (dns_name_rdatacompare(&name1, &name2));
    122 }
    123 
    124 static isc_result_t
    125 fromstruct_mf(ARGS_FROMSTRUCT) {
    126 	dns_rdata_mf_t *mf = source;
    127 	isc_region_t region;
    128 
    129 	REQUIRE(type == dns_rdatatype_mf);
    130 	REQUIRE(mf != NULL);
    131 	REQUIRE(mf->common.rdtype == type);
    132 	REQUIRE(mf->common.rdclass == rdclass);
    133 
    134 	UNUSED(type);
    135 	UNUSED(rdclass);
    136 
    137 	dns_name_toregion(&mf->mf, &region);
    138 	return (isc_buffer_copyregion(target, &region));
    139 }
    140 
    141 static isc_result_t
    142 tostruct_mf(ARGS_TOSTRUCT) {
    143 	dns_rdata_mf_t *mf = target;
    144 	isc_region_t r;
    145 	dns_name_t name;
    146 
    147 	REQUIRE(rdata->type == dns_rdatatype_mf);
    148 	REQUIRE(mf != NULL);
    149 	REQUIRE(rdata->length != 0);
    150 
    151 	mf->common.rdclass = rdata->rdclass;
    152 	mf->common.rdtype = rdata->type;
    153 	ISC_LINK_INIT(&mf->common, link);
    154 
    155 	dns_name_init(&name, NULL);
    156 	dns_rdata_toregion(rdata, &r);
    157 	dns_name_fromregion(&name, &r);
    158 	dns_name_init(&mf->mf, NULL);
    159 	RETERR(name_duporclone(&name, mctx, &mf->mf));
    160 	mf->mctx = mctx;
    161 	return (ISC_R_SUCCESS);
    162 }
    163 
    164 static void
    165 freestruct_mf(ARGS_FREESTRUCT) {
    166 	dns_rdata_mf_t *mf = source;
    167 
    168 	REQUIRE(mf != NULL);
    169 	REQUIRE(mf->common.rdtype == dns_rdatatype_mf);
    170 
    171 	if (mf->mctx == NULL) {
    172 		return;
    173 	}
    174 	dns_name_free(&mf->mf, mf->mctx);
    175 	mf->mctx = NULL;
    176 }
    177 
    178 static isc_result_t
    179 additionaldata_mf(ARGS_ADDLDATA) {
    180 	dns_name_t name;
    181 	dns_offsets_t offsets;
    182 	isc_region_t region;
    183 
    184 	REQUIRE(rdata->type == dns_rdatatype_mf);
    185 
    186 	dns_name_init(&name, offsets);
    187 	dns_rdata_toregion(rdata, &region);
    188 	dns_name_fromregion(&name, &region);
    189 
    190 	return ((add)(arg, &name, dns_rdatatype_a));
    191 }
    192 
    193 static isc_result_t
    194 digest_mf(ARGS_DIGEST) {
    195 	isc_region_t r;
    196 	dns_name_t name;
    197 
    198 	REQUIRE(rdata->type == dns_rdatatype_mf);
    199 
    200 	dns_rdata_toregion(rdata, &r);
    201 	dns_name_init(&name, NULL);
    202 	dns_name_fromregion(&name, &r);
    203 
    204 	return (dns_name_digest(&name, digest, arg));
    205 }
    206 
    207 static bool
    208 checkowner_mf(ARGS_CHECKOWNER) {
    209 	REQUIRE(type == dns_rdatatype_mf);
    210 
    211 	UNUSED(name);
    212 	UNUSED(type);
    213 	UNUSED(rdclass);
    214 	UNUSED(wildcard);
    215 
    216 	return (true);
    217 }
    218 
    219 static bool
    220 checknames_mf(ARGS_CHECKNAMES) {
    221 	REQUIRE(rdata->type == dns_rdatatype_mf);
    222 
    223 	UNUSED(rdata);
    224 	UNUSED(owner);
    225 	UNUSED(bad);
    226 
    227 	return (true);
    228 }
    229 
    230 static int
    231 casecompare_mf(ARGS_COMPARE) {
    232 	return (compare_mf(rdata1, rdata2));
    233 }
    234 
    235 #endif /* RDATA_GENERIC_MF_4_C */
    236