1 /*
2 * Copyright (C) 2014, 2015 Internet Systems Consortium, Inc. ("ISC")
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
9 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
11 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
13 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14 * PERFORMANCE OF THIS SOFTWARE.
15 */
16
17 /* $Id$ */
18
19 /*
20 * Reviewed: Wed Mar 15 16:47:10 PST 2000 by halley.
21 */
22
23 /* RFC2535 */
24
25 #ifndef RDATA_GENERIC_CDNSKEY_60_C
26 #define RDATA_GENERIC_CDNSKEY_60_C
27
28 #include <dst/dst.h>
29
30 #define RRTYPE_CDNSKEY_ATTRIBUTES 0
31
32 static inline isc_result_t
fromtext_cdnskey(ARGS_FROMTEXT)33 fromtext_cdnskey(ARGS_FROMTEXT) {
34
35 REQUIRE(type == dns_rdatatype_cdnskey);
36
37 return (generic_fromtext_key(rdclass, type, lexer, origin,
38 options, target, callbacks));
39 }
40
41 static inline isc_result_t
totext_cdnskey(ARGS_TOTEXT)42 totext_cdnskey(ARGS_TOTEXT) {
43
44 REQUIRE(rdata != NULL);
45 REQUIRE(rdata->type == dns_rdatatype_cdnskey);
46
47 return (generic_totext_key(rdata, tctx, target));
48 }
49
50 static inline isc_result_t
fromwire_cdnskey(ARGS_FROMWIRE)51 fromwire_cdnskey(ARGS_FROMWIRE) {
52
53 REQUIRE(type == dns_rdatatype_cdnskey);
54
55 return (generic_fromwire_key(rdclass, type, source, dctx,
56 options, target));
57 }
58
59 static inline isc_result_t
towire_cdnskey(ARGS_TOWIRE)60 towire_cdnskey(ARGS_TOWIRE) {
61 isc_region_t sr;
62
63 REQUIRE(rdata->type == dns_rdatatype_cdnskey);
64 REQUIRE(rdata->length != 0);
65
66 UNUSED(cctx);
67
68 dns_rdata_toregion(rdata, &sr);
69 return (mem_tobuffer(target, sr.base, sr.length));
70 }
71
72 static inline int
compare_cdnskey(ARGS_COMPARE)73 compare_cdnskey(ARGS_COMPARE) {
74 isc_region_t r1;
75 isc_region_t r2;
76
77 REQUIRE(rdata1 != NULL);
78 REQUIRE(rdata2 != NULL);
79 REQUIRE(rdata1->type == rdata2->type);
80 REQUIRE(rdata1->rdclass == rdata2->rdclass);
81 REQUIRE(rdata1->type == dns_rdatatype_cdnskey);
82 REQUIRE(rdata1->length != 0);
83 REQUIRE(rdata2->length != 0);
84
85 dns_rdata_toregion(rdata1, &r1);
86 dns_rdata_toregion(rdata2, &r2);
87 return (isc_region_compare(&r1, &r2));
88 }
89
90 static inline isc_result_t
fromstruct_cdnskey(ARGS_FROMSTRUCT)91 fromstruct_cdnskey(ARGS_FROMSTRUCT) {
92
93 REQUIRE(type == dns_rdatatype_cdnskey);
94
95 return (generic_fromstruct_key(rdclass, type, source, target));
96 }
97
98 static inline isc_result_t
tostruct_cdnskey(ARGS_TOSTRUCT)99 tostruct_cdnskey(ARGS_TOSTRUCT) {
100 dns_rdata_cdnskey_t *dnskey = target;
101
102 REQUIRE(dnskey != NULL);
103 REQUIRE(rdata != NULL);
104 REQUIRE(rdata->type == dns_rdatatype_cdnskey);
105
106 dnskey->common.rdclass = rdata->rdclass;
107 dnskey->common.rdtype = rdata->type;
108 ISC_LINK_INIT(&dnskey->common, link);
109
110 return (generic_tostruct_key(rdata, target, mctx));
111 }
112
113 static inline void
freestruct_cdnskey(ARGS_FREESTRUCT)114 freestruct_cdnskey(ARGS_FREESTRUCT) {
115 dns_rdata_cdnskey_t *dnskey = (dns_rdata_cdnskey_t *) source;
116
117 REQUIRE(dnskey != NULL);
118 REQUIRE(dnskey->common.rdtype == dns_rdatatype_cdnskey);
119
120 generic_freestruct_key(source);
121 }
122
123 static inline isc_result_t
additionaldata_cdnskey(ARGS_ADDLDATA)124 additionaldata_cdnskey(ARGS_ADDLDATA) {
125 REQUIRE(rdata->type == dns_rdatatype_cdnskey);
126
127 UNUSED(rdata);
128 UNUSED(add);
129 UNUSED(arg);
130
131 return (ISC_R_SUCCESS);
132 }
133
134 static inline isc_result_t
digest_cdnskey(ARGS_DIGEST)135 digest_cdnskey(ARGS_DIGEST) {
136 isc_region_t r;
137
138 REQUIRE(rdata != NULL);
139 REQUIRE(rdata->type == dns_rdatatype_cdnskey);
140
141 dns_rdata_toregion(rdata, &r);
142
143 return ((digest)(arg, &r));
144 }
145
146 static inline isc_boolean_t
checkowner_cdnskey(ARGS_CHECKOWNER)147 checkowner_cdnskey(ARGS_CHECKOWNER) {
148
149 REQUIRE(type == dns_rdatatype_cdnskey);
150
151 UNUSED(name);
152 UNUSED(type);
153 UNUSED(rdclass);
154 UNUSED(wildcard);
155
156 return (ISC_TRUE);
157 }
158
159 static inline isc_boolean_t
checknames_cdnskey(ARGS_CHECKNAMES)160 checknames_cdnskey(ARGS_CHECKNAMES) {
161
162 REQUIRE(rdata != NULL);
163 REQUIRE(rdata->type == dns_rdatatype_cdnskey);
164
165 UNUSED(rdata);
166 UNUSED(owner);
167 UNUSED(bad);
168
169 return (ISC_TRUE);
170 }
171
172 static inline int
casecompare_cdnskey(ARGS_COMPARE)173 casecompare_cdnskey(ARGS_COMPARE) {
174
175 /*
176 * Treat ALG 253 (private DNS) subtype name case sensistively.
177 */
178 return (compare_cdnskey(rdata1, rdata2));
179 }
180
181 #endif /* RDATA_GENERIC_CDNSKEY_60_C */
182