1 /*	$NetBSD: rkey_57.c,v 1.7 2022/09/23 12:15:31 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_RKEY_57_C
17 #define RDATA_GENERIC_RKEY_57_C
18 
19 #define RRTYPE_RKEY_ATTRIBUTES 0
20 
21 static isc_result_t
fromtext_rkey(ARGS_FROMTEXT)22 fromtext_rkey(ARGS_FROMTEXT) {
23 	REQUIRE(type == dns_rdatatype_rkey);
24 
25 	return (generic_fromtext_key(CALL_FROMTEXT));
26 }
27 
28 static isc_result_t
totext_rkey(ARGS_TOTEXT)29 totext_rkey(ARGS_TOTEXT) {
30 	REQUIRE(rdata != NULL);
31 	REQUIRE(rdata->type == dns_rdatatype_rkey);
32 
33 	return (generic_totext_key(CALL_TOTEXT));
34 }
35 
36 static isc_result_t
fromwire_rkey(ARGS_FROMWIRE)37 fromwire_rkey(ARGS_FROMWIRE) {
38 	REQUIRE(type == dns_rdatatype_rkey);
39 
40 	return (generic_fromwire_key(CALL_FROMWIRE));
41 }
42 
43 static isc_result_t
towire_rkey(ARGS_TOWIRE)44 towire_rkey(ARGS_TOWIRE) {
45 	isc_region_t sr;
46 
47 	REQUIRE(rdata != NULL);
48 	REQUIRE(rdata->type == dns_rdatatype_rkey);
49 	REQUIRE(rdata->length != 0);
50 
51 	UNUSED(cctx);
52 
53 	dns_rdata_toregion(rdata, &sr);
54 	return (mem_tobuffer(target, sr.base, sr.length));
55 }
56 
57 static int
compare_rkey(ARGS_COMPARE)58 compare_rkey(ARGS_COMPARE) {
59 	isc_region_t r1;
60 	isc_region_t r2;
61 
62 	REQUIRE(rdata1 != NULL);
63 	REQUIRE(rdata2 != NULL);
64 	REQUIRE(rdata1->type == rdata2->type);
65 	REQUIRE(rdata1->rdclass == rdata2->rdclass);
66 	REQUIRE(rdata1->type == dns_rdatatype_rkey);
67 	REQUIRE(rdata1->length != 0);
68 	REQUIRE(rdata2->length != 0);
69 
70 	dns_rdata_toregion(rdata1, &r1);
71 	dns_rdata_toregion(rdata2, &r2);
72 	return (isc_region_compare(&r1, &r2));
73 }
74 
75 static isc_result_t
fromstruct_rkey(ARGS_FROMSTRUCT)76 fromstruct_rkey(ARGS_FROMSTRUCT) {
77 	REQUIRE(type == dns_rdatatype_rkey);
78 
79 	return (generic_fromstruct_key(CALL_FROMSTRUCT));
80 }
81 
82 static isc_result_t
tostruct_rkey(ARGS_TOSTRUCT)83 tostruct_rkey(ARGS_TOSTRUCT) {
84 	dns_rdata_rkey_t *rkey = target;
85 
86 	REQUIRE(rkey != NULL);
87 	REQUIRE(rdata != NULL);
88 	REQUIRE(rdata->type == dns_rdatatype_rkey);
89 
90 	rkey->common.rdclass = rdata->rdclass;
91 	rkey->common.rdtype = rdata->type;
92 	ISC_LINK_INIT(&rkey->common, link);
93 
94 	return (generic_tostruct_key(CALL_TOSTRUCT));
95 }
96 
97 static void
freestruct_rkey(ARGS_FREESTRUCT)98 freestruct_rkey(ARGS_FREESTRUCT) {
99 	dns_rdata_rkey_t *rkey = (dns_rdata_rkey_t *)source;
100 
101 	REQUIRE(rkey != NULL);
102 	REQUIRE(rkey->common.rdtype == dns_rdatatype_rkey);
103 
104 	generic_freestruct_key(source);
105 }
106 
107 static isc_result_t
additionaldata_rkey(ARGS_ADDLDATA)108 additionaldata_rkey(ARGS_ADDLDATA) {
109 	REQUIRE(rdata->type == dns_rdatatype_rkey);
110 
111 	UNUSED(rdata);
112 	UNUSED(add);
113 	UNUSED(arg);
114 
115 	return (ISC_R_SUCCESS);
116 }
117 
118 static isc_result_t
digest_rkey(ARGS_DIGEST)119 digest_rkey(ARGS_DIGEST) {
120 	isc_region_t r;
121 
122 	REQUIRE(rdata != NULL);
123 	REQUIRE(rdata->type == dns_rdatatype_rkey);
124 
125 	dns_rdata_toregion(rdata, &r);
126 
127 	return ((digest)(arg, &r));
128 }
129 
130 static bool
checkowner_rkey(ARGS_CHECKOWNER)131 checkowner_rkey(ARGS_CHECKOWNER) {
132 	REQUIRE(type == dns_rdatatype_rkey);
133 
134 	UNUSED(name);
135 	UNUSED(type);
136 	UNUSED(rdclass);
137 	UNUSED(wildcard);
138 
139 	return (true);
140 }
141 
142 static bool
checknames_rkey(ARGS_CHECKNAMES)143 checknames_rkey(ARGS_CHECKNAMES) {
144 	REQUIRE(rdata != NULL);
145 	REQUIRE(rdata->type == dns_rdatatype_rkey);
146 
147 	UNUSED(rdata);
148 	UNUSED(owner);
149 	UNUSED(bad);
150 
151 	return (true);
152 }
153 
154 static int
casecompare_rkey(ARGS_COMPARE)155 casecompare_rkey(ARGS_COMPARE) {
156 	/*
157 	 * Treat ALG 253 (private DNS) subtype name case sensitively.
158 	 */
159 	return (compare_rkey(rdata1, rdata2));
160 }
161 
162 #endif /* RDATA_GENERIC_RKEY_57_C */
163