summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbrad <brad@openbsd.org>2014-02-04 03:07:25 +0000
committerbrad <brad@openbsd.org>2014-02-04 03:07:25 +0000
commita302926fb0a2485873fbeb49cf356d6b33d90875 (patch)
treee6c81d29643a88958dc6d35682d3f92a1ba9e5f0
parentupdate to NSD 4.0.1, ok sthen@ (diff)
downloadwireguard-openbsd-a302926fb0a2485873fbeb49cf356d6b33d90875.tar.xz
wireguard-openbsd-a302926fb0a2485873fbeb49cf356d6b33d90875.zip
merge conflicts
-rw-r--r--usr.sbin/nsd/Makefile.in28
-rw-r--r--usr.sbin/nsd/axfr.c9
-rw-r--r--usr.sbin/nsd/config.h.in3
-rw-r--r--usr.sbin/nsd/configparser.y6
-rw-r--r--usr.sbin/nsd/configure40
-rw-r--r--usr.sbin/nsd/configure.ac14
-rw-r--r--usr.sbin/nsd/dns.c319
-rw-r--r--usr.sbin/nsd/dns.h30
-rw-r--r--usr.sbin/nsd/nsd-checkconf.8.in2
-rw-r--r--usr.sbin/nsd/nsd.8.in7
-rw-r--r--usr.sbin/nsd/nsd.c20
-rw-r--r--usr.sbin/nsd/nsd.conf.5.in8
-rw-r--r--usr.sbin/nsd/rdata.c60
-rw-r--r--usr.sbin/nsd/server.c14
-rw-r--r--usr.sbin/nsd/util.c7
-rw-r--r--usr.sbin/nsd/xfrd-disk.c2
-rw-r--r--usr.sbin/nsd/xfrd-tcp.c4
-rw-r--r--usr.sbin/nsd/xfrd.c8
-rw-r--r--usr.sbin/nsd/zonec.c48
-rw-r--r--usr.sbin/nsd/zonec.h4
-rw-r--r--usr.sbin/nsd/zparser.y21
21 files changed, 519 insertions, 135 deletions
diff --git a/usr.sbin/nsd/Makefile.in b/usr.sbin/nsd/Makefile.in
index 61d1041e628..84df1b5d589 100644
--- a/usr.sbin/nsd/Makefile.in
+++ b/usr.sbin/nsd/Makefile.in
@@ -108,9 +108,7 @@ nsd-control.8: $(srcdir)/nsd-control.8.in config.h
rm -f nsd-control.8
$(EDIT) $(srcdir)/nsd-control.8.in > nsd-control.8
-install:
-
-orig-install: all
+install: all
$(INSTALL) -d $(DESTDIR)$(sbindir)
$(INSTALL) -d $(DESTDIR)$(configdir)
$(INSTALL) -d $(DESTDIR)$(piddir)
@@ -340,10 +338,10 @@ configparser.o: configparser.c config.h $(srcdir)/options.h $(srcdir)/region-all
$(srcdir)/radtree.h $(srcdir)/nsd.h $(srcdir)/edns.h $(srcdir)/packet.h $(srcdir)/configyyrename.h
dbaccess.o: $(srcdir)/dbaccess.c config.h $(srcdir)/dns.h $(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h \
$(srcdir)/region-allocator.h $(srcdir)/util.h $(srcdir)/radtree.h $(srcdir)/rbtree.h $(srcdir)/options.h $(srcdir)/rdata.h $(srcdir)/udb.h \
- $(srcdir)/udbradtree.h $(srcdir)/udbzone.h $(srcdir)/zonec.h $(srcdir)/nsec3.h $(srcdir)/difffile.h
+ $(srcdir)/udbradtree.h $(srcdir)/udbzone.h $(srcdir)/zonec.h $(srcdir)/nsec3.h $(srcdir)/difffile.h $(srcdir)/nsd.h $(srcdir)/edns.h
dbcreate.o: $(srcdir)/dbcreate.c config.h $(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h \
$(srcdir)/region-allocator.h $(srcdir)/util.h $(srcdir)/dns.h $(srcdir)/radtree.h $(srcdir)/rbtree.h $(srcdir)/udb.h $(srcdir)/udbradtree.h \
- $(srcdir)/udbzone.h $(srcdir)/options.h
+ $(srcdir)/udbzone.h $(srcdir)/options.h $(srcdir)/nsd.h $(srcdir)/edns.h
difffile.o: $(srcdir)/difffile.c config.h $(srcdir)/difffile.h $(srcdir)/rbtree.h $(srcdir)/region-allocator.h \
$(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h $(srcdir)/util.h $(srcdir)/dns.h $(srcdir)/radtree.h $(srcdir)/options.h $(srcdir)/udb.h \
$(srcdir)/xfrd-disk.h $(srcdir)/packet.h $(srcdir)/rdata.h $(srcdir)/udbzone.h $(srcdir)/udbradtree.h $(srcdir)/nsec3.h $(srcdir)/nsd.h $(srcdir)/edns.h \
@@ -374,7 +372,7 @@ nsd-mem.o: $(srcdir)/nsd-mem.c config.h $(srcdir)/nsd.h $(srcdir)/dns.h $(srcdir
$(srcdir)/radtree.h $(srcdir)/udb.h $(srcdir)/udbzone.h $(srcdir)/udbradtree.h
nsec3.o: $(srcdir)/nsec3.c config.h $(srcdir)/nsec3.h $(srcdir)/iterated_hash.h $(srcdir)/namedb.h $(srcdir)/dname.h \
$(srcdir)/buffer.h $(srcdir)/region-allocator.h $(srcdir)/util.h $(srcdir)/dns.h $(srcdir)/radtree.h $(srcdir)/rbtree.h $(srcdir)/nsd.h $(srcdir)/edns.h \
- $(srcdir)/answer.h $(srcdir)/packet.h $(srcdir)/query.h $(srcdir)/tsig.h $(srcdir)/udbzone.h $(srcdir)/udb.h $(srcdir)/udbradtree.h
+ $(srcdir)/answer.h $(srcdir)/packet.h $(srcdir)/query.h $(srcdir)/tsig.h $(srcdir)/udbzone.h $(srcdir)/udb.h $(srcdir)/udbradtree.h $(srcdir)/options.h
options.o: $(srcdir)/options.c config.h $(srcdir)/options.h $(srcdir)/region-allocator.h $(srcdir)/rbtree.h \
$(srcdir)/query.h $(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h $(srcdir)/util.h $(srcdir)/dns.h $(srcdir)/radtree.h $(srcdir)/nsd.h $(srcdir)/edns.h \
$(srcdir)/packet.h $(srcdir)/tsig.h $(srcdir)/difffile.h $(srcdir)/udb.h $(srcdir)/rrl.h $(srcdir)/configyyrename.h configparser.h
@@ -424,7 +422,7 @@ xfrd-notify.o: $(srcdir)/xfrd-notify.c config.h $(srcdir)/xfrd-notify.h $(srcdir
$(srcdir)/radtree.h $(srcdir)/options.h $(srcdir)/xfrd-tcp.h $(srcdir)/packet.h
xfrd-tcp.o: $(srcdir)/xfrd-tcp.c config.h $(srcdir)/xfrd-tcp.h $(srcdir)/xfrd.h $(srcdir)/rbtree.h \
$(srcdir)/region-allocator.h $(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h $(srcdir)/util.h $(srcdir)/dns.h $(srcdir)/radtree.h \
- $(srcdir)/options.h $(srcdir)/tsig.h $(srcdir)/packet.h
+ $(srcdir)/options.h $(srcdir)/tsig.h $(srcdir)/packet.h $(srcdir)/xfrd-disk.h
zlexer.o: zlexer.c config.h $(srcdir)/zonec.h $(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h \
$(srcdir)/region-allocator.h $(srcdir)/util.h $(srcdir)/dns.h $(srcdir)/radtree.h $(srcdir)/rbtree.h zparser.h
zonec.o: $(srcdir)/zonec.c config.h $(srcdir)/zonec.h $(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h \
@@ -456,12 +454,14 @@ cutest_iterated_hash.o: $(srcdir)/tpkg/cutest/cutest_iterated_hash.c config.h \
$(srcdir)/tpkg/cutest/cutest.h $(srcdir)/region-allocator.h $(srcdir)/util.h $(srcdir)/iterated_hash.h $(srcdir)/dname.h \
$(srcdir)/buffer.h $(srcdir)/region-allocator.h $(srcdir)/util.h
cutest_namedb.o: $(srcdir)/tpkg/cutest/cutest_namedb.c config.h \
- $(srcdir)/tpkg/cutest/cutest.h $(srcdir)/region-allocator.h $(srcdir)/options.h $(srcdir)/region-allocator.h \
- $(srcdir)/rbtree.h $(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h $(srcdir)/util.h $(srcdir)/dns.h $(srcdir)/radtree.h $(srcdir)/nsec3.h $(srcdir)/udb.h \
- $(srcdir)/udbzone.h $(srcdir)/udb.h $(srcdir)/udbradtree.h $(srcdir)/difffile.h $(srcdir)/namedb.h $(srcdir)/options.h $(srcdir)/zonec.h
+ $(srcdir)/tpkg/cutest/cutest.h $(srcdir)/region-allocator.h $(srcdir)/options.h config.h \
+ $(srcdir)/region-allocator.h $(srcdir)/rbtree.h $(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h $(srcdir)/util.h $(srcdir)/dns.h \
+ $(srcdir)/radtree.h $(srcdir)/nsec3.h $(srcdir)/udb.h $(srcdir)/udbzone.h $(srcdir)/udb.h $(srcdir)/udbradtree.h $(srcdir)/difffile.h $(srcdir)/namedb.h \
+ $(srcdir)/options.h $(srcdir)/zonec.h $(srcdir)/nsd.h $(srcdir)/edns.h
cutest_options.o: $(srcdir)/tpkg/cutest/cutest_options.c config.h \
- $(srcdir)/tpkg/cutest/cutest.h $(srcdir)/region-allocator.h $(srcdir)/options.h $(srcdir)/region-allocator.h \
- $(srcdir)/rbtree.h $(srcdir)/util.h $(srcdir)/dname.h $(srcdir)/buffer.h $(srcdir)/util.h
+ $(srcdir)/tpkg/cutest/cutest.h $(srcdir)/region-allocator.h $(srcdir)/options.h config.h \
+ $(srcdir)/region-allocator.h $(srcdir)/rbtree.h $(srcdir)/util.h $(srcdir)/dname.h $(srcdir)/buffer.h $(srcdir)/util.h $(srcdir)/nsd.h $(srcdir)/dns.h \
+ $(srcdir)/edns.h
cutest_radtree.o: $(srcdir)/tpkg/cutest/cutest_radtree.c config.h \
$(srcdir)/tpkg/cutest/cutest.h $(srcdir)/radtree.h $(srcdir)/region-allocator.h $(srcdir)/util.h
cutest_rbtree.o: $(srcdir)/tpkg/cutest/cutest_rbtree.c config.h \
@@ -483,8 +483,8 @@ cutest_util.o: $(srcdir)/tpkg/cutest/cutest_util.c config.h $(srcdir)/tpkg/cutes
qtest.o: $(srcdir)/tpkg/cutest/qtest.c config.h $(srcdir)/tpkg/cutest/qtest.h $(srcdir)/buffer.h \
$(srcdir)/region-allocator.h $(srcdir)/util.h $(srcdir)/query.h $(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h $(srcdir)/dns.h \
$(srcdir)/radtree.h $(srcdir)/rbtree.h $(srcdir)/nsd.h $(srcdir)/edns.h $(srcdir)/packet.h $(srcdir)/tsig.h $(srcdir)/namedb.h $(srcdir)/util.h $(srcdir)/nsec3.h \
- $(srcdir)/options.h $(srcdir)/packet.h $(srcdir)/dname.h $(srcdir)/rdata.h
+ $(srcdir)/options.h config.h $(srcdir)/packet.h $(srcdir)/dname.h $(srcdir)/rdata.h
udb-inspect.o: $(srcdir)/tpkg/cutest/udb-inspect.c config.h $(srcdir)/udb.h $(srcdir)/udbradtree.h \
$(srcdir)/udb.h $(srcdir)/udbzone.h $(srcdir)/dns.h $(srcdir)/udbradtree.h $(srcdir)/util.h $(srcdir)/buffer.h $(srcdir)/region-allocator.h \
$(srcdir)/util.h $(srcdir)/packet.h $(srcdir)/namedb.h $(srcdir)/dname.h $(srcdir)/buffer.h $(srcdir)/radtree.h $(srcdir)/rbtree.h $(srcdir)/rdata.h \
- $(srcdir)/namedb.h $(srcdir)/difffile.h $(srcdir)/options.h
+ $(srcdir)/namedb.h $(srcdir)/difffile.h $(srcdir)/options.h config.h
diff --git a/usr.sbin/nsd/axfr.c b/usr.sbin/nsd/axfr.c
index 6ed41cab61a..f780811fc9f 100644
--- a/usr.sbin/nsd/axfr.c
+++ b/usr.sbin/nsd/axfr.c
@@ -74,7 +74,8 @@ query_axfr(struct nsd *nsd, struct query *query)
assert(query->axfr_zone->soa_rrset->rr_count == 1);
added = packet_encode_rr(query,
query->axfr_zone->apex,
- &query->axfr_zone->soa_rrset->rrs[0]);
+ &query->axfr_zone->soa_rrset->rrs[0],
+ query->axfr_zone->soa_rrset->rrs[0].ttl);
if (!added) {
/* XXX: This should never happen... generate error code? */
abort();
@@ -109,7 +110,8 @@ query_axfr(struct nsd *nsd, struct query *query)
added = packet_encode_rr(
query,
query->axfr_current_domain,
- &query->axfr_current_rrset->rrs[query->axfr_current_rr]);
+ &query->axfr_current_rrset->rrs[query->axfr_current_rr],
+ query->axfr_current_rrset->rrs[query->axfr_current_rr].ttl);
if (!added)
goto return_answer;
++total_added;
@@ -132,7 +134,8 @@ query_axfr(struct nsd *nsd, struct query *query)
assert(query->axfr_zone->soa_rrset->rr_count == 1);
added = packet_encode_rr(query,
query->axfr_zone->apex,
- &query->axfr_zone->soa_rrset->rrs[0]);
+ &query->axfr_zone->soa_rrset->rrs[0],
+ query->axfr_zone->soa_rrset->rrs[0].ttl);
if (added) {
++total_added;
query->tsig_sign_it = 1; /* sign last packet */
diff --git a/usr.sbin/nsd/config.h.in b/usr.sbin/nsd/config.h.in
index b2675b6d30c..42c683a9be9 100644
--- a/usr.sbin/nsd/config.h.in
+++ b/usr.sbin/nsd/config.h.in
@@ -19,9 +19,6 @@
/* Pathname to the NSD database */
#undef DBFILE
-/* Define this to enable draft RRtypes. */
-#undef DRAFT_RRTYPES
-
/* Define to the default maximum message length with EDNS. */
#undef EDNS_MAX_MESSAGE_LEN
diff --git a/usr.sbin/nsd/configparser.y b/usr.sbin/nsd/configparser.y
index 17dae8a64ef..7a1edc7c620 100644
--- a/usr.sbin/nsd/configparser.y
+++ b/usr.sbin/nsd/configparser.y
@@ -208,7 +208,11 @@ server_nsid: VAR_NSID STRING
OUTYY(("P(server_nsid:%s)\n", $2));
- if (strlen($2) % 2 != 0) {
+ if (strncasecmp($2, "ascii_", 6) == 0) {
+ nsid_len = strlen($2+6);
+ cfg_parser->opt->nsid = region_alloc(cfg_parser->opt->region, nsid_len*2+1);
+ hex_ntop((uint8_t*)$2+6, nsid_len, (char*)cfg_parser->opt->nsid, nsid_len*2+1);
+ } else if (strlen($2) % 2 != 0) {
yyerror("the NSID must be a hex string of an even length.");
} else {
nsid_len = strlen($2) / 2;
diff --git a/usr.sbin/nsd/configure b/usr.sbin/nsd/configure
index 5d856e35a90..170d7b2f729 100644
--- a/usr.sbin/nsd/configure
+++ b/usr.sbin/nsd/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for NSD 4.0.0.
+# Generated by GNU Autoconf 2.69 for NSD 4.0.1.
#
# Report bugs to <nsd-bugs@nlnetlabs.nl>.
#
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='NSD'
PACKAGE_TARNAME='nsd'
-PACKAGE_VERSION='4.0.0'
-PACKAGE_STRING='NSD 4.0.0'
+PACKAGE_VERSION='4.0.1'
+PACKAGE_STRING='NSD 4.0.1'
PACKAGE_BUGREPORT='nsd-bugs@nlnetlabs.nl'
PACKAGE_URL=''
@@ -726,7 +726,6 @@ enable_ratelimit
with_ssl
enable_nsec3
enable_minimal_responses
-enable_draft_rrtypes
enable_mmap
'
ac_precious_vars='build_alias
@@ -1280,7 +1279,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures NSD 4.0.0 to adapt to many kinds of systems.
+\`configure' configures NSD 4.0.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1341,7 +1340,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of NSD 4.0.0:";;
+ short | recursive ) echo "Configuration of NSD 4.0.1:";;
esac
cat <<\_ACEOF
@@ -1361,7 +1360,6 @@ Optional Features:
--disable-nsec3 Disable NSEC3 support
--disable-minimal-responses
Disable response minimization. More truncation.
- --enable-draft-rrtypes Enable draft RRtypes.
--enable-mmap Use mmap instead of malloc. Experimental.
Optional Packages:
@@ -1475,7 +1473,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-NSD configure 4.0.0
+NSD configure 4.0.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2184,7 +2182,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by NSD $as_me 4.0.0, which was
+It was created by NSD $as_me 4.0.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -6347,6 +6345,9 @@ else
fi
if test "$srcdir" != "."; then
CPPFLAGS="$CPPFLAGS -I$srcdir"
+ if test -f $srcdir/config.h; then
+ as_fn_error $? "$srcdir/config.h is in the way, please remove it" "$LINENO" 5
+ fi
fi
@@ -8715,23 +8716,6 @@ _ACEOF
;;
esac
-# Check whether --enable-draft-rrtypes was given.
-if test "${enable_draft_rrtypes+set}" = set; then :
- enableval=$enable_draft_rrtypes;
-fi
-
-case "$enable_draft_rrtypes" in
- yes)
-
-cat >>confdefs.h <<_ACEOF
-#define DRAFT_RRTYPES /**/
-_ACEOF
-
- ;;
- no|*)
- ;;
-esac
-
# Check whether --enable-mmap was given.
if test "${enable_mmap+set}" = set; then :
enableval=$enable_mmap;
@@ -9371,7 +9355,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by NSD $as_me 4.0.0, which was
+This file was extended by NSD $as_me 4.0.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -9433,7 +9417,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-NSD config.status 4.0.0
+NSD config.status 4.0.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/usr.sbin/nsd/configure.ac b/usr.sbin/nsd/configure.ac
index 565c9948fc9..f880ed66ccb 100644
--- a/usr.sbin/nsd/configure.ac
+++ b/usr.sbin/nsd/configure.ac
@@ -4,7 +4,7 @@ dnl
sinclude(acx_nlnetlabs.m4)
-AC_INIT(NSD,4.0.0,nsd-bugs@nlnetlabs.nl)
+AC_INIT(NSD,4.0.1,nsd-bugs@nlnetlabs.nl)
AC_CONFIG_HEADER([config.h])
AC_AIX
@@ -488,6 +488,9 @@ else
fi
if test "$srcdir" != "."; then
CPPFLAGS="$CPPFLAGS -I$srcdir"
+ if test -f $srcdir/config.h; then
+ AC_ERROR([$srcdir/config.h is in the way, please remove it])
+ fi
fi
dnl LIBGTOP_CHECK_TYPE
@@ -789,15 +792,6 @@ case "$enable_minimal_responses" in
;;
esac
-AC_ARG_ENABLE(draft-rrtypes, AC_HELP_STRING([--enable-draft-rrtypes], [Enable draft RRtypes.]))
-case "$enable_draft_rrtypes" in
- yes)
- AC_DEFINE_UNQUOTED([DRAFT_RRTYPES], [], [Define this to enable draft RRtypes.])
- ;;
- no|*)
- ;;
-esac
-
AC_ARG_ENABLE(mmap, AC_HELP_STRING([--enable-mmap], [Use mmap instead of malloc. Experimental.]))
case "$enable_mmap" in
yes)
diff --git a/usr.sbin/nsd/dns.c b/usr.sbin/nsd/dns.c
index fbec4f5a2d6..29552b8051c 100644
--- a/usr.sbin/nsd/dns.c
+++ b/usr.sbin/nsd/dns.c
@@ -280,15 +280,15 @@ static rrtype_descriptor_type rrtype_descriptors[(RRTYPE_DESCRIPTORS_LENGTH+1)]
{ 53, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
/* 54 */
{ 54, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
- /* 55 */
+ /* 55 - HIP [RFC 5205] */
{ 55, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
- /* 56 */
+ /* 56 - NINFO */
{ 56, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
- /* 57 */
+ /* 57 - RKEY */
{ 57, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
- /* 58 */
+ /* 58 - TALINK */
{ 58, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
- /* 59 */
+ /* 59 - CDS */
{ 59, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
/* 60 */
{ 60, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
@@ -402,13 +402,13 @@ static rrtype_descriptor_type rrtype_descriptors[(RRTYPE_DESCRIPTORS_LENGTH+1)]
RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT } },
- /* 100 */
+ /* 100 - UINFO */
{ 100, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
- /* 101 */
+ /* 101 - UID */
{ 101, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
- /* 102 */
+ /* 102 - GID */
{ 102, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
- /* 103 */
+ /* 103 - UNSPEC */
{ 103, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
/* 104 */
{ TYPE_NID, "NID", T_NID, 2, 2,
@@ -426,15 +426,312 @@ static rrtype_descriptor_type rrtype_descriptors[(RRTYPE_DESCRIPTORS_LENGTH+1)]
{ TYPE_LP, "LP", T_LP, 2, 2,
{ RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME },
{ RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
-#ifdef DRAFT_RRTYPES
/* 108 */
{ TYPE_EUI48, "EUI48", T_EUI48, 1, 1,
{ RDATA_WF_EUI48 }, { RDATA_ZF_EUI48 } },
/* 109 */
{ TYPE_EUI64, "EUI64", T_EUI64, 1, 1,
{ RDATA_WF_EUI64 }, { RDATA_ZF_EUI64 } },
-#endif
+ /* 110 */
+ { 110, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 111 */
+ { 111, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 112 */
+ { 112, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 113 */
+ { 113, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 114 */
+ { 114, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 115 */
+ { 115, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 116 */
+ { 116, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 117 */
+ { 117, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 118 */
+ { 118, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 119 */
+ { 119, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 120 */
+ { 120, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 121 */
+ { 121, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 122 */
+ { 122, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 123 */
+ { 123, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 124 */
+ { 124, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 125 */
+ { 125, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 126 */
+ { 126, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 127 */
+ { 127, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 128 */
+ { 128, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 129 */
+ { 129, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 130 */
+ { 130, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 131 */
+ { 131, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 132 */
+ { 132, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 133 */
+ { 133, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 134 */
+ { 134, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 135 */
+ { 135, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 136 */
+ { 136, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 137 */
+ { 137, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 138 */
+ { 138, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 139 */
+ { 139, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 140 */
+ { 140, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 141 */
+ { 141, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 142 */
+ { 142, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 143 */
+ { 143, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 144 */
+ { 144, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 145 */
+ { 145, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 146 */
+ { 146, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 147 */
+ { 147, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 148 */
+ { 148, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 149 */
+ { 149, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 150 */
+ { 150, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 151 */
+ { 151, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 152 */
+ { 152, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 153 */
+ { 153, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 154 */
+ { 154, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 155 */
+ { 155, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 156 */
+ { 156, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 157 */
+ { 157, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 158 */
+ { 158, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 159 */
+ { 159, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 160 */
+ { 160, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 161 */
+ { 161, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 162 */
+ { 162, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 163 */
+ { 163, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 164 */
+ { 164, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 165 */
+ { 165, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 166 */
+ { 166, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 167 */
+ { 167, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 168 */
+ { 168, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 169 */
+ { 169, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 170 */
+ { 170, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 171 */
+ { 171, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 172 */
+ { 172, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 173 */
+ { 173, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 174 */
+ { 174, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 175 */
+ { 175, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 176 */
+ { 176, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 177 */
+ { 177, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 178 */
+ { 178, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 179 */
+ { 179, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 180 */
+ { 180, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 181 */
+ { 181, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 182 */
+ { 182, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 183 */
+ { 183, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 184 */
+ { 184, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 185 */
+ { 185, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 186 */
+ { 186, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 187 */
+ { 187, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 188 */
+ { 188, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 189 */
+ { 189, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 190 */
+ { 190, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 191 */
+ { 191, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 192 */
+ { 192, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 193 */
+ { 193, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 194 */
+ { 194, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 195 */
+ { 195, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 196 */
+ { 196, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 197 */
+ { 197, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 198 */
+ { 198, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 199 */
+ { 199, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 200 */
+ { 200, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 201 */
+ { 201, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 202 */
+ { 202, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 203 */
+ { 203, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 204 */
+ { 204, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 205 */
+ { 205, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 206 */
+ { 206, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 207 */
+ { 207, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 208 */
+ { 208, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 209 */
+ { 209, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 210 */
+ { 210, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 211 */
+ { 211, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 212 */
+ { 212, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 213 */
+ { 213, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 214 */
+ { 214, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 215 */
+ { 215, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 216 */
+ { 216, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 217 */
+ { 217, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 218 */
+ { 218, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 219 */
+ { 219, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 220 */
+ { 220, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 221 */
+ { 221, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 222 */
+ { 222, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 223 */
+ { 223, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 224 */
+ { 224, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 225 */
+ { 225, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 226 */
+ { 226, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 227 */
+ { 227, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 228 */
+ { 228, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 229 */
+ { 229, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 230 */
+ { 230, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 231 */
+ { 231, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 232 */
+ { 232, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 233 */
+ { 233, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 234 */
+ { 234, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 235 */
+ { 235, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 236 */
+ { 236, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 237 */
+ { 237, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 238 */
+ { 238, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 239 */
+ { 239, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 240 */
+ { 240, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 241 */
+ { 241, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 242 */
+ { 242, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 243 */
+ { 243, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 244 */
+ { 244, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 245 */
+ { 245, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 246 */
+ { 246, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 247 */
+ { 247, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 248 */
+ { 248, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 249 - TKEY [RFC 2930] */
+ { 249, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 250 - TSIG [RFC 2845] */
+ { 250, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 251 - IXFR [RFC 1995] */
+ { 251, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 252 - AXFR [RFC 1035, RFC 5936] */
+ { 252, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 253 - MAILB [RFC 1035] */
+ { 253, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 254 - MAILA [RFC 1035] */
+ { 254, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 255 - * [RFC 1035, RFC 6895] */
+ { 255, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 256 - URI */
+ { 256, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
+ /* 257 - CAA [RFC 6844] */
+ { TYPE_CAA, "CAA", T_CAA, 3, 3,
+ { RDATA_WF_BYTE, RDATA_WF_TEXT, RDATA_WF_LONG_TEXT },
+ { RDATA_ZF_BYTE, RDATA_ZF_TAG, RDATA_ZF_LONG_TEXT } },
+ /* 32768 - TA */
/* 32769 */
{ TYPE_DLV, "DLV", T_DLV, 4, 4,
{ RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
diff --git a/usr.sbin/nsd/dns.h b/usr.sbin/nsd/dns.h
index 79f8b678df2..2b0734764ec 100644
--- a/usr.sbin/nsd/dns.h
+++ b/usr.sbin/nsd/dns.h
@@ -143,11 +143,8 @@ typedef enum nsd_rc nsd_rc_type;
#define TYPE_L32 105 /* RFC 6742 */
#define TYPE_L64 106 /* RFC 6742 */
#define TYPE_LP 107 /* RFC 6742 */
-
-#ifdef DRAFT_RRTYPES
-#define TYPE_EUI48 108 /* draft-jabley-dnsext-eui48-eui64-rrtypes */
-#define TYPE_EUI64 109 /* draft-jabley-dnsext-eui48-eui64-rrtypes */
-#endif
+#define TYPE_EUI48 108 /* RFC 7043 */
+#define TYPE_EUI64 109 /* RFC 7043 */
#define TYPE_TSIG 250
#define TYPE_IXFR 251
@@ -156,6 +153,8 @@ typedef enum nsd_rc nsd_rc_type;
#define TYPE_MAILA 254 /* A request for mail agent RRs (Obsolete - see MX) */
#define TYPE_ANY 255 /* any type (wildcard) */
+#define TYPE_CAA 257 /* RFC 6844 */
+
#define TYPE_DLV 32769 /* RFC 4431 */
#define PSEUDO_TYPE_DLV RRTYPE_DESCRIPTORS_LENGTH
@@ -171,10 +170,8 @@ typedef enum nsd_rc nsd_rc_type;
#define IP4ADDRLEN (32/8)
#define IP6ADDRLEN (128/8)
-#ifdef DRAFT_RRTYPES
#define EUI48ADDRLEN (48/8)
#define EUI64ADDRLEN (64/8)
-#endif
#define NSEC3_HASH_LEN 20
@@ -197,13 +194,10 @@ enum rdata_wireformat
RDATA_WF_BINARYWITHLENGTH, /* Binary data preceded by 1 byte length */
RDATA_WF_APL, /* APL data. */
RDATA_WF_IPSECGATEWAY, /* IPSECKEY gateway ip4, ip6 or dname. */
-#ifdef DRAFT_RRTYPES
RDATA_WF_ILNP64, /* 64-bit uncompressed IPv6 address. */
RDATA_WF_EUI48, /* 48-bit address. */
- RDATA_WF_EUI64 /* 64-bit address. */
-#else
- RDATA_WF_ILNP64 /* 64-bit uncompressed IPv6 address. */
-#endif
+ RDATA_WF_EUI64, /* 64-bit address. */
+ RDATA_WF_LONG_TEXT /* Long (>255) text string. */
};
typedef enum rdata_wireformat rdata_wireformat_type;
@@ -238,10 +232,10 @@ enum rdata_zoneformat
RDATA_ZF_NSEC, /* NSEC type bitmap. */
RDATA_ZF_LOC, /* Location data. */
RDATA_ZF_ILNP64, /* 64-bit uncompressed IPv6 address. */
-#ifdef DRAFT_RRTYPES
RDATA_ZF_EUI48, /* EUI48 address. */
RDATA_ZF_EUI64, /* EUI64 address. */
-#endif
+ RDATA_ZF_LONG_TEXT, /* Long (>255) text string. */
+ RDATA_ZF_TAG, /* Text string without quotes. */
RDATA_ZF_UNKNOWN /* Unknown data. */
};
typedef enum rdata_zoneformat rdata_zoneformat_type;
@@ -262,13 +256,9 @@ typedef struct rrtype_descriptor rrtype_descriptor_type;
* Indexed by type. The special type "0" can be used to get a
* descriptor for unknown types (with one binary rdata).
*
- * EUI64 + 1
+ * CAA + 1
*/
-#ifdef DRAFT_RRTYPES
-#define RRTYPE_DESCRIPTORS_LENGTH (TYPE_EUI64 + 1)
-#else
-#define RRTYPE_DESCRIPTORS_LENGTH (TYPE_LP + 1)
-#endif
+#define RRTYPE_DESCRIPTORS_LENGTH (TYPE_CAA + 1)
rrtype_descriptor_type *rrtype_descriptor_by_name(const char *name);
rrtype_descriptor_type *rrtype_descriptor_by_type(uint16_t type);
diff --git a/usr.sbin/nsd/nsd-checkconf.8.in b/usr.sbin/nsd/nsd-checkconf.8.in
index a812f3710b3..b70408685e8 100644
--- a/usr.sbin/nsd/nsd-checkconf.8.in
+++ b/usr.sbin/nsd/nsd-checkconf.8.in
@@ -1,4 +1,4 @@
-.TH "nsd\-checkconf" "8" "Oct 29, 2013" "NLnet Labs" "nsd 4.0.0"
+.TH "nsd\-checkconf" "8" "Jan 27, 2014" "NLnet Labs" "nsd 4.0.1"
.\" Copyright (c) 2001\-2008, NLnet Labs. All rights reserved.
.\" See LICENSE for the license.
.SH "NAME"
diff --git a/usr.sbin/nsd/nsd.8.in b/usr.sbin/nsd/nsd.8.in
index ec6ad6365fa..d364782cbf7 100644
--- a/usr.sbin/nsd/nsd.8.in
+++ b/usr.sbin/nsd/nsd.8.in
@@ -1,10 +1,10 @@
-.TH "NSD" "8" "Oct 29, 2013" "NLnet Labs" "NSD 4.0.0"
+.TH "NSD" "8" "Jan 27, 2014" "NLnet Labs" "NSD 4.0.1"
.\" Copyright (c) 2001\-2008, NLnet Labs. All rights reserved.
.\" See LICENSE for the license.
.SH "NAME"
.LP
.B nsd
-\- Name Server Daemon (NSD) version 4.0.0.
+\- Name Server Daemon (NSD) version 4.0.1.
.SH "SYNOPSIS"
.LP
.B nsd
@@ -139,7 +139,8 @@ when they are anycast). The default is the name returned by gethostname(3).
Add the specified
.I nsid
to the EDNS section of the answer when queried with an NSID EDNS
-enabled packet.
+enabled packet. As a sequence of hex characters or with ascii_ prefix
+and then an ascii string.
.TP
.B \-l\fI logfile
Log messages to the specified
diff --git a/usr.sbin/nsd/nsd.c b/usr.sbin/nsd/nsd.c
index 740c069b210..262484265cb 100644
--- a/usr.sbin/nsd/nsd.c
+++ b/usr.sbin/nsd/nsd.c
@@ -503,13 +503,19 @@ main(int argc, char *argv[])
/* can only be given once */
break;
}
- if (strlen(optarg) % 2 != 0) {
- error("the NSID must be a hex string of an even length.");
- }
- nsd.nsid = xalloc(strlen(optarg) / 2);
- nsd.nsid_len = strlen(optarg) / 2;
- if (hex_pton(optarg, nsd.nsid, nsd.nsid_len) == -1) {
- error("hex string cannot be parsed '%s' in NSID.", optarg);
+ if (strncasecmp(optarg, "ascii_", 6) == 0) {
+ nsd.nsid = xalloc(strlen(optarg+6));
+ nsd.nsid_len = strlen(optarg+6);
+ memmove(nsd.nsid, optarg+6, nsd.nsid_len);
+ } else {
+ if (strlen(optarg) % 2 != 0) {
+ error("the NSID must be a hex string of an even length.");
+ }
+ nsd.nsid = xalloc(strlen(optarg) / 2);
+ nsd.nsid_len = strlen(optarg) / 2;
+ if (hex_pton(optarg, nsd.nsid, nsd.nsid_len) == -1) {
+ error("hex string cannot be parsed '%s' in NSID.", optarg);
+ }
}
break;
case 'l':
diff --git a/usr.sbin/nsd/nsd.conf.5.in b/usr.sbin/nsd/nsd.conf.5.in
index ab80e005296..38296c2ea0a 100644
--- a/usr.sbin/nsd/nsd.conf.5.in
+++ b/usr.sbin/nsd/nsd.conf.5.in
@@ -1,4 +1,4 @@
-.TH "nsd.conf" "5" "Oct 29, 2013" "NLnet Labs" "nsd 4.0.0"
+.TH "nsd.conf" "5" "Jan 27, 2014" "NLnet Labs" "nsd 4.0.1"
.\" Copyright (c) 2001\-2008, NLnet Labs. All rights reserved.
.\" See LICENSE for the license.
.SH "NAME"
@@ -116,6 +116,9 @@ to bind multiple ip\-addresses. Optionally, a port number can be given.
If none are given NSD listens to the wildcard interface. Same as commandline option
.BR \-a.
.TP
+.B interface:\fR <ip4 or ip6>[@port]
+Same as ip\-address (for easy of compatibility with unbound.conf).
+.TP
.B ip\-transparent:\fR <yes or no>
Allows NSD to bind to non local addresses. Default is no.
.TP
@@ -153,7 +156,8 @@ commandline option
.TP
.B nsid:\fR <string>
Add the specified nsid to the EDNS section of the answer when queried
-with an NSID EDNS enabled packet. Same as commandline option
+with an NSID EDNS enabled packet. As a sequence of hex characters or
+with ascii_ prefix and then an ascii string. Same as commandline option
.BR \-I .
.TP
.B logfile:\fR <filename>
diff --git a/usr.sbin/nsd/rdata.c b/usr.sbin/nsd/rdata.c
index d1ccc6effdf..9d01c6c28dd 100644
--- a/usr.sbin/nsd/rdata.c
+++ b/usr.sbin/nsd/rdata.c
@@ -98,9 +98,9 @@ rdata_dns_name_to_string(buffer_type *output, rdata_atom_type rdata,
if (ch=='.' || ch==';' || ch=='(' || ch==')' || ch=='\\') {
buffer_printf(output, "\\%c", (char) ch);
- } else if (!isgraph((int) ch)) {
+ } else if (!isgraph((int)(unsigned char) ch)) {
buffer_printf(output, "\\%03u", (unsigned int) ch);
- } else if (isprint((int) ch)) {
+ } else if (isprint((int)(unsigned char) ch)) {
buffer_printf(output, "%c", (char) ch);
} else {
buffer_printf(output, "\\%03u", (unsigned int) ch);
@@ -127,7 +127,7 @@ rdata_text_to_string(buffer_type *output, rdata_atom_type rdata,
buffer_printf(output, "\"");
for (i = 1; i <= length; ++i) {
char ch = (char) data[i];
- if (isprint((int)ch)) {
+ if (isprint((int)(unsigned char)ch)) {
if (ch == '"' || ch == '\\') {
buffer_printf(output, "\\");
}
@@ -153,7 +153,7 @@ rdata_texts_to_string(buffer_type *output, rdata_atom_type rdata,
buffer_printf(output, "\"");
for (i = 1; i <= data[pos]; ++i) {
char ch = (char) data[pos + i];
- if (isprint((int)ch)) {
+ if (isprint((int)(unsigned char)ch)) {
if (ch == '"' || ch == '\\') {
buffer_printf(output, "\\");
}
@@ -169,6 +169,46 @@ rdata_texts_to_string(buffer_type *output, rdata_atom_type rdata,
}
static int
+rdata_long_text_to_string(buffer_type *output, rdata_atom_type rdata,
+ rr_type* ATTR_UNUSED(rr))
+{
+ const uint8_t *data = rdata_atom_data(rdata);
+ uint16_t length = rdata_atom_size(rdata);
+ size_t i;
+
+ buffer_printf(output, "\"");
+ for (i = 0; i < length; ++i) {
+ char ch = (char) data[i];
+ if (isprint((int)(unsigned char)ch)) {
+ if (ch == '"' || ch == '\\') {
+ buffer_printf(output, "\\");
+ }
+ buffer_printf(output, "%c", ch);
+ } else {
+ buffer_printf(output, "\\%03u", (unsigned) data[i]);
+ }
+ }
+ buffer_printf(output, "\"");
+ return 1;
+}
+
+static int
+rdata_tag_to_string(buffer_type *output, rdata_atom_type rdata,
+ rr_type* ATTR_UNUSED(rr))
+{
+ const uint8_t *data = rdata_atom_data(rdata);
+ uint8_t length = data[0];
+ size_t i;
+ for (i = 1; i <= length; ++i) {
+ char ch = (char) data[i];
+ if (isdigit((int)ch) || islower((int)ch))
+ buffer_printf(output, "%c", ch);
+ else return 0;
+ }
+ return 1;
+}
+
+static int
rdata_byte_to_string(buffer_type *output, rdata_atom_type rdata,
rr_type* ATTR_UNUSED(rr))
{
@@ -235,7 +275,6 @@ rdata_ilnp64_to_string(buffer_type *output, rdata_atom_type rdata,
return 1;
}
-#ifdef DRAFT_RRTYPES
static int
rdata_eui48_to_string(buffer_type *output, rdata_atom_type rdata,
rr_type* ATTR_UNUSED(rr))
@@ -271,7 +310,6 @@ rdata_eui64_to_string(buffer_type *output, rdata_atom_type rdata,
a1, a2, a3, a4, a5, a6, a7, a8);
return 1;
}
-#endif
static int
rdata_rrtype_to_string(buffer_type *output, rdata_atom_type rdata,
@@ -631,10 +669,10 @@ static rdata_to_string_type rdata_to_string_table[RDATA_ZF_UNKNOWN + 1] = {
rdata_nsec_to_string,
rdata_loc_to_string,
rdata_ilnp64_to_string,
-#ifdef DRAFT_RRTYPES
rdata_eui48_to_string,
rdata_eui64_to_string,
-#endif
+ rdata_long_text_to_string,
+ rdata_tag_to_string,
rdata_unknown_to_string
};
@@ -694,7 +732,8 @@ rdata_wireformat_to_rdata_atoms(region_type *region,
length = sizeof(uint32_t);
break;
case RDATA_WF_TEXTS:
- length = data_size;
+ case RDATA_WF_LONG_TEXT:
+ length = end - buffer_position(packet);
break;
case RDATA_WF_TEXT:
case RDATA_WF_BINARYWITHLENGTH:
@@ -713,13 +752,12 @@ rdata_wireformat_to_rdata_atoms(region_type *region,
case RDATA_WF_ILNP64:
length = IP6ADDRLEN/2;
break;
-#ifdef DRAFT_RRTYPES
case RDATA_WF_EUI48:
length = EUI48ADDRLEN;
+ break;
case RDATA_WF_EUI64:
length = EUI64ADDRLEN;
break;
-#endif
case RDATA_WF_BINARY:
/* Remaining RDATA is binary. */
length = end - buffer_position(packet);
diff --git a/usr.sbin/nsd/server.c b/usr.sbin/nsd/server.c
index 33b3fb88666..936687fe349 100644
--- a/usr.sbin/nsd/server.c
+++ b/usr.sbin/nsd/server.c
@@ -674,7 +674,7 @@ server_prepare(struct nsd *nsd)
/* NULL for taskudb because we send soainfo in a moment, batched up,
* for all zones */
if(nsd->options->zonefiles_check)
- namedb_check_zonefiles(nsd->db, nsd->options, NULL, NULL);
+ namedb_check_zonefiles(nsd, nsd->options, NULL, NULL);
compression_table_capacity = 0;
initialize_dname_compression_tables(nsd);
@@ -866,7 +866,7 @@ add_all_soa_to_task(struct nsd* nsd, struct udb_base* taskudb)
/* add all SOA INFO to mytask */
udb_ptr_init(&task_last, taskudb);
for(n=radix_first(nsd->db->zonetree); n; n=radix_next(n)) {
- task_new_soainfo(taskudb, &task_last, (zone_type*)n->elem);
+ task_new_soainfo(taskudb, &task_last, (zone_type*)n->elem, 0);
}
udb_ptr_unlink(&task_last, taskudb);
}
@@ -1826,7 +1826,10 @@ handle_udp(int fd, short event, void* arg)
while(i<recvcount) {
sent = sendmmsg(fd, &msgs[i], recvcount-i, 0);
if(sent == -1) {
- log_msg(LOG_ERR, "sendmmsg failed: %s", strerror(errno));
+ const char* es = strerror(errno);
+ char a[48];
+ addr2str(&queries[i]->addr, a, sizeof(a));
+ log_msg(LOG_ERR, "sendmmsg [0]=%s count=%d failed: %s", a, (int)(recvcount-i), es);
#ifdef BIND8_STATS
data->nsd->st.txerr += recvcount-i;
#endif /* BIND8_STATS */
@@ -1937,7 +1940,10 @@ handle_udp(int fd, short event, void* arg)
(struct sockaddr *) &q->addr,
q->addrlen);
if (sent == -1) {
- log_msg(LOG_ERR, "sendto failed: %s", strerror(errno));
+ const char* es = strerror(errno);
+ char a[48];
+ addr2str(&q->addr, a, sizeof(a));
+ log_msg(LOG_ERR, "sendto %s failed: %s", a, es);
STATUP(data->nsd, txerr);
} else if ((size_t) sent != buffer_remaining(q->packet)) {
log_msg(LOG_ERR, "sent %d in place of %d bytes", sent, (int) buffer_remaining(q->packet));
diff --git a/usr.sbin/nsd/util.c b/usr.sbin/nsd/util.c
index bb016544b52..6b58b7472b5 100644
--- a/usr.sbin/nsd/util.c
+++ b/usr.sbin/nsd/util.c
@@ -243,8 +243,11 @@ xalloc(size_t size)
void *
xalloc_zero(size_t size)
{
- void *result = xalloc(size);
- memset(result, 0, size);
+ void *result = calloc(1, size);
+ if (!result) {
+ log_msg(LOG_ERR, "calloc failed: %s", strerror(errno));
+ exit(1);
+ }
return result;
}
diff --git a/usr.sbin/nsd/xfrd-disk.c b/usr.sbin/nsd/xfrd-disk.c
index 3b5e0120dd6..94ac93e3133 100644
--- a/usr.sbin/nsd/xfrd-disk.c
+++ b/usr.sbin/nsd/xfrd-disk.c
@@ -445,7 +445,7 @@ xfrd_write_state(struct xfrd_state* xfrd)
fprintf(out, "\tnext_timeout: %d",
(zone->zone_handler_flags&EV_TIMEOUT)?(int)zone->timeout.tv_sec:0);
if((zone->zone_handler_flags&EV_TIMEOUT)) {
- neato_timeout(out, "\t# =", zone->timeout.tv_sec - xfrd_time());
+ neato_timeout(out, "\t# =", zone->timeout.tv_sec);
}
fprintf(out, "\n");
xfrd_write_state_soa(out, "soa_nsd", &zone->soa_nsd,
diff --git a/usr.sbin/nsd/xfrd-tcp.c b/usr.sbin/nsd/xfrd-tcp.c
index a61ac95fdfa..0b7d7b4cafe 100644
--- a/usr.sbin/nsd/xfrd-tcp.c
+++ b/usr.sbin/nsd/xfrd-tcp.c
@@ -756,6 +756,10 @@ conn_read(xfrd_tcp_t* tcp)
assert(tcp->total_bytes == sizeof(tcp->msglen));
tcp->msglen = ntohs(tcp->msglen);
+ if(tcp->msglen == 0) {
+ buffer_set_limit(tcp->packet, tcp->msglen);
+ return 1;
+ }
if(tcp->msglen > buffer_capacity(tcp->packet)) {
log_msg(LOG_ERR, "buffer too small, dropping connection");
return 0;
diff --git a/usr.sbin/nsd/xfrd.c b/usr.sbin/nsd/xfrd.c
index e4788163eb6..166f6a9fac3 100644
--- a/usr.sbin/nsd/xfrd.c
+++ b/usr.sbin/nsd/xfrd.c
@@ -1166,7 +1166,15 @@ xfrd_udp_read(xfrd_zone_t* zone)
{
DEBUG(DEBUG_XFRD,1, (LOG_INFO, "xfrd: zone %s read udp data", zone->apex_str));
if(!xfrd_udp_read_packet(xfrd->packet, zone->zone_handler.ev_fd)) {
+ zone->master->bad_xfr_count++;
+ if (zone->master->bad_xfr_count > 2) {
+ zone->master->ixfr_disabled = time(NULL);
+ zone->master->bad_xfr_count = 0;
+ }
+ /* drop packet */
xfrd_udp_release(zone);
+ /* query next server */
+ xfrd_make_request(zone);
return;
}
switch(xfrd_handle_received_xfr_packet(zone, xfrd->packet)) {
diff --git a/usr.sbin/nsd/zonec.c b/usr.sbin/nsd/zonec.c
index ca06832e237..9fad2e097b7 100644
--- a/usr.sbin/nsd/zonec.c
+++ b/usr.sbin/nsd/zonec.c
@@ -236,7 +236,7 @@ zparser_conv_services(region_type *region, const char *protostr,
r = alloc_rdata(region, sizeof(uint8_t) + max_port / 8 + 1);
p = (uint8_t *) (r + 1);
*p = proto->p_proto;
- memcpy(p + 1, bitmap, *r);
+ memcpy(p + 1, bitmap, *r-1);
return r;
}
@@ -451,7 +451,6 @@ zparser_conv_ilnp64(region_type *region, const char *text)
return r;
}
-#ifdef DRAFT_RRTYPES
static uint16_t *
zparser_conv_eui48(region_type *region, const char *text)
{
@@ -541,7 +540,6 @@ zparser_conv_eui(region_type *region, const char *text, size_t len)
}
return r;
}
-#endif
uint16_t *
zparser_conv_text(region_type *region, const char *text, size_t len)
@@ -561,6 +559,50 @@ zparser_conv_text(region_type *region, const char *text, size_t len)
return r;
}
+/* for CAA Value [RFC 6844] */
+uint16_t *
+zparser_conv_long_text(region_type *region, const char *text, size_t len)
+{
+ uint16_t *r = NULL;
+ if (len > MAX_RDLENGTH) {
+ zc_error_prev_line("text string is longer than max rdlen");
+ return NULL;
+ }
+ r = alloc_rdata_init(region, text, len);
+ return r;
+}
+
+/* for CAA Tag [RFC 6844] */
+uint16_t *
+zparser_conv_tag(region_type *region, const char *text, size_t len)
+{
+ uint16_t *r = NULL;
+ uint8_t *p;
+ const char* ptr;
+
+ if (len < 1) {
+ zc_error_prev_line("invalid tag: zero length");
+ return NULL;
+ }
+ if (len > 15) {
+ zc_error_prev_line("invalid tag %s: longer than 15 characters (%u)",
+ text, (unsigned) len);
+ return NULL;
+ }
+ for (ptr = text; *ptr; ptr++) {
+ if (!isdigit(*ptr) && !islower(*ptr)) {
+ zc_error_prev_line("invalid tag %s: contains invalid char %c",
+ text, *ptr);
+ return NULL;
+ }
+ }
+ r = alloc_rdata(region, len + 1);
+ p = (uint8_t *) (r + 1);
+ *p = len;
+ memmove(p + 1, text, len);
+ return r;
+}
+
uint16_t *
zparser_conv_dns_name(region_type *region, const uint8_t* name, size_t len)
{
diff --git a/usr.sbin/nsd/zonec.h b/usr.sbin/nsd/zonec.h
index ca3ce7fa81e..4057b12cf36 100644
--- a/usr.sbin/nsd/zonec.h
+++ b/usr.sbin/nsd/zonec.h
@@ -96,10 +96,10 @@ uint16_t *zparser_conv_byte(region_type *region, const char *text);
uint16_t *zparser_conv_a(region_type *region, const char *text);
uint16_t *zparser_conv_aaaa(region_type *region, const char *text);
uint16_t *zparser_conv_ilnp64(region_type *region, const char *text);
-#ifdef DRAFT_RRTYPES
uint16_t *zparser_conv_eui(region_type *region, const char *text, size_t len);
-#endif
uint16_t *zparser_conv_text(region_type *region, const char *text, size_t len);
+uint16_t *zparser_conv_long_text(region_type *region, const char *text, size_t len);
+uint16_t *zparser_conv_tag(region_type *region, const char *text, size_t len);
uint16_t *zparser_conv_dns_name(region_type *region, const uint8_t* name, size_t len);
uint16_t *zparser_conv_b32(region_type *region, const char *b32);
uint16_t *zparser_conv_b64(region_type *region, const char *b64);
diff --git a/usr.sbin/nsd/zparser.y b/usr.sbin/nsd/zparser.y
index 28cd4a676be..63c40d5e188 100644
--- a/usr.sbin/nsd/zparser.y
+++ b/usr.sbin/nsd/zparser.y
@@ -67,7 +67,7 @@ nsec3_add_params(const char* hash_algo_str, const char* flag_str,
%token <type> T_OPT T_APL T_UINFO T_UID T_GID T_UNSPEC T_TKEY T_TSIG T_IXFR
%token <type> T_AXFR T_MAILB T_MAILA T_DS T_DLV T_SSHFP T_RRSIG T_NSEC T_DNSKEY
%token <type> T_SPF T_NSEC3 T_IPSECKEY T_DHCID T_NSEC3PARAM T_TLSA
-%token <type> T_NID T_L32 T_L64 T_LP T_EUI48 T_EUI64
+%token <type> T_NID T_L32 T_L64 T_LP T_EUI48 T_EUI64 T_CAA
/* other tokens */
%token DOLLAR_TTL DOLLAR_ORIGIN NL SP
@@ -612,6 +612,8 @@ type_and_rdata:
| T_EUI48 sp rdata_unknown { $$ = $1; parse_unknown_rdata($1, $3); }
| T_EUI64 sp rdata_eui64
| T_EUI64 sp rdata_unknown { $$ = $1; parse_unknown_rdata($1, $3); }
+ | T_CAA sp rdata_caa
+ | T_CAA sp rdata_unknown { $$ = $1; parse_unknown_rdata($1, $3); }
| T_UTYPE sp rdata_unknown { $$ = $1; parse_unknown_rdata($1, $3); }
| STR error NL
{
@@ -995,21 +997,22 @@ rdata_lp: STR sp dname trail
rdata_eui48: STR trail
{
-#ifdef DRAFT_RRTYPES
zadd_rdata_wireformat(zparser_conv_eui(parser->region, $1.str, 48));
-#else
- zc_error_prev_line("EUI48 not supported, enable with --enable-draft-rrtypes.");
-#endif
}
;
rdata_eui64: STR trail
{
-#ifdef DRAFT_RRTYPES
zadd_rdata_wireformat(zparser_conv_eui(parser->region, $1.str, 64));
-#else
- zc_error_prev_line("EUI64 not supported, enable with --enable-draft-rrtypes.");
-#endif
+ }
+ ;
+
+/* RFC 6844 */
+rdata_caa: STR sp STR sp STR trail
+ {
+ zadd_rdata_wireformat(zparser_conv_byte(parser->region, $1.str)); /* Flags */
+ zadd_rdata_wireformat(zparser_conv_tag(parser->region, $3.str, $3.len)); /* Tag */
+ zadd_rdata_wireformat(zparser_conv_long_text(parser->region, $5.str, $5.len)); /* Value */
}
;