]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/blob - contrib/bind9/lib/dns/rdata/in_1/nsap-ptr_23.c
MFC r363988:
[FreeBSD/stable/9.git] / contrib / bind9 / lib / dns / rdata / in_1 / nsap-ptr_23.c
1 /*
2  * Copyright (C) 2004, 2005, 2007, 2009, 2015  Internet Systems Consortium, Inc. ("ISC")
3  * Copyright (C) 1999-2001  Internet Software Consortium.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15  * PERFORMANCE OF THIS SOFTWARE.
16  */
17
18 /* $Id: nsap-ptr_23.c,v 1.40 2009/12/04 22:06:37 tbox Exp $ */
19
20 /* Reviewed: Fri Mar 17 10:16:02 PST 2000 by gson */
21
22 /* RFC1348.  Obsoleted in RFC 1706 - use PTR instead. */
23
24 #ifndef RDATA_IN_1_NSAP_PTR_23_C
25 #define RDATA_IN_1_NSAP_PTR_23_C
26
27 #define RRTYPE_NSAP_PTR_ATTRIBUTES (0)
28
29 static inline isc_result_t
30 fromtext_in_nsap_ptr(ARGS_FROMTEXT) {
31         isc_token_t token;
32         dns_name_t name;
33         isc_buffer_t buffer;
34
35         REQUIRE(type == dns_rdatatype_nsap_ptr);
36         REQUIRE(rdclass == dns_rdataclass_in);
37
38         UNUSED(type);
39         UNUSED(rdclass);
40         UNUSED(callbacks);
41
42         RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
43                                       ISC_FALSE));
44
45         dns_name_init(&name, NULL);
46         buffer_fromregion(&buffer, &token.value.as_region);
47         if (origin == NULL)
48                 origin = dns_rootname;
49         RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
50         return (ISC_R_SUCCESS);
51 }
52
53 static inline isc_result_t
54 totext_in_nsap_ptr(ARGS_TOTEXT) {
55         isc_region_t region;
56         dns_name_t name;
57         dns_name_t prefix;
58         isc_boolean_t sub;
59
60         REQUIRE(rdata->type == dns_rdatatype_nsap_ptr);
61         REQUIRE(rdata->rdclass == dns_rdataclass_in);
62         REQUIRE(rdata->length != 0);
63
64         dns_name_init(&name, NULL);
65         dns_name_init(&prefix, NULL);
66
67         dns_rdata_toregion(rdata, &region);
68         dns_name_fromregion(&name, &region);
69
70         sub = name_prefix(&name, tctx->origin, &prefix);
71
72         return (dns_name_totext(&prefix, sub, target));
73 }
74
75 static inline isc_result_t
76 fromwire_in_nsap_ptr(ARGS_FROMWIRE) {
77         dns_name_t name;
78
79         REQUIRE(type == dns_rdatatype_nsap_ptr);
80         REQUIRE(rdclass == dns_rdataclass_in);
81
82         UNUSED(type);
83         UNUSED(rdclass);
84
85         dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
86
87         dns_name_init(&name, NULL);
88         return (dns_name_fromwire(&name, source, dctx, options, target));
89 }
90
91 static inline isc_result_t
92 towire_in_nsap_ptr(ARGS_TOWIRE) {
93         dns_name_t name;
94         dns_offsets_t offsets;
95         isc_region_t region;
96
97         REQUIRE(rdata->type == dns_rdatatype_nsap_ptr);
98         REQUIRE(rdata->rdclass == dns_rdataclass_in);
99         REQUIRE(rdata->length != 0);
100
101         dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
102         dns_name_init(&name, offsets);
103         dns_rdata_toregion(rdata, &region);
104         dns_name_fromregion(&name, &region);
105
106         return (dns_name_towire(&name, cctx, target));
107 }
108
109 static inline int
110 compare_in_nsap_ptr(ARGS_COMPARE) {
111         dns_name_t name1;
112         dns_name_t name2;
113         isc_region_t region1;
114         isc_region_t region2;
115
116         REQUIRE(rdata1->type == rdata2->type);
117         REQUIRE(rdata1->rdclass == rdata2->rdclass);
118         REQUIRE(rdata1->type == dns_rdatatype_nsap_ptr);
119         REQUIRE(rdata1->rdclass == dns_rdataclass_in);
120         REQUIRE(rdata1->length != 0);
121         REQUIRE(rdata2->length != 0);
122
123         dns_name_init(&name1, NULL);
124         dns_name_init(&name2, NULL);
125
126         dns_rdata_toregion(rdata1, &region1);
127         dns_rdata_toregion(rdata2, &region2);
128
129         dns_name_fromregion(&name1, &region1);
130         dns_name_fromregion(&name2, &region2);
131
132         return (dns_name_rdatacompare(&name1, &name2));
133 }
134
135 static inline isc_result_t
136 fromstruct_in_nsap_ptr(ARGS_FROMSTRUCT) {
137         dns_rdata_in_nsap_ptr_t *nsap_ptr = source;
138         isc_region_t region;
139
140         REQUIRE(type == dns_rdatatype_nsap_ptr);
141         REQUIRE(rdclass == dns_rdataclass_in);
142         REQUIRE(source != NULL);
143         REQUIRE(nsap_ptr->common.rdtype == type);
144         REQUIRE(nsap_ptr->common.rdclass == rdclass);
145
146         UNUSED(type);
147         UNUSED(rdclass);
148
149         dns_name_toregion(&nsap_ptr->owner, &region);
150         return (isc_buffer_copyregion(target, &region));
151 }
152
153 static inline isc_result_t
154 tostruct_in_nsap_ptr(ARGS_TOSTRUCT) {
155         isc_region_t region;
156         dns_rdata_in_nsap_ptr_t *nsap_ptr = target;
157         dns_name_t name;
158
159         REQUIRE(rdata->type == dns_rdatatype_nsap_ptr);
160         REQUIRE(rdata->rdclass == dns_rdataclass_in);
161         REQUIRE(target != NULL);
162         REQUIRE(rdata->length != 0);
163
164         nsap_ptr->common.rdclass = rdata->rdclass;
165         nsap_ptr->common.rdtype = rdata->type;
166         ISC_LINK_INIT(&nsap_ptr->common, link);
167
168         dns_name_init(&name, NULL);
169         dns_rdata_toregion(rdata, &region);
170         dns_name_fromregion(&name, &region);
171         dns_name_init(&nsap_ptr->owner, NULL);
172         RETERR(name_duporclone(&name, mctx, &nsap_ptr->owner));
173         nsap_ptr->mctx = mctx;
174         return (ISC_R_SUCCESS);
175 }
176
177 static inline void
178 freestruct_in_nsap_ptr(ARGS_FREESTRUCT) {
179         dns_rdata_in_nsap_ptr_t *nsap_ptr = source;
180
181         REQUIRE(source != NULL);
182         REQUIRE(nsap_ptr->common.rdclass == dns_rdataclass_in);
183         REQUIRE(nsap_ptr->common.rdtype == dns_rdatatype_nsap_ptr);
184
185         if (nsap_ptr->mctx == NULL)
186                 return;
187
188         dns_name_free(&nsap_ptr->owner, nsap_ptr->mctx);
189         nsap_ptr->mctx = NULL;
190 }
191
192 static inline isc_result_t
193 additionaldata_in_nsap_ptr(ARGS_ADDLDATA) {
194         REQUIRE(rdata->type == dns_rdatatype_nsap_ptr);
195         REQUIRE(rdata->rdclass == dns_rdataclass_in);
196
197         UNUSED(rdata);
198         UNUSED(add);
199         UNUSED(arg);
200
201         return (ISC_R_SUCCESS);
202 }
203
204 static inline isc_result_t
205 digest_in_nsap_ptr(ARGS_DIGEST) {
206         isc_region_t r;
207         dns_name_t name;
208
209         REQUIRE(rdata->type == dns_rdatatype_nsap_ptr);
210         REQUIRE(rdata->rdclass == dns_rdataclass_in);
211
212         dns_rdata_toregion(rdata, &r);
213         dns_name_init(&name, NULL);
214         dns_name_fromregion(&name, &r);
215
216         return (dns_name_digest(&name, digest, arg));
217 }
218
219 static inline isc_boolean_t
220 checkowner_in_nsap_ptr(ARGS_CHECKOWNER) {
221
222         REQUIRE(type == dns_rdatatype_nsap_ptr);
223         REQUIRE(rdclass == dns_rdataclass_in);
224
225         UNUSED(name);
226         UNUSED(type);
227         UNUSED(rdclass);
228         UNUSED(wildcard);
229
230         return (ISC_TRUE);
231 }
232
233 static inline isc_boolean_t
234 checknames_in_nsap_ptr(ARGS_CHECKNAMES) {
235
236         REQUIRE(rdata->type == dns_rdatatype_nsap_ptr);
237         REQUIRE(rdata->rdclass == dns_rdataclass_in);
238
239         UNUSED(rdata);
240         UNUSED(owner);
241         UNUSED(bad);
242
243         return (ISC_TRUE);
244 }
245
246 static inline int
247 casecompare_in_nsap_ptr(ARGS_COMPARE) {
248         return (compare_in_nsap_ptr(rdata1, rdata2));
249 }
250
251 #endif  /* RDATA_IN_1_NSAP_PTR_23_C */