Skip to content
Snippets Groups Projects
Commit a00956af authored by Jan Kadlec's avatar Jan Kadlec
Browse files

Made a copy of descriptors in zoneparser folder.

Removed tokens from descriptors in dnslib.
parent 9aa02d96
No related branches found
No related tags found
No related merge requests found
......@@ -8,9 +8,6 @@
//#include "descriptor.h"
#include "dnslib.h"
/* TODO this has to be removed - move tokens to separate file */
#include "zoneparser.h"
#include "zparser.h"
enum desclen { DNSLIB_RRTYPE_DESCRIPTORS_LENGTH = 32770 }; // used to be 101
......@@ -25,56 +22,56 @@ static dnslib_lookup_table_t dns_rrclasses[] = {
static dnslib_rrtype_descriptor_t
dnslib_rrtype_descriptors[DNSLIB_RRTYPE_DESCRIPTORS_LENGTH] = {
/* 0 */
{ 0, 0, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
{ 0, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
/* 1 */
{ DNSLIB_RRTYPE_A, T_A, "A", 1, { DNSLIB_RDATA_WF_A }, true },
{ DNSLIB_RRTYPE_A, "A", 1, { DNSLIB_RDATA_WF_A }, true },
/* 2 */
{ DNSLIB_RRTYPE_NS, T_NS, "NS", 1,
{ DNSLIB_RRTYPE_NS, "NS", 1,
{ DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 3 */
{ DNSLIB_RRTYPE_MD, T_MD, "MD", 1,
{ DNSLIB_RRTYPE_MD, "MD", 1,
{ DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 4 */
{ DNSLIB_RRTYPE_MF, T_MF, "MF", 1,
{ DNSLIB_RRTYPE_MF, "MF", 1,
{ DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 5 */
{ DNSLIB_RRTYPE_CNAME, T_CNAME, "CNAME", 1,
{ DNSLIB_RRTYPE_CNAME, "CNAME", 1,
{ DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 6 */
{ DNSLIB_RRTYPE_SOA, T_SOA, "SOA", 7,
{ DNSLIB_RRTYPE_SOA, "SOA", 7,
{ DNSLIB_RDATA_WF_COMPRESSED_DNAME, DNSLIB_RDATA_WF_COMPRESSED_DNAME,
DNSLIB_RDATA_WF_LONG, DNSLIB_RDATA_WF_LONG, DNSLIB_RDATA_WF_LONG,
DNSLIB_RDATA_WF_LONG, DNSLIB_RDATA_WF_LONG }, true },
/* 7 */
{ DNSLIB_RRTYPE_MB, T_MB, "MB", 1,
{ DNSLIB_RRTYPE_MB, "MB", 1,
{ DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 8 */
{ DNSLIB_RRTYPE_MG, T_MG, "MG", 1,
{ DNSLIB_RRTYPE_MG, "MG", 1,
{ DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 9 */
{ DNSLIB_RRTYPE_MR, T_MR, "MR", 1,
{ DNSLIB_RRTYPE_MR, "MR", 1,
{ DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 10 */
{ DNSLIB_RRTYPE_NULL, T_NULL, NULL, 1,
{ DNSLIB_RRTYPE_NULL, NULL, 1,
{ DNSLIB_RDATA_WF_BINARY }, true },
/* 11 */
{ DNSLIB_RRTYPE_WKS, T_WKS, "WKS", 2,
{ DNSLIB_RRTYPE_WKS, "WKS", 2,
{ DNSLIB_RDATA_WF_A, DNSLIB_RDATA_WF_BINARY }, true },
/* 12 */
{ DNSLIB_RRTYPE_PTR, T_PTR, "PTR", 1,
{ DNSLIB_RRTYPE_PTR, "PTR", 1,
{ DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 13 */
{ DNSLIB_RRTYPE_HINFO, T_HINFO, "HINFO", 2,
{ DNSLIB_RRTYPE_HINFO, "HINFO", 2,
{ DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT }, true },
/* 14 */
{ DNSLIB_RRTYPE_MINFO, T_MINFO, "MINFO", 2,
{ DNSLIB_RRTYPE_MINFO, "MINFO", 2,
{ DNSLIB_RDATA_WF_COMPRESSED_DNAME,
DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 15 */
{ DNSLIB_RRTYPE_MX, T_MX, "MX", 2,
{ DNSLIB_RRTYPE_MX, "MX", 2,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 16 */ /* This is obscure, but I guess there's no other way */
{ DNSLIB_RRTYPE_TXT, T_TXT, "TXT", DNSLIB_MAX_RDATA_ITEMS,
{ DNSLIB_RRTYPE_TXT, "TXT", DNSLIB_MAX_RDATA_ITEMS,
{ DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT,
DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT,
DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT,
......@@ -108,89 +105,89 @@ static dnslib_rrtype_descriptor_t
DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT,
DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT }, false },
/* 17 */
{ DNSLIB_RRTYPE_RP, T_RP, "RP", 2,
{ DNSLIB_RRTYPE_RP, "RP", 2,
{ DNSLIB_RDATA_WF_COMPRESSED_DNAME,
DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 18 */
{ DNSLIB_RRTYPE_AFSDB, T_AFSDB, "AFSDB", 2,
{ DNSLIB_RRTYPE_AFSDB, "AFSDB", 2,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 19 */
{ DNSLIB_RRTYPE_X25, T_X25, "X25", 1,
{ DNSLIB_RRTYPE_X25, "X25", 1,
{ DNSLIB_RDATA_WF_TEXT }, true },
/* 20 */
{ DNSLIB_RRTYPE_ISDN, T_ISDN, "ISDN", 2,
{ DNSLIB_RRTYPE_ISDN, "ISDN", 2,
{ DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT }, false },
/* 21 */
{ DNSLIB_RRTYPE_RT, T_RT, "RT", 2,
{ DNSLIB_RRTYPE_RT, "RT", 2,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_COMPRESSED_DNAME }, true },
/* 22 */
{ DNSLIB_RRTYPE_NSAP, T_NSAP, "NSAP", 1,
{ DNSLIB_RRTYPE_NSAP, "NSAP", 1,
{ DNSLIB_RDATA_WF_BINARY }, true },
/* 23 */
{ 23, 0, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
{ 23, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
/* 24 */
{ DNSLIB_RRTYPE_SIG, T_SIG, "SIG", 9,
{ DNSLIB_RRTYPE_SIG, "SIG", 9,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_BYTE, DNSLIB_RDATA_WF_BYTE,
DNSLIB_RDATA_WF_LONG, DNSLIB_RDATA_WF_LONG, DNSLIB_RDATA_WF_LONG,
DNSLIB_RDATA_WF_SHORT,DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME,
DNSLIB_RDATA_WF_BINARY }, true },
/* 25 */
{ DNSLIB_RRTYPE_KEY, T_KEY, "KEY", 4,
{ DNSLIB_RRTYPE_KEY, "KEY", 4,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_BYTE,
DNSLIB_RDATA_WF_BYTE, DNSLIB_RDATA_WF_BINARY }, true },
/* 26 */
{ DNSLIB_RRTYPE_PX, T_PX, "PX", 3,
{ DNSLIB_RRTYPE_PX, "PX", 3,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME,
DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 27 */
{ 27, 0, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
{ 27, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
/* 28 */
{ DNSLIB_RRTYPE_AAAA, T_AAAA, "AAAA", 1,
{ DNSLIB_RRTYPE_AAAA, "AAAA", 1,
{ DNSLIB_RDATA_WF_AAAA }, true },
/* 29 */
{ DNSLIB_RRTYPE_LOC, T_LOC, "LOC", 1,
{ DNSLIB_RRTYPE_LOC, "LOC", 1,
{ DNSLIB_RDATA_WF_BINARY }, true },
/* 30 */
{ DNSLIB_RRTYPE_NXT, T_NXT, "NXT", 2,
{ DNSLIB_RRTYPE_NXT, "NXT", 2,
{ DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME,
DNSLIB_RDATA_WF_BINARY }, true },
/* 31 */
{ 31, 0, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
{ 31, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
/* 32 */
{ 32, 0, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
{ 32, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
/* 33 */
{ DNSLIB_RRTYPE_SRV, T_SRV, "SRV", 4,
{ DNSLIB_RRTYPE_SRV, "SRV", 4,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_SHORT,
DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME },
true },
/* 34 */
{ 34, 0, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
{ 34, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
/* 35 */
{ DNSLIB_RRTYPE_NAPTR, T_NAPTR, "NAPTR", 6,
{ DNSLIB_RRTYPE_NAPTR, "NAPTR", 6,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_TEXT,
DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT,
DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 36 */
{ DNSLIB_RRTYPE_KX, T_KX, "KX", 2,
{ DNSLIB_RRTYPE_KX, "KX", 2,
{ DNSLIB_RDATA_WF_SHORT,
DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 37 */
{ DNSLIB_RRTYPE_CERT, T_CERT, "CERT", 4,
{ DNSLIB_RRTYPE_CERT, "CERT", 4,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_SHORT,
DNSLIB_RDATA_WF_BYTE, DNSLIB_RDATA_WF_BINARY }, true },
/* 38 */
{ DNSLIB_RRTYPE_A6, T_A6, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
{ DNSLIB_RRTYPE_A6, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
/* 39 */
{ DNSLIB_RRTYPE_DNAME, T_DNAME, "DNAME", 1,
{ DNSLIB_RRTYPE_DNAME, "DNAME", 1,
{ DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 40 */
{ 40, 0, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
{ 40, NULL, 1, { DNSLIB_RDATA_WF_BINARY }, true },
/* 41 */
/* OPT has its parser token, but should never be in zone file... */
{ DNSLIB_RRTYPE_OPT, T_OPT, "OPT", 1,
{ DNSLIB_RRTYPE_OPT, "OPT", 1,
{ DNSLIB_RDATA_WF_BINARY }, true },
/* 42 */
{ DNSLIB_RRTYPE_APL, T_APL, "APL", DNSLIB_MAX_RDATA_ITEMS,
{ DNSLIB_RRTYPE_APL, "APL", DNSLIB_MAX_RDATA_ITEMS,
{ DNSLIB_RDATA_WF_APL, DNSLIB_RDATA_WF_APL,
DNSLIB_RDATA_WF_APL, DNSLIB_RDATA_WF_APL,
DNSLIB_RDATA_WF_APL, DNSLIB_RDATA_WF_APL,
......@@ -224,36 +221,36 @@ static dnslib_rrtype_descriptor_t
DNSLIB_RDATA_WF_APL, DNSLIB_RDATA_WF_APL,
DNSLIB_RDATA_WF_APL, DNSLIB_RDATA_WF_APL }, false },
/* 43 */
{ DNSLIB_RRTYPE_DS, T_DS, "DS", 4,
{ DNSLIB_RRTYPE_DS, "DS", 4,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_BYTE,
DNSLIB_RDATA_WF_BYTE, DNSLIB_RDATA_WF_BINARY }, true },
/* 44 */
{ DNSLIB_RRTYPE_SSHFP, T_SSHFP, "SSHFP", 3,
{ DNSLIB_RRTYPE_SSHFP, "SSHFP", 3,
{ DNSLIB_RDATA_WF_BYTE, DNSLIB_RDATA_WF_BYTE,
DNSLIB_RDATA_WF_BINARY }, true },
/* 45 */
{ DNSLIB_RRTYPE_IPSECKEY, T_IPSECKEY, "IPSECKEY", 5,
{ DNSLIB_RRTYPE_IPSECKEY, "IPSECKEY", 5,
{ DNSLIB_RDATA_WF_BYTE, DNSLIB_RDATA_WF_BYTE,
DNSLIB_RDATA_WF_BYTE, DNSLIB_RDATA_WF_IPSECGATEWAY,
DNSLIB_RDATA_WF_BINARY }, false },
/* 46 */
{ DNSLIB_RRTYPE_RRSIG, T_RRSIG, "RRSIG", 9,
{ DNSLIB_RRTYPE_RRSIG, "RRSIG", 9,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_BYTE,
DNSLIB_RDATA_WF_BYTE, DNSLIB_RDATA_WF_LONG,
DNSLIB_RDATA_WF_LONG, DNSLIB_RDATA_WF_LONG,
DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_BINARY,
DNSLIB_RDATA_WF_BINARY }, true },
/* 47 */
{ DNSLIB_RRTYPE_NSEC, T_NSEC, "NSEC", 2,
{ DNSLIB_RRTYPE_NSEC, "NSEC", 2,
{ DNSLIB_RDATA_WF_BINARY, DNSLIB_RDATA_WF_BINARY }, true },
/* 48 */
{ DNSLIB_RRTYPE_DNSKEY, T_DNSKEY, "DNSKEY", 4,
{ DNSLIB_RRTYPE_DNSKEY, "DNSKEY", 4,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_BYTE,
DNSLIB_RDATA_WF_BYTE, DNSLIB_RDATA_WF_BINARY }, true },
/* 49 */
{ DNSLIB_RRTYPE_DHCID, T_DHCID, "DHCID", 1, { DNSLIB_RDATA_WF_BINARY }, true },
{ DNSLIB_RRTYPE_DHCID, "DHCID", 1, { DNSLIB_RDATA_WF_BINARY }, true },
/* 50 */
{ DNSLIB_RRTYPE_NSEC3, T_NSEC3, "NSEC3", 6,
{ DNSLIB_RRTYPE_NSEC3, "NSEC3", 6,
{ DNSLIB_RDATA_WF_BYTE, /* hash type */
DNSLIB_RDATA_WF_BYTE, /* flags */
DNSLIB_RDATA_WF_SHORT, /* iterations */
......@@ -261,7 +258,7 @@ static dnslib_rrtype_descriptor_t
DNSLIB_RDATA_WF_BINARYWITHLENGTH, /* next hashed name */
DNSLIB_RDATA_WF_BINARY /* type bitmap */ }, true },
/* 51 */
{ DNSLIB_RRTYPE_NSEC3PARAM, T_NSEC3PARAM, "NSEC3PARAM", 4,
{ DNSLIB_RRTYPE_NSEC3PARAM, "NSEC3PARAM", 4,
{ DNSLIB_RDATA_WF_BYTE, /* hash type */
DNSLIB_RDATA_WF_BYTE, /* flags */
DNSLIB_RDATA_WF_SHORT, /* iterations */
......@@ -276,7 +273,7 @@ static dnslib_rrtype_descriptor_t
/* There's a GNU extension that works like this: [first ... last] = value */
/* 99 */
[99] = { DNSLIB_RRTYPE_SPF, T_SPF, "SPF", DNSLIB_MAX_RDATA_ITEMS,
[99] = { DNSLIB_RRTYPE_SPF, "SPF", DNSLIB_MAX_RDATA_ITEMS,
{ DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT,
DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT,
DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT,
......@@ -310,7 +307,7 @@ static dnslib_rrtype_descriptor_t
DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT,
DNSLIB_RDATA_WF_TEXT, DNSLIB_RDATA_WF_TEXT }, false },
/* 32769 */
[32769] = { DNSLIB_RRTYPE_DLV, T_DLV, "DLV", 4,
[32769] = { DNSLIB_RRTYPE_DLV, "DLV", 4,
{ DNSLIB_RDATA_WF_SHORT, DNSLIB_RDATA_WF_BYTE,
DNSLIB_RDATA_WF_BYTE, DNSLIB_RDATA_WF_BINARY } },
};
......
......@@ -161,7 +161,6 @@ typedef enum dnslib_rdatawireformat dnslib_rdata_wireformat_t;
struct dnslib_rrtype_descriptor {
uint16_t type; /*!< RR type */
int token; /*< Token used in zoneparser */
const char *name; /*!< Textual name. */
uint8_t length; /*!< Maximum number of RDATA items. */
/*!
......
......@@ -2,8 +2,6 @@
#include <stdlib.h>
#include "zoneparser.h"
#include "dnslib/dnslib.h"
static void help(int argc, char **argv)
{
printf("Usage: %s [parameters] origin zonefile\n",
......
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <assert.h>
#include <string.h>
#include <sys/types.h>
#include "parser-descriptor.h"
/* TODO this has to be removed - move tokens to separate file */
#include "zoneparser.h"
#include "zparser.h"
enum desclen { PARSER_RRTYPE_DESCRIPTORS_LENGTH = 32770 }; // used to be 101
/* Taken from RFC 1035, section 3.2.4. */
static dnslib_lookup_table_t dns_rrclasses[] = {
{ PARSER_CLASS_IN, "IN" }, /* the Internet */
{ PARSER_CLASS_CS, "CS" }, /* the CSNET class (Obsolete) */
{ PARSER_CLASS_CH, "CH" }, /* the CHAOS class */
{ PARSER_CLASS_HS, "HS" }, /* Hesiod */
{ 0, NULL }
};
static parser_rrtype_descriptor_t
dnslib_rrtype_descriptors[PARSER_RRTYPE_DESCRIPTORS_LENGTH] = {
/* 0 */
{ 0, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
/* 1 */
{ PARSER_RRTYPE_A, T_A, "A", 1, { PARSER_RDATA_WF_A }, true },
/* 2 */
{ PARSER_RRTYPE_NS, T_NS, "NS", 1,
{ PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 3 */
{ PARSER_RRTYPE_MD, T_MD, "MD", 1,
{ PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 4 */
{ PARSER_RRTYPE_MF, T_MF, "MF", 1,
{ PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 5 */
{ PARSER_RRTYPE_CNAME, T_CNAME, "CNAME", 1,
{ PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 6 */
{ PARSER_RRTYPE_SOA, T_SOA, "SOA", 7,
{ PARSER_RDATA_WF_COMPRESSED_DNAME, PARSER_RDATA_WF_COMPRESSED_DNAME,
PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG,
PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG }, true },
/* 7 */
{ PARSER_RRTYPE_MB, T_MB, "MB", 1,
{ PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 8 */
{ PARSER_RRTYPE_MG, T_MG, "MG", 1,
{ PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 9 */
{ PARSER_RRTYPE_MR, T_MR, "MR", 1,
{ PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 10 */
{ PARSER_RRTYPE_NULL, T_NULL, NULL, 1,
{ PARSER_RDATA_WF_BINARY }, true },
/* 11 */
{ PARSER_RRTYPE_WKS, T_WKS, "WKS", 2,
{ PARSER_RDATA_WF_A, PARSER_RDATA_WF_BINARY }, true },
/* 12 */
{ PARSER_RRTYPE_PTR, T_PTR, "PTR", 1,
{ PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 13 */
{ PARSER_RRTYPE_HINFO, T_HINFO, "HINFO", 2,
{ PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT }, true },
/* 14 */
{ PARSER_RRTYPE_MINFO, T_MINFO, "MINFO", 2,
{ PARSER_RDATA_WF_COMPRESSED_DNAME,
PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 15 */
{ PARSER_RRTYPE_MX, T_MX, "MX", 2,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 16 */ /* This is obscure, but I guess there's no other way */
{ PARSER_RRTYPE_TXT, T_TXT, "TXT", PARSER_MAX_RDATA_ITEMS,
{ PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT }, false },
/* 17 */
{ PARSER_RRTYPE_RP, T_RP, "RP", 2,
{ PARSER_RDATA_WF_COMPRESSED_DNAME,
PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 18 */
{ PARSER_RRTYPE_AFSDB, T_AFSDB, "AFSDB", 2,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 19 */
{ PARSER_RRTYPE_X25, T_X25, "X25", 1,
{ PARSER_RDATA_WF_TEXT }, true },
/* 20 */
{ PARSER_RRTYPE_ISDN, T_ISDN, "ISDN", 2,
{ PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT }, false },
/* 21 */
{ PARSER_RRTYPE_RT, T_RT, "RT", 2,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
/* 22 */
{ PARSER_RRTYPE_NSAP, T_NSAP, "NSAP", 1,
{ PARSER_RDATA_WF_BINARY }, true },
/* 23 */
{ 23, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
/* 24 */
{ PARSER_RRTYPE_SIG, T_SIG, "SIG", 9,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BYTE,
PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG,
PARSER_RDATA_WF_SHORT,PARSER_RDATA_WF_UNCOMPRESSED_DNAME,
PARSER_RDATA_WF_BINARY }, true },
/* 25 */
{ PARSER_RRTYPE_KEY, T_KEY, "KEY", 4,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE,
PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BINARY }, true },
/* 26 */
{ PARSER_RRTYPE_PX, T_PX, "PX", 3,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_UNCOMPRESSED_DNAME,
PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 27 */
{ 27, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
/* 28 */
{ PARSER_RRTYPE_AAAA, T_AAAA, "AAAA", 1,
{ PARSER_RDATA_WF_AAAA }, true },
/* 29 */
{ PARSER_RRTYPE_LOC, T_LOC, "LOC", 1,
{ PARSER_RDATA_WF_BINARY }, true },
/* 30 */
{ PARSER_RRTYPE_NXT, T_NXT, "NXT", 2,
{ PARSER_RDATA_WF_UNCOMPRESSED_DNAME,
PARSER_RDATA_WF_BINARY }, true },
/* 31 */
{ 31, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
/* 32 */
{ 32, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
/* 33 */
{ PARSER_RRTYPE_SRV, T_SRV, "SRV", 4,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_SHORT,
PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_UNCOMPRESSED_DNAME },
true },
/* 34 */
{ 34, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
/* 35 */
{ PARSER_RRTYPE_NAPTR, T_NAPTR, "NAPTR", 6,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 36 */
{ PARSER_RRTYPE_KX, T_KX, "KX", 2,
{ PARSER_RDATA_WF_SHORT,
PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 37 */
{ PARSER_RRTYPE_CERT, T_CERT, "CERT", 4,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_SHORT,
PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BINARY }, true },
/* 38 */
{ PARSER_RRTYPE_A6, T_A6, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
/* 39 */
{ PARSER_RRTYPE_DNAME, T_DNAME, "DNAME", 1,
{ PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
/* 40 */
{ 40, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
/* 41 */
/* OPT has its parser token, but should never be in zone file... */
{ PARSER_RRTYPE_OPT, T_OPT, "OPT", 1,
{ PARSER_RDATA_WF_BINARY }, true },
/* 42 */
{ PARSER_RRTYPE_APL, T_APL, "APL", PARSER_MAX_RDATA_ITEMS,
{ PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL }, false },
/* 43 */
{ PARSER_RRTYPE_DS, T_DS, "DS", 4,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE,
PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BINARY }, true },
/* 44 */
{ PARSER_RRTYPE_SSHFP, T_SSHFP, "SSHFP", 3,
{ PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BYTE,
PARSER_RDATA_WF_BINARY }, true },
/* 45 */
{ PARSER_RRTYPE_IPSECKEY, T_IPSECKEY, "IPSECKEY", 5,
{ PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BYTE,
PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_IPSECGATEWAY,
PARSER_RDATA_WF_BINARY }, false },
/* 46 */
{ PARSER_RRTYPE_RRSIG, T_RRSIG, "RRSIG", 9,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE,
PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_LONG,
PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG,
PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BINARY,
PARSER_RDATA_WF_BINARY }, true },
/* 47 */
{ PARSER_RRTYPE_NSEC, T_NSEC, "NSEC", 2,
{ PARSER_RDATA_WF_BINARY, PARSER_RDATA_WF_BINARY }, true },
/* 48 */
{ PARSER_RRTYPE_DNSKEY, T_DNSKEY, "DNSKEY", 4,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE,
PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BINARY }, true },
/* 49 */
{ PARSER_RRTYPE_DHCID, T_DHCID, "DHCID", 1, { PARSER_RDATA_WF_BINARY }, true },
/* 50 */
{ PARSER_RRTYPE_NSEC3, T_NSEC3, "NSEC3", 6,
{ PARSER_RDATA_WF_BYTE, /* hash type */
PARSER_RDATA_WF_BYTE, /* flags */
PARSER_RDATA_WF_SHORT, /* iterations */
PARSER_RDATA_WF_BINARYWITHLENGTH, /* salt */
PARSER_RDATA_WF_BINARYWITHLENGTH, /* next hashed name */
PARSER_RDATA_WF_BINARY /* type bitmap */ }, true },
/* 51 */
{ PARSER_RRTYPE_NSEC3PARAM, T_NSEC3PARAM, "NSEC3PARAM", 4,
{ PARSER_RDATA_WF_BYTE, /* hash type */
PARSER_RDATA_WF_BYTE, /* flags */
PARSER_RDATA_WF_SHORT, /* iterations */
PARSER_RDATA_WF_BINARYWITHLENGTH /* salt */ }, true },
/* 52 */
/* In NSD they have indices between 52 and 99 filled with
unknown types. TODO add here if it's really needed? */
/* it is indeed needed, in rrtype_from_string */
/* There's a GNU extension that works like this: [first ... last] = value */
/* 99 */
[99] = { PARSER_RRTYPE_SPF, T_SPF, "SPF", PARSER_MAX_RDATA_ITEMS,
{ PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT }, false },
/* 32769 */
[32769] = { PARSER_RRTYPE_DLV, T_DLV, "DLV", 4,
{ PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE,
PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BINARY } },
};
parser_rrtype_descriptor_t *parser_rrtype_descriptor_by_type(uint16_t type)
{
if (type < PARSER_RRTYPE_LAST + 1) {
return &dnslib_rrtype_descriptors[type];
} else if (type == PARSER_RRTYPE_DLV) {
return &dnslib_rrtype_descriptors[PARSER_RRTYPE_DLV];
}
return &dnslib_rrtype_descriptors[0];
}
/* I see a lot of potential here to speed up zone parsing - this is O(n) *
* could be better */
parser_rrtype_descriptor_t *parser_rrtype_descriptor_by_name(const char *name)
{
int i;
for (i = 0; i < PARSER_RRTYPE_LAST + 1; ++i) {
if (dnslib_rrtype_descriptors[i].name &&
strcasecmp(dnslib_rrtype_descriptors[i].name, name) == 0) {
return &dnslib_rrtype_descriptors[i];
}
}
if (dnslib_rrtype_descriptors[PARSER_RRTYPE_DLV].name &&
strcasecmp(dnslib_rrtype_descriptors[PARSER_RRTYPE_DLV].name,
name) == 0) {
return &dnslib_rrtype_descriptors[PARSER_RRTYPE_DLV];
}
return NULL;
}
const char *parser_rrtype_to_string(uint16_t rrtype)
{
static char buf[20];
parser_rrtype_descriptor_t *descriptor =
parser_rrtype_descriptor_by_type(rrtype);
if (descriptor->name) {
return descriptor->name;
} else {
snprintf(buf, sizeof(buf), "TYPE%d", (int) rrtype);
return buf;
}
}
uint16_t parser_rrtype_from_string(const char *name)
{
char *end;
long rrtype;
parser_rrtype_descriptor_t *entry;
entry = parser_rrtype_descriptor_by_name(name);
if (entry) {
return entry->type;
}
if (strlen(name) < 5) {
return 0;
}
if (strncasecmp(name, "TYPE", 4) != 0) {
return 0;
}
if (!isdigit((int)name[4])) {
return 0;
}
/* The rest from the string must be a number. */
rrtype = strtol(name + 4, &end, 10);
if (*end != '\0') {
return 0;
}
if (rrtype < 0 || rrtype > 65535L) {
return 0;
}
return (uint16_t) rrtype;
}
const char *parser_rrclass_to_string(uint16_t rrclass)
{
static char buf[20];
dnslib_lookup_table_t *entry = dnslib_lookup_by_id(dns_rrclasses,
rrclass);
if (entry) {
assert(strlen(entry->name) < sizeof(buf));
dnslib_strlcpy(buf, entry->name, sizeof(buf));
} else {
snprintf(buf, sizeof(buf), "CLASS%d", (int) rrclass);
}
return buf;
}
uint16_t parser_rrclass_from_string(const char *name)
{
char *end;
long rrclass;
dnslib_lookup_table_t *entry;
entry = dnslib_lookup_by_name(dns_rrclasses, name);
if (entry) {
return (uint16_t) entry->id;
}
if (strlen(name) < 6) {
return 0;
}
if (strncasecmp(name, "CLASS", 5) != 0) {
return 0;
}
if (!isdigit((int)name[5])) {
return 0;
}
// The rest from the string must be a number.
rrclass = strtol(name + 5, &end, 10);
if (*end != '\0') {
return 0;
}
if (rrclass < 0 || rrclass > 65535L) {
return 0;
}
return (uint16_t) rrclass;
}
/*!
* \file descriptor.h
*
* \author Jan Kadlec <jan.kadlec@nic.cz>, most of the work by the NSD team
*
* \brief Contains resource record descriptor and its API
*
* \addtogroup dnslib
* @{
*/
#ifndef _CUTEDNS_PARSER_DESCRIPTOR_H_
#define _CUTEDNS_PARSER_DESCRIPTOR_H_
#include <stdint.h>
#include <stdbool.h>
#include "dnslib/utils.h"
#include "common.h"
enum parser_mxrdtln {
PARSER_MAX_RDATA_ITEMS = 64,
PARSER_MAX_RDATA_ITEM_SIZE = 255,
PARSER_MAX_RDATA_WIRE_SIZE =
PARSER_MAX_RDATA_ITEMS * PARSER_MAX_RDATA_ITEM_SIZE
};
//#define MAXRDATALEN 64
/* 64 is in NSD. Seems a little too much, but I'd say it's not a real issue. */
/*!
* \brief Enum containing RR class codes.
*/
enum parser_rr_class {
PARSER_CLASS_IN = 1,
PARSER_CLASS_CS,
PARSER_CLASS_CH,
PARSER_CLASS_HS,
PARSER_CLASS_NONE = 254,
PARSER_CLASS_ANY = 255
};
typedef enum parser_rr_class parser_rr_class_t;
enum parser_rr_type {
PARSER_RRTYPE_UNKNOWN, /*!< 0 - an unknown type */
PARSER_RRTYPE_A, /*!< 1 - a host address */
PARSER_RRTYPE_NS, /*!< 2 - an authoritative name server */
PARSER_RRTYPE_MD, /*!< 3 - a mail destination (Obsolete - use MX) */
PARSER_RRTYPE_MF, /*!< 4 - a mail forwarder (Obsolete - use MX) */
PARSER_RRTYPE_CNAME, /*!< 5 - the canonical name for an alias */
PARSER_RRTYPE_SOA, /*!< 6 - marks the start of a zone of authority */
PARSER_RRTYPE_MB, /*!< 7 - a mailbox domain name (EXPERIMENTAL) */
PARSER_RRTYPE_MG, /*!< 8 - a mail group member (EXPERIMENTAL) */
PARSER_RRTYPE_MR, /*!< 9 - a mail rename domain name (EXPERIMENTAL) */
PARSER_RRTYPE_NULL, /*!< 10 - a null RR (EXPERIMENTAL) */
PARSER_RRTYPE_WKS, /*!< 11 - a well known service description */
PARSER_RRTYPE_PTR, /*!< 12 - a domain name pointer */
PARSER_RRTYPE_HINFO, /*!< 13 - host information */
PARSER_RRTYPE_MINFO, /*!< 14 - mailbox or mail list information */
PARSER_RRTYPE_MX, /*!< 15 - mail exchange */
PARSER_RRTYPE_TXT, /*!< 16 - text strings */
PARSER_RRTYPE_RP, /*!< 17 - RFC1183 */
PARSER_RRTYPE_AFSDB, /*!< 18 - RFC1183 */
PARSER_RRTYPE_X25, /*!< 19 - RFC1183 */
PARSER_RRTYPE_ISDN, /*!< 20 - RFC1183 */
PARSER_RRTYPE_RT, /*!< 21 - RFC1183 */
PARSER_RRTYPE_NSAP, /*!< 22 - RFC1706 */
PARSER_RRTYPE_SIG = 24, /*!< 24 - 2535typecode */
PARSER_RRTYPE_KEY, /*!< 25 - 2535typecode */
PARSER_RRTYPE_PX, /*!< 26 - RFC2163 */
PARSER_RRTYPE_AAAA = 28, /*!< 28 - ipv6 address */
PARSER_RRTYPE_LOC, /*!< 29 - LOC record RFC1876 */
PARSER_RRTYPE_NXT, /*!< 30 - 2535typecode */
PARSER_RRTYPE_SRV = 33, /*!< 33 - SRV record RFC2782 */
PARSER_RRTYPE_NAPTR = 35, /*!< 35 - RFC2915 */
PARSER_RRTYPE_KX, /*!< 36 - RFC2230 Key Exchange Delegation Record */
PARSER_RRTYPE_CERT, /*!< 37 - RFC2538 */
PARSER_RRTYPE_A6, /*!< 38 - RFC2874 */
PARSER_RRTYPE_DNAME, /*!< 39 - RFC2672 */
PARSER_RRTYPE_OPT = 41, /*!< 41 - Pseudo OPT record... */
PARSER_RRTYPE_APL, /*!< 42 - RFC3123 */
PARSER_RRTYPE_DS, /*!< 43 - RFC 4033, 4034, and 4035 */
PARSER_RRTYPE_SSHFP, /*!< 44 - SSH Key Fingerprint */
PARSER_RRTYPE_IPSECKEY, /*!< 45 - public key for ipsec use. RFC 4025 */
PARSER_RRTYPE_RRSIG, /*!< 46 - RFC 4033, 4034, and 4035 */
PARSER_RRTYPE_NSEC, /*!< 47 - RFC 4033, 4034, and 4035 */
PARSER_RRTYPE_DNSKEY, /*!< 48 - RFC 4033, 4034, and 4035 */
PARSER_RRTYPE_DHCID, /*!< 49 - RFC4701 DHCP information */
/*!
* \brief 50 - NSEC3, secure denial, prevents zonewalking
*/
PARSER_RRTYPE_NSEC3,
/*!
* \brief 51 - NSEC3PARAM at zone apex nsec3 parameters
*/
PARSER_RRTYPE_NSEC3PARAM,
/* TODO consider some better way of doing this, indices too high */
PARSER_RRTYPE_SPF = 99, /*!< RFC 4408 */
// not designating any RRs
PARSER_RRTYPE_TSIG = 250,
PARSER_RRTYPE_IXFR = 251,
PARSER_RRTYPE_AXFR = 252,
/*!
* \brief A request for mailbox-related records (MB, MG or MR)
*/
PARSER_RRTYPE_MAILB = 253,
/*!
* \brief A request for mail agent RRs (Obsolete - see MX)
*/
PARSER_RRTYPE_MAILA = 254,
PARSER_RRTYPE_ANY = 255, /*!< any type (wildcard) */
// totally weird numbers (cannot use for indexing)
PARSER_RRTYPE_TA = 32768, /*!< DNSSEC Trust Authorities */
PARSER_RRTYPE_DLV = 32769 /*!< RFC 4431 */
};
/*!
* \brief Enum containing RR type codes.
*
* \todo Not all indices can be used for indexing.
*/
typedef enum parser_rr_type parser_rr_type_t;
static uint const PARSER_RRTYPE_LAST = PARSER_RRTYPE_NSEC3PARAM;
enum parser_rdata_wireformat {
/*!
* \brief Possibly compressed domain name.
*/
PARSER_RDATA_WF_COMPRESSED_DNAME = 50,
PARSER_RDATA_WF_UNCOMPRESSED_DNAME = 51, /*!< Uncompressed domain name. */
PARSER_RDATA_WF_LITERAL_DNAME = 52, /*!< Literal (not downcased) dname. */
PARSER_RDATA_WF_BYTE = 1, /*!< 8-bit integer. */
PARSER_RDATA_WF_SHORT = 2, /*!< 16-bit integer. */
PARSER_RDATA_WF_LONG = 4, /*!< 32-bit integer. */
PARSER_RDATA_WF_TEXT = 53, /*!< Text string. */
PARSER_RDATA_WF_A = 58, /*!< 32-bit IPv4 address. */
PARSER_RDATA_WF_AAAA = 16, /*!< 128-bit IPv6 address. */
PARSER_RDATA_WF_BINARY = 54, /*!< Binary data (unknown length). */
/*!
* \brief Binary data preceded by 1 byte length
*/
PARSER_RDATA_WF_BINARYWITHLENGTH = 55,
PARSER_RDATA_WF_APL = 56, /*!< APL data. */
PARSER_RDATA_WF_IPSECGATEWAY = 57 /*!< IPSECKEY gateway ip4, ip6 or dname. */
};
/*!
* \brief Enum containing wireformat codes. Taken from NSD's "dns.h"
*/
typedef enum parser_rdatawireformat parser_rdata_wireformat_t;
struct parser_rrtype_descriptor {
uint16_t type; /*!< RR type */
int token; /*< Token used in zoneparser */
const char *name; /*!< Textual name. */
uint8_t length; /*!< Maximum number of RDATA items. */
/*!
* \brief rdata_wireformat_type
*/
uint8_t wireformat[PARSER_MAX_RDATA_ITEMS];
bool fixed_items; /*!< Has fixed number of RDATA items? */
};
/*!
* \brief Structure holding RR descriptor
*/
typedef struct parser_rrtype_descriptor parser_rrtype_descriptor_t;
/*!
* \brief Gets RR descriptor for given RR type.
*
* \param type Code of RR type whose descriptor should be returned.
*
* \return RR descriptor for given type code, NULL descriptor if
* unknown type.
*
* \todo Change return value to const.
*/
parser_rrtype_descriptor_t *parser_rrtype_descriptor_by_type(uint16_t type);
/*!
* \brief Gets RR descriptor for given RR name.
*
* \param name Mnemonic of RR type whose descriptor should be returned.
*
* \return RR descriptor for given name, NULL descriptor if
* unknown type.
*
* \todo Change return value to const.
*/
parser_rrtype_descriptor_t *parser_rrtype_descriptor_by_name(const char *name);
/*!
* \brief Converts numeric type representation to mnemonic string.
*
* \param rrtype Type RR type code to be converted.
*
* \return Mnemonic string if found, str(TYPE[rrtype]) otherwise.
*/
const char *parser_rrtype_to_string(uint16_t rrtype);
/*!
* \brief Converts mnemonic string representation of a type to numeric one.
*
* \param name Mnemonic string to be converted.
*
* \return Correct code if found, 0 otherwise.
*/
uint16_t parser_rrtype_from_string(const char *name);
/*!
* \brief Converts numeric class representation to string one.
*
* \param rrclass Class code to be converted.
*
* \return String represenation of class if found,
* str(CLASS[rrclass]) otherwise.
*/
const char *parser_rrclass_to_string(uint16_t rrclass);
/*!
* \brief Converts string representation of a class to numeric one.
*
* \param name Class string to be converted.
*
* \return Correct code if found, 0 otherwise.
*/
uint16_t parser_rrclass_from_string(const char *name);
#endif /* _CUTEDNS_PARSER_DESCRIPTOR_H_ */
/*! @} */
......@@ -23,7 +23,7 @@
#include "zoneparser.h"
#include "dname.h"
#include "descriptor.h"
#include "parser-descriptor.h"
#include "zparser.h"
#define YY_NO_INPUT
......@@ -353,10 +353,10 @@ ANY [^\"\n\\]|\\.
static int
rrtype_to_token(const char *word, uint16_t *type)
{
uint16_t t = dnslib_rrtype_from_string(word);
uint16_t t = parser_rrtype_from_string(word);
if (t != 0) {
dnslib_rrtype_descriptor_t *entry = 0;
entry = dnslib_rrtype_descriptor_by_type(t);
parser_rrtype_descriptor_t *entry = 0;
entry = parser_rrtype_descriptor_by_type(t);
*type = t;
/*! \todo entry should return associated token.
......@@ -433,7 +433,7 @@ parse_token(int token, char *yytext, enum lexer_state *lexer_state)
}
/* class */
rrclass = dnslib_rrclass_from_string(yytext);
rrclass = parser_rrclass_from_string(yytext);
if (rrclass != 0) {
yylval.rclass = rrclass;
LEXOUT(("CLASS "));
......
......@@ -25,7 +25,7 @@
#include "dname.h"
#include "zone.h"
#include "zoneparser.h"
#include "descriptor.h"
#include "parser-descriptor.h"
/* these need to be global, otherwise they cannot be used inside yacc */
zparser_type *parser;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment