xref: /minix3/external/bsd/bind/dist/bin/tests/rdata_test.c (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
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, &region);
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