1*00b67f09SDavid van Moolenbroek /* $NetBSD: rdata_test.c,v 1.8 2014/12/10 04:37:53 christos Exp $ */
2*00b67f09SDavid van Moolenbroek
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek * Copyright (C) 2004-2007, 2011, 2012, 2014 Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek * Copyright (C) 1998-2003 Internet Software Consortium.
6*00b67f09SDavid van Moolenbroek *
7*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any
8*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above
9*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies.
10*00b67f09SDavid van Moolenbroek *
11*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12*00b67f09SDavid van Moolenbroek * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13*00b67f09SDavid van Moolenbroek * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14*00b67f09SDavid van Moolenbroek * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15*00b67f09SDavid van Moolenbroek * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16*00b67f09SDavid van Moolenbroek * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*00b67f09SDavid van Moolenbroek * PERFORMANCE OF THIS SOFTWARE.
18*00b67f09SDavid van Moolenbroek */
19*00b67f09SDavid van Moolenbroek
20*00b67f09SDavid van Moolenbroek #include <config.h>
21*00b67f09SDavid van Moolenbroek
22*00b67f09SDavid van Moolenbroek #include <stdlib.h>
23*00b67f09SDavid van Moolenbroek
24*00b67f09SDavid van Moolenbroek #include <isc/buffer.h>
25*00b67f09SDavid van Moolenbroek #include <isc/commandline.h>
26*00b67f09SDavid van Moolenbroek #include <isc/lex.h>
27*00b67f09SDavid van Moolenbroek #include <isc/mem.h>
28*00b67f09SDavid van Moolenbroek #include <isc/string.h>
29*00b67f09SDavid van Moolenbroek #include <isc/util.h>
30*00b67f09SDavid van Moolenbroek
31*00b67f09SDavid van Moolenbroek #include <dns/rdata.h>
32*00b67f09SDavid van Moolenbroek #include <dns/compress.h>
33*00b67f09SDavid van Moolenbroek #include <dns/rdataclass.h>
34*00b67f09SDavid van Moolenbroek #include <dns/rdatastruct.h>
35*00b67f09SDavid van Moolenbroek #include <dns/rdatatype.h>
36*00b67f09SDavid van Moolenbroek #include <dns/result.h>
37*00b67f09SDavid van Moolenbroek
38*00b67f09SDavid van Moolenbroek isc_mem_t *mctx;
39*00b67f09SDavid van Moolenbroek isc_lex_t *lex;
40*00b67f09SDavid van Moolenbroek
41*00b67f09SDavid van Moolenbroek isc_lexspecials_t specials;
42*00b67f09SDavid van Moolenbroek
43*00b67f09SDavid van Moolenbroek static void
viastruct(dns_rdata_t * rdata,isc_mem_t * mctx,dns_rdata_t * rdata2,isc_buffer_t * b)44*00b67f09SDavid van Moolenbroek viastruct(dns_rdata_t *rdata, isc_mem_t *mctx,
45*00b67f09SDavid van Moolenbroek dns_rdata_t *rdata2, isc_buffer_t *b)
46*00b67f09SDavid van Moolenbroek {
47*00b67f09SDavid van Moolenbroek isc_result_t result;
48*00b67f09SDavid van Moolenbroek void *sp = NULL;
49*00b67f09SDavid van Moolenbroek isc_boolean_t need_free = ISC_FALSE;
50*00b67f09SDavid van Moolenbroek dns_rdatatype_t rdt;
51*00b67f09SDavid van Moolenbroek dns_rdataclass_t rdc;
52*00b67f09SDavid van Moolenbroek
53*00b67f09SDavid van Moolenbroek UNUSED(rdata2); /* XXXMPA remove when fromstruct is ready. */
54*00b67f09SDavid van Moolenbroek UNUSED(b);
55*00b67f09SDavid van Moolenbroek
56*00b67f09SDavid van Moolenbroek switch (rdata->type) {
57*00b67f09SDavid van Moolenbroek case dns_rdatatype_a6: {
58*00b67f09SDavid van Moolenbroek static dns_rdata_in_a6_t in_a6;
59*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_a6, NULL);
60*00b67f09SDavid van Moolenbroek break;
61*00b67f09SDavid van Moolenbroek }
62*00b67f09SDavid van Moolenbroek case dns_rdatatype_a: {
63*00b67f09SDavid van Moolenbroek switch (rdata->rdclass) {
64*00b67f09SDavid van Moolenbroek case dns_rdataclass_hs: {
65*00b67f09SDavid van Moolenbroek static dns_rdata_hs_a_t hs_a;
66*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &hs_a, NULL);
67*00b67f09SDavid van Moolenbroek break;
68*00b67f09SDavid van Moolenbroek }
69*00b67f09SDavid van Moolenbroek case dns_rdataclass_in: {
70*00b67f09SDavid van Moolenbroek static dns_rdata_in_a_t in_a;
71*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_a, NULL);
72*00b67f09SDavid van Moolenbroek break;
73*00b67f09SDavid van Moolenbroek }
74*00b67f09SDavid van Moolenbroek default:
75*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
76*00b67f09SDavid van Moolenbroek break;
77*00b67f09SDavid van Moolenbroek }
78*00b67f09SDavid van Moolenbroek break;
79*00b67f09SDavid van Moolenbroek }
80*00b67f09SDavid van Moolenbroek case dns_rdatatype_aaaa: {
81*00b67f09SDavid van Moolenbroek static dns_rdata_in_aaaa_t in_aaaa;
82*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_aaaa, NULL);
83*00b67f09SDavid van Moolenbroek break;
84*00b67f09SDavid van Moolenbroek }
85*00b67f09SDavid van Moolenbroek case dns_rdatatype_afsdb: {
86*00b67f09SDavid van Moolenbroek static dns_rdata_afsdb_t afsdb;
87*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &afsdb, NULL);
88*00b67f09SDavid van Moolenbroek break;
89*00b67f09SDavid van Moolenbroek }
90*00b67f09SDavid van Moolenbroek case dns_rdatatype_any: {
91*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
92*00b67f09SDavid van Moolenbroek break;
93*00b67f09SDavid van Moolenbroek }
94*00b67f09SDavid van Moolenbroek case dns_rdatatype_apl: {
95*00b67f09SDavid van Moolenbroek switch (rdata->rdclass) {
96*00b67f09SDavid van Moolenbroek case dns_rdataclass_in: {
97*00b67f09SDavid van Moolenbroek static dns_rdata_in_apl_t in_apl;
98*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_apl, NULL);
99*00b67f09SDavid van Moolenbroek break;
100*00b67f09SDavid van Moolenbroek }
101*00b67f09SDavid van Moolenbroek default:
102*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
103*00b67f09SDavid van Moolenbroek break;
104*00b67f09SDavid van Moolenbroek }
105*00b67f09SDavid van Moolenbroek break;
106*00b67f09SDavid van Moolenbroek }
107*00b67f09SDavid van Moolenbroek case dns_rdatatype_cert: {
108*00b67f09SDavid van Moolenbroek static dns_rdata_cert_t cert;
109*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &cert, NULL);
110*00b67f09SDavid van Moolenbroek break;
111*00b67f09SDavid van Moolenbroek }
112*00b67f09SDavid van Moolenbroek case dns_rdatatype_cname: {
113*00b67f09SDavid van Moolenbroek static dns_rdata_cname_t cname;
114*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &cname, NULL);
115*00b67f09SDavid van Moolenbroek break;
116*00b67f09SDavid van Moolenbroek }
117*00b67f09SDavid van Moolenbroek case dns_rdatatype_dname: {
118*00b67f09SDavid van Moolenbroek static dns_rdata_dname_t dname;
119*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &dname, NULL);
120*00b67f09SDavid van Moolenbroek break;
121*00b67f09SDavid van Moolenbroek }
122*00b67f09SDavid van Moolenbroek case dns_rdatatype_gpos: {
123*00b67f09SDavid van Moolenbroek static dns_rdata_gpos_t gpos;
124*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &gpos, NULL);
125*00b67f09SDavid van Moolenbroek break;
126*00b67f09SDavid van Moolenbroek }
127*00b67f09SDavid van Moolenbroek case dns_rdatatype_hinfo: {
128*00b67f09SDavid van Moolenbroek static dns_rdata_hinfo_t hinfo;
129*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &hinfo, NULL);
130*00b67f09SDavid van Moolenbroek break;
131*00b67f09SDavid van Moolenbroek }
132*00b67f09SDavid van Moolenbroek case dns_rdatatype_isdn: {
133*00b67f09SDavid van Moolenbroek static dns_rdata_isdn_t isdn;
134*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &isdn, NULL);
135*00b67f09SDavid van Moolenbroek break;
136*00b67f09SDavid van Moolenbroek }
137*00b67f09SDavid van Moolenbroek case dns_rdatatype_key: {
138*00b67f09SDavid van Moolenbroek static dns_rdata_key_t key;
139*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &key, NULL);
140*00b67f09SDavid van Moolenbroek break;
141*00b67f09SDavid van Moolenbroek }
142*00b67f09SDavid van Moolenbroek case dns_rdatatype_kx: {
143*00b67f09SDavid van Moolenbroek static dns_rdata_in_kx_t in_kx;
144*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_kx, NULL);
145*00b67f09SDavid van Moolenbroek break;
146*00b67f09SDavid van Moolenbroek }
147*00b67f09SDavid van Moolenbroek case dns_rdatatype_loc: {
148*00b67f09SDavid van Moolenbroek static dns_rdata_loc_t loc;
149*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &loc, NULL);
150*00b67f09SDavid van Moolenbroek break;
151*00b67f09SDavid van Moolenbroek }
152*00b67f09SDavid van Moolenbroek case dns_rdatatype_mb: {
153*00b67f09SDavid van Moolenbroek static dns_rdata_mb_t mb;
154*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &mb, NULL);
155*00b67f09SDavid van Moolenbroek break;
156*00b67f09SDavid van Moolenbroek }
157*00b67f09SDavid van Moolenbroek case dns_rdatatype_md: {
158*00b67f09SDavid van Moolenbroek static dns_rdata_md_t md;
159*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &md, NULL);
160*00b67f09SDavid van Moolenbroek break;
161*00b67f09SDavid van Moolenbroek }
162*00b67f09SDavid van Moolenbroek case dns_rdatatype_mf: {
163*00b67f09SDavid van Moolenbroek static dns_rdata_mf_t mf;
164*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &mf, NULL);
165*00b67f09SDavid van Moolenbroek break;
166*00b67f09SDavid van Moolenbroek }
167*00b67f09SDavid van Moolenbroek case dns_rdatatype_mg: {
168*00b67f09SDavid van Moolenbroek static dns_rdata_mg_t mg;
169*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &mg, NULL);
170*00b67f09SDavid van Moolenbroek break;
171*00b67f09SDavid van Moolenbroek }
172*00b67f09SDavid van Moolenbroek case dns_rdatatype_minfo: {
173*00b67f09SDavid van Moolenbroek static dns_rdata_minfo_t minfo;
174*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &minfo, NULL);
175*00b67f09SDavid van Moolenbroek break;
176*00b67f09SDavid van Moolenbroek }
177*00b67f09SDavid van Moolenbroek case dns_rdatatype_mr: {
178*00b67f09SDavid van Moolenbroek static dns_rdata_mr_t mr;
179*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &mr, NULL);
180*00b67f09SDavid van Moolenbroek break;
181*00b67f09SDavid van Moolenbroek }
182*00b67f09SDavid van Moolenbroek case dns_rdatatype_mx: {
183*00b67f09SDavid van Moolenbroek static dns_rdata_mx_t mx;
184*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &mx, NULL);
185*00b67f09SDavid van Moolenbroek break;
186*00b67f09SDavid van Moolenbroek }
187*00b67f09SDavid van Moolenbroek case dns_rdatatype_naptr: {
188*00b67f09SDavid van Moolenbroek static dns_rdata_naptr_t naptr;
189*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &naptr, NULL);
190*00b67f09SDavid van Moolenbroek break;
191*00b67f09SDavid van Moolenbroek }
192*00b67f09SDavid van Moolenbroek case dns_rdatatype_ns: {
193*00b67f09SDavid van Moolenbroek static dns_rdata_ns_t ns;
194*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &ns, NULL);
195*00b67f09SDavid van Moolenbroek break;
196*00b67f09SDavid van Moolenbroek }
197*00b67f09SDavid van Moolenbroek case dns_rdatatype_nsap: {
198*00b67f09SDavid van Moolenbroek static dns_rdata_in_nsap_t in_nsap;
199*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_nsap, NULL);
200*00b67f09SDavid van Moolenbroek break;
201*00b67f09SDavid van Moolenbroek }
202*00b67f09SDavid van Moolenbroek case dns_rdatatype_nsap_ptr: {
203*00b67f09SDavid van Moolenbroek static dns_rdata_in_nsap_ptr_t in_nsap_ptr;
204*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_nsap_ptr, NULL);
205*00b67f09SDavid van Moolenbroek break;
206*00b67f09SDavid van Moolenbroek }
207*00b67f09SDavid van Moolenbroek case dns_rdatatype_null: {
208*00b67f09SDavid van Moolenbroek static dns_rdata_null_t null;
209*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &null, NULL);
210*00b67f09SDavid van Moolenbroek break;
211*00b67f09SDavid van Moolenbroek }
212*00b67f09SDavid van Moolenbroek case dns_rdatatype_nxt: {
213*00b67f09SDavid van Moolenbroek static dns_rdata_nxt_t nxt;
214*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &nxt, NULL);
215*00b67f09SDavid van Moolenbroek break;
216*00b67f09SDavid van Moolenbroek }
217*00b67f09SDavid van Moolenbroek case dns_rdatatype_opt: {
218*00b67f09SDavid van Moolenbroek static dns_rdata_opt_t opt;
219*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &opt, NULL);
220*00b67f09SDavid van Moolenbroek break;
221*00b67f09SDavid van Moolenbroek }
222*00b67f09SDavid van Moolenbroek case dns_rdatatype_ptr: {
223*00b67f09SDavid van Moolenbroek static dns_rdata_ptr_t ptr;
224*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &ptr, NULL);
225*00b67f09SDavid van Moolenbroek break;
226*00b67f09SDavid van Moolenbroek }
227*00b67f09SDavid van Moolenbroek case dns_rdatatype_px: {
228*00b67f09SDavid van Moolenbroek static dns_rdata_in_px_t in_px;
229*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_px, NULL);
230*00b67f09SDavid van Moolenbroek break;
231*00b67f09SDavid van Moolenbroek }
232*00b67f09SDavid van Moolenbroek case dns_rdatatype_rp: {
233*00b67f09SDavid van Moolenbroek static dns_rdata_rp_t rp;
234*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &rp, NULL);
235*00b67f09SDavid van Moolenbroek break;
236*00b67f09SDavid van Moolenbroek }
237*00b67f09SDavid van Moolenbroek case dns_rdatatype_rt: {
238*00b67f09SDavid van Moolenbroek static dns_rdata_rt_t rt;
239*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &rt, NULL);
240*00b67f09SDavid van Moolenbroek break;
241*00b67f09SDavid van Moolenbroek }
242*00b67f09SDavid van Moolenbroek case dns_rdatatype_sig: {
243*00b67f09SDavid van Moolenbroek static dns_rdata_sig_t sig;
244*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &sig, NULL);
245*00b67f09SDavid van Moolenbroek break;
246*00b67f09SDavid van Moolenbroek }
247*00b67f09SDavid van Moolenbroek case dns_rdatatype_soa: {
248*00b67f09SDavid van Moolenbroek static dns_rdata_soa_t soa;
249*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &soa, NULL);
250*00b67f09SDavid van Moolenbroek break;
251*00b67f09SDavid van Moolenbroek }
252*00b67f09SDavid van Moolenbroek case dns_rdatatype_srv: {
253*00b67f09SDavid van Moolenbroek static dns_rdata_in_srv_t in_srv;
254*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_srv, NULL);
255*00b67f09SDavid van Moolenbroek break;
256*00b67f09SDavid van Moolenbroek }
257*00b67f09SDavid van Moolenbroek case dns_rdatatype_tkey: {
258*00b67f09SDavid van Moolenbroek static dns_rdata_tkey_t tkey;
259*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &tkey, NULL);
260*00b67f09SDavid van Moolenbroek break;
261*00b67f09SDavid van Moolenbroek }
262*00b67f09SDavid van Moolenbroek case dns_rdatatype_tsig: {
263*00b67f09SDavid van Moolenbroek static dns_rdata_any_tsig_t tsig;
264*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &tsig, NULL);
265*00b67f09SDavid van Moolenbroek break;
266*00b67f09SDavid van Moolenbroek }
267*00b67f09SDavid van Moolenbroek case dns_rdatatype_txt: {
268*00b67f09SDavid van Moolenbroek static dns_rdata_txt_t txt;
269*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &txt, NULL);
270*00b67f09SDavid van Moolenbroek break;
271*00b67f09SDavid van Moolenbroek }
272*00b67f09SDavid van Moolenbroek case dns_rdatatype_spf: {
273*00b67f09SDavid van Moolenbroek static dns_rdata_spf_t spf;
274*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &spf, NULL);
275*00b67f09SDavid van Moolenbroek break;
276*00b67f09SDavid van Moolenbroek }
277*00b67f09SDavid van Moolenbroek case dns_rdatatype_unspec: {
278*00b67f09SDavid van Moolenbroek static dns_rdata_unspec_t unspec;
279*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &unspec, NULL);
280*00b67f09SDavid van Moolenbroek break;
281*00b67f09SDavid van Moolenbroek }
282*00b67f09SDavid van Moolenbroek case dns_rdatatype_uri: {
283*00b67f09SDavid van Moolenbroek static dns_rdata_uri_t uri;
284*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &uri, NULL);
285*00b67f09SDavid van Moolenbroek break;
286*00b67f09SDavid van Moolenbroek }
287*00b67f09SDavid van Moolenbroek case dns_rdatatype_caa: {
288*00b67f09SDavid van Moolenbroek static dns_rdata_caa_t caa;
289*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &caa, NULL);
290*00b67f09SDavid van Moolenbroek break;
291*00b67f09SDavid van Moolenbroek }
292*00b67f09SDavid van Moolenbroek case dns_rdatatype_wks: {
293*00b67f09SDavid van Moolenbroek static dns_rdata_in_wks_t in_wks;
294*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_wks, NULL);
295*00b67f09SDavid van Moolenbroek break;
296*00b67f09SDavid van Moolenbroek }
297*00b67f09SDavid van Moolenbroek case dns_rdatatype_x25: {
298*00b67f09SDavid van Moolenbroek static dns_rdata_x25_t x25;
299*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &x25, NULL);
300*00b67f09SDavid van Moolenbroek break;
301*00b67f09SDavid van Moolenbroek }
302*00b67f09SDavid van Moolenbroek case dns_rdatatype_nsec: {
303*00b67f09SDavid van Moolenbroek static dns_rdata_nsec_t nsec;
304*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &nsec, NULL);
305*00b67f09SDavid van Moolenbroek break;
306*00b67f09SDavid van Moolenbroek }
307*00b67f09SDavid van Moolenbroek case dns_rdatatype_rrsig: {
308*00b67f09SDavid van Moolenbroek static dns_rdata_rrsig_t rrsig;
309*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &rrsig, NULL);
310*00b67f09SDavid van Moolenbroek break;
311*00b67f09SDavid van Moolenbroek }
312*00b67f09SDavid van Moolenbroek case dns_rdatatype_dnskey: {
313*00b67f09SDavid van Moolenbroek static dns_rdata_dnskey_t dnskey;
314*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &dnskey, NULL);
315*00b67f09SDavid van Moolenbroek break;
316*00b67f09SDavid van Moolenbroek }
317*00b67f09SDavid van Moolenbroek default:
318*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
319*00b67f09SDavid van Moolenbroek break;
320*00b67f09SDavid van Moolenbroek }
321*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS)
322*00b67f09SDavid van Moolenbroek fprintf(stdout, "viastruct: tostruct %d %d return %s\n",
323*00b67f09SDavid van Moolenbroek rdata->type, rdata->rdclass,
324*00b67f09SDavid van Moolenbroek dns_result_totext(result));
325*00b67f09SDavid van Moolenbroek else
326*00b67f09SDavid van Moolenbroek dns_rdata_freestruct(sp);
327*00b67f09SDavid van Moolenbroek
328*00b67f09SDavid van Moolenbroek switch (rdata->type) {
329*00b67f09SDavid van Moolenbroek case dns_rdatatype_a6: {
330*00b67f09SDavid van Moolenbroek static dns_rdata_in_a6_t in_a6;
331*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_a6, mctx);
332*00b67f09SDavid van Moolenbroek break;
333*00b67f09SDavid van Moolenbroek }
334*00b67f09SDavid van Moolenbroek case dns_rdatatype_a: {
335*00b67f09SDavid van Moolenbroek switch (rdata->rdclass) {
336*00b67f09SDavid van Moolenbroek case dns_rdataclass_hs: {
337*00b67f09SDavid van Moolenbroek static dns_rdata_hs_a_t hs_a;
338*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &hs_a, mctx);
339*00b67f09SDavid van Moolenbroek break;
340*00b67f09SDavid van Moolenbroek }
341*00b67f09SDavid van Moolenbroek case dns_rdataclass_in: {
342*00b67f09SDavid van Moolenbroek static dns_rdata_in_a_t in_a;
343*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_a, mctx);
344*00b67f09SDavid van Moolenbroek break;
345*00b67f09SDavid van Moolenbroek }
346*00b67f09SDavid van Moolenbroek default:
347*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
348*00b67f09SDavid van Moolenbroek break;
349*00b67f09SDavid van Moolenbroek }
350*00b67f09SDavid van Moolenbroek break;
351*00b67f09SDavid van Moolenbroek }
352*00b67f09SDavid van Moolenbroek case dns_rdatatype_aaaa: {
353*00b67f09SDavid van Moolenbroek static dns_rdata_in_aaaa_t in_aaaa;
354*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_aaaa, mctx);
355*00b67f09SDavid van Moolenbroek break;
356*00b67f09SDavid van Moolenbroek }
357*00b67f09SDavid van Moolenbroek case dns_rdatatype_afsdb: {
358*00b67f09SDavid van Moolenbroek static dns_rdata_afsdb_t afsdb;
359*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &afsdb, mctx);
360*00b67f09SDavid van Moolenbroek break;
361*00b67f09SDavid van Moolenbroek }
362*00b67f09SDavid van Moolenbroek case dns_rdatatype_any: {
363*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
364*00b67f09SDavid van Moolenbroek break;
365*00b67f09SDavid van Moolenbroek }
366*00b67f09SDavid van Moolenbroek case dns_rdatatype_apl: {
367*00b67f09SDavid van Moolenbroek switch (rdata->rdclass) {
368*00b67f09SDavid van Moolenbroek case dns_rdataclass_in: {
369*00b67f09SDavid van Moolenbroek static dns_rdata_in_apl_t in_apl;
370*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_apl, mctx);
371*00b67f09SDavid van Moolenbroek break;
372*00b67f09SDavid van Moolenbroek }
373*00b67f09SDavid van Moolenbroek default:
374*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
375*00b67f09SDavid van Moolenbroek break;
376*00b67f09SDavid van Moolenbroek }
377*00b67f09SDavid van Moolenbroek break;
378*00b67f09SDavid van Moolenbroek }
379*00b67f09SDavid van Moolenbroek case dns_rdatatype_cert: {
380*00b67f09SDavid van Moolenbroek static dns_rdata_cert_t cert;
381*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &cert, mctx);
382*00b67f09SDavid van Moolenbroek break;
383*00b67f09SDavid van Moolenbroek }
384*00b67f09SDavid van Moolenbroek case dns_rdatatype_cname: {
385*00b67f09SDavid van Moolenbroek static dns_rdata_cname_t cname;
386*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &cname, mctx);
387*00b67f09SDavid van Moolenbroek break;
388*00b67f09SDavid van Moolenbroek }
389*00b67f09SDavid van Moolenbroek case dns_rdatatype_dname: {
390*00b67f09SDavid van Moolenbroek static dns_rdata_dname_t dname;
391*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &dname, mctx);
392*00b67f09SDavid van Moolenbroek break;
393*00b67f09SDavid van Moolenbroek }
394*00b67f09SDavid van Moolenbroek case dns_rdatatype_gpos: {
395*00b67f09SDavid van Moolenbroek static dns_rdata_gpos_t gpos;
396*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &gpos, mctx);
397*00b67f09SDavid van Moolenbroek break;
398*00b67f09SDavid van Moolenbroek }
399*00b67f09SDavid van Moolenbroek case dns_rdatatype_hinfo: {
400*00b67f09SDavid van Moolenbroek static dns_rdata_hinfo_t hinfo;
401*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &hinfo, mctx);
402*00b67f09SDavid van Moolenbroek break;
403*00b67f09SDavid van Moolenbroek }
404*00b67f09SDavid van Moolenbroek case dns_rdatatype_isdn: {
405*00b67f09SDavid van Moolenbroek static dns_rdata_isdn_t isdn;
406*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &isdn, mctx);
407*00b67f09SDavid van Moolenbroek break;
408*00b67f09SDavid van Moolenbroek }
409*00b67f09SDavid van Moolenbroek case dns_rdatatype_key: {
410*00b67f09SDavid van Moolenbroek static dns_rdata_key_t key;
411*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &key, mctx);
412*00b67f09SDavid van Moolenbroek break;
413*00b67f09SDavid van Moolenbroek }
414*00b67f09SDavid van Moolenbroek case dns_rdatatype_kx: {
415*00b67f09SDavid van Moolenbroek static dns_rdata_in_kx_t in_kx;
416*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_kx, mctx);
417*00b67f09SDavid van Moolenbroek break;
418*00b67f09SDavid van Moolenbroek }
419*00b67f09SDavid van Moolenbroek case dns_rdatatype_loc: {
420*00b67f09SDavid van Moolenbroek static dns_rdata_loc_t loc;
421*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &loc, mctx);
422*00b67f09SDavid van Moolenbroek break;
423*00b67f09SDavid van Moolenbroek }
424*00b67f09SDavid van Moolenbroek case dns_rdatatype_mb: {
425*00b67f09SDavid van Moolenbroek static dns_rdata_mb_t mb;
426*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &mb, mctx);
427*00b67f09SDavid van Moolenbroek break;
428*00b67f09SDavid van Moolenbroek }
429*00b67f09SDavid van Moolenbroek case dns_rdatatype_md: {
430*00b67f09SDavid van Moolenbroek static dns_rdata_md_t md;
431*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &md, mctx);
432*00b67f09SDavid van Moolenbroek break;
433*00b67f09SDavid van Moolenbroek }
434*00b67f09SDavid van Moolenbroek case dns_rdatatype_mf: {
435*00b67f09SDavid van Moolenbroek static dns_rdata_mf_t mf;
436*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &mf, mctx);
437*00b67f09SDavid van Moolenbroek break;
438*00b67f09SDavid van Moolenbroek }
439*00b67f09SDavid van Moolenbroek case dns_rdatatype_mg: {
440*00b67f09SDavid van Moolenbroek static dns_rdata_mg_t mg;
441*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &mg, mctx);
442*00b67f09SDavid van Moolenbroek break;
443*00b67f09SDavid van Moolenbroek }
444*00b67f09SDavid van Moolenbroek case dns_rdatatype_minfo: {
445*00b67f09SDavid van Moolenbroek static dns_rdata_minfo_t minfo;
446*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &minfo, mctx);
447*00b67f09SDavid van Moolenbroek break;
448*00b67f09SDavid van Moolenbroek }
449*00b67f09SDavid van Moolenbroek case dns_rdatatype_mr: {
450*00b67f09SDavid van Moolenbroek static dns_rdata_mr_t mr;
451*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &mr, mctx);
452*00b67f09SDavid van Moolenbroek break;
453*00b67f09SDavid van Moolenbroek }
454*00b67f09SDavid van Moolenbroek case dns_rdatatype_mx: {
455*00b67f09SDavid van Moolenbroek static dns_rdata_mx_t mx;
456*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &mx, mctx);
457*00b67f09SDavid van Moolenbroek break;
458*00b67f09SDavid van Moolenbroek }
459*00b67f09SDavid van Moolenbroek case dns_rdatatype_naptr: {
460*00b67f09SDavid van Moolenbroek static dns_rdata_naptr_t naptr;
461*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &naptr, mctx);
462*00b67f09SDavid van Moolenbroek break;
463*00b67f09SDavid van Moolenbroek }
464*00b67f09SDavid van Moolenbroek case dns_rdatatype_ns: {
465*00b67f09SDavid van Moolenbroek static dns_rdata_ns_t ns;
466*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &ns, mctx);
467*00b67f09SDavid van Moolenbroek break;
468*00b67f09SDavid van Moolenbroek }
469*00b67f09SDavid van Moolenbroek case dns_rdatatype_nsap: {
470*00b67f09SDavid van Moolenbroek static dns_rdata_in_nsap_t in_nsap;
471*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_nsap, mctx);
472*00b67f09SDavid van Moolenbroek break;
473*00b67f09SDavid van Moolenbroek }
474*00b67f09SDavid van Moolenbroek case dns_rdatatype_nsap_ptr: {
475*00b67f09SDavid van Moolenbroek static dns_rdata_in_nsap_ptr_t in_nsap_ptr;
476*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_nsap_ptr, mctx);
477*00b67f09SDavid van Moolenbroek break;
478*00b67f09SDavid van Moolenbroek }
479*00b67f09SDavid van Moolenbroek case dns_rdatatype_null: {
480*00b67f09SDavid van Moolenbroek static dns_rdata_null_t null;
481*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &null, mctx);
482*00b67f09SDavid van Moolenbroek break;
483*00b67f09SDavid van Moolenbroek }
484*00b67f09SDavid van Moolenbroek case dns_rdatatype_nxt: {
485*00b67f09SDavid van Moolenbroek static dns_rdata_nxt_t nxt;
486*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &nxt, mctx);
487*00b67f09SDavid van Moolenbroek break;
488*00b67f09SDavid van Moolenbroek }
489*00b67f09SDavid van Moolenbroek case dns_rdatatype_opt: {
490*00b67f09SDavid van Moolenbroek static dns_rdata_opt_t opt;
491*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &opt, mctx);
492*00b67f09SDavid van Moolenbroek break;
493*00b67f09SDavid van Moolenbroek }
494*00b67f09SDavid van Moolenbroek case dns_rdatatype_ptr: {
495*00b67f09SDavid van Moolenbroek static dns_rdata_ptr_t ptr;
496*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &ptr, mctx);
497*00b67f09SDavid van Moolenbroek break;
498*00b67f09SDavid van Moolenbroek }
499*00b67f09SDavid van Moolenbroek case dns_rdatatype_px: {
500*00b67f09SDavid van Moolenbroek static dns_rdata_in_px_t in_px;
501*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_px, mctx);
502*00b67f09SDavid van Moolenbroek break;
503*00b67f09SDavid van Moolenbroek }
504*00b67f09SDavid van Moolenbroek case dns_rdatatype_rp: {
505*00b67f09SDavid van Moolenbroek static dns_rdata_rp_t rp;
506*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &rp, mctx);
507*00b67f09SDavid van Moolenbroek break;
508*00b67f09SDavid van Moolenbroek }
509*00b67f09SDavid van Moolenbroek case dns_rdatatype_rt: {
510*00b67f09SDavid van Moolenbroek static dns_rdata_rt_t rt;
511*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &rt, mctx);
512*00b67f09SDavid van Moolenbroek break;
513*00b67f09SDavid van Moolenbroek }
514*00b67f09SDavid van Moolenbroek case dns_rdatatype_sig: {
515*00b67f09SDavid van Moolenbroek static dns_rdata_sig_t sig;
516*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &sig, mctx);
517*00b67f09SDavid van Moolenbroek break;
518*00b67f09SDavid van Moolenbroek }
519*00b67f09SDavid van Moolenbroek case dns_rdatatype_soa: {
520*00b67f09SDavid van Moolenbroek static dns_rdata_soa_t soa;
521*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &soa, mctx);
522*00b67f09SDavid van Moolenbroek break;
523*00b67f09SDavid van Moolenbroek }
524*00b67f09SDavid van Moolenbroek case dns_rdatatype_srv: {
525*00b67f09SDavid van Moolenbroek static dns_rdata_in_srv_t in_srv;
526*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_srv, mctx);
527*00b67f09SDavid van Moolenbroek break;
528*00b67f09SDavid van Moolenbroek }
529*00b67f09SDavid van Moolenbroek case dns_rdatatype_tkey: {
530*00b67f09SDavid van Moolenbroek static dns_rdata_tkey_t tkey;
531*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &tkey, mctx);
532*00b67f09SDavid van Moolenbroek break;
533*00b67f09SDavid van Moolenbroek }
534*00b67f09SDavid van Moolenbroek case dns_rdatatype_tsig: {
535*00b67f09SDavid van Moolenbroek static dns_rdata_any_tsig_t tsig;
536*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &tsig, mctx);
537*00b67f09SDavid van Moolenbroek break;
538*00b67f09SDavid van Moolenbroek }
539*00b67f09SDavid van Moolenbroek case dns_rdatatype_txt: {
540*00b67f09SDavid van Moolenbroek static dns_rdata_txt_t txt;
541*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &txt, mctx);
542*00b67f09SDavid van Moolenbroek break;
543*00b67f09SDavid van Moolenbroek }
544*00b67f09SDavid van Moolenbroek case dns_rdatatype_spf: {
545*00b67f09SDavid van Moolenbroek static dns_rdata_spf_t spf;
546*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &spf, mctx);
547*00b67f09SDavid van Moolenbroek break;
548*00b67f09SDavid van Moolenbroek }
549*00b67f09SDavid van Moolenbroek case dns_rdatatype_unspec: {
550*00b67f09SDavid van Moolenbroek static dns_rdata_unspec_t unspec;
551*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &unspec, mctx);
552*00b67f09SDavid van Moolenbroek break;
553*00b67f09SDavid van Moolenbroek }
554*00b67f09SDavid van Moolenbroek case dns_rdatatype_uri: {
555*00b67f09SDavid van Moolenbroek static dns_rdata_uri_t uri;
556*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &uri, mctx);
557*00b67f09SDavid van Moolenbroek break;
558*00b67f09SDavid van Moolenbroek }
559*00b67f09SDavid van Moolenbroek case dns_rdatatype_caa: {
560*00b67f09SDavid van Moolenbroek static dns_rdata_caa_t caa;
561*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &caa, mctx);
562*00b67f09SDavid van Moolenbroek break;
563*00b67f09SDavid van Moolenbroek }
564*00b67f09SDavid van Moolenbroek case dns_rdatatype_wks: {
565*00b67f09SDavid van Moolenbroek static dns_rdata_in_wks_t in_wks;
566*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &in_wks, mctx);
567*00b67f09SDavid van Moolenbroek break;
568*00b67f09SDavid van Moolenbroek }
569*00b67f09SDavid van Moolenbroek case dns_rdatatype_x25: {
570*00b67f09SDavid van Moolenbroek static dns_rdata_x25_t x25;
571*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &x25, mctx);
572*00b67f09SDavid van Moolenbroek break;
573*00b67f09SDavid van Moolenbroek }
574*00b67f09SDavid van Moolenbroek case dns_rdatatype_nsec: {
575*00b67f09SDavid van Moolenbroek static dns_rdata_nsec_t nsec;
576*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &nsec, mctx);
577*00b67f09SDavid van Moolenbroek break;
578*00b67f09SDavid van Moolenbroek }
579*00b67f09SDavid van Moolenbroek case dns_rdatatype_rrsig: {
580*00b67f09SDavid van Moolenbroek static dns_rdata_rrsig_t rrsig;
581*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &rrsig, mctx);
582*00b67f09SDavid van Moolenbroek break;
583*00b67f09SDavid van Moolenbroek }
584*00b67f09SDavid van Moolenbroek case dns_rdatatype_dnskey: {
585*00b67f09SDavid van Moolenbroek static dns_rdata_dnskey_t dnskey;
586*00b67f09SDavid van Moolenbroek result = dns_rdata_tostruct(rdata, sp = &dnskey, mctx);
587*00b67f09SDavid van Moolenbroek break;
588*00b67f09SDavid van Moolenbroek }
589*00b67f09SDavid van Moolenbroek default:
590*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
591*00b67f09SDavid van Moolenbroek break;
592*00b67f09SDavid van Moolenbroek }
593*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS)
594*00b67f09SDavid van Moolenbroek fprintf(stdout, "viastruct: tostruct %d %d return %s\n",
595*00b67f09SDavid van Moolenbroek rdata->type, rdata->rdclass,
596*00b67f09SDavid van Moolenbroek dns_result_totext(result));
597*00b67f09SDavid van Moolenbroek else {
598*00b67f09SDavid van Moolenbroek need_free = ISC_TRUE;
599*00b67f09SDavid van Moolenbroek
600*00b67f09SDavid van Moolenbroek rdc = rdata->rdclass;
601*00b67f09SDavid van Moolenbroek rdt = rdata->type;
602*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, sp, b);
603*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS)
604*00b67f09SDavid van Moolenbroek fprintf(stdout,
605*00b67f09SDavid van Moolenbroek "viastruct: fromstruct %d %d return %s\n",
606*00b67f09SDavid van Moolenbroek rdata->type, rdata->rdclass,
607*00b67f09SDavid van Moolenbroek dns_result_totext(result));
608*00b67f09SDavid van Moolenbroek else if (rdata->length != rdata2->length ||
609*00b67f09SDavid van Moolenbroek memcmp(rdata->data, rdata2->data, rdata->length) != 0)
610*00b67f09SDavid van Moolenbroek {
611*00b67f09SDavid van Moolenbroek isc_uint32_t i;
612*00b67f09SDavid van Moolenbroek isc_uint32_t l;
613*00b67f09SDavid van Moolenbroek
614*00b67f09SDavid van Moolenbroek fprintf(stdout, "viastruct: memcmp failed\n");
615*00b67f09SDavid van Moolenbroek
616*00b67f09SDavid van Moolenbroek fprintf(stdout, "%d %d\n",
617*00b67f09SDavid van Moolenbroek rdata->length, rdata2->length);
618*00b67f09SDavid van Moolenbroek l = rdata->length;
619*00b67f09SDavid van Moolenbroek if (rdata2->length < l)
620*00b67f09SDavid van Moolenbroek l = rdata2->length;
621*00b67f09SDavid van Moolenbroek for (i = 0; i < l; i++)
622*00b67f09SDavid van Moolenbroek fprintf(stdout, "%02x %02x\n",
623*00b67f09SDavid van Moolenbroek rdata->data[i], rdata2->data[i]);
624*00b67f09SDavid van Moolenbroek }
625*00b67f09SDavid van Moolenbroek }
626*00b67f09SDavid van Moolenbroek #if 0
627*00b67f09SDavid van Moolenbroek switch (rdata->type) {
628*00b67f09SDavid van Moolenbroek case dns_rdatatype_a6: {
629*00b67f09SDavid van Moolenbroek dns_rdata_in_a6_t in_a6;
630*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_a6, b);
631*00b67f09SDavid van Moolenbroek break;
632*00b67f09SDavid van Moolenbroek }
633*00b67f09SDavid van Moolenbroek case dns_rdatatype_a: {
634*00b67f09SDavid van Moolenbroek switch (rdata->rdclass) {
635*00b67f09SDavid van Moolenbroek case dns_rdataclass_hs: {
636*00b67f09SDavid van Moolenbroek dns_rdata_hs_a_t hs_a;
637*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt,
638*00b67f09SDavid van Moolenbroek &hs_a, b);
639*00b67f09SDavid van Moolenbroek break;
640*00b67f09SDavid van Moolenbroek }
641*00b67f09SDavid van Moolenbroek case dns_rdataclass_in: {
642*00b67f09SDavid van Moolenbroek dns_rdata_in_a_t in_a;
643*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt,
644*00b67f09SDavid van Moolenbroek &in_a, b);
645*00b67f09SDavid van Moolenbroek break;
646*00b67f09SDavid van Moolenbroek }
647*00b67f09SDavid van Moolenbroek default:
648*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
649*00b67f09SDavid van Moolenbroek break;
650*00b67f09SDavid van Moolenbroek }
651*00b67f09SDavid van Moolenbroek break;
652*00b67f09SDavid van Moolenbroek }
653*00b67f09SDavid van Moolenbroek case dns_rdatatype_aaaa: {
654*00b67f09SDavid van Moolenbroek dns_rdata_in_aaaa_t in_aaaa;
655*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_aaaa, b);
656*00b67f09SDavid van Moolenbroek break;
657*00b67f09SDavid van Moolenbroek }
658*00b67f09SDavid van Moolenbroek case dns_rdatatype_afsdb: {
659*00b67f09SDavid van Moolenbroek dns_rdata_afsdb_t afsdb;
660*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &afsdb, b);
661*00b67f09SDavid van Moolenbroek break;
662*00b67f09SDavid van Moolenbroek }
663*00b67f09SDavid van Moolenbroek case dns_rdatatype_any: {
664*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
665*00b67f09SDavid van Moolenbroek break;
666*00b67f09SDavid van Moolenbroek }
667*00b67f09SDavid van Moolenbroek case dns_rdatatype_apl: {
668*00b67f09SDavid van Moolenbroek switch (rdata->rdclass) {
669*00b67f09SDavid van Moolenbroek case dns_rdataclass_in: {
670*00b67f09SDavid van Moolenbroek dns_rdata_in_apl_t in_apl;
671*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata, rdc, rdt, &in_apl, b);
672*00b67f09SDavid van Moolenbroek break;
673*00b67f09SDavid van Moolenbroek }
674*00b67f09SDavid van Moolenbroek default:
675*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
676*00b67f09SDavid van Moolenbroek break;
677*00b67f09SDavid van Moolenbroek }
678*00b67f09SDavid van Moolenbroek break;
679*00b67f09SDavid van Moolenbroek }
680*00b67f09SDavid van Moolenbroek case dns_rdatatype_cert: {
681*00b67f09SDavid van Moolenbroek dns_rdata_cert_t cert;
682*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &cert, b);
683*00b67f09SDavid van Moolenbroek break;
684*00b67f09SDavid van Moolenbroek }
685*00b67f09SDavid van Moolenbroek case dns_rdatatype_cname: {
686*00b67f09SDavid van Moolenbroek dns_rdata_cname_t cname;
687*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &cname, b);
688*00b67f09SDavid van Moolenbroek break;
689*00b67f09SDavid van Moolenbroek }
690*00b67f09SDavid van Moolenbroek case dns_rdatatype_dname: {
691*00b67f09SDavid van Moolenbroek dns_rdata_dname_t dname;
692*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &dname, b);
693*00b67f09SDavid van Moolenbroek break;
694*00b67f09SDavid van Moolenbroek }
695*00b67f09SDavid van Moolenbroek case dns_rdatatype_gpos: {
696*00b67f09SDavid van Moolenbroek dns_rdata_gpos_t gpos;
697*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &gpos, b);
698*00b67f09SDavid van Moolenbroek break;
699*00b67f09SDavid van Moolenbroek }
700*00b67f09SDavid van Moolenbroek case dns_rdatatype_hinfo: {
701*00b67f09SDavid van Moolenbroek dns_rdata_hinfo_t hinfo;
702*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &hinfo, b);
703*00b67f09SDavid van Moolenbroek break;
704*00b67f09SDavid van Moolenbroek }
705*00b67f09SDavid van Moolenbroek case dns_rdatatype_isdn: {
706*00b67f09SDavid van Moolenbroek dns_rdata_isdn_t isdn;
707*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &isdn, b);
708*00b67f09SDavid van Moolenbroek break;
709*00b67f09SDavid van Moolenbroek }
710*00b67f09SDavid van Moolenbroek case dns_rdatatype_key: {
711*00b67f09SDavid van Moolenbroek dns_rdata_key_t key;
712*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &key, b);
713*00b67f09SDavid van Moolenbroek break;
714*00b67f09SDavid van Moolenbroek }
715*00b67f09SDavid van Moolenbroek case dns_rdatatype_kx: {
716*00b67f09SDavid van Moolenbroek dns_rdata_in_kx_t in_kx;
717*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_kx, b);
718*00b67f09SDavid van Moolenbroek break;
719*00b67f09SDavid van Moolenbroek }
720*00b67f09SDavid van Moolenbroek case dns_rdatatype_loc: {
721*00b67f09SDavid van Moolenbroek dns_rdata_loc_t loc;
722*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &loc, b);
723*00b67f09SDavid van Moolenbroek break;
724*00b67f09SDavid van Moolenbroek }
725*00b67f09SDavid van Moolenbroek case dns_rdatatype_mb: {
726*00b67f09SDavid van Moolenbroek dns_rdata_mb_t mb;
727*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &mb, b);
728*00b67f09SDavid van Moolenbroek break;
729*00b67f09SDavid van Moolenbroek }
730*00b67f09SDavid van Moolenbroek case dns_rdatatype_md: {
731*00b67f09SDavid van Moolenbroek dns_rdata_md_t md;
732*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &md, b);
733*00b67f09SDavid van Moolenbroek break;
734*00b67f09SDavid van Moolenbroek }
735*00b67f09SDavid van Moolenbroek case dns_rdatatype_mf: {
736*00b67f09SDavid van Moolenbroek dns_rdata_mf_t mf;
737*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &mf, b);
738*00b67f09SDavid van Moolenbroek break;
739*00b67f09SDavid van Moolenbroek }
740*00b67f09SDavid van Moolenbroek case dns_rdatatype_mg: {
741*00b67f09SDavid van Moolenbroek dns_rdata_mg_t mg;
742*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &mg, b);
743*00b67f09SDavid van Moolenbroek break;
744*00b67f09SDavid van Moolenbroek }
745*00b67f09SDavid van Moolenbroek case dns_rdatatype_minfo: {
746*00b67f09SDavid van Moolenbroek dns_rdata_minfo_t minfo;
747*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &minfo, b);
748*00b67f09SDavid van Moolenbroek break;
749*00b67f09SDavid van Moolenbroek }
750*00b67f09SDavid van Moolenbroek case dns_rdatatype_mr: {
751*00b67f09SDavid van Moolenbroek dns_rdata_mr_t mr;
752*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &mr, b);
753*00b67f09SDavid van Moolenbroek break;
754*00b67f09SDavid van Moolenbroek }
755*00b67f09SDavid van Moolenbroek case dns_rdatatype_mx: {
756*00b67f09SDavid van Moolenbroek dns_rdata_mx_t mx;
757*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &mx, b);
758*00b67f09SDavid van Moolenbroek break;
759*00b67f09SDavid van Moolenbroek }
760*00b67f09SDavid van Moolenbroek case dns_rdatatype_naptr: {
761*00b67f09SDavid van Moolenbroek dns_rdata_naptr_t naptr;
762*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &naptr, b);
763*00b67f09SDavid van Moolenbroek break;
764*00b67f09SDavid van Moolenbroek }
765*00b67f09SDavid van Moolenbroek case dns_rdatatype_ns: {
766*00b67f09SDavid van Moolenbroek dns_rdata_ns_t ns;
767*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &ns, b);
768*00b67f09SDavid van Moolenbroek break;
769*00b67f09SDavid van Moolenbroek }
770*00b67f09SDavid van Moolenbroek case dns_rdatatype_nsap: {
771*00b67f09SDavid van Moolenbroek dns_rdata_in_nsap_t in_nsap;
772*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_nsap, b);
773*00b67f09SDavid van Moolenbroek break;
774*00b67f09SDavid van Moolenbroek }
775*00b67f09SDavid van Moolenbroek case dns_rdatatype_nsap_ptr: {
776*00b67f09SDavid van Moolenbroek dns_rdata_in_nsap_ptr_t in_nsap_ptr;
777*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_nsap_ptr,
778*00b67f09SDavid van Moolenbroek b);
779*00b67f09SDavid van Moolenbroek break;
780*00b67f09SDavid van Moolenbroek }
781*00b67f09SDavid van Moolenbroek case dns_rdatatype_null: {
782*00b67f09SDavid van Moolenbroek dns_rdata_null_t null;
783*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &null, b);
784*00b67f09SDavid van Moolenbroek break;
785*00b67f09SDavid van Moolenbroek }
786*00b67f09SDavid van Moolenbroek case dns_rdatatype_nxt: {
787*00b67f09SDavid van Moolenbroek dns_rdata_nxt_t nxt;
788*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &nxt, b);
789*00b67f09SDavid van Moolenbroek break;
790*00b67f09SDavid van Moolenbroek }
791*00b67f09SDavid van Moolenbroek case dns_rdatatype_opt: {
792*00b67f09SDavid van Moolenbroek dns_rdata_opt_t opt;
793*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &opt, b);
794*00b67f09SDavid van Moolenbroek break;
795*00b67f09SDavid van Moolenbroek }
796*00b67f09SDavid van Moolenbroek case dns_rdatatype_ptr: {
797*00b67f09SDavid van Moolenbroek dns_rdata_ptr_t ptr;
798*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &ptr, b);
799*00b67f09SDavid van Moolenbroek break;
800*00b67f09SDavid van Moolenbroek }
801*00b67f09SDavid van Moolenbroek case dns_rdatatype_px: {
802*00b67f09SDavid van Moolenbroek dns_rdata_in_px_t in_px;
803*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_px, b);
804*00b67f09SDavid van Moolenbroek break;
805*00b67f09SDavid van Moolenbroek }
806*00b67f09SDavid van Moolenbroek case dns_rdatatype_rp: {
807*00b67f09SDavid van Moolenbroek dns_rdata_rp_t rp;
808*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &rp, b);
809*00b67f09SDavid van Moolenbroek break;
810*00b67f09SDavid van Moolenbroek }
811*00b67f09SDavid van Moolenbroek case dns_rdatatype_rt: {
812*00b67f09SDavid van Moolenbroek dns_rdata_rt_t rt;
813*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &rt, b);
814*00b67f09SDavid van Moolenbroek break;
815*00b67f09SDavid van Moolenbroek }
816*00b67f09SDavid van Moolenbroek case dns_rdatatype_sig: {
817*00b67f09SDavid van Moolenbroek dns_rdata_sig_t sig;
818*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &sig, b);
819*00b67f09SDavid van Moolenbroek break;
820*00b67f09SDavid van Moolenbroek }
821*00b67f09SDavid van Moolenbroek case dns_rdatatype_soa: {
822*00b67f09SDavid van Moolenbroek dns_rdata_soa_t soa;
823*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &soa, b);
824*00b67f09SDavid van Moolenbroek break;
825*00b67f09SDavid van Moolenbroek }
826*00b67f09SDavid van Moolenbroek case dns_rdatatype_srv: {
827*00b67f09SDavid van Moolenbroek dns_rdata_in_srv_t in_srv;
828*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_srv, b);
829*00b67f09SDavid van Moolenbroek break;
830*00b67f09SDavid van Moolenbroek }
831*00b67f09SDavid van Moolenbroek case dns_rdatatype_tkey: {
832*00b67f09SDavid van Moolenbroek dns_rdata_tkey_t tkey;
833*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &tkey, b);
834*00b67f09SDavid van Moolenbroek break;
835*00b67f09SDavid van Moolenbroek }
836*00b67f09SDavid van Moolenbroek case dns_rdatatype_tsig: {
837*00b67f09SDavid van Moolenbroek dns_rdata_any_tsig_t tsig;
838*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &tsig, b);
839*00b67f09SDavid van Moolenbroek break;
840*00b67f09SDavid van Moolenbroek }
841*00b67f09SDavid van Moolenbroek case dns_rdatatype_txt: {
842*00b67f09SDavid van Moolenbroek dns_rdata_txt_t txt;
843*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &txt, b);
844*00b67f09SDavid van Moolenbroek break;
845*00b67f09SDavid van Moolenbroek }
846*00b67f09SDavid van Moolenbroek case dns_rdatatype_spf: {
847*00b67f09SDavid van Moolenbroek dns_rdata_spf_t spf;
848*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &spf, b);
849*00b67f09SDavid van Moolenbroek break;
850*00b67f09SDavid van Moolenbroek }
851*00b67f09SDavid van Moolenbroek case dns_rdatatype_unspec: {
852*00b67f09SDavid van Moolenbroek dns_rdata_unspec_t unspec;
853*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &unspec, b);
854*00b67f09SDavid van Moolenbroek break;
855*00b67f09SDavid van Moolenbroek }
856*00b67f09SDavid van Moolenbroek case dns_rdatatype_uri: {
857*00b67f09SDavid van Moolenbroek dns_rdata_uri_t uri;
858*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &uri, b);
859*00b67f09SDavid van Moolenbroek break;
860*00b67f09SDavid van Moolenbroek }
861*00b67f09SDavid van Moolenbroek case dns_rdatatype_caa: {
862*00b67f09SDavid van Moolenbroek dns_rdata_caa_t caa;
863*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &caa, b);
864*00b67f09SDavid van Moolenbroek break;
865*00b67f09SDavid van Moolenbroek }
866*00b67f09SDavid van Moolenbroek case dns_rdatatype_wks: {
867*00b67f09SDavid van Moolenbroek dns_rdata_in_wks_t in_wks;
868*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_wks, b);
869*00b67f09SDavid van Moolenbroek break;
870*00b67f09SDavid van Moolenbroek }
871*00b67f09SDavid van Moolenbroek case dns_rdatatype_x25: {
872*00b67f09SDavid van Moolenbroek dns_rdata_x25_t x25;
873*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &x25, b);
874*00b67f09SDavid van Moolenbroek break;
875*00b67f09SDavid van Moolenbroek }
876*00b67f09SDavid van Moolenbroek case dns_rdatatype_nsec: {
877*00b67f09SDavid van Moolenbroek dns_rdata_nsec_t nsec;
878*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &nsec, b);
879*00b67f09SDavid van Moolenbroek break;
880*00b67f09SDavid van Moolenbroek }
881*00b67f09SDavid van Moolenbroek case dns_rdatatype_rrsig: {
882*00b67f09SDavid van Moolenbroek dns_rdata_rrsig_t rrsig;
883*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &rrsig, b);
884*00b67f09SDavid van Moolenbroek break;
885*00b67f09SDavid van Moolenbroek }
886*00b67f09SDavid van Moolenbroek case dns_rdatatype_dnskey: {
887*00b67f09SDavid van Moolenbroek dns_rdata_dnskey_t dnskey;
888*00b67f09SDavid van Moolenbroek result = dns_rdata_fromstruct(rdata2, rdc, rdt, &dnskey, b);
889*00b67f09SDavid van Moolenbroek break;
890*00b67f09SDavid van Moolenbroek }
891*00b67f09SDavid van Moolenbroek default:
892*00b67f09SDavid van Moolenbroek result = ISC_R_NOTIMPLEMENTED;
893*00b67f09SDavid van Moolenbroek break;
894*00b67f09SDavid van Moolenbroek }
895*00b67f09SDavid van Moolenbroek #endif
896*00b67f09SDavid van Moolenbroek if (need_free)
897*00b67f09SDavid van Moolenbroek dns_rdata_freestruct(sp);
898*00b67f09SDavid van Moolenbroek }
899*00b67f09SDavid van Moolenbroek
900*00b67f09SDavid van Moolenbroek int
main(int argc,char * argv[])901*00b67f09SDavid van Moolenbroek main(int argc, char *argv[]) {
902*00b67f09SDavid van Moolenbroek isc_token_t token;
903*00b67f09SDavid van Moolenbroek isc_result_t result;
904*00b67f09SDavid van Moolenbroek int quiet = 0;
905*00b67f09SDavid van Moolenbroek int c;
906*00b67f09SDavid van Moolenbroek int stats = 0;
907*00b67f09SDavid van Moolenbroek unsigned int options = 0;
908*00b67f09SDavid van Moolenbroek dns_rdatatype_t type;
909*00b67f09SDavid van Moolenbroek dns_rdataclass_t class;
910*00b67f09SDavid van Moolenbroek dns_rdatatype_t lasttype = 0;
911*00b67f09SDavid van Moolenbroek char outbuf[16*1024];
912*00b67f09SDavid van Moolenbroek char inbuf[16*1024];
913*00b67f09SDavid van Moolenbroek char wirebuf[16*1024];
914*00b67f09SDavid van Moolenbroek char viabuf[16*1024];
915*00b67f09SDavid van Moolenbroek isc_buffer_t dbuf;
916*00b67f09SDavid van Moolenbroek isc_buffer_t tbuf;
917*00b67f09SDavid van Moolenbroek isc_buffer_t wbuf;
918*00b67f09SDavid van Moolenbroek dns_rdata_t rdata = DNS_RDATA_INIT;
919*00b67f09SDavid van Moolenbroek dns_rdata_t last = DNS_RDATA_INIT;
920*00b67f09SDavid van Moolenbroek int need_eol = 0;
921*00b67f09SDavid van Moolenbroek int wire = 0;
922*00b67f09SDavid van Moolenbroek dns_compress_t cctx;
923*00b67f09SDavid van Moolenbroek dns_decompress_t dctx;
924*00b67f09SDavid van Moolenbroek int trunc = 0;
925*00b67f09SDavid van Moolenbroek int add = 0;
926*00b67f09SDavid van Moolenbroek int len;
927*00b67f09SDavid van Moolenbroek int zero = 0;
928*00b67f09SDavid van Moolenbroek int debug = 0;
929*00b67f09SDavid van Moolenbroek isc_region_t region;
930*00b67f09SDavid van Moolenbroek int first = 1;
931*00b67f09SDavid van Moolenbroek int raw = 0;
932*00b67f09SDavid van Moolenbroek int tostruct = 0;
933*00b67f09SDavid van Moolenbroek
934*00b67f09SDavid van Moolenbroek while ((c = isc_commandline_parse(argc, argv, "dqswtarzS")) != -1) {
935*00b67f09SDavid van Moolenbroek switch (c) {
936*00b67f09SDavid van Moolenbroek case 'd':
937*00b67f09SDavid van Moolenbroek debug = 1;
938*00b67f09SDavid van Moolenbroek quiet = 0;
939*00b67f09SDavid van Moolenbroek break;
940*00b67f09SDavid van Moolenbroek case 'q':
941*00b67f09SDavid van Moolenbroek quiet = 1;
942*00b67f09SDavid van Moolenbroek debug = 0;
943*00b67f09SDavid van Moolenbroek break;
944*00b67f09SDavid van Moolenbroek case 's':
945*00b67f09SDavid van Moolenbroek stats = 1;
946*00b67f09SDavid van Moolenbroek break;
947*00b67f09SDavid van Moolenbroek case 'w':
948*00b67f09SDavid van Moolenbroek wire = 1;
949*00b67f09SDavid van Moolenbroek break;
950*00b67f09SDavid van Moolenbroek case 't':
951*00b67f09SDavid van Moolenbroek trunc = 1;
952*00b67f09SDavid van Moolenbroek break;
953*00b67f09SDavid van Moolenbroek case 'a':
954*00b67f09SDavid van Moolenbroek add = 1;
955*00b67f09SDavid van Moolenbroek break;
956*00b67f09SDavid van Moolenbroek case 'z':
957*00b67f09SDavid van Moolenbroek zero = 1;
958*00b67f09SDavid van Moolenbroek break;
959*00b67f09SDavid van Moolenbroek case 'r':
960*00b67f09SDavid van Moolenbroek raw++;
961*00b67f09SDavid van Moolenbroek break;
962*00b67f09SDavid van Moolenbroek case 'S':
963*00b67f09SDavid van Moolenbroek tostruct++;
964*00b67f09SDavid van Moolenbroek break;
965*00b67f09SDavid van Moolenbroek }
966*00b67f09SDavid van Moolenbroek }
967*00b67f09SDavid van Moolenbroek
968*00b67f09SDavid van Moolenbroek memset(&dctx, 0, sizeof(dctx));
969*00b67f09SDavid van Moolenbroek dctx.allowed = DNS_COMPRESS_ALL;
970*00b67f09SDavid van Moolenbroek
971*00b67f09SDavid van Moolenbroek RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
972*00b67f09SDavid van Moolenbroek RUNTIME_CHECK(isc_lex_create(mctx, 256, &lex) == ISC_R_SUCCESS);
973*00b67f09SDavid van Moolenbroek
974*00b67f09SDavid van Moolenbroek /*
975*00b67f09SDavid van Moolenbroek * Set up to lex DNS master file.
976*00b67f09SDavid van Moolenbroek */
977*00b67f09SDavid van Moolenbroek
978*00b67f09SDavid van Moolenbroek specials['('] = 1;
979*00b67f09SDavid van Moolenbroek specials[')'] = 1;
980*00b67f09SDavid van Moolenbroek specials['"'] = 1;
981*00b67f09SDavid van Moolenbroek isc_lex_setspecials(lex, specials);
982*00b67f09SDavid van Moolenbroek options = ISC_LEXOPT_EOL;
983*00b67f09SDavid van Moolenbroek isc_lex_setcomments(lex, ISC_LEXCOMMENT_DNSMASTERFILE);
984*00b67f09SDavid van Moolenbroek
985*00b67f09SDavid van Moolenbroek RUNTIME_CHECK(isc_lex_openstream(lex, stdin) == ISC_R_SUCCESS);
986*00b67f09SDavid van Moolenbroek
987*00b67f09SDavid van Moolenbroek dns_rdata_init(&last);
988*00b67f09SDavid van Moolenbroek while ((result = isc_lex_gettoken(lex, options | ISC_LEXOPT_NUMBER,
989*00b67f09SDavid van Moolenbroek &token)) == ISC_R_SUCCESS) {
990*00b67f09SDavid van Moolenbroek if (debug) fprintf(stdout, "token.type = %d\n", token.type);
991*00b67f09SDavid van Moolenbroek if (need_eol) {
992*00b67f09SDavid van Moolenbroek if (token.type == isc_tokentype_eol)
993*00b67f09SDavid van Moolenbroek need_eol = 0;
994*00b67f09SDavid van Moolenbroek continue;
995*00b67f09SDavid van Moolenbroek }
996*00b67f09SDavid van Moolenbroek if (token.type == isc_tokentype_eof)
997*00b67f09SDavid van Moolenbroek break;
998*00b67f09SDavid van Moolenbroek
999*00b67f09SDavid van Moolenbroek /*
1000*00b67f09SDavid van Moolenbroek * Get type.
1001*00b67f09SDavid van Moolenbroek */
1002*00b67f09SDavid van Moolenbroek if (token.type == isc_tokentype_number) {
1003*00b67f09SDavid van Moolenbroek type = token.value.as_ulong;
1004*00b67f09SDavid van Moolenbroek isc_buffer_init(&tbuf, outbuf, sizeof(outbuf));
1005*00b67f09SDavid van Moolenbroek result = dns_rdatatype_totext(type, &tbuf);
1006*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS) {
1007*00b67f09SDavid van Moolenbroek fprintf(stdout,
1008*00b67f09SDavid van Moolenbroek "dns_rdatatype_totext "
1009*00b67f09SDavid van Moolenbroek "returned %s(%d)\n",
1010*00b67f09SDavid van Moolenbroek dns_result_totext(result), result);
1011*00b67f09SDavid van Moolenbroek fflush(stdout);
1012*00b67f09SDavid van Moolenbroek need_eol = 1;
1013*00b67f09SDavid van Moolenbroek continue;
1014*00b67f09SDavid van Moolenbroek }
1015*00b67f09SDavid van Moolenbroek fprintf(stdout, "type = %.*s(%d)\n",
1016*00b67f09SDavid van Moolenbroek (int)tbuf.used, (char*)tbuf.base, type);
1017*00b67f09SDavid van Moolenbroek } else if (token.type == isc_tokentype_string) {
1018*00b67f09SDavid van Moolenbroek result = dns_rdatatype_fromtext(&type,
1019*00b67f09SDavid van Moolenbroek &token.value.as_textregion);
1020*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS) {
1021*00b67f09SDavid van Moolenbroek fprintf(stdout,
1022*00b67f09SDavid van Moolenbroek "dns_rdatatype_fromtext "
1023*00b67f09SDavid van Moolenbroek "returned %s(%d)\n",
1024*00b67f09SDavid van Moolenbroek dns_result_totext(result), result);
1025*00b67f09SDavid van Moolenbroek fflush(stdout);
1026*00b67f09SDavid van Moolenbroek need_eol = 1;
1027*00b67f09SDavid van Moolenbroek continue;
1028*00b67f09SDavid van Moolenbroek }
1029*00b67f09SDavid van Moolenbroek fprintf(stdout, "type = %.*s(%d)\n",
1030*00b67f09SDavid van Moolenbroek (int)token.value.as_textregion.length,
1031*00b67f09SDavid van Moolenbroek token.value.as_textregion.base, type);
1032*00b67f09SDavid van Moolenbroek } else
1033*00b67f09SDavid van Moolenbroek continue;
1034*00b67f09SDavid van Moolenbroek
1035*00b67f09SDavid van Moolenbroek result = isc_lex_gettoken(lex, options | ISC_LEXOPT_NUMBER,
1036*00b67f09SDavid van Moolenbroek &token);
1037*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS)
1038*00b67f09SDavid van Moolenbroek break;
1039*00b67f09SDavid van Moolenbroek if (token.type == isc_tokentype_eol)
1040*00b67f09SDavid van Moolenbroek continue;
1041*00b67f09SDavid van Moolenbroek if (token.type == isc_tokentype_eof)
1042*00b67f09SDavid van Moolenbroek break;
1043*00b67f09SDavid van Moolenbroek if (token.type == isc_tokentype_number) {
1044*00b67f09SDavid van Moolenbroek class = token.value.as_ulong;
1045*00b67f09SDavid van Moolenbroek isc_buffer_init(&tbuf, outbuf, sizeof(outbuf));
1046*00b67f09SDavid van Moolenbroek result = dns_rdatatype_totext(class, &tbuf);
1047*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS) {
1048*00b67f09SDavid van Moolenbroek fprintf(stdout, "dns_rdatatype_totext "
1049*00b67f09SDavid van Moolenbroek "returned %s(%d)\n",
1050*00b67f09SDavid van Moolenbroek dns_result_totext(result), result);
1051*00b67f09SDavid van Moolenbroek fflush(stdout);
1052*00b67f09SDavid van Moolenbroek need_eol = 1;
1053*00b67f09SDavid van Moolenbroek continue;
1054*00b67f09SDavid van Moolenbroek }
1055*00b67f09SDavid van Moolenbroek fprintf(stdout, "class = %.*s(%d)\n",
1056*00b67f09SDavid van Moolenbroek (int)tbuf.used, (char*)tbuf.base, class);
1057*00b67f09SDavid van Moolenbroek } else if (token.type == isc_tokentype_string) {
1058*00b67f09SDavid van Moolenbroek result = dns_rdataclass_fromtext(&class,
1059*00b67f09SDavid van Moolenbroek &token.value.as_textregion);
1060*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS) {
1061*00b67f09SDavid van Moolenbroek fprintf(stdout, "dns_rdataclass_fromtext "
1062*00b67f09SDavid van Moolenbroek "returned %s(%d)\n",
1063*00b67f09SDavid van Moolenbroek dns_result_totext(result), result);
1064*00b67f09SDavid van Moolenbroek fflush(stdout);
1065*00b67f09SDavid van Moolenbroek need_eol = 1;
1066*00b67f09SDavid van Moolenbroek continue;
1067*00b67f09SDavid van Moolenbroek }
1068*00b67f09SDavid van Moolenbroek fprintf(stdout, "class = %.*s(%d)\n",
1069*00b67f09SDavid van Moolenbroek (int)token.value.as_textregion.length,
1070*00b67f09SDavid van Moolenbroek token.value.as_textregion.base, class);
1071*00b67f09SDavid van Moolenbroek } else
1072*00b67f09SDavid van Moolenbroek continue;
1073*00b67f09SDavid van Moolenbroek
1074*00b67f09SDavid van Moolenbroek fflush(stdout);
1075*00b67f09SDavid van Moolenbroek dns_rdata_init(&rdata);
1076*00b67f09SDavid van Moolenbroek isc_buffer_init(&dbuf, inbuf, sizeof(inbuf));
1077*00b67f09SDavid van Moolenbroek result = dns_rdata_fromtext(&rdata, class, type, lex,
1078*00b67f09SDavid van Moolenbroek NULL, 0, mctx, &dbuf,
1079*00b67f09SDavid van Moolenbroek NULL);
1080*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS) {
1081*00b67f09SDavid van Moolenbroek fprintf(stdout,
1082*00b67f09SDavid van Moolenbroek "dns_rdata_fromtext returned %s(%d)\n",
1083*00b67f09SDavid van Moolenbroek dns_result_totext(result), result);
1084*00b67f09SDavid van Moolenbroek fflush(stdout);
1085*00b67f09SDavid van Moolenbroek continue;
1086*00b67f09SDavid van Moolenbroek }
1087*00b67f09SDavid van Moolenbroek if (raw) {
1088*00b67f09SDavid van Moolenbroek unsigned int i;
1089*00b67f09SDavid van Moolenbroek for (i = 0; i < rdata.length; /* */ ) {
1090*00b67f09SDavid van Moolenbroek fprintf(stdout, "%02x", rdata.data[i]);
1091*00b67f09SDavid van Moolenbroek if ((++i % 20) == 0)
1092*00b67f09SDavid van Moolenbroek fputs("\n", stdout);
1093*00b67f09SDavid van Moolenbroek else
1094*00b67f09SDavid van Moolenbroek if (i == rdata.length)
1095*00b67f09SDavid van Moolenbroek fputs("\n", stdout);
1096*00b67f09SDavid van Moolenbroek else
1097*00b67f09SDavid van Moolenbroek fputs(" ", stdout);
1098*00b67f09SDavid van Moolenbroek }
1099*00b67f09SDavid van Moolenbroek }
1100*00b67f09SDavid van Moolenbroek
1101*00b67f09SDavid van Moolenbroek /*
1102*00b67f09SDavid van Moolenbroek * Convert to wire and back?
1103*00b67f09SDavid van Moolenbroek */
1104*00b67f09SDavid van Moolenbroek if (wire) {
1105*00b67f09SDavid van Moolenbroek result = dns_compress_init(&cctx, -1, mctx);
1106*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS) {
1107*00b67f09SDavid van Moolenbroek fprintf(stdout,
1108*00b67f09SDavid van Moolenbroek "dns_compress_init returned %s(%d)\n",
1109*00b67f09SDavid van Moolenbroek dns_result_totext(result), result);
1110*00b67f09SDavid van Moolenbroek continue;
1111*00b67f09SDavid van Moolenbroek }
1112*00b67f09SDavid van Moolenbroek isc_buffer_init(&wbuf, wirebuf, sizeof(wirebuf));
1113*00b67f09SDavid van Moolenbroek result = dns_rdata_towire(&rdata, &cctx, &wbuf);
1114*00b67f09SDavid van Moolenbroek dns_compress_invalidate(&cctx);
1115*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS) {
1116*00b67f09SDavid van Moolenbroek fprintf(stdout,
1117*00b67f09SDavid van Moolenbroek "dns_rdata_towire returned %s(%d)\n",
1118*00b67f09SDavid van Moolenbroek dns_result_totext(result), result);
1119*00b67f09SDavid van Moolenbroek continue;
1120*00b67f09SDavid van Moolenbroek }
1121*00b67f09SDavid van Moolenbroek len = wbuf.used - wbuf.current;
1122*00b67f09SDavid van Moolenbroek if (raw > 2) {
1123*00b67f09SDavid van Moolenbroek unsigned int i;
1124*00b67f09SDavid van Moolenbroek fputs("\n", stdout);
1125*00b67f09SDavid van Moolenbroek for (i = 0; i < (unsigned int)len; /* */ ) {
1126*00b67f09SDavid van Moolenbroek fprintf(stdout, "%02x",
1127*00b67f09SDavid van Moolenbroek ((unsigned char*)wbuf.base)[i + wbuf.current]);
1128*00b67f09SDavid van Moolenbroek if ((++i % 20) == 0)
1129*00b67f09SDavid van Moolenbroek fputs("\n", stdout);
1130*00b67f09SDavid van Moolenbroek else
1131*00b67f09SDavid van Moolenbroek if (i == wbuf.used)
1132*00b67f09SDavid van Moolenbroek fputs("\n", stdout);
1133*00b67f09SDavid van Moolenbroek else
1134*00b67f09SDavid van Moolenbroek fputs(" ", stdout);
1135*00b67f09SDavid van Moolenbroek }
1136*00b67f09SDavid van Moolenbroek }
1137*00b67f09SDavid van Moolenbroek if (zero)
1138*00b67f09SDavid van Moolenbroek len = 0;
1139*00b67f09SDavid van Moolenbroek if (trunc)
1140*00b67f09SDavid van Moolenbroek len = (len * 3) / 4;
1141*00b67f09SDavid van Moolenbroek if (add) {
1142*00b67f09SDavid van Moolenbroek isc_buffer_add(&wbuf, len / 4 + 1);
1143*00b67f09SDavid van Moolenbroek len += len / 4 + 1;
1144*00b67f09SDavid van Moolenbroek }
1145*00b67f09SDavid van Moolenbroek
1146*00b67f09SDavid van Moolenbroek isc_buffer_setactive(&wbuf, len);
1147*00b67f09SDavid van Moolenbroek dns_rdata_init(&rdata);
1148*00b67f09SDavid van Moolenbroek isc_buffer_init(&dbuf, inbuf, sizeof(inbuf));
1149*00b67f09SDavid van Moolenbroek dns_decompress_init(&dctx, -1, DNS_DECOMPRESS_ANY);
1150*00b67f09SDavid van Moolenbroek result = dns_rdata_fromwire(&rdata, class, type, &wbuf,
1151*00b67f09SDavid van Moolenbroek &dctx, 0, &dbuf);
1152*00b67f09SDavid van Moolenbroek dns_decompress_invalidate(&dctx);
1153*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS) {
1154*00b67f09SDavid van Moolenbroek fprintf(stdout,
1155*00b67f09SDavid van Moolenbroek "dns_rdata_fromwire returned %s(%d)\n",
1156*00b67f09SDavid van Moolenbroek dns_result_totext(result), result);
1157*00b67f09SDavid van Moolenbroek fflush(stdout);
1158*00b67f09SDavid van Moolenbroek continue;
1159*00b67f09SDavid van Moolenbroek }
1160*00b67f09SDavid van Moolenbroek }
1161*00b67f09SDavid van Moolenbroek if (raw > 1) {
1162*00b67f09SDavid van Moolenbroek unsigned int i;
1163*00b67f09SDavid van Moolenbroek fputs("\n", stdout);
1164*00b67f09SDavid van Moolenbroek for (i = 0; i < rdata.length; /* */ ) {
1165*00b67f09SDavid van Moolenbroek fprintf(stdout, "%02x", rdata.data[i]);
1166*00b67f09SDavid van Moolenbroek if ((++i % 20) == 0)
1167*00b67f09SDavid van Moolenbroek fputs("\n", stdout);
1168*00b67f09SDavid van Moolenbroek else
1169*00b67f09SDavid van Moolenbroek if (i == rdata.length)
1170*00b67f09SDavid van Moolenbroek fputs("\n", stdout);
1171*00b67f09SDavid van Moolenbroek else
1172*00b67f09SDavid van Moolenbroek fputs(" ", stdout);
1173*00b67f09SDavid van Moolenbroek }
1174*00b67f09SDavid van Moolenbroek }
1175*00b67f09SDavid van Moolenbroek if (tostruct) {
1176*00b67f09SDavid van Moolenbroek isc_mem_t *mctx2 = NULL;
1177*00b67f09SDavid van Moolenbroek dns_rdata_t rdata2 = DNS_RDATA_INIT;
1178*00b67f09SDavid van Moolenbroek isc_buffer_t vbuf;
1179*00b67f09SDavid van Moolenbroek
1180*00b67f09SDavid van Moolenbroek RUNTIME_CHECK(isc_mem_create(0, 0, &mctx2)
1181*00b67f09SDavid van Moolenbroek == ISC_R_SUCCESS);
1182*00b67f09SDavid van Moolenbroek
1183*00b67f09SDavid van Moolenbroek isc_buffer_init(&vbuf, viabuf, sizeof(viabuf));
1184*00b67f09SDavid van Moolenbroek dns_rdata_init(&rdata2);
1185*00b67f09SDavid van Moolenbroek viastruct(&rdata, mctx2, &rdata2, &vbuf);
1186*00b67f09SDavid van Moolenbroek if (!quiet && stats)
1187*00b67f09SDavid van Moolenbroek isc_mem_stats(mctx2, stdout);
1188*00b67f09SDavid van Moolenbroek isc_mem_destroy(&mctx2);
1189*00b67f09SDavid van Moolenbroek }
1190*00b67f09SDavid van Moolenbroek
1191*00b67f09SDavid van Moolenbroek isc_buffer_init(&tbuf, outbuf, sizeof(outbuf));
1192*00b67f09SDavid van Moolenbroek result = dns_rdata_totext(&rdata, NULL, &tbuf);
1193*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS)
1194*00b67f09SDavid van Moolenbroek fprintf(stdout, "dns_rdata_totext returned %s(%d)\n",
1195*00b67f09SDavid van Moolenbroek dns_result_totext(result), result);
1196*00b67f09SDavid van Moolenbroek else
1197*00b67f09SDavid van Moolenbroek fprintf(stdout, "\"%.*s\"\n",
1198*00b67f09SDavid van Moolenbroek (int)tbuf.used, (char*)tbuf.base);
1199*00b67f09SDavid van Moolenbroek fflush(stdout);
1200*00b67f09SDavid van Moolenbroek if (lasttype == type) {
1201*00b67f09SDavid van Moolenbroek fprintf(stdout, "dns_rdata_compare = %d\n",
1202*00b67f09SDavid van Moolenbroek dns_rdata_compare(&rdata, &last));
1203*00b67f09SDavid van Moolenbroek
1204*00b67f09SDavid van Moolenbroek }
1205*00b67f09SDavid van Moolenbroek if (!first) {
1206*00b67f09SDavid van Moolenbroek free(last.data);
1207*00b67f09SDavid van Moolenbroek }
1208*00b67f09SDavid van Moolenbroek dns_rdata_init(&last);
1209*00b67f09SDavid van Moolenbroek region.base = malloc(region.length = rdata.length);
1210*00b67f09SDavid van Moolenbroek if (region.base) {
1211*00b67f09SDavid van Moolenbroek memmove(region.base, rdata.data, rdata.length);
1212*00b67f09SDavid van Moolenbroek dns_rdata_fromregion(&last, class, type, ®ion);
1213*00b67f09SDavid van Moolenbroek lasttype = type;
1214*00b67f09SDavid van Moolenbroek first = 0;
1215*00b67f09SDavid van Moolenbroek } else
1216*00b67f09SDavid van Moolenbroek first = 1;
1217*00b67f09SDavid van Moolenbroek
1218*00b67f09SDavid van Moolenbroek }
1219*00b67f09SDavid van Moolenbroek if (result != ISC_R_EOF)
1220*00b67f09SDavid van Moolenbroek printf("Result: %s\n", isc_result_totext(result));
1221*00b67f09SDavid van Moolenbroek
1222*00b67f09SDavid van Moolenbroek isc_lex_close(lex);
1223*00b67f09SDavid van Moolenbroek isc_lex_destroy(&lex);
1224*00b67f09SDavid van Moolenbroek if (!quiet && stats)
1225*00b67f09SDavid van Moolenbroek isc_mem_stats(mctx, stdout);
1226*00b67f09SDavid van Moolenbroek isc_mem_destroy(&mctx);
1227*00b67f09SDavid van Moolenbroek
1228*00b67f09SDavid van Moolenbroek return (0);
1229*00b67f09SDavid van Moolenbroek }
1230