xref: /openbsd-src/usr.sbin/nsd/dns.c (revision 063644e9d47fc0eb300e319033fb55d96345aa40)
162ac0c33Sjakob /*
262ac0c33Sjakob  * dns.c -- DNS definitions.
362ac0c33Sjakob  *
4dd5b221eSsthen  * Copyright (c) 2001-2006, NLnet Labs. All rights reserved.
562ac0c33Sjakob  *
662ac0c33Sjakob  * See LICENSE for the license.
762ac0c33Sjakob  *
862ac0c33Sjakob  */
962ac0c33Sjakob 
10d11a62c8Ssthen #include "config.h"
1162ac0c33Sjakob 
1262ac0c33Sjakob #include <sys/types.h>
1362ac0c33Sjakob #include <sys/socket.h>
1462ac0c33Sjakob #include <netinet/in.h>
1562ac0c33Sjakob #include <arpa/inet.h>
1662ac0c33Sjakob #include <ctype.h>
1762ac0c33Sjakob #include <netdb.h>
1862ac0c33Sjakob #include <string.h>
1962ac0c33Sjakob #ifdef HAVE_STRINGS_H
2062ac0c33Sjakob #include <strings.h>
2162ac0c33Sjakob #endif
2262ac0c33Sjakob 
2362ac0c33Sjakob #include "dns.h"
2462ac0c33Sjakob #include "zonec.h"
2562ac0c33Sjakob #include "zparser.h"
2662ac0c33Sjakob 
2762ac0c33Sjakob /* Taken from RFC 1035, section 3.2.4.  */
2862ac0c33Sjakob static lookup_table_type dns_rrclasses[] = {
2962ac0c33Sjakob 	{ CLASS_IN, "IN" },	/* the Internet */
3062ac0c33Sjakob 	{ CLASS_CS, "CS" },	/* the CSNET class (Obsolete) */
3162ac0c33Sjakob 	{ CLASS_CH, "CH" },	/* the CHAOS class */
3262ac0c33Sjakob 	{ CLASS_HS, "HS" },	/* Hesiod */
3362ac0c33Sjakob 	{ 0, NULL }
3462ac0c33Sjakob };
3562ac0c33Sjakob 
3662ac0c33Sjakob static rrtype_descriptor_type rrtype_descriptors[(RRTYPE_DESCRIPTORS_LENGTH+1)] = {
3762ac0c33Sjakob 	/* 0 */
3862ac0c33Sjakob 	{ 0, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
3962ac0c33Sjakob 	/* 1 */
4062ac0c33Sjakob 	{ TYPE_A, "A", T_A, 1, 1,
4162ac0c33Sjakob 	  { RDATA_WF_A }, { RDATA_ZF_A } },
4262ac0c33Sjakob 	/* 2 */
4362ac0c33Sjakob 	{ TYPE_NS, "NS", T_NS, 1, 1,
4462ac0c33Sjakob 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
4562ac0c33Sjakob 	/* 3 */
4662ac0c33Sjakob 	{ TYPE_MD, "MD", T_MD, 1, 1,
4762ac0c33Sjakob 	  { RDATA_WF_UNCOMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
4862ac0c33Sjakob 	/* 4 */
4962ac0c33Sjakob 	{ TYPE_MF, "MF", T_MF, 1, 1,
5062ac0c33Sjakob 	  { RDATA_WF_UNCOMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
5162ac0c33Sjakob 	/* 5 */
5262ac0c33Sjakob 	{ TYPE_CNAME, "CNAME", T_CNAME, 1, 1,
5362ac0c33Sjakob 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
5462ac0c33Sjakob 	/* 6 */
5562ac0c33Sjakob 	{ TYPE_SOA, "SOA", T_SOA, 7, 7,
5662ac0c33Sjakob 	  { RDATA_WF_COMPRESSED_DNAME, RDATA_WF_COMPRESSED_DNAME, RDATA_WF_LONG,
5762ac0c33Sjakob 	    RDATA_WF_LONG, RDATA_WF_LONG, RDATA_WF_LONG, RDATA_WF_LONG },
5862ac0c33Sjakob 	  { RDATA_ZF_DNAME, RDATA_ZF_DNAME, RDATA_ZF_PERIOD, RDATA_ZF_PERIOD,
5962ac0c33Sjakob 	    RDATA_ZF_PERIOD, RDATA_ZF_PERIOD, RDATA_ZF_PERIOD } },
6062ac0c33Sjakob 	/* 7 */
6162ac0c33Sjakob 	{ TYPE_MB, "MB", T_MB, 1, 1,
6262ac0c33Sjakob 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
6362ac0c33Sjakob 	/* 8 */
6462ac0c33Sjakob 	{ TYPE_MG, "MG", T_MG, 1, 1,
6562ac0c33Sjakob 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
6662ac0c33Sjakob 	/* 9 */
6762ac0c33Sjakob 	{ TYPE_MR, "MR", T_MR, 1, 1,
6862ac0c33Sjakob 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
6962ac0c33Sjakob 	/* 10 */
7062ac0c33Sjakob 	{ TYPE_NULL, "NULL", T_UTYPE, 1, 1,
7162ac0c33Sjakob 	  { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
7262ac0c33Sjakob 	/* 11 */
7362ac0c33Sjakob 	{ TYPE_WKS, "WKS", T_WKS, 2, 2,
7462ac0c33Sjakob 	  { RDATA_WF_A, RDATA_WF_BINARY },
7562ac0c33Sjakob 	  { RDATA_ZF_A, RDATA_ZF_SERVICES } },
7662ac0c33Sjakob 	/* 12 */
7762ac0c33Sjakob 	{ TYPE_PTR, "PTR", T_PTR, 1, 1,
7862ac0c33Sjakob 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
7962ac0c33Sjakob 	/* 13 */
8062ac0c33Sjakob 	{ TYPE_HINFO, "HINFO", T_HINFO, 2, 2,
8162ac0c33Sjakob 	  { RDATA_WF_TEXT, RDATA_WF_TEXT }, { RDATA_ZF_TEXT, RDATA_ZF_TEXT } },
8262ac0c33Sjakob 	/* 14 */
8362ac0c33Sjakob 	{ TYPE_MINFO, "MINFO", T_MINFO, 2, 2,
8462ac0c33Sjakob 	  { RDATA_WF_COMPRESSED_DNAME, RDATA_WF_COMPRESSED_DNAME },
8562ac0c33Sjakob 	  { RDATA_ZF_DNAME, RDATA_ZF_DNAME } },
8662ac0c33Sjakob 	/* 15 */
8762ac0c33Sjakob 	{ TYPE_MX, "MX", T_MX, 2, 2,
8862ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_COMPRESSED_DNAME },
8962ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
9062ac0c33Sjakob 	/* 16 */
91f72b2965Sjakob 	{ TYPE_TXT, "TXT", T_TXT, 1, 1,
92f72b2965Sjakob 	  { RDATA_WF_TEXTS },
93f72b2965Sjakob 	  { RDATA_ZF_TEXTS } },
9462ac0c33Sjakob 	/* 17 */
9562ac0c33Sjakob 	{ TYPE_RP, "RP", T_RP, 2, 2,
969c620270Ssthen 	  { RDATA_WF_UNCOMPRESSED_DNAME, RDATA_WF_UNCOMPRESSED_DNAME },
9762ac0c33Sjakob 	  { RDATA_ZF_DNAME, RDATA_ZF_DNAME } },
9862ac0c33Sjakob 	/* 18 */
9962ac0c33Sjakob 	{ TYPE_AFSDB, "AFSDB", T_AFSDB, 2, 2,
1009c620270Ssthen 	  { RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME },
10162ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
10262ac0c33Sjakob 	/* 19 */
10362ac0c33Sjakob 	{ TYPE_X25, "X25", T_X25, 1, 1,
10462ac0c33Sjakob 	  { RDATA_WF_TEXT },
10562ac0c33Sjakob 	  { RDATA_ZF_TEXT } },
10662ac0c33Sjakob 	/* 20 */
10762ac0c33Sjakob 	{ TYPE_ISDN, "ISDN", T_ISDN, 1, 2,
10862ac0c33Sjakob 	  { RDATA_WF_TEXT, RDATA_WF_TEXT },
10962ac0c33Sjakob 	  { RDATA_ZF_TEXT, RDATA_ZF_TEXT } },
11062ac0c33Sjakob 	/* 21 */
11162ac0c33Sjakob 	{ TYPE_RT, "RT", T_RT, 2, 2,
1129c620270Ssthen 	  { RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME },
11362ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
11462ac0c33Sjakob 	/* 22 */
11562ac0c33Sjakob 	{ TYPE_NSAP, "NSAP", T_NSAP, 1, 1,
11662ac0c33Sjakob 	  { RDATA_WF_BINARY },
11762ac0c33Sjakob 	  { RDATA_ZF_NSAP } },
11862ac0c33Sjakob 	/* 23 */
11962ac0c33Sjakob 	{ 23, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
12062ac0c33Sjakob 	/* 24 */
12162ac0c33Sjakob 	{ TYPE_SIG, "SIG", T_SIG, 9, 9,
12262ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_LONG,
12362ac0c33Sjakob 	    RDATA_WF_LONG, RDATA_WF_LONG, RDATA_WF_SHORT,
124eab1363eSsthen 	    RDATA_WF_LITERAL_DNAME, RDATA_WF_BINARY },
125eab1363eSsthen 	  { RDATA_ZF_RRTYPE, RDATA_ZF_ALGORITHM, RDATA_ZF_BYTE, RDATA_ZF_PERIOD,
126eab1363eSsthen 	    RDATA_ZF_TIME, RDATA_ZF_TIME, RDATA_ZF_SHORT,
127eab1363eSsthen 	    RDATA_ZF_LITERAL_DNAME, RDATA_ZF_BASE64 } },
12862ac0c33Sjakob 	/* 25 */
12962ac0c33Sjakob 	{ TYPE_KEY, "KEY", T_KEY, 4, 4,
13062ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
13162ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_BYTE, RDATA_ZF_ALGORITHM,
13262ac0c33Sjakob 	    RDATA_ZF_BASE64 } },
13362ac0c33Sjakob 	/* 26 */
13462ac0c33Sjakob 	{ TYPE_PX, "PX", T_PX, 3, 3,
13562ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME,
13662ac0c33Sjakob 	    RDATA_WF_UNCOMPRESSED_DNAME },
13762ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME, RDATA_ZF_DNAME } },
13862ac0c33Sjakob 	/* 27 */
13962ac0c33Sjakob 	{ 27, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
14062ac0c33Sjakob 	/* 28 */
14162ac0c33Sjakob 	{ TYPE_AAAA, "AAAA", T_AAAA, 1, 1,
14262ac0c33Sjakob 	  { RDATA_WF_AAAA },
14362ac0c33Sjakob 	  { RDATA_ZF_AAAA } },
14462ac0c33Sjakob 	/* 29 */
14562ac0c33Sjakob 	{ TYPE_LOC, "LOC", T_LOC, 1, 1,
14662ac0c33Sjakob 	  { RDATA_WF_BINARY },
14762ac0c33Sjakob 	  { RDATA_ZF_LOC } },
14862ac0c33Sjakob 	/* 30 */
14962ac0c33Sjakob 	{ TYPE_NXT, "NXT", T_NXT, 2, 2,
15062ac0c33Sjakob 	  { RDATA_WF_UNCOMPRESSED_DNAME, RDATA_WF_BINARY },
15162ac0c33Sjakob 	  { RDATA_ZF_DNAME, RDATA_ZF_NXT } },
15262ac0c33Sjakob 	/* 31 */
15362ac0c33Sjakob 	{ 31, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
15462ac0c33Sjakob 	/* 32 */
15562ac0c33Sjakob 	{ 32, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
15662ac0c33Sjakob 	/* 33 */
15762ac0c33Sjakob 	{ TYPE_SRV, "SRV", T_SRV, 4, 4,
15862ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_SHORT, RDATA_WF_SHORT,
15962ac0c33Sjakob 	    RDATA_WF_UNCOMPRESSED_DNAME },
16062ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_SHORT, RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
16162ac0c33Sjakob 	/* 34 */
16262ac0c33Sjakob 	{ 34, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
16362ac0c33Sjakob 	/* 35 */
16462ac0c33Sjakob 	{ TYPE_NAPTR, "NAPTR", T_NAPTR, 6, 6,
16562ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_SHORT, RDATA_WF_TEXT, RDATA_WF_TEXT,
16662ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_UNCOMPRESSED_DNAME },
16762ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_SHORT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
16862ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_DNAME } },
16962ac0c33Sjakob 	/* 36 */
17062ac0c33Sjakob 	{ TYPE_KX, "KX", T_KX, 2, 2,
17162ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME },
17262ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
17362ac0c33Sjakob 	/* 37 */
17462ac0c33Sjakob 	{ TYPE_CERT, "CERT", T_CERT, 4, 4,
17562ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BINARY },
17662ac0c33Sjakob 	  { RDATA_ZF_CERTIFICATE_TYPE, RDATA_ZF_SHORT, RDATA_ZF_ALGORITHM,
17762ac0c33Sjakob 	    RDATA_ZF_BASE64 } },
17862ac0c33Sjakob 	/* 38 */
17962ac0c33Sjakob 	{ TYPE_A6, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
18062ac0c33Sjakob 	/* 39 */
18162ac0c33Sjakob 	{ TYPE_DNAME, "DNAME", T_DNAME, 1, 1,
18262ac0c33Sjakob 	  { RDATA_WF_UNCOMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
18362ac0c33Sjakob 	/* 40 */
18462ac0c33Sjakob 	{ 40, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
18562ac0c33Sjakob 	/* 41 */
18662ac0c33Sjakob 	{ TYPE_OPT, "OPT", T_UTYPE, 1, 1,
18762ac0c33Sjakob 	  { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
18862ac0c33Sjakob 	/* 42 */
18962ac0c33Sjakob 	{ TYPE_APL, "APL", T_APL, 0, MAXRDATALEN,
19062ac0c33Sjakob 	  { RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
19162ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
19262ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
19362ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
19462ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
19562ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
19662ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
19762ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
19862ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
19962ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
20062ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
20162ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
20262ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
20362ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
20462ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
20562ac0c33Sjakob 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL },
20662ac0c33Sjakob 	  { RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
20762ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
20862ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
20962ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
21062ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
21162ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
21262ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
21362ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
21462ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
21562ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
21662ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
21762ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
21862ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
21962ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
22062ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
22162ac0c33Sjakob 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL } },
22262ac0c33Sjakob 	/* 43 */
22362ac0c33Sjakob 	{ TYPE_DS, "DS", T_DS, 4, 4,
22462ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
22562ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_ALGORITHM, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
22662ac0c33Sjakob 	/* 44 */
22762ac0c33Sjakob 	{ TYPE_SSHFP, "SSHFP", T_SSHFP, 3, 3,
22862ac0c33Sjakob 	  { RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
22962ac0c33Sjakob 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
23062ac0c33Sjakob 	/* 45 */
23162ac0c33Sjakob 	{ TYPE_IPSECKEY, "IPSECKEY", T_IPSECKEY, 4, 5,
23262ac0c33Sjakob 	  { RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_IPSECGATEWAY,
23362ac0c33Sjakob 	    RDATA_WF_BINARY },
23462ac0c33Sjakob 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_IPSECGATEWAY,
23562ac0c33Sjakob 	    RDATA_ZF_BASE64 } },
23662ac0c33Sjakob 	/* 46 */
23762ac0c33Sjakob 	{ TYPE_RRSIG, "RRSIG", T_RRSIG, 9, 9,
23862ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_LONG,
23962ac0c33Sjakob 	    RDATA_WF_LONG, RDATA_WF_LONG, RDATA_WF_SHORT,
24062ac0c33Sjakob 	    RDATA_WF_LITERAL_DNAME, RDATA_WF_BINARY },
24162ac0c33Sjakob 	  { RDATA_ZF_RRTYPE, RDATA_ZF_ALGORITHM, RDATA_ZF_BYTE, RDATA_ZF_PERIOD,
24262ac0c33Sjakob 	    RDATA_ZF_TIME, RDATA_ZF_TIME, RDATA_ZF_SHORT,
24362ac0c33Sjakob 		RDATA_ZF_LITERAL_DNAME, RDATA_ZF_BASE64 } },
24462ac0c33Sjakob 	/* 47 */
24562ac0c33Sjakob 	{ TYPE_NSEC, "NSEC", T_NSEC, 2, 2,
24662ac0c33Sjakob 	  { RDATA_WF_LITERAL_DNAME, RDATA_WF_BINARY },
24762ac0c33Sjakob 	  { RDATA_ZF_LITERAL_DNAME, RDATA_ZF_NSEC } },
24862ac0c33Sjakob 	/* 48 */
24962ac0c33Sjakob 	{ TYPE_DNSKEY, "DNSKEY", T_DNSKEY, 4, 4,
25062ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
25162ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_BYTE, RDATA_ZF_ALGORITHM,
25262ac0c33Sjakob 	    RDATA_ZF_BASE64 } },
25362ac0c33Sjakob 	/* 49 */
25462ac0c33Sjakob 	{ TYPE_DHCID, "DHCID", T_DHCID, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_BASE64 } },
25562ac0c33Sjakob 	/* 50 */
25662ac0c33Sjakob 	{ TYPE_NSEC3, "NSEC3", T_NSEC3, 6, 6,
25762ac0c33Sjakob 	  { RDATA_WF_BYTE, /* hash type */
25862ac0c33Sjakob 	    RDATA_WF_BYTE, /* flags */
25962ac0c33Sjakob 	    RDATA_WF_SHORT, /* iterations */
26062ac0c33Sjakob 	    RDATA_WF_BINARYWITHLENGTH, /* salt */
26162ac0c33Sjakob 	    RDATA_WF_BINARYWITHLENGTH, /* next hashed name */
26262ac0c33Sjakob 	    RDATA_WF_BINARY /* type bitmap */ },
26362ac0c33Sjakob 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_SHORT, RDATA_ZF_HEX_LEN,
26462ac0c33Sjakob 	    RDATA_ZF_BASE32, RDATA_ZF_NSEC } },
26562ac0c33Sjakob 	/* 51 */
26662ac0c33Sjakob 	{ TYPE_NSEC3PARAM, "NSEC3PARAM", T_NSEC3PARAM, 4, 4,
26762ac0c33Sjakob 	  { RDATA_WF_BYTE, /* hash type */
26862ac0c33Sjakob 	    RDATA_WF_BYTE, /* flags */
26962ac0c33Sjakob 	    RDATA_WF_SHORT, /* iterations */
27062ac0c33Sjakob 	    RDATA_WF_BINARYWITHLENGTH /* salt */ },
27162ac0c33Sjakob 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_SHORT, RDATA_ZF_HEX_LEN } },
27262ac0c33Sjakob 	/* 52 */
273d11a62c8Ssthen 	{ TYPE_TLSA, "TLSA", T_TLSA, 4, 4,
274d11a62c8Ssthen 	  { RDATA_WF_BYTE, /* usage */
275d11a62c8Ssthen 	    RDATA_WF_BYTE, /* selector */
276d11a62c8Ssthen 	    RDATA_WF_BYTE, /* matching type */
277d11a62c8Ssthen 	    RDATA_WF_BINARY }, /* certificate association data */
278d11a62c8Ssthen 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
27962ac0c33Sjakob 	/* 53 */
28018e77612Sflorian 	{ TYPE_SMIMEA, "SMIMEA", T_SMIMEA, 4, 4,
28118e77612Sflorian 	  { RDATA_WF_BYTE, /* usage */
28218e77612Sflorian 	    RDATA_WF_BYTE, /* selector */
28318e77612Sflorian 	    RDATA_WF_BYTE, /* matching type */
28418e77612Sflorian 	    RDATA_WF_BINARY }, /* certificate association data */
28518e77612Sflorian 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
28662ac0c33Sjakob 	/* 54 */
28762ac0c33Sjakob 	{ 54, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
288a302926fSbrad 	/* 55 - HIP [RFC 5205] */
28962ac0c33Sjakob 	{ 55, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
290a302926fSbrad 	/* 56 - NINFO */
29162ac0c33Sjakob 	{ 56, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
292a302926fSbrad 	/* 57 - RKEY */
29362ac0c33Sjakob 	{ 57, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
294a302926fSbrad 	/* 58 - TALINK */
29562ac0c33Sjakob 	{ 58, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
296a302926fSbrad 	/* 59 - CDS */
29703739794Sbrad 	{ TYPE_CDS, "CDS", T_CDS, 4, 4,
29803739794Sbrad 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
29903739794Sbrad 	  { RDATA_ZF_SHORT, RDATA_ZF_ALGORITHM, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
30003739794Sbrad 	/* 60 - CDNSKEY */
30103739794Sbrad 	{ TYPE_CDNSKEY, "CDNSKEY", T_CDNSKEY, 4, 4,
30203739794Sbrad 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
30303739794Sbrad 	  { RDATA_ZF_SHORT, RDATA_ZF_BYTE, RDATA_ZF_ALGORITHM,
30403739794Sbrad 	    RDATA_ZF_BASE64 } },
305c1e73312Sflorian 	/* 61 - OPENPGPKEY */
306c1e73312Sflorian 	{ TYPE_OPENPGPKEY, "OPENPGPKEY", T_OPENPGPKEY, 1, 1,
307c1e73312Sflorian 	  { RDATA_WF_BINARY }, { RDATA_ZF_BASE64 } },
308c1e73312Sflorian 	/* 62 - CSYNC */
309275a8d89Sflorian 	{ TYPE_CSYNC, "CSYNC", T_CSYNC, 3, 3, { RDATA_WF_LONG, RDATA_WF_SHORT,
310275a8d89Sflorian 	 RDATA_WF_BINARY }, { RDATA_ZF_LONG, RDATA_ZF_SHORT, RDATA_ZF_NSEC } },
311977db6e5Sflorian 	/* 63 - ZONEMD */
312977db6e5Sflorian 	{ TYPE_ZONEMD, "ZONEMD", T_ZONEMD, 4, 4,
313977db6e5Sflorian 	  { RDATA_WF_LONG, /* serial */
314977db6e5Sflorian 	    RDATA_WF_BYTE, /* scheme */
315977db6e5Sflorian 	    RDATA_WF_BYTE, /* hash Algorithm */
316977db6e5Sflorian 	    RDATA_WF_BINARY }, /* digest */
317977db6e5Sflorian 	  { RDATA_ZF_PERIOD, RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
318*063644e9Sflorian 	/* 64 - SVCB */
319*063644e9Sflorian 	{ TYPE_SVCB, "SVCB", T_SVCB, 2, MAXRDATALEN,
320*063644e9Sflorian 	  { RDATA_WF_SHORT                        /* SvcFieldPriority */
321*063644e9Sflorian 	  , RDATA_WF_UNCOMPRESSED_DNAME           /* SvcDomainName */
322*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM  /* SvcFieldValue */
323*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
324*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
325*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
326*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
327*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
328*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
329*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
330*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
331*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
332*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
333*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
334*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
335*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
336*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
337*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
338*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
339*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
340*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
341*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
342*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
343*063644e9Sflorian 	  },
344*063644e9Sflorian 	  { RDATA_ZF_SHORT   , RDATA_ZF_DNAME
345*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
346*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
347*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
348*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
349*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
350*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
351*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
352*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
353*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
354*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
355*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
356*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
357*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
358*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
359*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
360*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
361*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
362*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
363*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
364*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
365*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
366*063644e9Sflorian 	  } },
367*063644e9Sflorian 	/* 65 - HTTPS */
368*063644e9Sflorian 	{ TYPE_HTTPS, "HTTPS", T_HTTPS, 2, MAXRDATALEN,
369*063644e9Sflorian 	  { RDATA_WF_SHORT                        /* SvcFieldPriority */
370*063644e9Sflorian 	  , RDATA_WF_UNCOMPRESSED_DNAME           /* SvcDomainName */
371*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM  /* SvcFieldValue */
372*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
373*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
374*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
375*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
376*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
377*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
378*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
379*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
380*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
381*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
382*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
383*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
384*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
385*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
386*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
387*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
388*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
389*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
390*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
391*063644e9Sflorian 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
392*063644e9Sflorian 	  },
393*063644e9Sflorian 	  { RDATA_ZF_SHORT   , RDATA_ZF_DNAME
394*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
395*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
396*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
397*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
398*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
399*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
400*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
401*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
402*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
403*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
404*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
405*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
406*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
407*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
408*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
409*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
410*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
411*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
412*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
413*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
414*063644e9Sflorian 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
415*063644e9Sflorian 	  } },
41662ac0c33Sjakob 	/* 66 */
41762ac0c33Sjakob 	{ 66, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
41862ac0c33Sjakob 	/* 67 */
41962ac0c33Sjakob 	{ 67, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
42062ac0c33Sjakob 	/* 68 */
42162ac0c33Sjakob 	{ 68, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
42262ac0c33Sjakob 	/* 69 */
42362ac0c33Sjakob 	{ 69, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
42462ac0c33Sjakob 	/* 70 */
42562ac0c33Sjakob 	{ 70, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
42662ac0c33Sjakob 	/* 71 */
42762ac0c33Sjakob 	{ 71, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
42862ac0c33Sjakob 	/* 72 */
42962ac0c33Sjakob 	{ 72, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
43062ac0c33Sjakob 	/* 73 */
43162ac0c33Sjakob 	{ 73, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
43262ac0c33Sjakob 	/* 74 */
43362ac0c33Sjakob 	{ 74, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
43462ac0c33Sjakob 	/* 75 */
43562ac0c33Sjakob 	{ 75, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
43662ac0c33Sjakob 	/* 76 */
43762ac0c33Sjakob 	{ 76, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
43862ac0c33Sjakob 	/* 77 */
43962ac0c33Sjakob 	{ 77, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
44062ac0c33Sjakob 	/* 78 */
44162ac0c33Sjakob 	{ 78, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
44262ac0c33Sjakob 	/* 79 */
44362ac0c33Sjakob 	{ 79, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
44462ac0c33Sjakob 	/* 80 */
44562ac0c33Sjakob 	{ 80, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
44662ac0c33Sjakob 	/* 81 */
44762ac0c33Sjakob 	{ 81, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
44862ac0c33Sjakob 	/* 82 */
44962ac0c33Sjakob 	{ 82, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
45062ac0c33Sjakob 	/* 83 */
45162ac0c33Sjakob 	{ 83, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
45262ac0c33Sjakob 	/* 84 */
45362ac0c33Sjakob 	{ 84, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
45462ac0c33Sjakob 	/* 85 */
45562ac0c33Sjakob 	{ 85, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
45662ac0c33Sjakob 	/* 86 */
45762ac0c33Sjakob 	{ 86, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
45862ac0c33Sjakob 	/* 87 */
45962ac0c33Sjakob 	{ 87, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
46062ac0c33Sjakob 	/* 88 */
46162ac0c33Sjakob 	{ 88, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
46262ac0c33Sjakob 	/* 89 */
46362ac0c33Sjakob 	{ 89, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
46462ac0c33Sjakob 	/* 90 */
46562ac0c33Sjakob 	{ 90, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
46662ac0c33Sjakob 	/* 91 */
46762ac0c33Sjakob 	{ 91, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
46862ac0c33Sjakob 	/* 92 */
46962ac0c33Sjakob 	{ 92, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
47062ac0c33Sjakob 	/* 93 */
47162ac0c33Sjakob 	{ 93, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
47262ac0c33Sjakob 	/* 94 */
47362ac0c33Sjakob 	{ 94, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
47462ac0c33Sjakob 	/* 95 */
47562ac0c33Sjakob 	{ 95, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
47662ac0c33Sjakob 	/* 96 */
47762ac0c33Sjakob 	{ 96, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
47862ac0c33Sjakob 	/* 97 */
47962ac0c33Sjakob 	{ 97, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
48062ac0c33Sjakob 	/* 98 */
48162ac0c33Sjakob 	{ 98, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
48262ac0c33Sjakob 	/* 99 */
48362ac0c33Sjakob 	{ TYPE_SPF, "SPF", T_SPF, 1, MAXRDATALEN,
48462ac0c33Sjakob 	  { RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
48562ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
48662ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
48762ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
48862ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
48962ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
49062ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
49162ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
49262ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
49362ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
49462ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
49562ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
49662ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
49762ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
49862ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
49962ac0c33Sjakob 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT },
50062ac0c33Sjakob 	  { RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
50162ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
50262ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
50362ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
50462ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
50562ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
50662ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
50762ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
50862ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
50962ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
51062ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
51162ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
51262ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
51362ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
51462ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
51562ac0c33Sjakob 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT } },
516a302926fSbrad 	/* 100 - UINFO */
51775343be4Ssthen 	{ 100, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
518a302926fSbrad 	/* 101 - UID */
51975343be4Ssthen 	{ 101, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
520a302926fSbrad 	/* 102 - GID */
52175343be4Ssthen 	{ 102, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
522a302926fSbrad 	/* 103 - UNSPEC */
52375343be4Ssthen 	{ 103, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
52475343be4Ssthen 	/* 104 */
52575343be4Ssthen 	{ TYPE_NID, "NID", T_NID, 2, 2,
52675343be4Ssthen 	  { RDATA_WF_SHORT, RDATA_WF_ILNP64 },
52775343be4Ssthen 	  { RDATA_ZF_SHORT, RDATA_ZF_ILNP64 } },
52875343be4Ssthen 	/* 105 */
52975343be4Ssthen 	{ TYPE_L32, "L32", T_L32, 2, 2,
53075343be4Ssthen 	  { RDATA_WF_SHORT, RDATA_WF_A },
53175343be4Ssthen 	  { RDATA_ZF_SHORT, RDATA_ZF_A } },
53275343be4Ssthen 	/* 106 */
53375343be4Ssthen 	{ TYPE_L64, "L64", T_L64, 2, 2,
53475343be4Ssthen 	  { RDATA_WF_SHORT, RDATA_WF_ILNP64 },
53575343be4Ssthen 	  { RDATA_ZF_SHORT, RDATA_ZF_ILNP64 } },
53675343be4Ssthen 	/* 107 */
53775343be4Ssthen 	{ TYPE_LP, "LP", T_LP, 2, 2,
53875343be4Ssthen 	  { RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME },
53975343be4Ssthen 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
5409c620270Ssthen 	/* 108 */
5419c620270Ssthen 	{ TYPE_EUI48, "EUI48", T_EUI48, 1, 1,
5429c620270Ssthen 	  { RDATA_WF_EUI48 }, { RDATA_ZF_EUI48 } },
5439c620270Ssthen 	/* 109 */
5449c620270Ssthen 	{ TYPE_EUI64, "EUI64", T_EUI64, 1, 1,
5459c620270Ssthen 	  { RDATA_WF_EUI64 }, { RDATA_ZF_EUI64 } },
546a302926fSbrad 	/* 110 */
547a302926fSbrad 	{ 110, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
548a302926fSbrad 	/* 111 */
549a302926fSbrad 	{ 111, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
550a302926fSbrad 	/* 112 */
551a302926fSbrad 	{ 112, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
552a302926fSbrad 	/* 113 */
553a302926fSbrad 	{ 113, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
554a302926fSbrad 	/* 114 */
555a302926fSbrad 	{ 114, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
556a302926fSbrad 	/* 115 */
557a302926fSbrad 	{ 115, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
558a302926fSbrad 	/* 116 */
559a302926fSbrad 	{ 116, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
560a302926fSbrad 	/* 117 */
561a302926fSbrad 	{ 117, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
562a302926fSbrad 	/* 118 */
563a302926fSbrad 	{ 118, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
564a302926fSbrad 	/* 119 */
565a302926fSbrad 	{ 119, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
566a302926fSbrad 	/* 120 */
567a302926fSbrad 	{ 120, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
568a302926fSbrad 	/* 121 */
569a302926fSbrad 	{ 121, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
570a302926fSbrad 	/* 122 */
571a302926fSbrad 	{ 122, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
572a302926fSbrad 	/* 123 */
573a302926fSbrad 	{ 123, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
574a302926fSbrad 	/* 124 */
575a302926fSbrad 	{ 124, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
576a302926fSbrad 	/* 125 */
577a302926fSbrad 	{ 125, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
578a302926fSbrad 	/* 126 */
579a302926fSbrad 	{ 126, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
580a302926fSbrad 	/* 127 */
581a302926fSbrad 	{ 127, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
582a302926fSbrad 	/* 128 */
583a302926fSbrad 	{ 128, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
584a302926fSbrad 	/* 129 */
585a302926fSbrad 	{ 129, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
586a302926fSbrad 	/* 130 */
587a302926fSbrad 	{ 130, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
588a302926fSbrad 	/* 131 */
589a302926fSbrad 	{ 131, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
590a302926fSbrad 	/* 132 */
591a302926fSbrad 	{ 132, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
592a302926fSbrad 	/* 133 */
593a302926fSbrad 	{ 133, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
594a302926fSbrad 	/* 134 */
595a302926fSbrad 	{ 134, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
596a302926fSbrad 	/* 135 */
597a302926fSbrad 	{ 135, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
598a302926fSbrad 	/* 136 */
599a302926fSbrad 	{ 136, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
600a302926fSbrad 	/* 137 */
601a302926fSbrad 	{ 137, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
602a302926fSbrad 	/* 138 */
603a302926fSbrad 	{ 138, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
604a302926fSbrad 	/* 139 */
605a302926fSbrad 	{ 139, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
606a302926fSbrad 	/* 140 */
607a302926fSbrad 	{ 140, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
608a302926fSbrad 	/* 141 */
609a302926fSbrad 	{ 141, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
610a302926fSbrad 	/* 142 */
611a302926fSbrad 	{ 142, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
612a302926fSbrad 	/* 143 */
613a302926fSbrad 	{ 143, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
614a302926fSbrad 	/* 144 */
615a302926fSbrad 	{ 144, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
616a302926fSbrad 	/* 145 */
617a302926fSbrad 	{ 145, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
618a302926fSbrad 	/* 146 */
619a302926fSbrad 	{ 146, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
620a302926fSbrad 	/* 147 */
621a302926fSbrad 	{ 147, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
622a302926fSbrad 	/* 148 */
623a302926fSbrad 	{ 148, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
624a302926fSbrad 	/* 149 */
625a302926fSbrad 	{ 149, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
626a302926fSbrad 	/* 150 */
627a302926fSbrad 	{ 150, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
628a302926fSbrad 	/* 151 */
629a302926fSbrad 	{ 151, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
630a302926fSbrad 	/* 152 */
631a302926fSbrad 	{ 152, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
632a302926fSbrad 	/* 153 */
633a302926fSbrad 	{ 153, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
634a302926fSbrad 	/* 154 */
635a302926fSbrad 	{ 154, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
636a302926fSbrad 	/* 155 */
637a302926fSbrad 	{ 155, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
638a302926fSbrad 	/* 156 */
639a302926fSbrad 	{ 156, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
640a302926fSbrad 	/* 157 */
641a302926fSbrad 	{ 157, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
642a302926fSbrad 	/* 158 */
643a302926fSbrad 	{ 158, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
644a302926fSbrad 	/* 159 */
645a302926fSbrad 	{ 159, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
646a302926fSbrad 	/* 160 */
647a302926fSbrad 	{ 160, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
648a302926fSbrad 	/* 161 */
649a302926fSbrad 	{ 161, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
650a302926fSbrad 	/* 162 */
651a302926fSbrad 	{ 162, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
652a302926fSbrad 	/* 163 */
653a302926fSbrad 	{ 163, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
654a302926fSbrad 	/* 164 */
655a302926fSbrad 	{ 164, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
656a302926fSbrad 	/* 165 */
657a302926fSbrad 	{ 165, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
658a302926fSbrad 	/* 166 */
659a302926fSbrad 	{ 166, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
660a302926fSbrad 	/* 167 */
661a302926fSbrad 	{ 167, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
662a302926fSbrad 	/* 168 */
663a302926fSbrad 	{ 168, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
664a302926fSbrad 	/* 169 */
665a302926fSbrad 	{ 169, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
666a302926fSbrad 	/* 170 */
667a302926fSbrad 	{ 170, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
668a302926fSbrad 	/* 171 */
669a302926fSbrad 	{ 171, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
670a302926fSbrad 	/* 172 */
671a302926fSbrad 	{ 172, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
672a302926fSbrad 	/* 173 */
673a302926fSbrad 	{ 173, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
674a302926fSbrad 	/* 174 */
675a302926fSbrad 	{ 174, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
676a302926fSbrad 	/* 175 */
677a302926fSbrad 	{ 175, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
678a302926fSbrad 	/* 176 */
679a302926fSbrad 	{ 176, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
680a302926fSbrad 	/* 177 */
681a302926fSbrad 	{ 177, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
682a302926fSbrad 	/* 178 */
683a302926fSbrad 	{ 178, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
684a302926fSbrad 	/* 179 */
685a302926fSbrad 	{ 179, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
686a302926fSbrad 	/* 180 */
687a302926fSbrad 	{ 180, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
688a302926fSbrad 	/* 181 */
689a302926fSbrad 	{ 181, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
690a302926fSbrad 	/* 182 */
691a302926fSbrad 	{ 182, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
692a302926fSbrad 	/* 183 */
693a302926fSbrad 	{ 183, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
694a302926fSbrad 	/* 184 */
695a302926fSbrad 	{ 184, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
696a302926fSbrad 	/* 185 */
697a302926fSbrad 	{ 185, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
698a302926fSbrad 	/* 186 */
699a302926fSbrad 	{ 186, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
700a302926fSbrad 	/* 187 */
701a302926fSbrad 	{ 187, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
702a302926fSbrad 	/* 188 */
703a302926fSbrad 	{ 188, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
704a302926fSbrad 	/* 189 */
705a302926fSbrad 	{ 189, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
706a302926fSbrad 	/* 190 */
707a302926fSbrad 	{ 190, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
708a302926fSbrad 	/* 191 */
709a302926fSbrad 	{ 191, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
710a302926fSbrad 	/* 192 */
711a302926fSbrad 	{ 192, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
712a302926fSbrad 	/* 193 */
713a302926fSbrad 	{ 193, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
714a302926fSbrad 	/* 194 */
715a302926fSbrad 	{ 194, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
716a302926fSbrad 	/* 195 */
717a302926fSbrad 	{ 195, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
718a302926fSbrad 	/* 196 */
719a302926fSbrad 	{ 196, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
720a302926fSbrad 	/* 197 */
721a302926fSbrad 	{ 197, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
722a302926fSbrad 	/* 198 */
723a302926fSbrad 	{ 198, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
724a302926fSbrad 	/* 199 */
725a302926fSbrad 	{ 199, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
726a302926fSbrad 	/* 200 */
727a302926fSbrad 	{ 200, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
728a302926fSbrad 	/* 201 */
729a302926fSbrad 	{ 201, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
730a302926fSbrad 	/* 202 */
731a302926fSbrad 	{ 202, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
732a302926fSbrad 	/* 203 */
733a302926fSbrad 	{ 203, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
734a302926fSbrad 	/* 204 */
735a302926fSbrad 	{ 204, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
736a302926fSbrad 	/* 205 */
737a302926fSbrad 	{ 205, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
738a302926fSbrad 	/* 206 */
739a302926fSbrad 	{ 206, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
740a302926fSbrad 	/* 207 */
741a302926fSbrad 	{ 207, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
742a302926fSbrad 	/* 208 */
743a302926fSbrad 	{ 208, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
744a302926fSbrad 	/* 209 */
745a302926fSbrad 	{ 209, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
746a302926fSbrad 	/* 210 */
747a302926fSbrad 	{ 210, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
748a302926fSbrad 	/* 211 */
749a302926fSbrad 	{ 211, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
750a302926fSbrad 	/* 212 */
751a302926fSbrad 	{ 212, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
752a302926fSbrad 	/* 213 */
753a302926fSbrad 	{ 213, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
754a302926fSbrad 	/* 214 */
755a302926fSbrad 	{ 214, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
756a302926fSbrad 	/* 215 */
757a302926fSbrad 	{ 215, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
758a302926fSbrad 	/* 216 */
759a302926fSbrad 	{ 216, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
760a302926fSbrad 	/* 217 */
761a302926fSbrad 	{ 217, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
762a302926fSbrad 	/* 218 */
763a302926fSbrad 	{ 218, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
764a302926fSbrad 	/* 219 */
765a302926fSbrad 	{ 219, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
766a302926fSbrad 	/* 220 */
767a302926fSbrad 	{ 220, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
768a302926fSbrad 	/* 221 */
769a302926fSbrad 	{ 221, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
770a302926fSbrad 	/* 222 */
771a302926fSbrad 	{ 222, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
772a302926fSbrad 	/* 223 */
773a302926fSbrad 	{ 223, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
774a302926fSbrad 	/* 224 */
775a302926fSbrad 	{ 224, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
776a302926fSbrad 	/* 225 */
777a302926fSbrad 	{ 225, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
778a302926fSbrad 	/* 226 */
779a302926fSbrad 	{ 226, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
780a302926fSbrad 	/* 227 */
781a302926fSbrad 	{ 227, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
782a302926fSbrad 	/* 228 */
783a302926fSbrad 	{ 228, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
784a302926fSbrad 	/* 229 */
785a302926fSbrad 	{ 229, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
786a302926fSbrad 	/* 230 */
787a302926fSbrad 	{ 230, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
788a302926fSbrad 	/* 231 */
789a302926fSbrad 	{ 231, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
790a302926fSbrad 	/* 232 */
791a302926fSbrad 	{ 232, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
792a302926fSbrad 	/* 233 */
793a302926fSbrad 	{ 233, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
794a302926fSbrad 	/* 234 */
795a302926fSbrad 	{ 234, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
796a302926fSbrad 	/* 235 */
797a302926fSbrad 	{ 235, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
798a302926fSbrad 	/* 236 */
799a302926fSbrad 	{ 236, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
800a302926fSbrad 	/* 237 */
801a302926fSbrad 	{ 237, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
802a302926fSbrad 	/* 238 */
803a302926fSbrad 	{ 238, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
804a302926fSbrad 	/* 239 */
805a302926fSbrad 	{ 239, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
806a302926fSbrad 	/* 240 */
807a302926fSbrad 	{ 240, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
808a302926fSbrad 	/* 241 */
809a302926fSbrad 	{ 241, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
810a302926fSbrad 	/* 242 */
811a302926fSbrad 	{ 242, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
812a302926fSbrad 	/* 243 */
813a302926fSbrad 	{ 243, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
814a302926fSbrad 	/* 244 */
815a302926fSbrad 	{ 244, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
816a302926fSbrad 	/* 245 */
817a302926fSbrad 	{ 245, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
818a302926fSbrad 	/* 246 */
819a302926fSbrad 	{ 246, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
820a302926fSbrad 	/* 247 */
821a302926fSbrad 	{ 247, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
822a302926fSbrad 	/* 248 */
823a302926fSbrad 	{ 248, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
824a302926fSbrad 	/* 249 - TKEY [RFC 2930] */
825a302926fSbrad 	{ 249, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
826a302926fSbrad 	/* 250 - TSIG [RFC 2845] */
827a302926fSbrad 	{ 250, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
828a302926fSbrad 	/* 251 - IXFR [RFC 1995] */
829a302926fSbrad 	{ 251, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
830a302926fSbrad 	/* 252 - AXFR [RFC 1035, RFC 5936] */
831a302926fSbrad 	{ 252, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
832a302926fSbrad 	/* 253 - MAILB [RFC 1035] */
833a302926fSbrad 	{ 253, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
834a302926fSbrad 	/* 254 - MAILA [RFC 1035] */
835a302926fSbrad 	{ 254, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
836a302926fSbrad 	/* 255 - * [RFC 1035, RFC 6895] */
837a302926fSbrad 	{ 255, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
838a302926fSbrad 	/* 256 - URI */
839e3d8a0a5Ssthen 	{ TYPE_URI, "URI", T_URI, 3, 3,
840e3d8a0a5Ssthen 	  { RDATA_WF_SHORT, RDATA_WF_SHORT, RDATA_WF_LONG_TEXT },
841e3d8a0a5Ssthen 	  { RDATA_ZF_SHORT, RDATA_ZF_SHORT, RDATA_ZF_LONG_TEXT } },
842a302926fSbrad 	/* 257 - CAA [RFC 6844] */
843a302926fSbrad 	{ TYPE_CAA, "CAA", T_CAA, 3, 3,
844a302926fSbrad 	  { RDATA_WF_BYTE, RDATA_WF_TEXT, RDATA_WF_LONG_TEXT },
845a302926fSbrad 	  { RDATA_ZF_BYTE, RDATA_ZF_TAG, RDATA_ZF_LONG_TEXT } },
846fb800cb5Sflorian 	/* 258 - AVC */
847fb800cb5Sflorian 	{ TYPE_AVC, "AVC", T_AVC, 1, 1,
848fb800cb5Sflorian 	  { RDATA_WF_TEXTS },
849fb800cb5Sflorian 	  { RDATA_ZF_TEXTS } },
8509c620270Ssthen 
851a302926fSbrad 	/* 32768 - TA */
85262ac0c33Sjakob 	/* 32769 */
85362ac0c33Sjakob 	{ TYPE_DLV, "DLV", T_DLV, 4, 4,
85462ac0c33Sjakob 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
85562ac0c33Sjakob 	  { RDATA_ZF_SHORT, RDATA_ZF_ALGORITHM, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
85662ac0c33Sjakob };
85762ac0c33Sjakob 
85862ac0c33Sjakob rrtype_descriptor_type *
rrtype_descriptor_by_type(uint16_t type)85962ac0c33Sjakob rrtype_descriptor_by_type(uint16_t type)
86062ac0c33Sjakob {
86162ac0c33Sjakob 	if (type < RRTYPE_DESCRIPTORS_LENGTH)
86262ac0c33Sjakob 		return &rrtype_descriptors[type];
86362ac0c33Sjakob 	else if (type == TYPE_DLV)
86462ac0c33Sjakob 		return &rrtype_descriptors[PSEUDO_TYPE_DLV];
86562ac0c33Sjakob 	return &rrtype_descriptors[0];
86662ac0c33Sjakob }
86762ac0c33Sjakob 
86862ac0c33Sjakob rrtype_descriptor_type *
rrtype_descriptor_by_name(const char * name)86962ac0c33Sjakob rrtype_descriptor_by_name(const char *name)
87062ac0c33Sjakob {
87162ac0c33Sjakob 	int i;
87262ac0c33Sjakob 
87362ac0c33Sjakob 	for (i = 0; i < RRTYPE_DESCRIPTORS_LENGTH; ++i) {
87462ac0c33Sjakob 		if (rrtype_descriptors[i].name
87562ac0c33Sjakob 		    && strcasecmp(rrtype_descriptors[i].name, name) == 0)
87662ac0c33Sjakob 		{
87762ac0c33Sjakob 			return &rrtype_descriptors[i];
87862ac0c33Sjakob 		}
87962ac0c33Sjakob 	}
88062ac0c33Sjakob 
88162ac0c33Sjakob 	if (rrtype_descriptors[PSEUDO_TYPE_DLV].name
88262ac0c33Sjakob 	    && strcasecmp(rrtype_descriptors[PSEUDO_TYPE_DLV].name, name) == 0)
88362ac0c33Sjakob 	{
88462ac0c33Sjakob 		return &rrtype_descriptors[PSEUDO_TYPE_DLV];
88562ac0c33Sjakob 	}
88662ac0c33Sjakob 
88762ac0c33Sjakob 	return NULL;
88862ac0c33Sjakob }
88962ac0c33Sjakob 
89062ac0c33Sjakob const char *
rrtype_to_string(uint16_t rrtype)89162ac0c33Sjakob rrtype_to_string(uint16_t rrtype)
89262ac0c33Sjakob {
89362ac0c33Sjakob 	static char buf[20];
89462ac0c33Sjakob 	rrtype_descriptor_type *descriptor = rrtype_descriptor_by_type(rrtype);
89562ac0c33Sjakob 	if (descriptor->name) {
89662ac0c33Sjakob 		return descriptor->name;
89762ac0c33Sjakob 	} else {
89862ac0c33Sjakob 		snprintf(buf, sizeof(buf), "TYPE%d", (int) rrtype);
89962ac0c33Sjakob 		return buf;
90062ac0c33Sjakob 	}
90162ac0c33Sjakob }
90262ac0c33Sjakob 
90362ac0c33Sjakob /*
90462ac0c33Sjakob  * Lookup the type in the ztypes lookup table.  If not found, check if
90562ac0c33Sjakob  * the type uses the "TYPExxx" notation for unknown types.
90662ac0c33Sjakob  *
90762ac0c33Sjakob  * Return 0 if no type matches.
90862ac0c33Sjakob  */
90962ac0c33Sjakob uint16_t
rrtype_from_string(const char * name)91062ac0c33Sjakob rrtype_from_string(const char *name)
91162ac0c33Sjakob {
91262ac0c33Sjakob         char *end;
91362ac0c33Sjakob         long rrtype;
91462ac0c33Sjakob 	rrtype_descriptor_type *entry;
91562ac0c33Sjakob 
916533110e2Sbrad 	/* Because this routine is called during zone parse for every record,
9172fd875a4Ssthen 	 * we optimise for frequently occurring records.
918533110e2Sbrad 	 * Also, we optimise for 'IN' and numbers are not rr types, because
919533110e2Sbrad 	 * during parse this routine is called for every rr class and TTL
920533110e2Sbrad 	 * to determine that it is not an RR type */
921533110e2Sbrad 	switch(name[0]) {
922533110e2Sbrad 	case 'r':
923533110e2Sbrad 	case 'R':
924533110e2Sbrad 		if(strcasecmp(name+1, "RSIG") == 0) return TYPE_RRSIG;
925533110e2Sbrad 		break;
926533110e2Sbrad 	case 'n':
927533110e2Sbrad 	case 'N':
928533110e2Sbrad 		switch(name[1]) {
929533110e2Sbrad 		case 's':
930533110e2Sbrad 		case 'S':
931533110e2Sbrad 			switch(name[2]) {
932533110e2Sbrad 			case 0: return TYPE_NS;
933533110e2Sbrad 			case 'e':
934533110e2Sbrad 			case 'E':
935533110e2Sbrad 				if(strcasecmp(name+2, "EC") == 0) return TYPE_NSEC;
936533110e2Sbrad 				if(strcasecmp(name+2, "EC3") == 0) return TYPE_NSEC3;
937533110e2Sbrad 				if(strcasecmp(name+2, "EC3PARAM") == 0) return TYPE_NSEC3PARAM;
938533110e2Sbrad 				break;
939533110e2Sbrad 			}
940533110e2Sbrad 			break;
941533110e2Sbrad 		}
942533110e2Sbrad 		break;
943533110e2Sbrad 	case 'd':
944533110e2Sbrad 	case 'D':
945533110e2Sbrad 		switch(name[1]) {
946533110e2Sbrad 		case 's':
947533110e2Sbrad 		case 'S':
948533110e2Sbrad 			if(name[2]==0) return TYPE_DS;
949533110e2Sbrad 			break;
950533110e2Sbrad 		case 'n':
951533110e2Sbrad 		case 'N':
952533110e2Sbrad 			if(strcasecmp(name+2, "SKEY") == 0) return TYPE_DNSKEY;
953533110e2Sbrad 			break;
954533110e2Sbrad 		}
955533110e2Sbrad 		break;
956533110e2Sbrad 	case 'a':
957533110e2Sbrad 	case 'A':
958533110e2Sbrad 		switch(name[1]) {
959533110e2Sbrad 		case 0:	return TYPE_A;
960533110e2Sbrad 		case 'a':
961533110e2Sbrad 		case 'A':
962533110e2Sbrad 			if(strcasecmp(name+2, "AA") == 0) return TYPE_AAAA;
963533110e2Sbrad 			break;
964533110e2Sbrad 		}
965533110e2Sbrad 		break;
966533110e2Sbrad 	case 's':
967533110e2Sbrad 	case 'S':
968533110e2Sbrad 		if(strcasecmp(name+1, "OA") == 0) return TYPE_SOA;
969533110e2Sbrad 		break;
970533110e2Sbrad 	case 't':
971533110e2Sbrad 	case 'T':
972533110e2Sbrad 		if(strcasecmp(name+1, "XT") == 0) return TYPE_TXT;
973533110e2Sbrad 		break;
974533110e2Sbrad 	case '0':
975533110e2Sbrad 	case '1':
976533110e2Sbrad 	case '2':
977533110e2Sbrad 	case '3':
978533110e2Sbrad 	case '4':
979533110e2Sbrad 	case '5':
980533110e2Sbrad 	case '6':
981533110e2Sbrad 	case '7':
982533110e2Sbrad 	case '8':
983533110e2Sbrad 	case '9':
984533110e2Sbrad 		return 0; /* no RR types start with 0-9 */
985533110e2Sbrad 	case 'i':
986533110e2Sbrad 	case 'I':
987533110e2Sbrad 		switch(name[1]) {
988533110e2Sbrad 		case 'n':
989533110e2Sbrad 		case 'N':
990533110e2Sbrad 			return 0; /* 'IN' is a class not a type */
991533110e2Sbrad 		}
992533110e2Sbrad 		break;
993533110e2Sbrad 	}
994533110e2Sbrad 
99562ac0c33Sjakob 	entry = rrtype_descriptor_by_name(name);
99662ac0c33Sjakob 	if (entry) {
99762ac0c33Sjakob 		return entry->type;
99862ac0c33Sjakob 	}
99962ac0c33Sjakob 
100062ac0c33Sjakob 	if (strlen(name) < 5)
100162ac0c33Sjakob 		return 0;
100262ac0c33Sjakob 
100362ac0c33Sjakob 	if (strncasecmp(name, "TYPE", 4) != 0)
100462ac0c33Sjakob 		return 0;
100562ac0c33Sjakob 
100682cafdebSmillert 	if (!isdigit((unsigned char)name[4]))
100762ac0c33Sjakob 		return 0;
100862ac0c33Sjakob 
100962ac0c33Sjakob 	/* The rest from the string must be a number.  */
101062ac0c33Sjakob 	rrtype = strtol(name + 4, &end, 10);
101162ac0c33Sjakob 	if (*end != '\0')
101262ac0c33Sjakob 		return 0;
101362ac0c33Sjakob 	if (rrtype < 0 || rrtype > 65535L)
101462ac0c33Sjakob 		return 0;
101562ac0c33Sjakob 
101662ac0c33Sjakob         return (uint16_t) rrtype;
101762ac0c33Sjakob }
101862ac0c33Sjakob 
101962ac0c33Sjakob const char *
rrclass_to_string(uint16_t rrclass)102062ac0c33Sjakob rrclass_to_string(uint16_t rrclass)
102162ac0c33Sjakob {
102262ac0c33Sjakob 	static char buf[20];
102362ac0c33Sjakob 	lookup_table_type *entry = lookup_by_id(dns_rrclasses, rrclass);
102462ac0c33Sjakob 	if (entry) {
102562ac0c33Sjakob 		assert(strlen(entry->name) < sizeof(buf));
1026e2b41070Schl 		strlcpy(buf, entry->name, sizeof(buf));
102762ac0c33Sjakob 	} else {
102862ac0c33Sjakob 		snprintf(buf, sizeof(buf), "CLASS%d", (int) rrclass);
102962ac0c33Sjakob 	}
103062ac0c33Sjakob 	return buf;
103162ac0c33Sjakob }
103262ac0c33Sjakob 
103362ac0c33Sjakob uint16_t
rrclass_from_string(const char * name)103462ac0c33Sjakob rrclass_from_string(const char *name)
103562ac0c33Sjakob {
103662ac0c33Sjakob         char *end;
103762ac0c33Sjakob         long rrclass;
103862ac0c33Sjakob 	lookup_table_type *entry;
103962ac0c33Sjakob 
104062ac0c33Sjakob 	entry = lookup_by_name(dns_rrclasses, name);
104162ac0c33Sjakob 	if (entry) {
104262ac0c33Sjakob 		return (uint16_t) entry->id;
104362ac0c33Sjakob 	}
104462ac0c33Sjakob 
104562ac0c33Sjakob 	if (strlen(name) < 6)
104662ac0c33Sjakob 		return 0;
104762ac0c33Sjakob 
104862ac0c33Sjakob 	if (strncasecmp(name, "CLASS", 5) != 0)
104962ac0c33Sjakob 		return 0;
105062ac0c33Sjakob 
105182cafdebSmillert 	if (!isdigit((unsigned char)name[5]))
105262ac0c33Sjakob 		return 0;
105362ac0c33Sjakob 
105462ac0c33Sjakob 	/* The rest from the string must be a number.  */
105562ac0c33Sjakob 	rrclass = strtol(name + 5, &end, 10);
105662ac0c33Sjakob 	if (*end != '\0')
105762ac0c33Sjakob 		return 0;
105862ac0c33Sjakob 	if (rrclass < 0 || rrclass > 65535L)
105962ac0c33Sjakob 		return 0;
106062ac0c33Sjakob 
106162ac0c33Sjakob 	return (uint16_t) rrclass;
106262ac0c33Sjakob }
1063