aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2018-05-12 11:49:30 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2018-05-12 11:49:30 +0000
commitfbdb9ac866a647da0919b224f05cca039afc02fa (patch)
treea4ddb15b51a795c9f985e693a04d992a94f4f455
parent31f8d531e1359c7acd82cff9ab798cdeac277adc (diff)
downloadsrc-fbdb9ac866a647da0919b224f05cca039afc02fa.tar.gz
src-fbdb9ac866a647da0919b224f05cca039afc02fa.zip
Vendor import of Unbound 1.6.1.vendor/unbound/1.6.1
Notes
Notes: svn path=/vendor/unbound/dist/; revision=333529 svn path=/vendor/unbound/1.6.1/; revision=333530; tag=vendor/unbound/1.6.1
-rw-r--r--aclocal.m4326
-rw-r--r--compat/arc4_lock.c2
-rw-r--r--compat/ctime_r.c2
-rw-r--r--config.h.in19
-rwxr-xr-xconfigure450
-rw-r--r--configure.ac49
-rw-r--r--contrib/README2
-rw-r--r--contrib/unbound.service.in8
-rw-r--r--contrib/unbound.socket.in6
-rw-r--r--daemon/acl_list.h2
-rw-r--r--daemon/daemon.c19
-rw-r--r--daemon/remote.c49
-rw-r--r--daemon/stats.c7
-rw-r--r--daemon/stats.h2
-rw-r--r--daemon/unbound.c5
-rw-r--r--daemon/worker.c56
-rw-r--r--daemon/worker.h2
-rw-r--r--dnstap/dnstap.c9
-rw-r--r--doc/Changelog98
-rw-r--r--doc/README2
-rw-r--r--doc/example.conf.in24
-rw-r--r--doc/libunbound.3.in8
-rw-r--r--doc/unbound-anchor.8.in2
-rw-r--r--doc/unbound-checkconf.8.in2
-rw-r--r--doc/unbound-control.8.in16
-rw-r--r--doc/unbound-host.1.in2
-rw-r--r--doc/unbound.8.in4
-rw-r--r--doc/unbound.conf.5.in52
-rw-r--r--iterator/iter_donotq.h2
-rw-r--r--iterator/iter_fwd.c8
-rw-r--r--iterator/iter_fwd.h4
-rw-r--r--iterator/iter_hints.c2
-rw-r--r--iterator/iter_hints.h2
-rw-r--r--iterator/iter_priv.h4
-rw-r--r--iterator/iter_scrub.c4
-rw-r--r--iterator/iter_utils.c2
-rw-r--r--iterator/iterator.c2
-rw-r--r--iterator/iterator.h4
-rw-r--r--libunbound/context.c2
-rw-r--r--libunbound/context.h16
-rw-r--r--libunbound/libunbound.c15
-rw-r--r--libunbound/libworker.c2
-rw-r--r--libunbound/unbound-event.h5
-rw-r--r--libunbound/unbound.h4
-rw-r--r--pythonmod/interface.i26
-rw-r--r--pythonmod/pythonmod_utils.c2
-rw-r--r--services/cache/dns.c8
-rw-r--r--services/cache/dns.h2
-rw-r--r--services/cache/infra.c139
-rw-r--r--services/cache/infra.h50
-rw-r--r--services/cache/rrset.c10
-rw-r--r--services/cache/rrset.h2
-rw-r--r--services/listen_dnsport.c182
-rw-r--r--services/listen_dnsport.h11
-rw-r--r--services/localzone.c45
-rw-r--r--services/localzone.h14
-rw-r--r--services/mesh.c24
-rw-r--r--services/mesh.h24
-rw-r--r--services/outside_network.c22
-rw-r--r--services/outside_network.h20
-rw-r--r--services/view.c4
-rw-r--r--services/view.h13
-rw-r--r--smallapp/unbound-anchor.c5
-rw-r--r--smallapp/unbound-control.c15
-rw-r--r--systemd.m431
-rw-r--r--testcode/asynclook.c4
-rw-r--r--testcode/checklocks.c2
-rw-r--r--testcode/checklocks.h10
-rw-r--r--testcode/fake_event.c16
-rw-r--r--testcode/lock_verify.c18
-rw-r--r--testcode/memstats.c14
-rw-r--r--testcode/replay.c26
-rw-r--r--testcode/replay.h20
-rw-r--r--testcode/unitlruhash.c76
-rw-r--r--testcode/unitmain.c2
-rw-r--r--testcode/unitneg.c4
-rw-r--r--testcode/unitslabhash.c62
-rw-r--r--testcode/unitverify.c4
-rw-r--r--testdata/root_anchor.tpkgbin1004 -> 998 bytes
-rw-r--r--util/alloc.c25
-rw-r--r--util/alloc.h16
-rw-r--r--util/config_file.c21
-rw-r--r--util/config_file.h16
-rw-r--r--util/configlexer.c4069
-rw-r--r--util/configlexer.lex6
-rw-r--r--util/configparser.c2063
-rw-r--r--util/configparser.h246
-rw-r--r--util/configparser.y83
-rw-r--r--util/data/dname.c8
-rw-r--r--util/data/dname.h5
-rw-r--r--util/data/msgparse.c30
-rw-r--r--util/data/msgparse.h8
-rw-r--r--util/data/msgreply.c40
-rw-r--r--util/data/msgreply.h25
-rw-r--r--util/data/packed_rrset.c4
-rw-r--r--util/data/packed_rrset.h12
-rw-r--r--util/fptr_wlist.c31
-rw-r--r--util/fptr_wlist.h28
-rw-r--r--util/iana_ports.inc4
-rw-r--r--util/locks.c34
-rw-r--r--util/locks.h91
-rw-r--r--util/log.c4
-rw-r--r--util/mini_event.c2
-rw-r--r--util/mini_event.h4
-rw-r--r--util/module.c12
-rw-r--r--util/module.h20
-rw-r--r--util/net_help.c6
-rw-r--r--util/netevent.c18
-rw-r--r--util/netevent.h16
-rw-r--r--util/rbtree.c106
-rw-r--r--util/rbtree.h58
-rw-r--r--util/storage/dnstree.c30
-rw-r--r--util/storage/dnstree.h30
-rw-r--r--util/storage/lruhash.c17
-rw-r--r--util/storage/lruhash.h48
-rw-r--r--util/storage/slabhash.c18
-rw-r--r--util/storage/slabhash.h16
-rw-r--r--util/tube.c4
-rw-r--r--util/tube.h10
-rw-r--r--util/winsock_event.c2
-rw-r--r--util/winsock_event.h4
-rw-r--r--validator/autotrust.c14
-rw-r--r--validator/autotrust.h8
-rw-r--r--validator/val_anchor.c10
-rw-r--r--validator/val_anchor.h8
-rw-r--r--validator/val_neg.c12
-rw-r--r--validator/val_neg.h10
-rw-r--r--validator/val_nsec3.c26
-rw-r--r--validator/val_nsec3.h4
-rw-r--r--validator/val_secalgo.c22
-rw-r--r--validator/val_sigcrypt.c20
-rw-r--r--validator/val_sigcrypt.h6
-rw-r--r--validator/validator.h2
-rw-r--r--winrc/setup.nsi4
-rw-r--r--winrc/win_svc.c2
135 files changed, 5755 insertions, 3893 deletions
diff --git a/aclocal.m4 b/aclocal.m4
index ea5d6e9f8684..f21da5394f73 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -9044,3 +9044,329 @@ m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
+dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+dnl serial 11 (pkg-config-0.29.1)
+dnl
+dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+ [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])dnl PKG_PROG_PKG_CONFIG
+
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes ],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])dnl _PKG_CONFIG
+
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
+
+
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+ [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+ [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_INSTALLDIR
+
+
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+ [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+ [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_NOARCH_INSTALLDIR
+
+
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])dnl PKG_CHECK_VAR
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
diff --git a/compat/arc4_lock.c b/compat/arc4_lock.c
index faa743d15baa..0c45ad01b042 100644
--- a/compat/arc4_lock.c
+++ b/compat/arc4_lock.c
@@ -48,7 +48,7 @@ void _ARC4_UNLOCK(void)
}
#else /* !THREADS_DISABLED */
-static lock_quick_t arc4lock;
+static lock_quick_type arc4lock;
static int arc4lockinit = 0;
void _ARC4_LOCK(void)
diff --git a/compat/ctime_r.c b/compat/ctime_r.c
index 2594dc17e76f..87c2609a8408 100644
--- a/compat/ctime_r.c
+++ b/compat/ctime_r.c
@@ -6,7 +6,7 @@
#include "util/locks.h"
/** the lock for ctime buffer */
-static lock_basic_t ctime_lock;
+static lock_basic_type ctime_lock;
/** has it been inited */
static int ctime_r_init = 0;
diff --git a/config.h.in b/config.h.in
index 5806b9c75082..3a4f47b5ca79 100644
--- a/config.h.in
+++ b/config.h.in
@@ -68,6 +68,14 @@
if you don't. */
#undef HAVE_DECL_ARC4RANDOM_UNIFORM
+/* Define to 1 if you have the declaration of `inet_ntop', and to 0 if you
+ don't. */
+#undef HAVE_DECL_INET_NTOP
+
+/* Define to 1 if you have the declaration of `inet_pton', and to 0 if you
+ don't. */
+#undef HAVE_DECL_INET_PTON
+
/* Define to 1 if you have the declaration of `NID_secp384r1', and to 0 if you
don't. */
#undef HAVE_DECL_NID_SECP384R1
@@ -446,6 +454,9 @@
/* Define to 1 if you have the <syslog.h> header file. */
#undef HAVE_SYSLOG_H
+/* Define to 1 if systemd should be used */
+#undef HAVE_SYSTEMD
+
/* Define to 1 if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H
@@ -1061,6 +1072,14 @@ char *strsep(char **stringp, const char *delim);
int isblank(int c);
#endif
+#if defined(HAVE_INET_NTOP) && !HAVE_DECL_INET_NTOP
+const char *inet_ntop(int af, const void *src, char *dst, size_t size);
+#endif
+
+#if defined(HAVE_INET_PTON) && !HAVE_DECL_INET_PTON
+int inet_pton(int af, const char* src, void* dst);
+#endif
+
#if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS)
#define strptime unbound_strptime
struct tm;
diff --git a/configure b/configure
index 52fd17560e27..f81ed1e86c90 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for unbound 1.6.0.
+# Generated by GNU Autoconf 2.69 for unbound 1.6.1.
#
# Report bugs to <unbound-bugs@nlnetlabs.nl>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='unbound'
PACKAGE_TARNAME='unbound'
-PACKAGE_VERSION='1.6.0'
-PACKAGE_STRING='unbound 1.6.0'
+PACKAGE_VERSION='1.6.1'
+PACKAGE_STRING='unbound 1.6.1'
PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl'
PACKAGE_URL=''
@@ -658,6 +658,15 @@ WIN_DAEMON_SRC
WINAPPS
WINDRES
CHECKLOCK_OBJ
+USE_SYSTEMD_FALSE
+USE_SYSTEMD_TRUE
+SYSTEMD_DAEMON_LIBS
+SYSTEMD_DAEMON_CFLAGS
+SYSTEMD_LIBS
+SYSTEMD_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
staticexe
PC_LIBEVENT_DEPENDENCY
UNBOUND_EVENT_UNINSTALL
@@ -841,6 +850,7 @@ enable_tfo_server
with_libevent
with_libexpat
enable_static_exe
+enable_systemd
enable_lock_checks
enable_allsymbols
enable_dnstap
@@ -862,7 +872,14 @@ CPP
YACC
YFLAGS
LT_SYS_LIBRARY_PATH
-PYTHON_VERSION'
+PYTHON_VERSION
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+SYSTEMD_CFLAGS
+SYSTEMD_LIBS
+SYSTEMD_DAEMON_CFLAGS
+SYSTEMD_DAEMON_LIBS'
# Initialize some variables set by options.
@@ -1403,7 +1420,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 unbound 1.6.0 to adapt to many kinds of systems.
+\`configure' configures unbound 1.6.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1468,7 +1485,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of unbound 1.6.0:";;
+ short | recursive ) echo "Configuration of unbound 1.6.1:";;
esac
cat <<\_ACEOF
@@ -1508,6 +1525,7 @@ Optional Features:
--enable-tfo-server Enable TCP Fast Open for server mode
--enable-static-exe enable to compile executables statically against
(event) libs, for debug purposes
+ --enable-systemd compile with systemd support
--enable-lock-checks enable to check lock and unlock calls, for debug
purposes
--enable-allsymbols export all symbols from libunbound and link binaries
@@ -1591,6 +1609,19 @@ Some influential environment variables:
The installed Python version to use, for example '2.3'. This
string will be appended to the Python interpreter canonical
name.
+ PKG_CONFIG path to pkg-config utility
+ PKG_CONFIG_PATH
+ directories to add to pkg-config's search path
+ PKG_CONFIG_LIBDIR
+ path overriding pkg-config's built-in search path
+ SYSTEMD_CFLAGS
+ C compiler flags for SYSTEMD, overriding pkg-config
+ SYSTEMD_LIBS
+ linker flags for SYSTEMD, overriding pkg-config
+ SYSTEMD_DAEMON_CFLAGS
+ C compiler flags for SYSTEMD_DAEMON, overriding pkg-config
+ SYSTEMD_DAEMON_LIBS
+ linker flags for SYSTEMD_DAEMON, overriding pkg-config
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
@@ -1658,7 +1689,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-unbound configure 1.6.0
+unbound configure 1.6.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2367,7 +2398,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 unbound $as_me 1.6.0, which was
+It was created by unbound $as_me 1.6.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2719,11 +2750,11 @@ UNBOUND_VERSION_MAJOR=1
UNBOUND_VERSION_MINOR=6
-UNBOUND_VERSION_MICRO=0
+UNBOUND_VERSION_MICRO=1
LIBUNBOUND_CURRENT=6
-LIBUNBOUND_REVISION=3
+LIBUNBOUND_REVISION=4
LIBUNBOUND_AGE=4
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -2774,6 +2805,7 @@ LIBUNBOUND_AGE=4
# 1.5.9 had 6:1:4
# 1.5.10 had 6:2:4
# 1.6.0 had 6:3:4
+# 1.6.1 had 7:0:5 # ub_callback_t typedef renamed to ub_callback_type
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -18467,6 +18499,317 @@ if test x_$enable_static_exe = x_yes; then
fi
fi
+# Include systemd.m4 - begin
+# macros for configuring systemd
+# Copyright 2015, Sami Kerola, CloudFlare.
+# BSD licensed.
+# Check whether --enable-systemd was given.
+if test "${enable_systemd+set}" = set; then :
+ enableval=$enable_systemd;
+else
+ enable_systemd=no
+fi
+
+have_systemd=no
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.9.0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ PKG_CONFIG=""
+ fi
+fi
+if test "x$enable_systemd" != xno; then :
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD" >&5
+$as_echo_n "checking for SYSTEMD... " >&6; }
+
+if test -n "$SYSTEMD_CFLAGS"; then
+ pkg_cv_SYSTEMD_CFLAGS="$SYSTEMD_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_CFLAGS=`$PKG_CONFIG --cflags "libsystemd" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SYSTEMD_LIBS"; then
+ pkg_cv_SYSTEMD_LIBS="$SYSTEMD_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_LIBS=`$PKG_CONFIG --libs "libsystemd" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd" 2>&1`
+ else
+ SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SYSTEMD_PKG_ERRORS" >&5
+
+ have_systemd=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_systemd=no
+else
+ SYSTEMD_CFLAGS=$pkg_cv_SYSTEMD_CFLAGS
+ SYSTEMD_LIBS=$pkg_cv_SYSTEMD_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_systemd=yes
+fi
+ if test "x$have_systemd" != "xyes"; then :
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD_DAEMON" >&5
+$as_echo_n "checking for SYSTEMD_DAEMON... " >&6; }
+
+if test -n "$SYSTEMD_DAEMON_CFLAGS"; then
+ pkg_cv_SYSTEMD_DAEMON_CFLAGS="$SYSTEMD_DAEMON_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-daemon\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd-daemon") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_DAEMON_CFLAGS=`$PKG_CONFIG --cflags "libsystemd-daemon" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SYSTEMD_DAEMON_LIBS"; then
+ pkg_cv_SYSTEMD_DAEMON_LIBS="$SYSTEMD_DAEMON_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-daemon\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd-daemon") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_DAEMON_LIBS=`$PKG_CONFIG --libs "libsystemd-daemon" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ SYSTEMD_DAEMON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd-daemon" 2>&1`
+ else
+ SYSTEMD_DAEMON_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd-daemon" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SYSTEMD_DAEMON_PKG_ERRORS" >&5
+
+ have_systemd_daemon=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_systemd_daemon=no
+else
+ SYSTEMD_DAEMON_CFLAGS=$pkg_cv_SYSTEMD_DAEMON_CFLAGS
+ SYSTEMD_DAEMON_LIBS=$pkg_cv_SYSTEMD_DAEMON_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_systemd_daemon=yes
+fi
+ if test "x$have_systemd_daemon" = "xyes"; then :
+ have_systemd=yes
+fi
+
+fi
+ case $enable_systemd:$have_systemd in #(
+ yes:no) :
+ as_fn_error $? "systemd enabled but libsystemd not found" "$LINENO" 5 ;; #(
+ *:yes) :
+
+$as_echo "#define HAVE_SYSTEMD 1" >>confdefs.h
+
+ LIBS="$LIBS $SYSTEMD_LIBS"
+
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+fi
+ if test "x$have_systemd" = xyes; then
+ USE_SYSTEMD_TRUE=
+ USE_SYSTEMD_FALSE='#'
+else
+ USE_SYSTEMD_TRUE='#'
+ USE_SYSTEMD_FALSE=
+fi
+
+
+# Include systemd.m4 - end
+
# set lock checking if requested
# Check whether --enable-lock_checks was given.
if test "${enable_lock_checks+set}" = set; then :
@@ -18973,6 +19316,71 @@ if echo $build_os | grep darwin8 > /dev/null; then
$as_echo "#define DARWIN_BROKEN_SETREUID 1" >>confdefs.h
fi
+ac_fn_c_check_decl "$LINENO" "inet_pton" "ac_cv_have_decl_inet_pton" "
+$ac_includes_default
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#ifdef HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>
+#endif
+
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif
+
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+
+"
+if test "x$ac_cv_have_decl_inet_pton" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_INET_PTON $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "inet_ntop" "ac_cv_have_decl_inet_ntop" "
+$ac_includes_default
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#ifdef HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>
+#endif
+
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif
+
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+
+"
+if test "x$ac_cv_have_decl_inet_ntop" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_INET_NTOP $ac_have_decl
+_ACEOF
+
ac_fn_c_check_func "$LINENO" "inet_aton" "ac_cv_func_inet_aton"
if test "x$ac_cv_func_inet_aton" = xyes; then :
$as_echo "#define HAVE_INET_ATON 1" >>confdefs.h
@@ -19217,8 +19625,8 @@ else
esac
else
- case `uname` in
- Darwin)
+ case "$host" in
+ Darwin|*darwin*)
case " $LIBOBJS " in
*" getentropy_osx.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS getentropy_osx.$ac_objext"
@@ -19226,7 +19634,7 @@ esac
esac
;;
- SunOS)
+ *solaris*|*sunos*|SunOS)
case " $LIBOBJS " in
*" getentropy_solaris.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS getentropy_solaris.$ac_objext"
@@ -19330,7 +19738,7 @@ if test "$ac_res" != no; then :
fi
;;
- Linux|*)
+ *linux*|Linux|*)
case " $LIBOBJS " in
*" getentropy_linux.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS getentropy_linux.$ac_objext"
@@ -19920,12 +20328,12 @@ _ACEOF
-version=1.6.0
+version=1.6.1
date=`date +'%b %e, %Y'`
-ac_config_files="$ac_config_files Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h contrib/libunbound.pc"
+ac_config_files="$ac_config_files Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service"
ac_config_headers="$ac_config_headers config.h"
@@ -20038,6 +20446,10 @@ LIBOBJS=$ac_libobjs
LTLIBOBJS=$ac_ltlibobjs
+if test -z "${USE_SYSTEMD_TRUE}" && test -z "${USE_SYSTEMD_FALSE}"; then
+ as_fn_error $? "conditional \"USE_SYSTEMD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
@@ -20435,7 +20847,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 unbound $as_me 1.6.0, which was
+This file was extended by unbound $as_me 1.6.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -20501,7 +20913,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="\\
-unbound config.status 1.6.0
+unbound config.status 1.6.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -20924,6 +21336,8 @@ do
"smallapp/unbound-control-setup.sh") CONFIG_FILES="$CONFIG_FILES smallapp/unbound-control-setup.sh" ;;
"dnstap/dnstap_config.h") CONFIG_FILES="$CONFIG_FILES dnstap/dnstap_config.h" ;;
"contrib/libunbound.pc") CONFIG_FILES="$CONFIG_FILES contrib/libunbound.pc" ;;
+ "contrib/unbound.socket") CONFIG_FILES="$CONFIG_FILES contrib/unbound.socket" ;;
+ "contrib/unbound.service") CONFIG_FILES="$CONFIG_FILES contrib/unbound.service" ;;
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
diff --git a/configure.ac b/configure.ac
index d8505393552e..bc465b0ebb94 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10,14 +10,14 @@ sinclude(dnstap/dnstap.m4)
# must be numbers. ac_defun because of later processing
m4_define([VERSION_MAJOR],[1])
m4_define([VERSION_MINOR],[6])
-m4_define([VERSION_MICRO],[0])
+m4_define([VERSION_MICRO],[1])
AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound)
AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR])
AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR])
AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
LIBUNBOUND_CURRENT=6
-LIBUNBOUND_REVISION=3
+LIBUNBOUND_REVISION=4
LIBUNBOUND_AGE=4
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -68,6 +68,7 @@ LIBUNBOUND_AGE=4
# 1.5.9 had 6:1:4
# 1.5.10 had 6:2:4
# 1.6.0 had 6:3:4
+# 1.6.1 had 7:0:5 # ub_callback_t typedef renamed to ub_callback_type
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -1053,6 +1054,10 @@ if test x_$enable_static_exe = x_yes; then
fi
fi
+# Include systemd.m4 - begin
+sinclude(systemd.m4)
+# Include systemd.m4 - end
+
# set lock checking if requested
AC_ARG_ENABLE(lock_checks, AC_HELP_STRING([--enable-lock-checks],
[ enable to check lock and unlock calls, for debug purposes ]),
@@ -1151,6 +1156,28 @@ AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])])
if echo $build_os | grep darwin8 > /dev/null; then
AC_DEFINE(DARWIN_BROKEN_SETREUID, 1, [Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work])
fi
+AC_CHECK_DECLS([inet_pton,inet_ntop], [], [], [
+AC_INCLUDES_DEFAULT
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#ifdef HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>
+#endif
+
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif
+
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+])
AC_REPLACE_FUNCS(inet_aton)
AC_REPLACE_FUNCS(inet_pton)
AC_REPLACE_FUNCS(inet_ntop)
@@ -1188,11 +1215,11 @@ if test "$USE_NSS" = "no"; then
if test "$USE_WINSOCK" = 1; then
AC_LIBOBJ(getentropy_win)
else
- case `uname` in
- Darwin)
+ case "$host" in
+ Darwin|*darwin*)
AC_LIBOBJ(getentropy_osx)
;;
- SunOS)
+ *solaris*|*sunos*|SunOS)
AC_LIBOBJ(getentropy_solaris)
AC_CHECK_HEADERS([sys/sha2.h],, [
AC_CHECK_FUNCS([SHA512_Update],,[
@@ -1205,7 +1232,7 @@ if test "$USE_NSS" = "no"; then
fi
AC_SEARCH_LIBS([clock_gettime], [rt])
;;
- Linux|*)
+ *linux*|Linux|*)
AC_LIBOBJ(getentropy_linux)
AC_CHECK_FUNCS([SHA512_Update],,[
AC_DEFINE([COMPAT_SHA512], [1], [Do sha512 definitions in config.h])
@@ -1463,6 +1490,14 @@ char *strsep(char **stringp, const char *delim);
int isblank(int c);
#endif
+#if defined(HAVE_INET_NTOP) && !HAVE_DECL_INET_NTOP
+const char *inet_ntop(int af, const void *src, char *dst, size_t size);
+#endif
+
+#if defined(HAVE_INET_PTON) && !HAVE_DECL_INET_PTON
+int inet_pton(int af, const char* src, void* dst);
+#endif
+
#if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS)
#define strptime unbound_strptime
struct tm;
@@ -1571,6 +1606,6 @@ dnl if this is a distro tarball, that was already done by makedist.sh
AC_SUBST(version, [VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO])
AC_SUBST(date, [`date +'%b %e, %Y'`])
-AC_CONFIG_FILES([Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h contrib/libunbound.pc])
+AC_CONFIG_FILES([Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service])
AC_CONFIG_HEADER([config.h])
AC_OUTPUT
diff --git a/contrib/README b/contrib/README
index 8eae9b5b7cfc..7ccae735d797 100644
--- a/contrib/README
+++ b/contrib/README
@@ -29,3 +29,5 @@ distribution but may be helpful.
Patch from Stephane Lapie for ASAHI Net.
* unbound_smf22.tar.gz: Solaris SMF installation/removal scripts.
Contributed by Yuri Voinov.
+* unbound.socket and unbound.service: systemd files for unbound, install them
+ in /usr/lib/systemd/system. Contributed by Sami Kerola and Pavel Odintsov.
diff --git a/contrib/unbound.service.in b/contrib/unbound.service.in
new file mode 100644
index 000000000000..b33c3706dd44
--- /dev/null
+++ b/contrib/unbound.service.in
@@ -0,0 +1,8 @@
+[Service]
+Type=notify
+NotifyAccess=main
+ExecStart=/home/vagrant/unbound_systemd/unbound
+ExecReload=/bin/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target
diff --git a/contrib/unbound.socket.in b/contrib/unbound.socket.in
new file mode 100644
index 000000000000..162fb3e02b23
--- /dev/null
+++ b/contrib/unbound.socket.in
@@ -0,0 +1,6 @@
+[Socket]
+ListenDatagram=127.0.0.1:1153
+ListenStream=127.0.0.1:1153
+# ListenStream=@UNBOUND_RUN_DIR@/control
+[Install]
+WantedBy=sockets.target
diff --git a/daemon/acl_list.h b/daemon/acl_list.h
index ca9fd2d4b9d0..d0d42bfaebf6 100644
--- a/daemon/acl_list.h
+++ b/daemon/acl_list.h
@@ -76,7 +76,7 @@ struct acl_list {
* Tree of the addresses that are allowed/blocked.
* contents of type acl_addr.
*/
- rbtree_t tree;
+ rbtree_type tree;
};
/**
diff --git a/daemon/daemon.c b/daemon/daemon.c
index 88c695be3163..4cae4380065a 100644
--- a/daemon/daemon.c
+++ b/daemon/daemon.c
@@ -88,6 +88,10 @@
#include "sldns/keyraw.h"
#include <signal.h>
+#ifdef HAVE_SYSTEMD
+#include <systemd/sd-daemon.h>
+#endif
+
/** How many quit requests happened. */
static int sig_record_quit = 0;
/** How many reload requests happened. */
@@ -175,8 +179,15 @@ static void
signal_handling_playback(struct worker* wrk)
{
#ifdef SIGHUP
- if(sig_record_reload)
+ if(sig_record_reload) {
+# ifdef HAVE_SYSTEMD
+ sd_notify(0, "RELOADING=1");
+# endif
worker_sighandler(SIGHUP, wrk);
+# ifdef HAVE_SYSTEMD
+ sd_notify(0, "READY=1");
+# endif
+ }
#endif
if(sig_record_quit)
worker_sighandler(SIGTERM, wrk);
@@ -595,8 +606,14 @@ daemon_fork(struct daemon* daemon)
signal_handling_playback(daemon->workers[0]);
/* Start resolver service on main thread. */
+#ifdef HAVE_SYSTEMD
+ sd_notify(0, "READY=1");
+#endif
log_info("start of service (%s).", PACKAGE_STRING);
worker_work(daemon->workers[0]);
+#ifdef HAVE_SYSTEMD
+ sd_notify(0, "STOPPING=1");
+#endif
log_info("service stopped (%s).", PACKAGE_STRING);
/* we exited! a signal happened! Stop other threads */
diff --git a/daemon/remote.c b/daemon/remote.c
index d4ac833e33d0..681c57906a53 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -381,7 +381,7 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err,
if(ip[0] == '/') {
/* This looks like a local socket */
- fd = create_local_accept_sock(ip, &noproto);
+ fd = create_local_accept_sock(ip, &noproto, cfg->use_systemd);
/*
* Change socket ownership and permissions so users other
* than root can access it provided they are in the same
@@ -424,7 +424,7 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err,
/* open fd */
fd = create_tcp_accept_sock(res, 1, &noproto, 0,
- cfg->ip_transparent, 0, cfg->ip_freebind);
+ cfg->ip_transparent, 0, cfg->ip_freebind, cfg->use_systemd);
freeaddrinfo(res);
}
@@ -762,6 +762,8 @@ print_stats(SSL* ssl, const char* nm, struct stats_info* s)
struct timeval avg;
if(!ssl_printf(ssl, "%s.num.queries"SQ"%lu\n", nm,
(unsigned long)s->svr.num_queries)) return 0;
+ if(!ssl_printf(ssl, "%s.num.queries_ip_ratelimited"SQ"%lu\n", nm,
+ (unsigned long)s->svr.num_queries_ip_ratelimited)) return 0;
if(!ssl_printf(ssl, "%s.num.cachehits"SQ"%lu\n", nm,
(unsigned long)(s->svr.num_queries
- s->svr.num_queries_missed_cache))) return 0;
@@ -1416,7 +1418,7 @@ static void
do_cache_remove(struct worker* worker, uint8_t* nm, size_t nmlen,
uint16_t t, uint16_t c)
{
- hashvalue_t h;
+ hashvalue_type h;
struct query_info k;
rrset_cache_remove(worker->env.rrset_cache, nm, nmlen, t, c, 0);
if(t == LDNS_RR_TYPE_SOA)
@@ -2559,6 +2561,8 @@ struct ratelimit_list_arg {
time_t now;
};
+#define ip_ratelimit_list_arg ratelimit_list_arg
+
/** list items in the ratelimit table */
static void
rate_list(struct lruhash_entry* e, void* arg)
@@ -2577,6 +2581,24 @@ rate_list(struct lruhash_entry* e, void* arg)
ssl_printf(a->ssl, "%s %d limit %d\n", buf, max, lim);
}
+/** list items in the ip_ratelimit table */
+static void
+ip_rate_list(struct lruhash_entry* e, void* arg)
+{
+ char ip[128];
+ struct ip_ratelimit_list_arg* a = (struct ip_ratelimit_list_arg*)arg;
+ struct ip_rate_key* k = (struct ip_rate_key*)e->key;
+ struct ip_rate_data* d = (struct ip_rate_data*)e->data;
+ int lim = infra_ip_ratelimit;
+ int max = infra_rate_max(d, a->now);
+ if(a->all == 0) {
+ if(max < lim)
+ return;
+ }
+ addr_to_str(&k->addr, k->addrlen, ip, sizeof(ip));
+ ssl_printf(a->ssl, "%s %d limit %d\n", ip, max, lim);
+}
+
/** do the ratelimit_list command */
static void
do_ratelimit_list(SSL* ssl, struct worker* worker, char* arg)
@@ -2595,6 +2617,24 @@ do_ratelimit_list(SSL* ssl, struct worker* worker, char* arg)
slabhash_traverse(a.infra->domain_rates, 0, rate_list, &a);
}
+/** do the ip_ratelimit_list command */
+static void
+do_ip_ratelimit_list(SSL* ssl, struct worker* worker, char* arg)
+{
+ struct ip_ratelimit_list_arg a;
+ a.all = 0;
+ a.infra = worker->env.infra_cache;
+ a.now = *worker->env.now;
+ a.ssl = ssl;
+ arg = skipwhite(arg);
+ if(strcmp(arg, "+a") == 0)
+ a.all = 1;
+ if(a.infra->client_ip_rates==NULL ||
+ (a.all == 0 && infra_ip_ratelimit == 0))
+ return;
+ slabhash_traverse(a.infra->client_ip_rates, 0, ip_rate_list, &a);
+}
+
/** tell other processes to execute the command */
static void
distribute_cmd(struct daemon_remote* rc, SSL* ssl, char* cmd)
@@ -2673,6 +2713,9 @@ execute_cmd(struct daemon_remote* rc, SSL* ssl, char* cmd,
} else if(cmdcmp(p, "ratelimit_list", 14)) {
do_ratelimit_list(ssl, worker, p+14);
return;
+ } else if(cmdcmp(p, "ip_ratelimit_list", 17)) {
+ do_ip_ratelimit_list(ssl, worker, p+17);
+ return;
} else if(cmdcmp(p, "stub_add", 8)) {
/* must always distribute this cmd */
if(rc) distribute_cmd(rc, ssl, cmd);
diff --git a/daemon/stats.c b/daemon/stats.c
index 0687c0d24b43..a3c3d738976e 100644
--- a/daemon/stats.c
+++ b/daemon/stats.c
@@ -102,12 +102,14 @@ void server_stats_log(struct server_stats* stats, struct worker* worker,
int threadnum)
{
log_info("server stats for thread %d: %u queries, "
- "%u answers from cache, %u recursions, %u prefetch",
+ "%u answers from cache, %u recursions, %u prefetch, %u rejected by "
+ "ip ratelimiting",
threadnum, (unsigned)stats->num_queries,
(unsigned)(stats->num_queries -
stats->num_queries_missed_cache),
(unsigned)stats->num_queries_missed_cache,
- (unsigned)stats->num_queries_prefetch);
+ (unsigned)stats->num_queries_prefetch,
+ (unsigned)stats->num_queries_ip_ratelimited);
log_info("server stats for thread %d: requestlist max %u avg %g "
"exceeded %u jostled %u", threadnum,
(unsigned)stats->max_query_list_size,
@@ -226,6 +228,7 @@ void server_stats_reply(struct worker* worker, int reset)
void server_stats_add(struct stats_info* total, struct stats_info* a)
{
total->svr.num_queries += a->svr.num_queries;
+ total->svr.num_queries_ip_ratelimited += a->svr.num_queries_ip_ratelimited;
total->svr.num_queries_missed_cache += a->svr.num_queries_missed_cache;
total->svr.num_queries_prefetch += a->svr.num_queries_prefetch;
total->svr.sum_query_list_size += a->svr.sum_query_list_size;
diff --git a/daemon/stats.h b/daemon/stats.h
index 6c4178fc5317..0b9d77b427d0 100644
--- a/daemon/stats.h
+++ b/daemon/stats.h
@@ -63,6 +63,8 @@ struct sldns_buffer;
struct server_stats {
/** number of queries from clients received. */
size_t num_queries;
+ /** number of queries that have been dropped/ratelimited by ip. */
+ size_t num_queries_ip_ratelimited;
/** number of queries that had a cache-miss. */
size_t num_queries_missed_cache;
/** number of prefetch queries - cachehits with prefetch */
diff --git a/daemon/unbound.c b/daemon/unbound.c
index df9504254922..ba7337d8907a 100644
--- a/daemon/unbound.c
+++ b/daemon/unbound.c
@@ -264,6 +264,11 @@ apply_settings(struct daemon* daemon, struct config_file* cfg,
}
daemon_apply_cfg(daemon, cfg);
checkrlimits(cfg);
+
+ if (cfg->use_systemd && cfg->do_daemonize) {
+ log_warn("use-systemd and do-daemonize should not be enabled at the same time");
+ }
+
log_ident_set_fromdefault(cfg, log_default_identity);
}
diff --git a/daemon/worker.c b/daemon/worker.c
index 09a1465423f3..b23bbab95d92 100644
--- a/daemon/worker.c
+++ b/daemon/worker.c
@@ -566,7 +566,7 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
edns->bits &= EDNS_DO;
if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, rep,
LDNS_RCODE_SERVFAIL, edns, worker->scratchpad))
- return 0;
+ goto bail_out;
error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
qinfo, id, flags, edns);
rrset_array_unlock_touch(worker->env.rrset_cache,
@@ -599,7 +599,7 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
edns->bits &= EDNS_DO;
if(!inplace_cb_reply_cache_call(&worker->env, qinfo, NULL, rep,
(int)(flags&LDNS_RCODE_MASK), edns, worker->scratchpad))
- return 0;
+ goto bail_out;
if(!reply_info_answer_encode(qinfo, rep, id, flags,
repinfo->c->buffer, timenow, 1, worker->scratchpad,
udpsize, edns, (int)(edns->bits & EDNS_DO), secure)) {
@@ -787,7 +787,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
{
struct worker* worker = (struct worker*)arg;
int ret;
- hashvalue_t h;
+ hashvalue_type h;
struct lruhash_entry* e;
struct query_info qinfo;
struct edns_data edns;
@@ -825,7 +825,29 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
comm_point_drop_reply(repinfo);
return 0;
}
+
worker->stats.num_queries++;
+
+ /* check if this query should be dropped based on source ip rate limiting */
+ if(!infra_ip_ratelimit_inc(worker->env.infra_cache, repinfo,
+ *worker->env.now)) {
+ /* See if we are passed through with slip factor */
+ if(worker->env.cfg->ip_ratelimit_factor != 0 &&
+ ub_random_max(worker->env.rnd,
+ worker->env.cfg->ip_ratelimit_factor) == 1) {
+
+ char addrbuf[128];
+ addr_to_str(&repinfo->addr, repinfo->addrlen,
+ addrbuf, sizeof(addrbuf));
+ verbose(VERB_OPS, "ip_ratelimit allowed through for ip address %s ",
+ addrbuf);
+ } else {
+ worker->stats.num_queries_ip_ratelimited++;
+ comm_point_drop_reply(repinfo);
+ return 0;
+ }
+ }
+
/* see if query is in the cache */
if(!query_info_parse(&qinfo, c->buffer)) {
verbose(VERB_ALGO, "worker parse request: formerror.");
@@ -860,6 +882,28 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
}
goto send_reply;
}
+ if(qinfo.qtype == LDNS_RR_TYPE_OPT ||
+ qinfo.qtype == LDNS_RR_TYPE_TSIG ||
+ qinfo.qtype == LDNS_RR_TYPE_TKEY ||
+ qinfo.qtype == LDNS_RR_TYPE_MAILA ||
+ qinfo.qtype == LDNS_RR_TYPE_MAILB ||
+ (qinfo.qtype >= 128 && qinfo.qtype <= 248)) {
+ verbose(VERB_ALGO, "worker request: formerror for meta-type.");
+ log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen);
+ if(worker_err_ratelimit(worker, LDNS_RCODE_FORMERR) == -1) {
+ comm_point_drop_reply(repinfo);
+ return 0;
+ }
+ sldns_buffer_rewind(c->buffer);
+ LDNS_QR_SET(sldns_buffer_begin(c->buffer));
+ LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
+ LDNS_RCODE_FORMERR);
+ if(worker->stats.extended) {
+ worker->stats.qtype[qinfo.qtype]++;
+ server_stats_insrcode(&worker->stats, c->buffer);
+ }
+ goto send_reply;
+ }
if((ret=parse_edns_from_pkt(c->buffer, &edns, worker->scratchpad)) != 0) {
struct edns_data reply_edns;
verbose(VERB_ALGO, "worker parse edns: formerror.");
@@ -1064,6 +1108,12 @@ send_reply_rc:
dt_msg_send_client_response(&worker->dtenv, &repinfo->addr,
c->type, c->buffer);
#endif
+ if(worker->env.cfg->log_replies)
+ {
+ struct timeval tv = {0, 0};
+ log_reply_info(0, &qinfo, &repinfo->addr, repinfo->addrlen,
+ tv, 1, c->buffer);
+ }
return rc;
}
diff --git a/daemon/worker.h b/daemon/worker.h
index d6c87c80739c..0d7ce9521610 100644
--- a/daemon/worker.h
+++ b/daemon/worker.h
@@ -85,7 +85,7 @@ struct worker {
/** global shared daemon structure */
struct daemon* daemon;
/** thread id */
- ub_thread_t thr_id;
+ ub_thread_type thr_id;
/** pipe, for commands for this worker */
struct tube* cmd;
/** the event base this worker works with */
diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c
index 6df2fef3f312..5d0420f6fbba 100644
--- a/dnstap/dnstap.c
+++ b/dnstap/dnstap.c
@@ -121,7 +121,9 @@ dt_msg_init(const struct dt_env *env,
struct dt_env *
dt_create(const char *socket_path, unsigned num_workers)
{
+#ifdef UNBOUND_DEBUG
fstrm_res res;
+#endif
struct dt_env *env;
struct fstrm_iothr_options *fopt;
struct fstrm_unix_writer_options *fuwopt;
@@ -138,7 +140,12 @@ dt_create(const char *socket_path, unsigned num_workers)
return NULL;
fwopt = fstrm_writer_options_init();
- res = fstrm_writer_options_add_content_type(fwopt,
+#ifdef UNBOUND_DEBUG
+ res =
+#else
+ (void)
+#endif
+ fstrm_writer_options_add_content_type(fwopt,
DNSTAP_CONTENT_TYPE, sizeof(DNSTAP_CONTENT_TYPE) - 1);
log_assert(res == fstrm_res_success);
diff --git a/doc/Changelog b/doc/Changelog
index 57a13c8c537d..31c9e4627521 100644
--- a/doc/Changelog
+++ b/doc/Changelog
@@ -1,5 +1,103 @@
+14 February 2017: Wouter
+ - tag 1.6.1rc3.
+
+13 February 2017: Wouter
+ - Fix autoconf of systemd check for lack of pkg-config.
+
+10 February 2017: Wouter
+ - Fix pythonmod for typedef changes.
+ - Fix dnstap for warning of set but not used.
+ - tag 1.6.1rc2.
+
+9 February 2017: Wouter
+ - tag 1.6.1rc1.
+
+8 February 2017: Wouter
+ - Fix for type name change and fix warning on windows compile.
+
+7 February 2017: Wouter
+ - Include root trust anchor id 20326 in unbound-anchor.
+
+6 February 2017: Wouter
+ - Fix compile on solaris of the fix to use $host detect.
+
+4 February 2017: Wouter
+ - fix root_anchor test for updated icannbundle.pem lower certificates.
+
+26 January 2017: Wouter
+ - Fix 1211: Fix can't enable interface-automatic if no IPv6 with
+ more helpful error message.
+
+20 January 2017: Wouter
+ - Increase MAX_MODULE to 16.
+
+19 January 2017: Wouter
+ - Fix to Rename ub_callback_t to ub_callback_type, because POSIX
+ reserves _t typedefs.
+ - Fix to rename internally used types from _t to _type, because _t
+ type names are reserved by POSIX.
+ - iana portlist update
+
+12 January 2017: Wouter
+ - Fix to also block meta types 128 through to 248 with formerr.
+ - Fix #1206: Some view-related commands are missing from 'unbound-control -h'
+
+9 January 2017: Wouter
+ - Fix #1202: Fix code comment that packed_rrset_data is not always
+ 'packed'.
+
+6 January 2017: Wouter
+ - Fix #1201: Fix missing unlock in answer_from_cache error condition.
+
+5 January 2017: Wouter
+ - Fix to return formerr for queries for meta-types, to avoid
+ packet amplification if this meta-type is sent on to upstream.
+ - Fix #1184: Log DNS replies. This includes the same logging
+ information that DNS queries and response code and response size,
+ patch from Larissa Feng.
+ - Fix #1185: Source IP rate limiting, patch from Larissa Feng.
+
+3 January 2017: Wouter
+ - configure --enable-systemd and lets unbound use systemd sockets if
+ you enable use-systemd: yes in unbound.conf.
+ Also there are contrib/unbound.socket and contrib/unbound.service:
+ systemd files for unbound, install them in /usr/lib/systemd/system.
+ Contributed by Sami Kerola and Pavel Odintsov.
+ - Fix reload chdir failure when also chrooted to that directory.
+
+2 January 2017: Wouter
+ - Fix #1194: Cross build fails when $host isn't `uname` for getentropy.
+
+23 December 2016: Ralph
+ - Fix #1190: Do not echo back EDNS options in local-zone error response.
+ - iana portlist update
+
+21 December 2016: Ralph
+ - Fix #1188: Unresolved symbol 'fake_dsa' in libunbound.so when built
+ with Nettle
+
+19 December 2016: Ralph
+ - Fix #1191: remove comment about view deletion.
+
+15 December 2016: Wouter
+ - iana portlist update
+ - 64bit is default for windows builds.
+ - Fix inet_ntop and inet_pton warnings in windows compile.
+
+14 December 2016: Wouter
+ - Fix #1178: attempt to fix setup error at end, pop result values
+ at end of install.
+
+13 December 2016: Wouter
+ - Fix #1182: Fix Resource leak (socket), at startup.
+ - Fix unbound-control and ipv6 only.
+
+9 December 2016: Wouter
+ - Fix #1176: stack size too small for Alpine Linux.
+
8 December 2016: Wouter
- Fix downcast warnings from visual studio in sldns code.
+ - tag 1.6.0rc1 which became 1.6.0 on 15 dec, and trunk is 1.6.1.
7 December 2016: Ralph
- Add DSA support for OpenSSL 1.1.0
diff --git a/doc/README b/doc/README
index 661adcbdf236..acffafacc7d5 100644
--- a/doc/README
+++ b/doc/README
@@ -1,4 +1,4 @@
-README for Unbound 1.6.0
+README for Unbound 1.6.1
Copyright 2007 NLnet Labs
http://unbound.net
diff --git a/doc/example.conf.in b/doc/example.conf.in
index 55bbc32e616f..83e7c5c4c4e9 100644
--- a/doc/example.conf.in
+++ b/doc/example.conf.in
@@ -1,7 +1,7 @@
#
# Example configuration file.
#
-# See unbound.conf(5) man page, version 1.6.0.
+# See unbound.conf(5) man page, version 1.6.1.
#
# this is a comment.
@@ -200,7 +200,11 @@ server:
# Default is 0, system default MSS.
# outgoing-tcp-mss: 0
+ # Use systemd socket activation for UDP, TCP, and control sockets.
+ # use-systemd: no
+
# Detach from the terminal, run in background, "yes" or "no".
+ # Set the value to "no" when unbound runs as systemd service.
# do-daemonize: yes
# control which clients are allowed to make (recursive) queries
@@ -288,6 +292,10 @@ server:
# print one line with time, IP, name, type, class for every query.
# log-queries: no
+ # print one line per reply, with time, IP, name, type, class, rcode,
+ # timetoresolve, fromcache and responsesize.
+ # log-replies: no
+
# the pid file. Can be an absolute path outside of chroot/work dir.
# pidfile: "@UNBOUND_PIDFILE@"
@@ -666,6 +674,20 @@ server:
# can give this multiple times, the name closest to the zone is used.
# ratelimit-below-domain: com 1000
+ # global query ratelimit for all ip addresses.
+ # feature is experimental.
+ # if 0(default) it is disabled, otherwise states qps allowed per ip address
+ # ip-ratelimit: 0
+
+ # ip ratelimits are tracked in a cache, size in bytes of cache (or k,m).
+ # ip-ratelimit-size: 4m
+ # ip ratelimit cache slabs, reduces lock contention if equal to cpucount.
+ # ip-ratelimit-slabs: 4
+
+ # 0 blocks when ip is ratelimited, otherwise let 1/xth traffic through
+ # ip-ratelimit-factor: 10
+
+
# Python config section. To enable:
# o use --with-pythonmodule to configure before compiling.
# o list python in the module-config string (above) to enable.
diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in
index 37d63a5d2452..5be1d9019f57 100644
--- a/doc/libunbound.3.in
+++ b/doc/libunbound.3.in
@@ -1,4 +1,4 @@
-.TH "libunbound" "3" "Dec 15, 2016" "NLnet Labs" "unbound 1.6.0"
+.TH "libunbound" "3" "Feb 21, 2017" "NLnet Labs" "unbound 1.6.1"
.\"
.\" libunbound.3 -- unbound library functions manual
.\"
@@ -12,7 +12,7 @@
.B unbound.h,
.B ub_ctx,
.B ub_result,
-.B ub_callback_t,
+.B ub_callback_type,
.B ub_ctx_create,
.B ub_ctx_delete,
.B ub_ctx_set_option,
@@ -43,7 +43,7 @@
.B ub_ctx_zone_remove,
.B ub_ctx_data_add,
.B ub_ctx_data_remove
-\- Unbound DNS validating resolver 1.6.0 functions.
+\- Unbound DNS validating resolver 1.6.1 functions.
.SH "SYNOPSIS"
.B #include <unbound.h>
.LP
@@ -120,7 +120,7 @@
.br
\fIint\fR rrtype, \fIint\fR rrclass, \fIvoid*\fR mydata,
.br
- \fIub_callback_t\fR callback, \fIint*\fR async_id);
+ \fIub_callback_type\fR callback, \fIint*\fR async_id);
.LP
\fIint\fR
\fBub_cancel\fR(\fIstruct ub_ctx*\fR ctx, \fIint\fR async_id);
diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in
index 31a48c26e1e5..06b0f5c89764 100644
--- a/doc/unbound-anchor.8.in
+++ b/doc/unbound-anchor.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-anchor" "8" "Dec 15, 2016" "NLnet Labs" "unbound 1.6.0"
+.TH "unbound-anchor" "8" "Feb 21, 2017" "NLnet Labs" "unbound 1.6.1"
.\"
.\" unbound-anchor.8 -- unbound anchor maintenance utility manual
.\"
diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in
index d9a5b03aea1a..ea1cf4eb89cf 100644
--- a/doc/unbound-checkconf.8.in
+++ b/doc/unbound-checkconf.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-checkconf" "8" "Dec 15, 2016" "NLnet Labs" "unbound 1.6.0"
+.TH "unbound-checkconf" "8" "Feb 21, 2017" "NLnet Labs" "unbound 1.6.1"
.\"
.\" unbound-checkconf.8 -- unbound configuration checker manual
.\"
diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in
index aa801c4bda71..af574d249f7b 100644
--- a/doc/unbound-control.8.in
+++ b/doc/unbound-control.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-control" "8" "Dec 15, 2016" "NLnet Labs" "unbound 1.6.0"
+.TH "unbound-control" "8" "Feb 21, 2017" "NLnet Labs" "unbound 1.6.1"
.\"
.\" unbound-control.8 -- unbound remote control manual
.\"
@@ -194,7 +194,7 @@ harden\-referral\-path, prefetch, prefetch\-key, log\-queries,
hide\-identity, hide\-version, identity, version, val\-log\-level,
val\-log\-squelch, ignore\-cd\-flag, add\-holddown, del\-holddown,
keep\-missing, tcp\-upstream, ssl\-upstream, max\-udp\-size, ratelimit,
-cache\-max\-ttl, cache\-min\-ttl, cache\-max\-negative\-ttl.
+ip\-ratelimit, cache\-max\-ttl, cache\-min\-ttl, cache\-max\-negative\-ttl.
.TP
.B get_option \fIopt
Get the value of the option. Give the option name without a trailing ':'.
@@ -280,6 +280,12 @@ just the ratelimited domains, with their estimated qps. The ratelimited
domains return an error for uncached (new) queries, but cached queries work
as normal.
.TP
+.B ip_ratelimit_list \fR[\fI+a\fR]
+List the ip addresses that are ratelimited. Printed one per line with current
+estimated qps and qps limit from config. With +a it prints all ips, not
+just the ratelimited ips, with their estimated qps. The ratelimited
+ips are dropped before checking the cache.
+.TP
.B view_list_local_zones \fIview\fR
\fIlist_local_zones\fR for given view.
.TP
@@ -289,6 +295,9 @@ as normal.
.B view_local_zone_remove \fIview\fR \fIname
\fIlocal_zone_remove\fR for given view.
.TP
+.B view_list_local_data \fIview\fR
+\fIlist_local_data\fR for given view.
+.TP
.B view_local_data \fIview\fR \fIRR data...
\fIlocal_data\fR for given view.
.TP
@@ -319,6 +328,9 @@ The \fIstats\fR command shows a number of statistic counters.
.I threadX.num.queries
number of queries received by thread
.TP
+.I threadX.num.queries_ip_ratelimited
+number of queries rate limited by thread
+.TP
.I threadX.num.cachehits
number of queries that were successfully answered using a cache lookup
.TP
diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in
index b7fe345cbe27..eba19e07eb21 100644
--- a/doc/unbound-host.1.in
+++ b/doc/unbound-host.1.in
@@ -1,4 +1,4 @@
-.TH "unbound\-host" "1" "Dec 15, 2016" "NLnet Labs" "unbound 1.6.0"
+.TH "unbound\-host" "1" "Feb 21, 2017" "NLnet Labs" "unbound 1.6.1"
.\"
.\" unbound-host.1 -- unbound DNS lookup utility
.\"
diff --git a/doc/unbound.8.in b/doc/unbound.8.in
index af2ac111b73e..52cd85341e8d 100644
--- a/doc/unbound.8.in
+++ b/doc/unbound.8.in
@@ -1,4 +1,4 @@
-.TH "unbound" "8" "Dec 15, 2016" "NLnet Labs" "unbound 1.6.0"
+.TH "unbound" "8" "Feb 21, 2017" "NLnet Labs" "unbound 1.6.1"
.\"
.\" unbound.8 -- unbound manual
.\"
@@ -9,7 +9,7 @@
.\"
.SH "NAME"
.B unbound
-\- Unbound DNS validating resolver 1.6.0.
+\- Unbound DNS validating resolver 1.6.1.
.SH "SYNOPSIS"
.B unbound
.RB [ \-h ]
diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in
index 39ce95c57993..45248ac58c4f 100644
--- a/doc/unbound.conf.5.in
+++ b/doc/unbound.conf.5.in
@@ -1,4 +1,4 @@
-.TH "unbound.conf" "5" "Dec 15, 2016" "NLnet Labs" "unbound 1.6.0"
+.TH "unbound.conf" "5" "Feb 21, 2017" "NLnet Labs" "unbound 1.6.1"
.\"
.\" unbound.conf.5 -- unbound.conf manual
.\"
@@ -413,9 +413,14 @@ turned off.
The port number on which to provide TCP SSL service, default 853, only
interfaces configured with that port number as @number get the SSL service.
.TP
+.B use\-systemd: \fI<yes or no>
+Enable or disable systemd socket activation.
+Default is no.
+.TP
.B do\-daemonize: \fI<yes or no>
Enable or disable whether the unbound server forks into the background as
-a daemon. Default is yes.
+a daemon. Set the value to \fIno\fR when unbound runs as systemd service.
+Default is yes.
.TP
.B access\-control: \fI<IP netblock> <action>
The netblock is given as an IP4 or IP6 address with /size appended for a
@@ -552,6 +557,13 @@ name, type and class. Default is no. Note that it takes time to print these
lines which makes the server (significantly) slower. Odd (nonprintable)
characters in names are printed as '?'.
.TP
+.B log\-replies: \fI<yes or no>
+Prints one line per reply to the log, with the log timestamp and IP address,
+name, type, class, return code, time to resolve, from cache and response size.
+Default is no. Note that it takes time to print these
+lines which makes the server (significantly) slower. Odd (nonprintable)
+characters in names are printed as '?'.
+.TP
.B pidfile: \fI<filename>
The process id is written to the file. Default is "@UNBOUND_PIDFILE@".
So,
@@ -1193,6 +1205,34 @@ in different parts of the namespace. The closest matching suffix is used
to determine the qps limit. The rate for the exact matching domain name
is not changed, use ratelimit\-for\-domain to set that, you might want
to use different settings for a top\-level\-domain and subdomains.
+.TP 5
+.B ip\-ratelimit: \fI<number or 0>
+Enable global ratelimiting of queries accepted per ip address.
+If 0, the default, it is disabled. This option is experimental at this time.
+The ratelimit is in queries per second that are allowed. More queries are
+completely dropped and will not receive a reply, SERVFAIL or otherwise.
+IP ratelimiting happens before looking in the cache. This may be useful for
+mitigating amplification attacks.
+.TP 5
+.B ip\-ratelimit\-size: \fI<memory size>
+Give the size of the data structure in which the current ongoing rates are
+kept track in. Default 4m. In bytes or use m(mega), k(kilo), g(giga).
+The ip ratelimit structure is small, so this data structure likely does
+not need to be large.
+.TP 5
+.B ip\-ratelimit\-slabs: \fI<number>
+Give power of 2 number of slabs, this is used to reduce lock contention
+in the ip ratelimit tracking data structure. Close to the number of cpus is
+a fairly good setting.
+.TP 5
+.B ip\-ratelimit\-factor: \fI<number>
+Set the amount of queries to rate limit when the limit is exceeded.
+If set to 0, all queries are dropped for addresses where the limit is
+exceeded. If set to another value, 1 in that number is allowed through
+to complete. Default is 10, allowing 1/10 traffic to flow normally.
+This can make ordinary queries complete (if repeatedly queried for),
+and enter the cache, whilst also mitigating the traffic flow by the
+factor given.
.SS "Remote Control Options"
In the
.B remote\-control:
@@ -1376,9 +1416,15 @@ acts like the iterator and validator modules do, on queries and answers.
To enable the script module it has to be compiled into the daemon,
and the word "python" has to be put in the \fBmodule\-config:\fR option
(usually first, or between the validator and iterator).
+.LP
+If the \fBchroot:\fR option is enabled, you should make sure Python's
+library directory structure is bind mounted in the new root environment, see
+\fImount\fR(8). Also the \fBpython\-script:\fR path should be specified as an
+absolute path relative to the new root, or as a relative path to the working
+directory.
.TP
.B python\-script: \fI<python file>\fR
-The script file to load.
+The script file to load.
.SS "DNS64 Module Options"
.LP
The dns64 module must be configured in the \fBmodule\-config:\fR "dns64
diff --git a/iterator/iter_donotq.h b/iterator/iter_donotq.h
index 429e5a3dd26d..14105073aa37 100644
--- a/iterator/iter_donotq.h
+++ b/iterator/iter_donotq.h
@@ -58,7 +58,7 @@ struct iter_donotq {
* contents of type addr_tree_node. Each node is an address span
* that must not be used to send queries to.
*/
- rbtree_t tree;
+ rbtree_type tree;
};
/**
diff --git a/iterator/iter_fwd.c b/iterator/iter_fwd.c
index 1c40d41641da..0ba6c6ddfa9e 100644
--- a/iterator/iter_fwd.c
+++ b/iterator/iter_fwd.c
@@ -82,7 +82,7 @@ static void fwd_zone_free(struct iter_forward_zone* n)
free(n);
}
-static void delfwdnode(rbnode_t* n, void* ATTR_UNUSED(arg))
+static void delfwdnode(rbnode_type* n, void* ATTR_UNUSED(arg))
{
struct iter_forward_zone* node = (struct iter_forward_zone*)n;
fwd_zone_free(node);
@@ -332,7 +332,7 @@ forwards_apply_cfg(struct iter_forwards* fwd, struct config_file* cfg)
struct delegpt*
forwards_find(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass)
{
- rbnode_t* res = NULL;
+ rbnode_type* res = NULL;
struct iter_forward_zone key;
key.node.key = &key;
key.dclass = qclass;
@@ -347,7 +347,7 @@ struct delegpt*
forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass)
{
/* lookup the forward zone in the tree */
- rbnode_t* res = NULL;
+ rbnode_type* res = NULL;
struct iter_forward_zone *result;
struct iter_forward_zone key;
key.node.key = &key;
@@ -388,7 +388,7 @@ int
forwards_next_root(struct iter_forwards* fwd, uint16_t* dclass)
{
struct iter_forward_zone key;
- rbnode_t* n;
+ rbnode_type* n;
struct iter_forward_zone* p;
if(*dclass == 0) {
/* first root item is first item in tree */
diff --git a/iterator/iter_fwd.h b/iterator/iter_fwd.h
index 20113a395ecc..e90b74c16a5d 100644
--- a/iterator/iter_fwd.h
+++ b/iterator/iter_fwd.h
@@ -57,7 +57,7 @@ struct iter_forwards {
* match which gives the ancestor needed.
* contents of type iter_forward_zone.
*/
- rbtree_t* tree;
+ rbtree_type* tree;
};
/**
@@ -65,7 +65,7 @@ struct iter_forwards {
*/
struct iter_forward_zone {
/** redblacktree node, key is this structure: class and name */
- rbnode_t node;
+ rbnode_type node;
/** name */
uint8_t* name;
/** length of name */
diff --git a/iterator/iter_hints.c b/iterator/iter_hints.c
index 7fb665200c63..74869d355472 100644
--- a/iterator/iter_hints.c
+++ b/iterator/iter_hints.c
@@ -67,7 +67,7 @@ static void hints_stub_free(struct iter_hints_stub* s)
free(s);
}
-static void delhintnode(rbnode_t* n, void* ATTR_UNUSED(arg))
+static void delhintnode(rbnode_type* n, void* ATTR_UNUSED(arg))
{
struct iter_hints_stub* node = (struct iter_hints_stub*)n;
hints_stub_free(node);
diff --git a/iterator/iter_hints.h b/iterator/iter_hints.h
index 715ec9f41063..06b4b9667d13 100644
--- a/iterator/iter_hints.h
+++ b/iterator/iter_hints.h
@@ -59,7 +59,7 @@ struct iter_hints {
* contents of type iter_hints_stub. The class IN root is in here.
* uses name_tree_node from dnstree.h.
*/
- rbtree_t tree;
+ rbtree_type tree;
};
/**
diff --git a/iterator/iter_priv.h b/iterator/iter_priv.h
index 6fa84900bf18..0430d57e3e3b 100644
--- a/iterator/iter_priv.h
+++ b/iterator/iter_priv.h
@@ -60,14 +60,14 @@ struct iter_priv {
* contents of type addr_tree_node.
* No further data need, only presence or absence.
*/
- rbtree_t a;
+ rbtree_type a;
/**
* Tree of the domains spans that are allowed to contain
* the blocked address spans.
* contents of type name_tree_node.
* No further data need, only presence or absence.
*/
- rbtree_t n;
+ rbtree_type n;
};
/**
diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c
index 8a3fc170c053..1bee85c0b991 100644
--- a/iterator/iter_scrub.c
+++ b/iterator/iter_scrub.c
@@ -161,8 +161,8 @@ mark_additional_rrset(sldns_buffer* pkt, struct msg_parse* msg,
for(rr = rrset->rr_first; rr; rr = rr->next) {
if(get_additional_name(rrset, rr, &nm, &nmlen, pkt)) {
/* mark A */
- hashvalue_t h = pkt_hash_rrset(pkt, nm, LDNS_RR_TYPE_A,
- rrset->rrset_class, 0);
+ hashvalue_type h = pkt_hash_rrset(pkt, nm,
+ LDNS_RR_TYPE_A, rrset->rrset_class, 0);
struct rrset_parse* r = msgparse_hashtable_lookup(
msg, pkt, h, 0, nm, nmlen,
LDNS_RR_TYPE_A, rrset->rrset_class);
diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c
index 344b6aafd7fb..0b1b456113f7 100644
--- a/iterator/iter_utils.c
+++ b/iterator/iter_utils.c
@@ -108,7 +108,7 @@ read_fetch_policy(struct iter_env* ie, const char* str)
/** apply config caps whitelist items to name tree */
static int
-caps_white_apply_cfg(rbtree_t* ntree, struct config_file* cfg)
+caps_white_apply_cfg(rbtree_type* ntree, struct config_file* cfg)
{
struct config_strlist* p;
for(p=cfg->caps_whitelist; p; p=p->next) {
diff --git a/iterator/iterator.c b/iterator/iterator.c
index f60893323a10..99ce96f384ee 100644
--- a/iterator/iterator.c
+++ b/iterator/iterator.c
@@ -88,7 +88,7 @@ iter_init(struct module_env* env, int id)
/** delete caps_whitelist element */
static void
-caps_free(struct rbnode_t* n, void* ATTR_UNUSED(d))
+caps_free(struct rbnode_type* n, void* ATTR_UNUSED(d))
{
if(n) {
free(((struct name_tree_node*)n)->name);
diff --git a/iterator/iterator.h b/iterator/iterator.h
index 5585f578958d..37b0ab0dc24a 100644
--- a/iterator/iterator.h
+++ b/iterator/iterator.h
@@ -51,7 +51,7 @@ struct iter_forwards;
struct iter_donotq;
struct iter_prep_list;
struct iter_priv;
-struct rbtree_t;
+struct rbtree_type;
/** max number of targets spawned for a query and its subqueries */
#define MAX_TARGET_COUNT 64
@@ -115,7 +115,7 @@ struct iter_env {
struct iter_priv* priv;
/** whitelist for capsforid names */
- struct rbtree_t* caps_white;
+ struct rbtree_type* caps_white;
/** The maximum dependency depth that this resolver will pursue. */
int max_dependency_depth;
diff --git a/libunbound/context.c b/libunbound/context.c
index 94a2472ae531..e203111b70d8 100644
--- a/libunbound/context.c
+++ b/libunbound/context.c
@@ -127,7 +127,7 @@ find_id(struct ub_ctx* ctx, int* id)
struct ctx_query*
context_new(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass,
- ub_callback_t cb, void* cbarg)
+ ub_callback_type cb, void* cbarg)
{
struct ctx_query* q = (struct ctx_query*)calloc(1, sizeof(*q));
if(!q) return NULL;
diff --git a/libunbound/context.h b/libunbound/context.h
index d32c0b00aa03..1761c4d87216 100644
--- a/libunbound/context.h
+++ b/libunbound/context.h
@@ -61,17 +61,17 @@ struct ub_event_base;
struct ub_ctx {
/* --- pipes --- */
/** mutex on query write pipe */
- lock_basic_t qqpipe_lock;
+ lock_basic_type qqpipe_lock;
/** the query write pipe */
struct tube* qq_pipe;
/** mutex on result read pipe */
- lock_basic_t rrpipe_lock;
+ lock_basic_type rrpipe_lock;
/** the result read pipe */
struct tube* rr_pipe;
/* --- shared data --- */
/** mutex for access to env.cfg, finalized and dothread */
- lock_basic_t cfglock;
+ lock_basic_type cfglock;
/**
* The context has been finalized
* This is after config when the first resolve is done.
@@ -84,7 +84,7 @@ struct ub_ctx {
/** pid of bg worker process */
pid_t bg_pid;
/** tid of bg worker thread */
- ub_thread_t bg_tid;
+ ub_thread_type bg_tid;
/** do threading (instead of forking) for async resolution */
int dothread;
@@ -129,7 +129,7 @@ struct ub_ctx {
* Used to see if querynum is free for use.
* Content of type ctx_query.
*/
- rbtree_t queries;
+ rbtree_type queries;
};
/**
@@ -140,7 +140,7 @@ struct ub_ctx {
*/
struct ctx_query {
/** node in rbtree, must be first entry, key is ptr to the querynum */
- struct rbnode_t node;
+ struct rbnode_type node;
/** query id number, key for node */
int querynum;
/** was this an async query? */
@@ -149,7 +149,7 @@ struct ctx_query {
int cancelled;
/** for async query, the callback function */
- ub_callback_t cb;
+ ub_callback_type cb;
/** for async query, the callback user arg */
void* cb_arg;
@@ -242,7 +242,7 @@ void context_query_delete(struct ctx_query* q);
* @return new ctx_query or NULL for malloc failure.
*/
struct ctx_query* context_new(struct ub_ctx* ctx, const char* name, int rrtype,
- int rrclass, ub_callback_t cb, void* cbarg);
+ int rrclass, ub_callback_type cb, void* cbarg);
/**
* Get a new alloc. Creates a new one or uses a cached one.
diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c
index aaaaec08ce9e..727b27522019 100644
--- a/libunbound/libunbound.c
+++ b/libunbound/libunbound.c
@@ -215,7 +215,7 @@ ub_ctx_create_event(struct event_base* eb)
/** delete q */
static void
-delq(rbnode_t* n, void* ATTR_UNUSED(arg))
+delq(rbnode_type* n, void* ATTR_UNUSED(arg))
{
struct ctx_query* q = (struct ctx_query*)n;
context_query_delete(q);
@@ -500,7 +500,7 @@ ub_fd(struct ub_ctx* ctx)
/** process answer from bg worker */
static int
process_answer_detail(struct ub_ctx* ctx, uint8_t* msg, uint32_t len,
- ub_callback_t* cb, void** cbarg, int* err,
+ ub_callback_type* cb, void** cbarg, int* err,
struct ub_result** res)
{
struct ctx_query* q;
@@ -567,7 +567,7 @@ static int
process_answer(struct ub_ctx* ctx, uint8_t* msg, uint32_t len)
{
int err;
- ub_callback_t cb;
+ ub_callback_type cb;
void* cbarg;
struct ub_result* res;
int r;
@@ -610,7 +610,7 @@ int
ub_wait(struct ub_ctx* ctx)
{
int err;
- ub_callback_t cb;
+ ub_callback_type cb;
void* cbarg;
struct ub_result* res;
int r;
@@ -706,7 +706,8 @@ ub_resolve(struct ub_ctx* ctx, const char* name, int rrtype,
int
ub_resolve_event(struct ub_ctx* ctx, const char* name, int rrtype,
- int rrclass, void* mydata, ub_event_callback_t callback, int* async_id)
+ int rrclass, void* mydata, ub_event_callback_type callback,
+ int* async_id)
{
struct ctx_query* q;
int r;
@@ -734,7 +735,7 @@ ub_resolve_event(struct ub_ctx* ctx, const char* name, int rrtype,
ub_comm_base_now(ctx->event_worker->base);
/* create new ctx_query and attempt to add to the list */
- q = context_new(ctx, name, rrtype, rrclass, (ub_callback_t)callback,
+ q = context_new(ctx, name, rrtype, rrclass, (ub_callback_type)callback,
mydata);
if(!q)
return UB_NOMEM;
@@ -748,7 +749,7 @@ ub_resolve_event(struct ub_ctx* ctx, const char* name, int rrtype,
int
ub_resolve_async(struct ub_ctx* ctx, const char* name, int rrtype,
- int rrclass, void* mydata, ub_callback_t callback, int* async_id)
+ int rrclass, void* mydata, ub_callback_type callback, int* async_id)
{
struct ctx_query* q;
uint8_t* msg = NULL;
diff --git a/libunbound/libworker.c b/libunbound/libworker.c
index c90101956d51..b42ba0bd8e78 100644
--- a/libunbound/libworker.c
+++ b/libunbound/libworker.c
@@ -639,7 +639,7 @@ libworker_event_done_cb(void* arg, int rcode, sldns_buffer* buf,
enum sec_status s, char* why_bogus)
{
struct ctx_query* q = (struct ctx_query*)arg;
- ub_event_callback_t cb = (ub_event_callback_t)q->cb;
+ ub_event_callback_type cb = (ub_event_callback_type)q->cb;
void* cb_arg = q->cb_arg;
int cancelled = q->cancelled;
diff --git a/libunbound/unbound-event.h b/libunbound/unbound-event.h
index 432750d77495..d5f0b1a36fe7 100644
--- a/libunbound/unbound-event.h
+++ b/libunbound/unbound-event.h
@@ -170,7 +170,7 @@ struct ub_event {
struct ub_event_vmt* vmt;
};
-typedef void (*ub_event_callback_t)(void*, int, void*, int, int, char*);
+typedef void (*ub_event_callback_type)(void*, int, void*, int, int, char*);
/**
* Create a resolving and validation context.
@@ -254,7 +254,8 @@ int ub_ctx_set_event(struct ub_ctx* ctx, struct event_base* base);
* @return 0 if OK, else error.
*/
int ub_resolve_event(struct ub_ctx* ctx, const char* name, int rrtype,
- int rrclass, void* mydata, ub_event_callback_t callback, int* async_id);
+ int rrclass, void* mydata, ub_event_callback_type callback,
+ int* async_id);
#ifdef __cplusplus
}
diff --git a/libunbound/unbound.h b/libunbound/unbound.h
index 9c828fc292bc..9a076927f9a6 100644
--- a/libunbound/unbound.h
+++ b/libunbound/unbound.h
@@ -223,7 +223,7 @@ struct ub_result {
* This structure is allocated on the heap and needs to be
* freed with ub_resolve_free(result);
*/
-typedef void (*ub_callback_t)(void*, int, struct ub_result*);
+typedef void (*ub_callback_type)(void*, int, struct ub_result*);
/**
* Create a resolving and validation context.
@@ -519,7 +519,7 @@ int ub_resolve(struct ub_ctx* ctx, const char* name, int rrtype,
* @return 0 if OK, else error.
*/
int ub_resolve_async(struct ub_ctx* ctx, const char* name, int rrtype,
- int rrclass, void* mydata, ub_callback_t callback, int* async_id);
+ int rrclass, void* mydata, ub_callback_type callback, int* async_id);
/**
* Cancel an async query in progress.
diff --git a/pythonmod/interface.i b/pythonmod/interface.i
index 89d138486606..89dd73d996b5 100644
--- a/pythonmod/interface.i
+++ b/pythonmod/interface.i
@@ -245,23 +245,23 @@ uint16_t ntohs(uint16_t netshort);
}
#if defined(SWIGWORDSIZE64)
-typedef long int rrset_id_t;
+typedef long int rrset_id_type;
#else
-typedef long long int rrset_id_t;
+typedef long long int rrset_id_type;
#endif
struct ub_packed_rrset_key {
struct lruhash_entry entry;
- rrset_id_t id;
+ rrset_id_type id;
struct packed_rrset_key rk;
};
struct lruhash_entry {
- lock_rw_t lock;
+ lock_rw_type lock;
struct lruhash_entry* overflow_next;
struct lruhash_entry* lru_next;
struct lruhash_entry* lru_prev;
- hashvalue_t hash;
+ hashvalue_type hash;
void* key;
struct packed_rrset_data* data;
};
@@ -376,7 +376,7 @@ struct reply_info {
struct rrset_ref {
struct ub_packed_rrset_key* key;
- rrset_id_t id;
+ rrset_id_type id;
};
struct dns_msg {
@@ -513,7 +513,7 @@ struct edns_option {
}
PyObject* _edns_option_opt_data_get(struct edns_option* option) {
- return PyByteArray_FromStringAndSize((uint8_t*)option->opt_data,
+ return PyByteArray_FromStringAndSize((void*)option->opt_data,
option->opt_len);
}
%}
@@ -1332,7 +1332,7 @@ int edns_register_option(uint16_t opt_code, int bypass_cache_stage,
SWIG_exception_fail(SWIG_TypeError, "Expected bytearray!");
return NULL;
}
- $2 = PyByteArray_AsString($input);
+ $2 = (void*)PyByteArray_AsString($input);
$1 = PyByteArray_Size($input);
}
@@ -1353,8 +1353,8 @@ int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len,
PyObject *result;
int res = 0;
- func = (PyObject *) python_callback;
PyGILState_STATE gstate = PyGILState_Ensure();
+ func = (PyObject *) python_callback;
py_edns = SWIG_NewPointerObj((void*) edns, SWIGTYPE_p_edns_data, 0);
py_qstate = SWIG_NewPointerObj((void*) qstate,
SWIGTYPE_p_module_qstate, 0);
@@ -1415,13 +1415,13 @@ int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len,
%}
/* C declarations */
int inplace_cb_reply_register(
- inplace_cb_reply_func_t* cb, void* cb_arg, struct module_env* env);
+ inplace_cb_reply_func_type* cb, void* cb_arg, struct module_env* env);
int inplace_cb_reply_cache_register(
- inplace_cb_reply_func_t* cb, void* cb_arg, struct module_env* env);
+ inplace_cb_reply_func_type* cb, void* cb_arg, struct module_env* env);
int inplace_cb_reply_local_register(
- inplace_cb_reply_func_t* cb, void* cb_arg, struct module_env* env);
+ inplace_cb_reply_func_type* cb, void* cb_arg, struct module_env* env);
int inplace_cb_reply_servfail_register(
- inplace_cb_reply_func_t* cb, void* cb_arg, struct module_env* env);
+ inplace_cb_reply_func_type* cb, void* cb_arg, struct module_env* env);
/* Swig declarations */
static int register_inplace_cb_reply(PyObject* py_cb,
diff --git a/pythonmod/pythonmod_utils.c b/pythonmod/pythonmod_utils.c
index ae694d57693a..5d70f2b4bc04 100644
--- a/pythonmod/pythonmod_utils.c
+++ b/pythonmod/pythonmod_utils.c
@@ -74,7 +74,7 @@ int storeQueryInCache(struct module_qstate* qstate, struct query_info* qinfo, st
/* Invalidate the message associated with query_info stored in message cache */
void invalidateQueryInCache(struct module_qstate* qstate, struct query_info* qinfo)
{
- hashvalue_t h;
+ hashvalue_type h;
struct lruhash_entry* e;
struct reply_info *r;
size_t i, j;
diff --git a/services/cache/dns.c b/services/cache/dns.c
index 148b5cb875ab..7beb76164986 100644
--- a/services/cache/dns.c
+++ b/services/cache/dns.c
@@ -106,7 +106,7 @@ store_rrsets(struct module_env* env, struct reply_info* rep, time_t now,
void
dns_cache_store_msg(struct module_env* env, struct query_info* qinfo,
- hashvalue_t hash, struct reply_info* rep, time_t leeway, int pside,
+ hashvalue_type hash, struct reply_info* rep, time_t leeway, int pside,
struct reply_info* qrep, struct regional* region)
{
struct msgreply_entry* e;
@@ -188,7 +188,7 @@ msg_cache_lookup(struct module_env* env, uint8_t* qname, size_t qnamelen,
{
struct lruhash_entry* e;
struct query_info k;
- hashvalue_t h;
+ hashvalue_type h;
k.qname = qname;
k.qname_len = qnamelen;
@@ -709,7 +709,7 @@ dns_cache_lookup(struct module_env* env,
{
struct lruhash_entry* e;
struct query_info k;
- hashvalue_t h;
+ hashvalue_type h;
time_t now = *env->now;
struct ub_packed_rrset_key* rrset;
@@ -865,7 +865,7 @@ dns_cache_store(struct module_env* env, struct query_info* msgqinf,
} else {
/* store msg, and rrsets */
struct query_info qinf;
- hashvalue_t h;
+ hashvalue_type h;
qinf = *msgqinf;
qinf.qname = memdup(msgqinf->qname, msgqinf->qname_len);
diff --git a/services/cache/dns.h b/services/cache/dns.h
index 69796c2eb204..15a4a236b028 100644
--- a/services/cache/dns.h
+++ b/services/cache/dns.h
@@ -106,7 +106,7 @@ int dns_cache_store(struct module_env* env, struct query_info* qinf,
* @param region: to allocate into for qmsg.
*/
void dns_cache_store_msg(struct module_env* env, struct query_info* qinfo,
- hashvalue_t hash, struct reply_info* rep, time_t leeway, int pside,
+ hashvalue_type hash, struct reply_info* rep, time_t leeway, int pside,
struct reply_info* qrep, struct regional* region);
/**
diff --git a/services/cache/infra.c b/services/cache/infra.c
index c0049d8b6a8b..314c85ef5112 100644
--- a/services/cache/infra.c
+++ b/services/cache/infra.c
@@ -61,6 +61,10 @@
/** ratelimit value for delegation point */
int infra_dp_ratelimit = 0;
+/** ratelimit value for client ip addresses,
+ * in queries per second. */
+int infra_ip_ratelimit = 0;
+
size_t
infra_sizefunc(void* k, void* ATTR_UNUSED(d))
{
@@ -244,11 +248,19 @@ infra_create(struct config_file* cfg)
}
name_tree_init_parents(&infra->domain_limits);
}
+ infra_ip_ratelimit = cfg->ip_ratelimit;
+ infra->client_ip_rates = slabhash_create(cfg->ratelimit_slabs,
+ INFRA_HOST_STARTSIZE, cfg->ip_ratelimit_size, &ip_rate_sizefunc,
+ &ip_rate_compfunc, &ip_rate_delkeyfunc, &ip_rate_deldatafunc, NULL);
+ if(!infra->client_ip_rates) {
+ infra_delete(infra);
+ return NULL;
+ }
return infra;
}
/** delete domain_limit entries */
-static void domain_limit_free(rbnode_t* n, void* ATTR_UNUSED(arg))
+static void domain_limit_free(rbnode_type* n, void* ATTR_UNUSED(arg))
{
if(n) {
free(((struct domain_limit_data*)n)->node.name);
@@ -264,6 +276,7 @@ infra_delete(struct infra_cache* infra)
slabhash_delete(infra->hosts);
slabhash_delete(infra->domain_rates);
traverse_postorder(&infra->domain_limits, domain_limit_free, NULL);
+ slabhash_delete(infra->client_ip_rates);
free(infra);
}
@@ -284,31 +297,38 @@ infra_adjust(struct infra_cache* infra, struct config_file* cfg)
return infra;
}
-/** calculate the hash value for a host key */
-static hashvalue_t
-hash_addr(struct sockaddr_storage* addr, socklen_t addrlen)
+/** calculate the hash value for a host key
+ * set use_port to a non-0 number to use the port in
+ * the hash calculation; 0 to ignore the port.*/
+static hashvalue_type
+hash_addr(struct sockaddr_storage* addr, socklen_t addrlen,
+ int use_port)
{
- hashvalue_t h = 0xab;
+ hashvalue_type h = 0xab;
/* select the pieces to hash, some OS have changing data inside */
if(addr_is_ip6(addr, addrlen)) {
struct sockaddr_in6* in6 = (struct sockaddr_in6*)addr;
h = hashlittle(&in6->sin6_family, sizeof(in6->sin6_family), h);
- h = hashlittle(&in6->sin6_port, sizeof(in6->sin6_port), h);
+ if(use_port){
+ h = hashlittle(&in6->sin6_port, sizeof(in6->sin6_port), h);
+ }
h = hashlittle(&in6->sin6_addr, INET6_SIZE, h);
} else {
struct sockaddr_in* in = (struct sockaddr_in*)addr;
h = hashlittle(&in->sin_family, sizeof(in->sin_family), h);
- h = hashlittle(&in->sin_port, sizeof(in->sin_port), h);
+ if(use_port){
+ h = hashlittle(&in->sin_port, sizeof(in->sin_port), h);
+ }
h = hashlittle(&in->sin_addr, INET_SIZE, h);
}
return h;
}
/** calculate infra hash for a key */
-static hashvalue_t
+static hashvalue_type
hash_infra(struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name)
{
- return dname_query_hash(name, hash_addr(addr, addrlen));
+ return dname_query_hash(name, hash_addr(addr, addrlen, 1));
}
/** lookup version that does not check host ttl (you check it) */
@@ -726,12 +746,36 @@ int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name,
return infra_dp_ratelimit;
}
+size_t ip_rate_sizefunc(void* k, void* ATTR_UNUSED(d))
+{
+ struct ip_rate_key* key = (struct ip_rate_key*)k;
+ return sizeof(*key) + sizeof(struct ip_rate_data)
+ + lock_get_mem(&key->entry.lock);
+}
+
+int ip_rate_compfunc(void* key1, void* key2)
+{
+ struct ip_rate_key* k1 = (struct ip_rate_key*)key1;
+ struct ip_rate_key* k2 = (struct ip_rate_key*)key2;
+ return sockaddr_cmp_addr(&k1->addr, k1->addrlen,
+ &k2->addr, k2->addrlen);
+}
+
+void ip_rate_delkeyfunc(void* k, void* ATTR_UNUSED(arg))
+{
+ struct ip_rate_key* key = (struct ip_rate_key*)k;
+ if(!key)
+ return;
+ lock_rw_destroy(&key->entry.lock);
+ free(key);
+}
+
/** find data item in array, for write access, caller unlocks */
static struct lruhash_entry* infra_find_ratedata(struct infra_cache* infra,
uint8_t* name, size_t namelen, int wr)
{
struct rate_key key;
- hashvalue_t h = dname_query_hash(name, 0xab);
+ hashvalue_type h = dname_query_hash(name, 0xab);
memset(&key, 0, sizeof(key));
key.name = name;
key.namelen = namelen;
@@ -739,11 +783,25 @@ static struct lruhash_entry* infra_find_ratedata(struct infra_cache* infra,
return slabhash_lookup(infra->domain_rates, h, &key, wr);
}
+/** find data item in array for ip addresses */
+struct lruhash_entry* infra_find_ip_ratedata(struct infra_cache* infra,
+ struct comm_reply* repinfo, int wr)
+{
+ struct ip_rate_key key;
+ hashvalue_type h = hash_addr(&(repinfo->addr),
+ repinfo->addrlen, 0);
+ memset(&key, 0, sizeof(key));
+ key.addr = repinfo->addr;
+ key.addrlen = repinfo->addrlen;
+ key.entry.hash = h;
+ return slabhash_lookup(infra->client_ip_rates, h, &key, wr);
+}
+
/** create rate data item for name, number 1 in now */
static void infra_create_ratedata(struct infra_cache* infra,
uint8_t* name, size_t namelen, time_t timenow)
{
- hashvalue_t h = dname_query_hash(name, 0xab);
+ hashvalue_type h = dname_query_hash(name, 0xab);
struct rate_key* k = (struct rate_key*)calloc(1, sizeof(*k));
struct rate_data* d = (struct rate_data*)calloc(1, sizeof(*d));
if(!k || !d) {
@@ -767,6 +825,30 @@ static void infra_create_ratedata(struct infra_cache* infra,
slabhash_insert(infra->domain_rates, h, &k->entry, d, NULL);
}
+/** create rate data item for ip address */
+static void infra_ip_create_ratedata(struct infra_cache* infra,
+ struct comm_reply* repinfo, time_t timenow)
+{
+ hashvalue_type h = hash_addr(&(repinfo->addr),
+ repinfo->addrlen, 0);
+ struct ip_rate_key* k = (struct ip_rate_key*)calloc(1, sizeof(*k));
+ struct ip_rate_data* d = (struct ip_rate_data*)calloc(1, sizeof(*d));
+ if(!k || !d) {
+ free(k);
+ free(d);
+ return; /* alloc failure */
+ }
+ k->addr = repinfo->addr;
+ k->addrlen = repinfo->addrlen;
+ lock_rw_init(&k->entry.lock);
+ k->entry.hash = h;
+ k->entry.key = k;
+ k->entry.data = d;
+ d->qps[0] = 1;
+ d->timestamp[0] = timenow;
+ slabhash_insert(infra->client_ip_rates, h, &k->entry, d, NULL);
+}
+
/** find the second and return its rate counter, if none, remove oldest */
static int* infra_rate_find_second(void* data, time_t t)
{
@@ -875,6 +957,41 @@ infra_get_mem(struct infra_cache* infra)
{
size_t s = sizeof(*infra) + slabhash_get_mem(infra->hosts);
if(infra->domain_rates) s += slabhash_get_mem(infra->domain_rates);
+ if(infra->client_ip_rates) s += slabhash_get_mem(infra->client_ip_rates);
/* ignore domain_limits because walk through tree is big */
return s;
}
+
+int infra_ip_ratelimit_inc(struct infra_cache* infra,
+ struct comm_reply* repinfo, time_t timenow)
+{
+ int max;
+ struct lruhash_entry* entry;
+
+ /* not enabled */
+ if(!infra_ip_ratelimit) {
+ return 1;
+ }
+ /* find or insert ratedata */
+ entry = infra_find_ip_ratedata(infra, repinfo, 1);
+ if(entry) {
+ int premax = infra_rate_max(entry->data, timenow);
+ int* cur = infra_rate_find_second(entry->data, timenow);
+ (*cur)++;
+ max = infra_rate_max(entry->data, timenow);
+ lock_rw_unlock(&entry->lock);
+
+ if(premax < infra_ip_ratelimit && max >= infra_ip_ratelimit) {
+ char client_ip[128];
+ addr_to_str((struct sockaddr_storage *)&repinfo->addr,
+ repinfo->addrlen, client_ip, sizeof(client_ip));
+ verbose(VERB_OPS, "ratelimit exceeded %s %d", client_ip,
+ infra_ip_ratelimit);
+ }
+ return (max <= infra_ip_ratelimit);
+ }
+
+ /* create */
+ infra_ip_create_ratedata(infra, repinfo, timenow);
+ return 1;
+}
diff --git a/services/cache/infra.h b/services/cache/infra.h
index fc7abb7c4dd1..6f9471a3941c 100644
--- a/services/cache/infra.h
+++ b/services/cache/infra.h
@@ -36,7 +36,10 @@
/**
* \file
*
- * This file contains the infrastructure cache.
+ * This file contains the infrastructure cache, as well as rate limiting.
+ * Note that there are two sorts of rate-limiting here:
+ * - Pre-cache, per-query rate limiting (query ratelimits)
+ * - Post-cache, per-domain name rate limiting (infra-ratelimits)
*/
#ifndef SERVICES_CACHE_INFRA_H
@@ -44,6 +47,8 @@
#include "util/storage/lruhash.h"
#include "util/storage/dnstree.h"
#include "util/rtt.h"
+#include "util/netevent.h"
+#include "util/data/msgreply.h"
struct slabhash;
struct config_file;
@@ -112,7 +117,9 @@ struct infra_cache {
/** hash table with query rates per name: rate_key, rate_data */
struct slabhash* domain_rates;
/** ratelimit settings for domains, struct domain_limit_data */
- rbtree_t domain_limits;
+ rbtree_type domain_limits;
+ /** hash table with query rates per client ip: ip_rate_key, ip_rate_data */
+ struct slabhash* client_ip_rates;
};
/** ratelimit, unless overridden by domain_limits, 0 is off */
@@ -142,6 +149,21 @@ struct rate_key {
size_t namelen;
};
+/** ip ratelimit, 0 is off */
+extern int infra_ip_ratelimit;
+
+/**
+ * key for ip_ratelimit lookups, a source IP.
+ */
+struct ip_rate_key {
+ /** lruhash key entry */
+ struct lruhash_entry entry;
+ /** client ip information */
+ struct sockaddr_storage addr;
+ /** length of address */
+ socklen_t addrlen;
+};
+
/** number of seconds to track qps rate */
#define RATE_WINDOW 2
@@ -160,6 +182,8 @@ struct rate_data {
time_t timestamp[RATE_WINDOW];
};
+#define ip_rate_data rate_data
+
/** infra host cache default hash lookup size */
#define INFRA_HOST_STARTSIZE 32
/** bytes per zonename reserved in the hostcache, dnamelen(zonename.com.) */
@@ -381,6 +405,16 @@ int infra_rate_max(void* data, time_t now);
int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name,
size_t namelen);
+/** Update query ratelimit hash and decide
+ * whether or not a query should be dropped.
+ * @param infra: infra cache
+ * @param repinfo: information about client
+ * @param timenow: what time it is now.
+ * @return 1 if it could be incremented. 0 if the increment overshot the
+ * ratelimit and the query should be dropped. */
+int infra_ip_ratelimit_inc(struct infra_cache* infra,
+ struct comm_reply* repinfo, time_t timenow);
+
/**
* Get memory used by the infra cache.
* @param infra: infrastructure cache.
@@ -413,4 +447,16 @@ void rate_delkeyfunc(void* k, void* arg);
/** delete data */
void rate_deldatafunc(void* d, void* arg);
+/* calculate size for the client ip hashtable */
+size_t ip_rate_sizefunc(void* k, void* d);
+
+/* compare two addresses */
+int ip_rate_compfunc(void* key1, void* key2);
+
+/* delete key, and destroy the lock */
+void ip_rate_delkeyfunc(void* d, void* arg);
+
+/* delete data */
+#define ip_rate_deldatafunc rate_deldatafunc
+
#endif /* SERVICES_CACHE_INFRA_H */
diff --git a/services/cache/rrset.c b/services/cache/rrset.c
index 2f6a1b506712..7e5732b760f2 100644
--- a/services/cache/rrset.c
+++ b/services/cache/rrset.c
@@ -91,7 +91,7 @@ struct rrset_cache* rrset_cache_adjust(struct rrset_cache *r,
void
rrset_cache_touch(struct rrset_cache* r, struct ub_packed_rrset_key* key,
- hashvalue_t hash, rrset_id_t id)
+ hashvalue_type hash, rrset_id_type id)
{
struct lruhash* table = slabhash_gettable(&r->table, hash);
/*
@@ -186,7 +186,7 @@ rrset_cache_update(struct rrset_cache* r, struct rrset_ref* ref,
{
struct lruhash_entry* e;
struct ub_packed_rrset_key* k = ref->key;
- hashvalue_t h = k->entry.hash;
+ hashvalue_type h = k->entry.hash;
uint16_t rrset_type = ntohs(k->rk.type);
int equal = 0;
log_assert(ref->id != 0 && k->id != 0);
@@ -303,10 +303,10 @@ void
rrset_array_unlock_touch(struct rrset_cache* r, struct regional* scratch,
struct rrset_ref* ref, size_t count)
{
- hashvalue_t* h;
+ hashvalue_type* h;
size_t i;
- if(count > RR_COUNT_MAX || !(h = (hashvalue_t*)regional_alloc(scratch,
- sizeof(hashvalue_t)*count))) {
+ if(count > RR_COUNT_MAX || !(h = (hashvalue_type*)regional_alloc(
+ scratch, sizeof(hashvalue_type)*count))) {
log_warn("rrset LRU: memory allocation failed");
h = NULL;
} else /* store hash values */
diff --git a/services/cache/rrset.h b/services/cache/rrset.h
index 98e44a4e5268..d5439ef085b7 100644
--- a/services/cache/rrset.h
+++ b/services/cache/rrset.h
@@ -102,7 +102,7 @@ struct rrset_cache* rrset_cache_adjust(struct rrset_cache* r,
* @param id: used to check that the item is unchanged and not deleted.
*/
void rrset_cache_touch(struct rrset_cache* r, struct ub_packed_rrset_key* key,
- hashvalue_t hash, rrset_id_t id);
+ hashvalue_type hash, rrset_id_type id);
/**
* Update an rrset in the rrset cache. Stores the information for later use.
diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c
index 6637483b9dcf..0132ce45f781 100644
--- a/services/listen_dnsport.c
+++ b/services/listen_dnsport.c
@@ -63,6 +63,10 @@
#include <sys/un.h>
#endif
+#ifdef HAVE_SYSTEMD
+#include <systemd/sd-daemon.h>
+#endif
+
/** number of queued TCP connections for listen() */
#define TCP_BACKLOG 256
@@ -96,11 +100,71 @@ verbose_print_addr(struct addrinfo *addr)
}
}
+#ifdef HAVE_SYSTEMD
+static int
+systemd_get_activated(int family, int socktype, int listen,
+ struct sockaddr *addr, socklen_t addrlen,
+ const char *path)
+{
+ int i = 0;
+ int r = 0;
+ int s = -1;
+ const char* listen_pid, *listen_fds;
+
+ /* We should use "listen" option only for stream protocols. For UDP it should be -1 */
+
+ if((r = sd_booted()) < 1) {
+ if(r == 0)
+ log_warn("systemd is not running");
+ else
+ log_err("systemd sd_booted(): %s", strerror(-r));
+ return -1;
+ }
+
+ listen_pid = getenv("LISTEN_PID");
+ listen_fds = getenv("LISTEN_FDS");
+
+ if (!listen_pid) {
+ log_warn("Systemd mandatory ENV variable is not defined: LISTEN_PID");
+ return -1;
+ }
+
+ if (!listen_fds) {
+ log_warn("Systemd mandatory ENV variable is not defined: LISTEN_FDS");
+ return -1;
+ }
+
+ if((r = sd_listen_fds(0)) < 1) {
+ if(r == 0)
+ log_warn("systemd: did not return socket, check unit configuration");
+ else
+ log_err("systemd sd_listen_fds(): %s", strerror(-r));
+ return -1;
+ }
+
+ for(i = 0; i < r; i++) {
+ if(sd_is_socket(SD_LISTEN_FDS_START + i, family, socktype, listen)) {
+ s = SD_LISTEN_FDS_START + i;
+ break;
+ }
+ }
+ if (s == -1) {
+ if (addr)
+ log_err_addr("systemd sd_listen_fds()",
+ "no such socket",
+ (struct sockaddr_storage *)addr, addrlen);
+ else
+ log_err("systemd sd_listen_fds(): %s", path);
+ }
+ return s;
+}
+#endif
+
int
create_udp_sock(int family, int socktype, struct sockaddr* addr,
socklen_t addrlen, int v6only, int* inuse, int* noproto,
int rcv, int snd, int listen, int* reuseport, int transparent,
- int freebind)
+ int freebind, int use_systemd)
{
int s;
#if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_USE_MIN_MTU) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND)
@@ -124,6 +188,16 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
#if !defined(IP_FREEBIND)
(void)freebind;
#endif
+#ifdef HAVE_SYSTEMD
+ int got_fd_from_systemd = 0;
+
+ if (!use_systemd
+ || (use_systemd
+ && (s = systemd_get_activated(family, socktype, -1, addr,
+ addrlen, NULL)) == -1)) {
+#else
+ (void)use_systemd;
+#endif
if((s = socket(family, socktype, 0)) == -1) {
*inuse = 0;
#ifndef USE_WINSOCK
@@ -144,6 +218,11 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
*noproto = 0;
return -1;
}
+#ifdef HAVE_SYSTEMD
+ } else {
+ got_fd_from_systemd = 1;
+ }
+#endif
if(listen) {
#ifdef SO_REUSEADDR
if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on,
@@ -465,7 +544,11 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
}
# endif /* IPv4 MTU */
}
- if(bind(s, (struct sockaddr*)addr, addrlen) != 0) {
+ if(
+#ifdef HAVE_SYSTEMD
+ !got_fd_from_systemd &&
+#endif
+ bind(s, (struct sockaddr*)addr, addrlen) != 0) {
*noproto = 0;
*inuse = 0;
#ifndef USE_WINSOCK
@@ -488,7 +571,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
(struct sockaddr_storage*)addr, addrlen);
}
closesocket(s);
-#endif
+#endif /* USE_WINSOCK */
return -1;
}
if(!fd_set_nonblock(s)) {
@@ -506,12 +589,15 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
int
create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
- int* reuseport, int transparent, int mss, int freebind)
+ int* reuseport, int transparent, int mss, int freebind, int use_systemd)
{
int s;
#if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND)
int on = 1;
#endif
+#ifdef HAVE_SYSTEMD
+ int got_fd_from_systemd = 0;
+#endif
#ifdef USE_TCP_FASTOPEN
int qlen;
#endif
@@ -523,6 +609,15 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
#endif
verbose_print_addr(addr);
*noproto = 0;
+#ifdef HAVE_SYSTEMD
+ if (!use_systemd ||
+ (use_systemd
+ && (s = systemd_get_activated(addr->ai_family, addr->ai_socktype, 1,
+ addr->ai_addr, addr->ai_addrlen,
+ NULL)) == -1)) {
+#else
+ (void)use_systemd;
+#endif
if((s = socket(addr->ai_family, addr->ai_socktype, 0)) == -1) {
#ifndef USE_WINSOCK
if(errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) {
@@ -560,6 +655,11 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
log_warn(" setsockopt(TCP_MAXSEG) unsupported");
#endif /* defined(IPPROTO_TCP) && defined(TCP_MAXSEG) */
}
+#ifdef HAVE_SYSTEMD
+ } else {
+ got_fd_from_systemd = 1;
+ }
+#endif
#ifdef SO_REUSEADDR
if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on,
(socklen_t)sizeof(on)) < 0) {
@@ -637,7 +737,11 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
(addr->ai_family==AF_INET6?"V6":""), strerror(errno));
}
#endif /* IP_TRANSPARENT || IP_BINDANY */
- if(bind(s, addr->ai_addr, addr->ai_addrlen) != 0) {
+ if(
+#ifdef HAVE_SYSTEMD
+ !got_fd_from_systemd &&
+#endif
+ bind(s, addr->ai_addr, addr->ai_addrlen) != 0) {
#ifndef USE_WINSOCK
/* detect freebsd jail with no ipv6 permission */
if(addr->ai_family==AF_INET6 && errno==EINVAL)
@@ -695,11 +799,21 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
}
int
-create_local_accept_sock(const char *path, int* noproto)
+create_local_accept_sock(const char *path, int* noproto, int use_systemd)
{
+#ifdef HAVE_SYSTEMD
+ int ret;
+
+ if (use_systemd && (ret = systemd_get_activated(AF_LOCAL, SOCK_STREAM, 1, NULL, 0, path)) != -1)
+ return ret;
+ else {
+#endif
#ifdef HAVE_SYS_UN_H
int s;
struct sockaddr_un usock;
+#ifndef HAVE_SYSTEMD
+ (void)use_systemd;
+#endif
verbose(VERB_ALGO, "creating unix socket %s", path);
#ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN
@@ -720,29 +834,42 @@ create_local_accept_sock(const char *path, int* noproto)
/* The socket already exists and cannot be removed */
log_err("Cannot remove old local socket %s (%s)",
path, strerror(errno));
- return -1;
+ goto err;
}
if (bind(s, (struct sockaddr *)&usock,
(socklen_t)sizeof(struct sockaddr_un)) == -1) {
log_err("Cannot bind local socket %s (%s)",
path, strerror(errno));
- return -1;
+ goto err;
}
if (!fd_set_nonblock(s)) {
log_err("Cannot set non-blocking mode");
- return -1;
+ goto err;
}
if (listen(s, TCP_BACKLOG) == -1) {
log_err("can't listen: %s", strerror(errno));
- return -1;
+ goto err;
}
(void)noproto; /*unused*/
return s;
+
+err:
+#ifndef USE_WINSOCK
+ close(s);
+#else
+ closesocket(s);
+#endif
+ return -1;
+
+#ifdef HAVE_SYSTEMD
+ }
+#endif
#else
+ (void)use_systemd;
(void)path;
log_err("Local sockets are not supported");
*noproto = 1;
@@ -757,7 +884,7 @@ create_local_accept_sock(const char *path, int* noproto)
static int
make_sock(int stype, const char* ifname, const char* port,
struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd,
- int* reuseport, int transparent, int tcp_mss, int freebind)
+ int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd)
{
struct addrinfo *res = NULL;
int r, s, inuse, noproto;
@@ -785,7 +912,7 @@ make_sock(int stype, const char* ifname, const char* port,
s = create_udp_sock(res->ai_family, res->ai_socktype,
(struct sockaddr*)res->ai_addr, res->ai_addrlen,
v6only, &inuse, &noproto, (int)rcv, (int)snd, 1,
- reuseport, transparent, freebind);
+ reuseport, transparent, freebind, use_systemd);
if(s == -1 && inuse) {
log_err("bind: address already in use");
} else if(s == -1 && noproto && hints->ai_family == AF_INET6){
@@ -793,7 +920,7 @@ make_sock(int stype, const char* ifname, const char* port,
}
} else {
s = create_tcp_accept_sock(res, v6only, &noproto, reuseport,
- transparent, tcp_mss, freebind);
+ transparent, tcp_mss, freebind, use_systemd);
if(s == -1 && noproto && hints->ai_family == AF_INET6){
*noip6 = 1;
}
@@ -806,7 +933,7 @@ make_sock(int stype, const char* ifname, const char* port,
static int
make_sock_port(int stype, const char* ifname, const char* port,
struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd,
- int* reuseport, int transparent, int tcp_mss, int freebind)
+ int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd)
{
char* s = strchr(ifname, '@');
if(s) {
@@ -828,10 +955,10 @@ make_sock_port(int stype, const char* ifname, const char* port,
(void)strlcpy(p, s+1, sizeof(p));
p[strlen(s+1)]=0;
return make_sock(stype, newif, p, hints, v6only, noip6,
- rcv, snd, reuseport, transparent, tcp_mss, freebind);
+ rcv, snd, reuseport, transparent, tcp_mss, freebind, use_systemd);
}
return make_sock(stype, ifname, port, hints, v6only, noip6, rcv, snd,
- reuseport, transparent, tcp_mss, freebind);
+ reuseport, transparent, tcp_mss, freebind, use_systemd);
}
/**
@@ -881,7 +1008,7 @@ set_recvpktinfo(int s, int family)
}
# else
log_err("no IPV6_RECVPKTINFO and no IPV6_PKTINFO option, please "
- "disable interface-automatic in config");
+ "disable interface-automatic or do-ip6 in config");
return 0;
# endif /* defined IPV6_RECVPKTINFO */
@@ -902,7 +1029,7 @@ set_recvpktinfo(int s, int family)
}
# else
log_err("no IP_SENDSRCADDR or IP_PKTINFO option, please disable "
- "interface-automatic in config");
+ "interface-automatic or do-ip4 in config");
return 0;
# endif /* IP_PKTINFO */
@@ -928,13 +1055,14 @@ set_recvpktinfo(int s, int family)
* @param transparent: set IP_TRANSPARENT socket option.
* @param tcp_mss: maximum segment size of tcp socket. default if zero.
* @param freebind: set IP_FREEBIND socket option.
+ * @param use_systemd: if true, fetch sockets from systemd.
* @return: returns false on error.
*/
static int
ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
struct addrinfo *hints, const char* port, struct listen_port** list,
size_t rcv, size_t snd, int ssl_port, int* reuseport, int transparent,
- int tcp_mss, int freebind)
+ int tcp_mss, int freebind, int use_systemd)
{
int s, noip6=0;
if(!do_udp && !do_tcp)
@@ -942,7 +1070,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
if(do_auto) {
if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1,
&noip6, rcv, snd, reuseport, transparent,
- tcp_mss, freebind)) == -1) {
+ tcp_mss, freebind, use_systemd)) == -1) {
if(noip6) {
log_warn("IPv6 protocol not available");
return 1;
@@ -970,7 +1098,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
/* regular udp socket */
if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1,
&noip6, rcv, snd, reuseport, transparent,
- tcp_mss, freebind)) == -1) {
+ tcp_mss, freebind, use_systemd)) == -1) {
if(noip6) {
log_warn("IPv6 protocol not available");
return 1;
@@ -992,7 +1120,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
(!strchr(ifname, '@') && atoi(port) == ssl_port));
if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1,
&noip6, 0, 0, reuseport, transparent, tcp_mss,
- freebind)) == -1) {
+ freebind, use_systemd)) == -1) {
if(noip6) {
/*log_warn("IPv6 protocol not available");*/
return 1;
@@ -1036,7 +1164,7 @@ listen_cp_insert(struct comm_point* c, struct listen_dnsport* front)
struct listen_dnsport*
listen_create(struct comm_base* base, struct listen_port* ports,
size_t bufsize, int tcp_accept_count, void* sslctx,
- struct dt_env* dtenv, comm_point_callback_t* cb, void *cb_arg)
+ struct dt_env* dtenv, comm_point_callback_type* cb, void *cb_arg)
{
struct listen_dnsport* front = (struct listen_dnsport*)
malloc(sizeof(struct listen_dnsport));
@@ -1150,7 +1278,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
cfg->so_rcvbuf, cfg->so_sndbuf,
cfg->ssl_port, reuseport,
cfg->ip_transparent,
- cfg->tcp_mss, cfg->ip_freebind)) {
+ cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd)) {
listening_ports_free(list);
return NULL;
}
@@ -1163,7 +1291,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
cfg->so_rcvbuf, cfg->so_sndbuf,
cfg->ssl_port, reuseport,
cfg->ip_transparent,
- cfg->tcp_mss, cfg->ip_freebind)) {
+ cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd)) {
listening_ports_free(list);
return NULL;
}
@@ -1178,7 +1306,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
cfg->so_rcvbuf, cfg->so_sndbuf,
cfg->ssl_port, reuseport,
cfg->ip_transparent,
- cfg->tcp_mss, cfg->ip_freebind)) {
+ cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd)) {
listening_ports_free(list);
return NULL;
}
@@ -1191,7 +1319,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
cfg->so_rcvbuf, cfg->so_sndbuf,
cfg->ssl_port, reuseport,
cfg->ip_transparent,
- cfg->tcp_mss, cfg->ip_freebind)) {
+ cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd)) {
listening_ports_free(list);
return NULL;
}
diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h
index fbaa48321d0f..93d2ef7148e2 100644
--- a/services/listen_dnsport.h
+++ b/services/listen_dnsport.h
@@ -137,7 +137,7 @@ void listening_ports_free(struct listen_port* list);
*/
struct listen_dnsport* listen_create(struct comm_base* base,
struct listen_port* ports, size_t bufsize, int tcp_accept_count,
- void* sslctx, struct dt_env *dtenv, comm_point_callback_t* cb,
+ void* sslctx, struct dt_env *dtenv, comm_point_callback_type* cb,
void* cb_arg);
/**
@@ -191,11 +191,12 @@ void listen_start_accept(struct listen_dnsport* listen);
* listening UDP port. Set to false on return if it failed to do so.
* @param transparent: set IP_TRANSPARENT socket option.
* @param freebind: set IP_FREEBIND socket option.
+ * @param use_systemd: if true, fetch sockets from systemd.
* @return: the socket. -1 on error.
*/
int create_udp_sock(int family, int socktype, struct sockaddr* addr,
socklen_t addrlen, int v6only, int* inuse, int* noproto, int rcv,
- int snd, int listen, int* reuseport, int transparent, int freebind);
+ int snd, int listen, int* reuseport, int transparent, int freebind, int use_systemd);
/**
* Create and bind TCP listening socket
@@ -207,18 +208,20 @@ int create_udp_sock(int family, int socktype, struct sockaddr* addr,
* @param transparent: set IP_TRANSPARENT socket option.
* @param mss: maximum segment size of the socket. if zero, leaves the default.
* @param freebind: set IP_FREEBIND socket option.
+ * @param use_systemd: if true, fetch sockets from systemd.
* @return: the socket. -1 on error.
*/
int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
- int* reuseport, int transparent, int mss, int freebind);
+ int* reuseport, int transparent, int mss, int freebind, int use_systemd);
/**
* Create and bind local listening socket
* @param path: path to the socket.
* @param noproto: on error, this is set true if cause is that local sockets
* are not supported.
+ * @param use_systemd: if true, fetch sockets from systemd.
* @return: the socket. -1 on error.
*/
-int create_local_accept_sock(const char* path, int* noproto);
+int create_local_accept_sock(const char* path, int* noproto, int use_systemd);
#endif /* LISTEN_DNSPORT_H */
diff --git a/services/localzone.c b/services/localzone.c
index 0ea74d856873..d813ab586172 100644
--- a/services/localzone.c
+++ b/services/localzone.c
@@ -74,7 +74,7 @@ local_zones_create(void)
/** helper traverse to delete zones */
static void
-lzdel(rbnode_t* n, void* ATTR_UNUSED(arg))
+lzdel(rbnode_type* n, void* ATTR_UNUSED(arg))
{
struct local_zone* z = (struct local_zone*)n->key;
local_zone_delete(z);
@@ -165,7 +165,7 @@ local_zone_create(uint8_t* nm, size_t len, int labs,
return NULL;
}
rbtree_init(&z->data, &local_data_cmp);
- lock_protect(&z->lock, &z->parent, sizeof(*z)-sizeof(rbnode_t));
+ lock_protect(&z->lock, &z->parent, sizeof(*z)-sizeof(rbnode_type));
/* also the zones->lock protects node, parent, name*, class */
return z;
}
@@ -629,7 +629,7 @@ lz_enter_override(struct local_zones* zones, char* zname, char* netblock,
/* create netblock addr_tree if not present yet */
if(!z->override_tree) {
- z->override_tree = (struct rbtree_t*)regional_alloc_zero(
+ z->override_tree = (struct rbtree_type*)regional_alloc_zero(
z->region, sizeof(*z->override_tree));
if(!z->override_tree) {
lock_rw_unlock(&z->lock);
@@ -1060,7 +1060,7 @@ local_zones_tags_lookup(struct local_zones* zones,
uint8_t* name, size_t len, int labs, uint16_t dclass,
uint8_t* taglist, size_t taglen, int ignoretags)
{
- rbnode_t* res = NULL;
+ rbnode_type* res = NULL;
struct local_zone *result;
struct local_zone key;
int m;
@@ -1214,6 +1214,24 @@ local_encode(struct query_info* qinfo, struct module_env* env,
return 1;
}
+/** encode local error answer */
+static void
+local_error_encode(struct query_info* qinfo, struct module_env* env,
+ struct edns_data* edns, sldns_buffer* buf, struct regional* temp,
+ int rcode, int r)
+{
+ edns->edns_version = EDNS_ADVERTISED_VERSION;
+ edns->udp_size = EDNS_ADVERTISED_SIZE;
+ edns->ext_rcode = 0;
+ edns->bits &= EDNS_DO;
+
+ if(!inplace_cb_reply_local_call(env, qinfo, NULL, NULL,
+ rcode, edns, temp))
+ edns->opt_list = NULL;
+ error_encode(buf, r, qinfo, *(uint16_t*)sldns_buffer_begin(buf),
+ sldns_buffer_read_u16_at(buf, 2), edns);
+}
+
/** find local data tag string match for the given type in the list */
static int
find_tag_datas(struct query_info* qinfo, struct config_strlist* list,
@@ -1414,9 +1432,8 @@ lz_zone_answer(struct local_zone* z, struct module_env* env,
return 1;
} else if(lz_type == local_zone_refuse
|| lz_type == local_zone_always_refuse) {
- error_encode(buf, (LDNS_RCODE_REFUSED|BIT_AA), qinfo,
- *(uint16_t*)sldns_buffer_begin(buf),
- sldns_buffer_read_u16_at(buf, 2), edns);
+ local_error_encode(qinfo, env, edns, buf, temp,
+ LDNS_RCODE_REFUSED, (LDNS_RCODE_REFUSED|BIT_AA));
return 1;
} else if(lz_type == local_zone_static ||
lz_type == local_zone_redirect ||
@@ -1433,9 +1450,8 @@ lz_zone_answer(struct local_zone* z, struct module_env* env,
if(z->soa)
return local_encode(qinfo, env, edns, buf, temp,
z->soa, 0, rcode);
- error_encode(buf, (rcode|BIT_AA), qinfo,
- *(uint16_t*)sldns_buffer_begin(buf),
- sldns_buffer_read_u16_at(buf, 2), edns);
+ local_error_encode(qinfo, env, edns, buf, temp, rcode,
+ (rcode|BIT_AA));
return 1;
} else if(lz_type == local_zone_typetransparent
|| lz_type == local_zone_always_transparent) {
@@ -1451,9 +1467,8 @@ lz_zone_answer(struct local_zone* z, struct module_env* env,
if(z->soa)
return local_encode(qinfo, env, edns, buf, temp,
z->soa, 0, rcode);
- error_encode(buf, (rcode|BIT_AA), qinfo,
- *(uint16_t*)sldns_buffer_begin(buf),
- sldns_buffer_read_u16_at(buf, 2), edns);
+ local_error_encode(qinfo, env, edns, buf, temp, rcode,
+ (rcode|BIT_AA));
return 1;
}
@@ -1479,8 +1494,8 @@ lz_inform_print(struct local_zone* z, struct query_info* qinfo,
static enum localzone_type
lz_type(uint8_t *taglist, size_t taglen, uint8_t *taglist2, size_t taglen2,
uint8_t *tagactions, size_t tagactionssize, enum localzone_type lzt,
- struct comm_reply* repinfo, struct rbtree_t* override_tree, int* tag,
- char** tagname, int num_tags)
+ struct comm_reply* repinfo, struct rbtree_type* override_tree,
+ int* tag, char** tagname, int num_tags)
{
size_t i, j;
uint8_t tagmatch;
diff --git a/services/localzone.h b/services/localzone.h
index 6db9b3dd97db..bf9c9bf489cb 100644
--- a/services/localzone.h
+++ b/services/localzone.h
@@ -95,9 +95,9 @@ enum localzone_type {
*/
struct local_zones {
/** lock on the localzone tree */
- lock_rw_t lock;
+ lock_rw_type lock;
/** rbtree of struct local_zone */
- rbtree_t ztree;
+ rbtree_type ztree;
};
/**
@@ -105,7 +105,7 @@ struct local_zones {
*/
struct local_zone {
/** rbtree node, key is name and class */
- rbnode_t node;
+ rbnode_type node;
/** parent zone, if any. */
struct local_zone* parent;
@@ -123,7 +123,7 @@ struct local_zone {
* For the node, parent, name, namelen, namelabs, dclass, you
* need to also hold the zones_tree lock to change them (or to
* delete this zone) */
- lock_rw_t lock;
+ lock_rw_type lock;
/** how to process zone */
enum localzone_type type;
@@ -133,14 +133,14 @@ struct local_zone {
size_t taglen;
/** netblock addr_tree with struct local_zone_override information
* or NULL if there are no override elements */
- struct rbtree_t* override_tree;
+ struct rbtree_type* override_tree;
/** in this region the zone's data is allocated.
* the struct local_zone itself is malloced. */
struct regional* region;
/** local data for this zone
* rbtree of struct local_data */
- rbtree_t data;
+ rbtree_type data;
/** if data contains zone apex SOA data, this is a ptr to it. */
struct ub_packed_rrset_key* soa;
};
@@ -150,7 +150,7 @@ struct local_zone {
*/
struct local_data {
/** rbtree node, key is name only */
- rbnode_t node;
+ rbnode_type node;
/** domain name */
uint8_t* name;
/** length of name */
diff --git a/services/mesh.c b/services/mesh.c
index 83a01ede82af..f5a193ac2d48 100644
--- a/services/mesh.c
+++ b/services/mesh.c
@@ -203,7 +203,7 @@ mesh_create(struct module_stack* stack, struct module_env* env)
/** help mesh delete delete mesh states */
static void
-mesh_delete_helper(rbnode_t* n)
+mesh_delete_helper(rbnode_type* n)
{
struct mesh_state* mstate = (struct mesh_state*)n->key;
/* perform a full delete, not only 'cleanup' routine,
@@ -321,7 +321,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
/* see if it already exists, if not, create one */
if(!s) {
#ifdef UNBOUND_DEBUG
- struct rbnode_t* n;
+ struct rbnode_type* n;
#endif
s = mesh_state_create(mesh->env, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0);
if(!s) {
@@ -409,7 +409,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
int
mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
uint16_t qflags, struct edns_data* edns, sldns_buffer* buf,
- uint16_t qid, mesh_cb_func_t cb, void* cb_arg)
+ uint16_t qid, mesh_cb_func_type cb, void* cb_arg)
{
struct mesh_state* s = NULL;
int unique = edns_unique_mesh_state(edns->opt_list, mesh->env);
@@ -423,7 +423,7 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
/* see if it already exists, if not, create one */
if(!s) {
#ifdef UNBOUND_DEBUG
- struct rbnode_t* n;
+ struct rbnode_type* n;
#endif
s = mesh_state_create(mesh->env, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0);
if(!s) {
@@ -479,7 +479,7 @@ void mesh_new_prefetch(struct mesh_area* mesh, struct query_info* qinfo,
struct mesh_state* s = mesh_area_find(mesh, qinfo, qflags&(BIT_RD|BIT_CD),
0, 0);
#ifdef UNBOUND_DEBUG
- struct rbnode_t* n;
+ struct rbnode_type* n;
#endif
/* already exists, and for a different purpose perhaps.
* if mesh_no_list, keep it that way. */
@@ -729,7 +729,7 @@ void mesh_detach_subs(struct module_qstate* qstate)
struct mesh_area* mesh = qstate->env->mesh;
struct mesh_state_ref* ref, lookup;
#ifdef UNBOUND_DEBUG
- struct rbnode_t* n;
+ struct rbnode_type* n;
#endif
lookup.node.key = &lookup;
lookup.s = qstate->mesh_info;
@@ -764,7 +764,7 @@ int mesh_attach_sub(struct module_qstate* qstate, struct query_info* qinfo,
}
if(!sub) {
#ifdef UNBOUND_DEBUG
- struct rbnode_t* n;
+ struct rbnode_type* n;
#endif
/* create a new one */
sub = mesh_state_create(qstate->env, qinfo, qflags, prime, valrec);
@@ -809,7 +809,7 @@ int mesh_attach_sub(struct module_qstate* qstate, struct query_info* qinfo,
int mesh_state_attachment(struct mesh_state* super, struct mesh_state* sub)
{
#ifdef UNBOUND_DEBUG
- struct rbnode_t* n;
+ struct rbnode_type* n;
#endif
struct mesh_state_ref* subref; /* points to sub, inserted in super */
struct mesh_state_ref* superref; /* points to super, inserted in sub */
@@ -1019,6 +1019,12 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
query_reply.c->buffer)) == 0)
m->s.env->mesh->ans_nodata++;
}
+ /* Log reply sent */
+ if(m->s.env->cfg->log_replies) {
+ log_reply_info(0, &m->s.qinfo, &r->query_reply.addr,
+ r->query_reply.addrlen, duration, 0,
+ r->query_reply.c->buffer);
+ }
}
void mesh_query_done(struct mesh_state* mstate)
@@ -1074,7 +1080,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
}
int mesh_state_add_cb(struct mesh_state* s, struct edns_data* edns,
- sldns_buffer* buf, mesh_cb_func_t cb, void* cb_arg,
+ sldns_buffer* buf, mesh_cb_func_type cb, void* cb_arg,
uint16_t qid, uint16_t qflags)
{
struct mesh_cb* r = regional_alloc(s->s.region,
diff --git a/services/mesh.h b/services/mesh.h
index 7dd62ef19b62..435f89c689d5 100644
--- a/services/mesh.h
+++ b/services/mesh.h
@@ -83,9 +83,9 @@ struct mesh_area {
struct module_env* env;
/** set of runnable queries (mesh_state.run_node) */
- rbtree_t run;
+ rbtree_type run;
/** rbtree of all current queries (mesh_state.node)*/
- rbtree_t all;
+ rbtree_type all;
/** count of the total number of mesh_reply entries */
size_t num_reply_addrs;
@@ -154,9 +154,9 @@ struct mesh_area {
*/
struct mesh_state {
/** node in mesh_area all tree, key is this struct. Must be first. */
- rbnode_t node;
+ rbnode_type node;
/** node in mesh_area runnable tree, key is this struct */
- rbnode_t run_node;
+ rbnode_type run_node;
/** the query state. Note that the qinfo and query_flags
* may not change. */
struct module_qstate s;
@@ -166,10 +166,10 @@ struct mesh_state {
struct mesh_cb* cb_list;
/** set of superstates (that want this state's result)
* contains struct mesh_state_ref* */
- rbtree_t super_set;
+ rbtree_type super_set;
/** set of substates (that this state needs to continue)
* contains struct mesh_state_ref* */
- rbtree_t sub_set;
+ rbtree_type sub_set;
/** number of activations for the mesh state */
size_t num_activated;
@@ -193,7 +193,7 @@ struct mesh_state {
*/
struct mesh_state_ref {
/** node in rbtree for set, key is this structure */
- rbnode_t node;
+ rbnode_type node;
/** the mesh state */
struct mesh_state* s;
};
@@ -224,7 +224,7 @@ struct mesh_reply {
* Mesh result callback func.
* called as func(cb_arg, rcode, buffer_with_reply, security, why_bogus);
*/
-typedef void (*mesh_cb_func_t)(void*, int, struct sldns_buffer*, enum sec_status,
+typedef void (*mesh_cb_func_type)(void*, int, struct sldns_buffer*, enum sec_status,
char*);
/**
@@ -245,7 +245,7 @@ struct mesh_cb {
/** callback routine for results. if rcode != 0 buf has message.
* called as cb(cb_arg, rcode, buf, sec_state);
*/
- mesh_cb_func_t cb;
+ mesh_cb_func_type cb;
/** user arg for callback */
void* cb_arg;
};
@@ -300,7 +300,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
*/
int mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
uint16_t qflags, struct edns_data* edns, struct sldns_buffer* buf,
- uint16_t qid, mesh_cb_func_t cb, void* cb_arg);
+ uint16_t qid, mesh_cb_func_type cb, void* cb_arg);
/**
* New prefetch message. Create new query state if needed.
@@ -498,8 +498,8 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
* @return: 0 on alloc error.
*/
int mesh_state_add_cb(struct mesh_state* s, struct edns_data* edns,
- struct sldns_buffer* buf, mesh_cb_func_t cb, void* cb_arg, uint16_t qid,
- uint16_t qflags);
+ struct sldns_buffer* buf, mesh_cb_func_type cb, void* cb_arg,
+ uint16_t qid, uint16_t qflags);
/**
* Run the mesh. Run all runnable mesh states. Which can create new
diff --git a/services/outside_network.c b/services/outside_network.c
index eba019520700..88fc5a9168e9 100644
--- a/services/outside_network.c
+++ b/services/outside_network.c
@@ -334,7 +334,7 @@ use_free_buffer(struct outside_network* outnet)
if(outnet->tcp_wait_last == w)
outnet->tcp_wait_last = NULL;
if(!outnet_tcp_take_into_use(w, w->pkt, w->pkt_len)) {
- comm_point_callback_t* cb = w->cb;
+ comm_point_callback_type* cb = w->cb;
void* cb_arg = w->cb_arg;
waiting_tcp_delete(w);
fptr_ok(fptr_whitelist_pending_tcp(cb));
@@ -775,7 +775,7 @@ outside_network_create(struct comm_base *base, size_t bufsize,
/** helper pending delete */
static void
-pending_node_del(rbnode_t* node, void* arg)
+pending_node_del(rbnode_type* node, void* arg)
{
struct pending* pend = (struct pending*)node;
struct outside_network* outnet = (struct outside_network*)arg;
@@ -784,7 +784,7 @@ pending_node_del(rbnode_t* node, void* arg)
/** helper serviced delete */
static void
-serviced_node_del(rbnode_t* node, void* ATTR_UNUSED(arg))
+serviced_node_del(rbnode_type* node, void* ATTR_UNUSED(arg))
{
struct serviced_query* sq = (struct serviced_query*)node;
struct service_callback* p = sq->cblist, *np;
@@ -966,13 +966,13 @@ udp_sockport(struct sockaddr_storage* addr, socklen_t addrlen, int pfxlen,
}
fd = create_udp_sock(AF_INET6, SOCK_DGRAM,
(struct sockaddr*)&sa, addrlen, 1, inuse, &noproto,
- 0, 0, 0, NULL, 0, freebind);
+ 0, 0, 0, NULL, 0, freebind, 0);
} else {
struct sockaddr_in* sa = (struct sockaddr_in*)addr;
sa->sin_port = (in_port_t)htons((uint16_t)port);
fd = create_udp_sock(AF_INET, SOCK_DGRAM,
(struct sockaddr*)addr, addrlen, 1, inuse, &noproto,
- 0, 0, 0, NULL, 0, 0);
+ 0, 0, 0, NULL, 0, 0, 0);
}
return fd;
}
@@ -1124,7 +1124,7 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout)
struct pending*
pending_udp_query(struct serviced_query* sq, struct sldns_buffer* packet,
- int timeout, comm_point_callback_t* cb, void* cb_arg)
+ int timeout, comm_point_callback_type* cb, void* cb_arg)
{
struct pending* pend = (struct pending*)calloc(1, sizeof(*pend));
if(!pend) return NULL;
@@ -1174,7 +1174,7 @@ outnet_tcptimer(void* arg)
{
struct waiting_tcp* w = (struct waiting_tcp*)arg;
struct outside_network* outnet = w->outnet;
- comm_point_callback_t* cb;
+ comm_point_callback_type* cb;
void* cb_arg;
if(w->pkt) {
/* it is on the waiting list */
@@ -1197,7 +1197,7 @@ outnet_tcptimer(void* arg)
struct waiting_tcp*
pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet,
- int timeout, comm_point_callback_t* callback, void* callback_arg)
+ int timeout, comm_point_callback_type* callback, void* callback_arg)
{
struct pending_tcp* pend = sq->outnet->tcp_free;
struct waiting_tcp* w;
@@ -1301,7 +1301,7 @@ serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec,
{
struct serviced_query* sq = (struct serviced_query*)malloc(sizeof(*sq));
#ifdef UNBOUND_DEBUG
- rbnode_t* ins;
+ rbnode_type* ins;
#endif
if(!sq)
return NULL;
@@ -1587,7 +1587,7 @@ serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c,
uint8_t *backup_p = NULL;
size_t backlen = 0;
#ifdef UNBOUND_DEBUG
- rbnode_t* rem =
+ rbnode_type* rem =
#else
(void)
#endif
@@ -1990,7 +1990,7 @@ outnet_serviced_query(struct outside_network* outnet,
int nocaps, int tcp_upstream, int ssl_upstream,
struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
size_t zonelen, struct module_qstate* qstate,
- comm_point_callback_t* callback, void* callback_arg, sldns_buffer* buff,
+ comm_point_callback_type* callback, void* callback_arg, sldns_buffer* buff,
struct module_env* env)
{
struct serviced_query* sq;
diff --git a/services/outside_network.h b/services/outside_network.h
index f006b04cb734..befd512f0dad 100644
--- a/services/outside_network.h
+++ b/services/outside_network.h
@@ -123,9 +123,9 @@ struct outside_network {
struct pending* udp_wait_last;
/** pending udp answers. sorted by id, addr */
- rbtree_t* pending;
+ rbtree_type* pending;
/** serviced queries, sorted by qbuf, addr, dnssec */
- rbtree_t* serviced;
+ rbtree_type* serviced;
/** host cache, pointer but not owned by outnet. */
struct infra_cache* infra;
/** where to get random numbers */
@@ -210,7 +210,7 @@ struct port_comm {
*/
struct pending {
/** redblacktree entry, key is the pending struct(id, addr). */
- rbnode_t node;
+ rbnode_type node;
/** the ID for the query. int so that a value out of range can
* be used to signify a pending that is for certain not present in
* the rbtree. (and for which deletion is safe). */
@@ -224,7 +224,7 @@ struct pending {
/** timeout event */
struct comm_timer* timer;
/** callback for the timeout, error or reply to the message */
- comm_point_callback_t* cb;
+ comm_point_callback_type* cb;
/** callback user argument */
void* cb_arg;
/** the outside network it is part of */
@@ -285,7 +285,7 @@ struct waiting_tcp {
/** length of query packet. */
size_t pkt_len;
/** callback for the timeout, error or reply to the message */
- comm_point_callback_t* cb;
+ comm_point_callback_type* cb;
/** callback user argument */
void* cb_arg;
/** if it uses ssl upstream */
@@ -299,7 +299,7 @@ struct service_callback {
/** next in callback list */
struct service_callback* next;
/** callback function */
- comm_point_callback_t* cb;
+ comm_point_callback_type* cb;
/** user argument for callback function */
void* cb_arg;
};
@@ -317,7 +317,7 @@ struct service_callback {
*/
struct serviced_query {
/** The rbtree node, key is this record */
- rbnode_t node;
+ rbnode_type node;
/** The query that needs to be answered. Starts with flags u16,
* then qdcount, ..., including qname, qtype, qclass. Does not include
* EDNS record. */
@@ -443,7 +443,7 @@ void outside_network_quit_prepare(struct outside_network* outnet);
* @return: NULL on error for malloc or socket. Else the pending query object.
*/
struct pending* pending_udp_query(struct serviced_query* sq,
- struct sldns_buffer* packet, int timeout, comm_point_callback_t* callback,
+ struct sldns_buffer* packet, int timeout, comm_point_callback_type* callback,
void* callback_arg);
/**
@@ -459,7 +459,7 @@ struct pending* pending_udp_query(struct serviced_query* sq,
* @return: false on error for malloc or socket. Else the pending TCP object.
*/
struct waiting_tcp* pending_tcp_query(struct serviced_query* sq,
- struct sldns_buffer* packet, int timeout, comm_point_callback_t* callback,
+ struct sldns_buffer* packet, int timeout, comm_point_callback_type* callback,
void* callback_arg);
/**
@@ -504,7 +504,7 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet,
int nocaps, int tcp_upstream, int ssl_upstream,
struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
size_t zonelen, struct module_qstate* qstate,
- comm_point_callback_t* callback, void* callback_arg,
+ comm_point_callback_type* callback, void* callback_arg,
struct sldns_buffer* buff, struct module_env* env);
/**
diff --git a/services/view.c b/services/view.c
index b2d86513d4f4..c9dfc3c87383 100644
--- a/services/view.c
+++ b/services/view.c
@@ -78,7 +78,7 @@ view_delete(struct view* v)
}
static void
-delviewnode(rbnode_t* n, void* ATTR_UNUSED(arg))
+delviewnode(rbnode_type* n, void* ATTR_UNUSED(arg))
{
struct view* v = (struct view*)n;
view_delete(v);
@@ -107,7 +107,7 @@ view_create(char* name)
return NULL;
}
lock_rw_init(&v->lock);
- lock_protect(&v->lock, &v->name, sizeof(*v)-sizeof(rbnode_t));
+ lock_protect(&v->lock, &v->name, sizeof(*v)-sizeof(rbnode_type));
return v;
}
diff --git a/services/view.h b/services/view.h
index f64b2461e305..ce4b69d6c510 100644
--- a/services/view.h
+++ b/services/view.h
@@ -54,9 +54,9 @@ struct config_view;
*/
struct views {
/** lock on the view tree */
- lock_rw_t lock;
+ lock_rw_type lock;
/** rbtree of struct view */
- rbtree_t vtree;
+ rbtree_type vtree;
};
/**
@@ -64,7 +64,7 @@ struct views {
*/
struct view {
/** rbtree node, key is name */
- rbnode_t node;
+ rbnode_type node;
/** view name.
* Has to be right after rbnode_t due to pointer arithmatic in
* view_create's lock protect */
@@ -75,10 +75,9 @@ struct view {
* specific tree. 1 for yes, 0 for no */
int isfirst;
/** lock on the data in the structure
- * For the node and name you
- * need to also hold the views_tree lock to change them (or to
- * delete this view) */
- lock_rw_t lock;
+ * For the node and name you need to also hold the views_tree lock to
+ * change them. */
+ lock_rw_type lock;
};
diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c
index 68ff3ccc7b22..2828088d9fd6 100644
--- a/smallapp/unbound-anchor.c
+++ b/smallapp/unbound-anchor.c
@@ -241,7 +241,10 @@ static const char*
get_builtin_ds(void)
{
return
-". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5\n";
+/* anchor 19036 is from 2010 */
+/* anchor 20326 is from 2017 */
+". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5\n"
+". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n";
}
/** print hex data */
diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c
index 20a7c16499a7..af4b45ee7820 100644
--- a/smallapp/unbound-control.c
+++ b/smallapp/unbound-control.c
@@ -124,7 +124,14 @@ usage(void)
printf(" or off to turn off root forwarding\n");
printf(" or give list of ip addresses\n");
printf(" ratelimit_list [+a] list ratelimited domains\n");
+ printf(" ip_ratelimit_list [+a] list ratelimited ip addresses\n");
printf(" +a list all, also not ratelimited\n");
+ printf(" view_list_local_zones view list local-zones in view\n");
+ printf(" view_list_local_data view list local-data RRs in view\n");
+ printf(" view_local_zone view name type add local-zone in view\n");
+ printf(" view_local_zone_remove view name remove local-zone in view\n");
+ printf(" view_local_data view RR... add local-data in view\n");
+ printf(" view_local_data_remove view name remove local-data in view\n");
printf("Version %s\n", PACKAGE_VERSION);
printf("BSD licensed, see LICENSE in source package for details.\n");
printf("Report bugs to %s\n", PACKAGE_BUGREPORT);
@@ -195,9 +202,13 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd)
int fd;
/* use svr or the first config entry */
if(!svr) {
- if(cfg->control_ifs)
+ if(cfg->control_ifs) {
svr = cfg->control_ifs->str;
- else svr = "127.0.0.1";
+ } else if(cfg->do_ip4) {
+ svr = "127.0.0.1";
+ } else {
+ svr = "::1";
+ }
/* config 0 addr (everything), means ask localhost */
if(strcmp(svr, "0.0.0.0") == 0)
svr = "127.0.0.1";
diff --git a/systemd.m4 b/systemd.m4
new file mode 100644
index 000000000000..e5d4e27f6deb
--- /dev/null
+++ b/systemd.m4
@@ -0,0 +1,31 @@
+# macros for configuring systemd
+# Copyright 2015, Sami Kerola, CloudFlare.
+# BSD licensed.
+AC_ARG_ENABLE([systemd],
+ [AS_HELP_STRING([--enable-systemd], [compile with systemd support])],
+ [], [enable_systemd=no])
+have_systemd=no
+AS_IF([test "x$enable_systemd" != xno], [
+ ifdef([PKG_CHECK_MODULES], [
+ dnl systemd v209 or newer
+ PKG_CHECK_MODULES([SYSTEMD], [libsystemd], [have_systemd=yes], [have_systemd=no])
+ dnl old systemd library
+ AS_IF([test "x$have_systemd" != "xyes"], [
+ PKG_CHECK_MODULES([SYSTEMD_DAEMON], [libsystemd-daemon],
+ [have_systemd_daemon=yes], [have_systemd_daemon=no])
+ AS_IF([test "x$have_systemd_daemon" = "xyes"],
+ [have_systemd=yes])
+ ])
+ AS_CASE([$enable_systemd:$have_systemd],
+ [yes:no],
+ [AC_MSG_ERROR([systemd enabled but libsystemd not found])],
+ [*:yes],
+ [AC_DEFINE([HAVE_SYSTEMD], [1], [Define to 1 if systemd should be used])
+ LIBS="$LIBS $SYSTEMD_LIBS"
+ ]
+ )
+ ], [
+ AC_MSG_ERROR([systemd enabled but need pkg-config to configure for it])
+ ])
+])
+AM_CONDITIONAL([USE_SYSTEMD], [test "x$have_systemd" = xyes])
diff --git a/testcode/asynclook.c b/testcode/asynclook.c
index 96cb2e3b2613..a2bdb62130b7 100644
--- a/testcode/asynclook.c
+++ b/testcode/asynclook.c
@@ -64,7 +64,7 @@ struct track_id {
/** true if cancelled */
int cancel;
/** a lock on this structure for thread safety */
- lock_basic_t lock;
+ lock_basic_type lock;
};
/**
@@ -164,7 +164,7 @@ struct ext_thr_info {
/** thread num for debug */
int thread_num;
/** thread id */
- ub_thread_t tid;
+ ub_thread_type tid;
/** context */
struct ub_ctx* ctx;
/** size of array to query */
diff --git a/testcode/checklocks.c b/testcode/checklocks.c
index dab98491e224..7e6f0bb5db57 100644
--- a/testcode/checklocks.c
+++ b/testcode/checklocks.c
@@ -61,7 +61,7 @@ static int key_created = 0;
/** if the key was deleted, i.e. we have quit */
static int key_deleted = 0;
/** we hide the thread debug info with this key. */
-static ub_thread_key_t thr_debug_key;
+static ub_thread_key_type thr_debug_key;
/** the list of threads, so all threads can be examined. NULL if unused. */
static struct thr_check* thread_infos[THRDEBUG_MAX_THREADS];
/** do we check locking order */
diff --git a/testcode/checklocks.h b/testcode/checklocks.h
index 936f282756f7..182a93858d92 100644
--- a/testcode/checklocks.h
+++ b/testcode/checklocks.h
@@ -307,7 +307,7 @@ struct checked_lock_mutex { struct checked_lock* c_m; };
struct checked_lock_spl { struct checked_lock* c_spl; };
/** debugging rwlock */
-typedef struct checked_lock_rw lock_rw_t;
+typedef struct checked_lock_rw lock_rw_type;
#define lock_rw_init(lock) checklock_init(check_lock_rwlock, &((lock)->c_rw), __func__, __FILE__, __LINE__)
#define lock_rw_destroy(lock) checklock_destroy(check_lock_rwlock, &((lock)->c_rw), __func__, __FILE__, __LINE__)
#define lock_rw_rdlock(lock) checklock_rdlock(check_lock_rwlock, (lock)->c_rw, __func__, __FILE__, __LINE__)
@@ -315,26 +315,26 @@ typedef struct checked_lock_rw lock_rw_t;
#define lock_rw_unlock(lock) checklock_unlock(check_lock_rwlock, (lock)->c_rw, __func__, __FILE__, __LINE__)
/** debugging mutex */
-typedef struct checked_lock_mutex lock_basic_t;
+typedef struct checked_lock_mutex lock_basic_type;
#define lock_basic_init(lock) checklock_init(check_lock_mutex, &((lock)->c_m), __func__, __FILE__, __LINE__)
#define lock_basic_destroy(lock) checklock_destroy(check_lock_mutex, &((lock)->c_m), __func__, __FILE__, __LINE__)
#define lock_basic_lock(lock) checklock_lock(check_lock_mutex, (lock)->c_m, __func__, __FILE__, __LINE__)
#define lock_basic_unlock(lock) checklock_unlock(check_lock_mutex, (lock)->c_m, __func__, __FILE__, __LINE__)
/** debugging spinlock */
-typedef struct checked_lock_spl lock_quick_t;
+typedef struct checked_lock_spl lock_quick_type;
#define lock_quick_init(lock) checklock_init(check_lock_spinlock, &((lock)->c_spl), __func__, __FILE__, __LINE__)
#define lock_quick_destroy(lock) checklock_destroy(check_lock_spinlock, &((lock)->c_spl), __func__, __FILE__, __LINE__)
#define lock_quick_lock(lock) checklock_lock(check_lock_spinlock, (lock)->c_spl, __func__, __FILE__, __LINE__)
#define lock_quick_unlock(lock) checklock_unlock(check_lock_spinlock, (lock)->c_spl, __func__, __FILE__, __LINE__)
/** we use the pthread id, our thr_check structure is kept behind the scenes */
-typedef pthread_t ub_thread_t;
+typedef pthread_t ub_thread_type;
#define ub_thread_create(thr, func, arg) checklock_thrcreate(thr, func, arg)
#define ub_thread_self() pthread_self()
#define ub_thread_join(thread) checklock_thrjoin(thread)
-typedef pthread_key_t ub_thread_key_t;
+typedef pthread_key_t ub_thread_key_type;
#define ub_thread_key_create(key, f) LOCKRET(pthread_key_create(key, f))
#define ub_thread_key_set(key, v) LOCKRET(pthread_setspecific(key, v))
#define ub_thread_key_get(key) pthread_getspecific(key)
diff --git a/testcode/fake_event.c b/testcode/fake_event.c
index bc6588617f05..2072089381f7 100644
--- a/testcode/fake_event.c
+++ b/testcode/fake_event.c
@@ -318,7 +318,7 @@ answer_callback_from_entry(struct replay_runtime* runtime,
struct comm_point c;
struct comm_reply repinfo;
void* cb_arg = pend->cb_arg;
- comm_point_callback_t* cb = pend->callback;
+ comm_point_callback_type* cb = pend->callback;
memset(&c, 0, sizeof(c));
c.fd = -1;
@@ -422,7 +422,7 @@ fake_pending_callback(struct replay_runtime* runtime,
struct comm_reply repinfo;
struct comm_point c;
void* cb_arg;
- comm_point_callback_t* cb;
+ comm_point_callback_type* cb;
memset(&c, 0, sizeof(c));
if(!p) fatal_exit("No pending queries.");
@@ -735,7 +735,7 @@ struct listen_dnsport*
listen_create(struct comm_base* base, struct listen_port* ATTR_UNUSED(ports),
size_t bufsize, int ATTR_UNUSED(tcp_accept_count),
void* ATTR_UNUSED(sslctx), struct dt_env* ATTR_UNUSED(dtenv),
- comm_point_callback_t* cb, void* cb_arg)
+ comm_point_callback_type* cb, void* cb_arg)
{
struct replay_runtime* runtime = (struct replay_runtime*)base;
struct listen_dnsport* l= calloc(1, sizeof(struct listen_dnsport));
@@ -937,7 +937,7 @@ outside_network_quit_prepare(struct outside_network* ATTR_UNUSED(outnet))
struct pending*
pending_udp_query(struct serviced_query* sq, sldns_buffer* packet,
- int timeout, comm_point_callback_t* callback, void* callback_arg)
+ int timeout, comm_point_callback_type* callback, void* callback_arg)
{
struct replay_runtime* runtime = (struct replay_runtime*)
sq->outnet->base;
@@ -987,7 +987,7 @@ pending_udp_query(struct serviced_query* sq, sldns_buffer* packet,
struct waiting_tcp*
pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet,
- int timeout, comm_point_callback_t* callback, void* callback_arg)
+ int timeout, comm_point_callback_type* callback, void* callback_arg)
{
struct replay_runtime* runtime = (struct replay_runtime*)
sq->outnet->base;
@@ -1041,7 +1041,7 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet,
int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream),
struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
size_t zonelen, struct module_qstate* qstate,
- comm_point_callback_t* callback, void* callback_arg,
+ comm_point_callback_type* callback, void* callback_arg,
sldns_buffer* ATTR_UNUSED(buff), struct module_env* ATTR_UNUSED(env))
{
struct replay_runtime* runtime = (struct replay_runtime*)outnet->base;
@@ -1160,7 +1160,7 @@ void listening_ports_free(struct listen_port* list)
struct comm_point* comm_point_create_local(struct comm_base* ATTR_UNUSED(base),
int ATTR_UNUSED(fd), size_t ATTR_UNUSED(bufsize),
- comm_point_callback_t* ATTR_UNUSED(callback),
+ comm_point_callback_type* ATTR_UNUSED(callback),
void* ATTR_UNUSED(callback_arg))
{
return calloc(1, 1);
@@ -1168,7 +1168,7 @@ struct comm_point* comm_point_create_local(struct comm_base* ATTR_UNUSED(base),
struct comm_point* comm_point_create_raw(struct comm_base* ATTR_UNUSED(base),
int ATTR_UNUSED(fd), int ATTR_UNUSED(writing),
- comm_point_callback_t* ATTR_UNUSED(callback),
+ comm_point_callback_type* ATTR_UNUSED(callback),
void* ATTR_UNUSED(callback_arg))
{
/* no pipe comm possible */
diff --git a/testcode/lock_verify.c b/testcode/lock_verify.c
index de2882b24c11..666a7029d64d 100644
--- a/testcode/lock_verify.c
+++ b/testcode/lock_verify.c
@@ -68,7 +68,7 @@ struct order_id {
/** a lock */
struct order_lock {
/** rbnode in all tree */
- rbnode_t node;
+ rbnode_type node;
/** lock id */
struct order_id id;
/** the creation file */
@@ -76,7 +76,7 @@ struct order_lock {
/** creation line */
int create_line;
/** set of all locks that are smaller than this one (locked earlier) */
- rbtree_t* smaller;
+ rbtree_type* smaller;
/** during depthfirstsearch, this is a linked list of the stack
* of locks. points to the next lock bigger than this one. */
struct lock_ref* dfs_next;
@@ -89,7 +89,7 @@ struct order_lock {
/** reference to a lock in a rbtree set */
struct lock_ref {
/** rbnode, key is an order_id ptr */
- rbnode_t node;
+ rbnode_type node;
/** the lock referenced */
struct order_lock* lock;
/** why is this ref */
@@ -181,7 +181,7 @@ static int readup_str(char** str, FILE* in)
}
/** read creation entry */
-static void read_create(rbtree_t* all, FILE* in)
+static void read_create(rbtree_type* all, FILE* in)
{
struct order_lock* o = calloc(1, sizeof(struct order_lock));
if(!o) fatal_exit("malloc failure");
@@ -210,7 +210,7 @@ static void read_create(rbtree_t* all, FILE* in)
/** insert lock entry (empty) into list */
static struct order_lock*
-insert_lock(rbtree_t* all, struct order_id* id)
+insert_lock(rbtree_type* all, struct order_id* id)
{
struct order_lock* o = calloc(1, sizeof(struct order_lock));
if(!o) fatal_exit("malloc failure");
@@ -223,7 +223,7 @@ insert_lock(rbtree_t* all, struct order_id* id)
}
/** read lock entry */
-static void read_lock(rbtree_t* all, FILE* in, int val)
+static void read_lock(rbtree_type* all, FILE* in, int val)
{
struct order_id prev_id, now_id;
struct lock_ref* ref;
@@ -256,7 +256,7 @@ static void read_lock(rbtree_t* all, FILE* in, int val)
}
/** read input file */
-static void readinput(rbtree_t* all, char* file)
+static void readinput(rbtree_type* all, char* file)
{
FILE *in = fopen(file, "r");
int fst;
@@ -367,7 +367,7 @@ static void check_order_lock(struct order_lock* lock)
}
/** Check ordering of locks */
-static void check_order(rbtree_t* all_locks)
+static void check_order(rbtree_type* all_locks)
{
/* check each lock */
struct order_lock* lock;
@@ -391,7 +391,7 @@ static void check_order(rbtree_t* all_locks)
int
main(int argc, char* argv[])
{
- rbtree_t* all_locks;
+ rbtree_type* all_locks;
int i;
time_t starttime = time(NULL);
#ifdef USE_THREAD_DEBUG
diff --git a/testcode/memstats.c b/testcode/memstats.c
index e837bbf3b49d..dc29058ad774 100644
--- a/testcode/memstats.c
+++ b/testcode/memstats.c
@@ -51,7 +51,7 @@
*/
struct codeline {
/** rbtree node */
- rbnode_t node;
+ rbnode_type node;
/** the name of the file:linenumber */
char* codeline;
/** the name of the function */
@@ -99,7 +99,7 @@ match(char* line)
/** find or alloc codeline in tree */
static struct codeline*
-get_codeline(rbtree_t* tree, char* key, char* func)
+get_codeline(rbtree_type* tree, char* key, char* func)
{
struct codeline* cl = (struct codeline*)rbtree_search(tree, key);
if(!cl) {
@@ -118,7 +118,7 @@ get_codeline(rbtree_t* tree, char* key, char* func)
/** read up the malloc stats */
static void
-read_malloc_stat(char* line, rbtree_t* tree)
+read_malloc_stat(char* line, rbtree_type* tree)
{
char codeline[10240];
char name[10240];
@@ -143,7 +143,7 @@ read_malloc_stat(char* line, rbtree_t* tree)
/** read up the calloc stats */
static void
-read_calloc_stat(char* line, rbtree_t* tree)
+read_calloc_stat(char* line, rbtree_type* tree)
{
char codeline[10240];
char name[10240];
@@ -180,7 +180,7 @@ get_file_size(const char* fname)
/** read the logfile */
static void
-readfile(rbtree_t* tree, const char* fname)
+readfile(rbtree_type* tree, const char* fname)
{
off_t total = get_file_size(fname);
off_t done = (off_t)0;
@@ -216,7 +216,7 @@ readfile(rbtree_t* tree, const char* fname)
/** print memory stats */
static void
-printstats(rbtree_t* tree)
+printstats(rbtree_type* tree)
{
struct codeline* cl;
uint64_t total = 0, tcalls = 0;
@@ -235,7 +235,7 @@ printstats(rbtree_t* tree)
/** main program */
int main(int argc, const char* argv[])
{
- rbtree_t* tree = 0;
+ rbtree_type* tree = 0;
log_init(NULL, 0, 0);
if(argc != 2) {
usage();
diff --git a/testcode/replay.c b/testcode/replay.c
index 22670eb93276..b45bde806729 100644
--- a/testcode/replay.c
+++ b/testcode/replay.c
@@ -63,7 +63,7 @@
* done (successfully).
* @return expanded text, malloced. NULL on failure.
*/
-static char* macro_expand(rbtree_t* store,
+static char* macro_expand(rbtree_type* store,
struct replay_runtime* runtime, char** text);
/** compare of time values */
@@ -548,7 +548,7 @@ replay_var_compare(const void* a, const void* b)
return strcmp(x->name, y->name);
}
-rbtree_t*
+rbtree_type*
macro_store_create(void)
{
return rbtree_create(&replay_var_compare);
@@ -556,7 +556,7 @@ macro_store_create(void)
/** helper function to delete macro values */
static void
-del_macro(rbnode_t* x, void* ATTR_UNUSED(arg))
+del_macro(rbnode_type* x, void* ATTR_UNUSED(arg))
{
struct replay_var* v = (struct replay_var*)x;
free(v->name);
@@ -565,7 +565,7 @@ del_macro(rbnode_t* x, void* ATTR_UNUSED(arg))
}
void
-macro_store_delete(rbtree_t* store)
+macro_store_delete(rbtree_type* store)
{
if(!store)
return;
@@ -615,7 +615,7 @@ do_buf_insert(char* buf, size_t remain, char* after, char* inserted)
/** do macro recursion */
static char*
-do_macro_recursion(rbtree_t* store, struct replay_runtime* runtime,
+do_macro_recursion(rbtree_type* store, struct replay_runtime* runtime,
char* at, size_t remain)
{
char* after = at+2;
@@ -632,7 +632,7 @@ do_macro_recursion(rbtree_t* store, struct replay_runtime* runtime,
/** get var from store */
static struct replay_var*
-macro_getvar(rbtree_t* store, char* name)
+macro_getvar(rbtree_type* store, char* name)
{
struct replay_var k;
k.node.key = &k;
@@ -642,7 +642,7 @@ macro_getvar(rbtree_t* store, char* name)
/** do macro variable */
static char*
-do_macro_variable(rbtree_t* store, char* buf, size_t remain)
+do_macro_variable(rbtree_type* store, char* buf, size_t remain)
{
struct replay_var* v;
char* at = buf+1;
@@ -776,7 +776,7 @@ do_macro_range(char* buf)
}
static char*
-macro_expand(rbtree_t* store, struct replay_runtime* runtime, char** text)
+macro_expand(rbtree_type* store, struct replay_runtime* runtime, char** text)
{
char buf[10240];
char* at = *text;
@@ -844,7 +844,7 @@ macro_expand(rbtree_t* store, struct replay_runtime* runtime, char** text)
}
char*
-macro_process(rbtree_t* store, struct replay_runtime* runtime, char* text)
+macro_process(rbtree_type* store, struct replay_runtime* runtime, char* text)
{
char buf[10240];
char* next, *expand;
@@ -872,14 +872,14 @@ macro_process(rbtree_t* store, struct replay_runtime* runtime, char* text)
}
char*
-macro_lookup(rbtree_t* store, char* name)
+macro_lookup(rbtree_type* store, char* name)
{
struct replay_var* x = macro_getvar(store, name);
if(!x) return strdup("");
return strdup(x->value);
}
-void macro_print_debug(rbtree_t* store)
+void macro_print_debug(rbtree_type* store)
{
struct replay_var* x;
RBTREE_FOR(x, struct replay_var*, store) {
@@ -888,7 +888,7 @@ void macro_print_debug(rbtree_t* store)
}
int
-macro_assign(rbtree_t* store, char* name, char* value)
+macro_assign(rbtree_type* store, char* name, char* value)
{
struct replay_var* x = macro_getvar(store, name);
if(x) {
@@ -918,7 +918,7 @@ macro_assign(rbtree_t* store, char* name, char* value)
void testbound_selftest(void)
{
/* test the macro store */
- rbtree_t* store = macro_store_create();
+ rbtree_type* store = macro_store_create();
char* v;
int r;
int num_asserts = 0;
diff --git a/testcode/replay.h b/testcode/replay.h
index 05bd442f57f5..b33950304d12 100644
--- a/testcode/replay.h
+++ b/testcode/replay.h
@@ -280,7 +280,7 @@ struct replay_runtime {
struct fake_timer* timer_list;
/** callback to call for incoming queries */
- comm_point_callback_t* callback_query;
+ comm_point_callback_type* callback_query;
/** user argument for incoming query callback */
void *cb_arg;
@@ -305,7 +305,7 @@ struct replay_runtime {
/**
* Tree of macro values. Of type replay_var
*/
- rbtree_t* vars;
+ rbtree_type* vars;
};
/**
@@ -325,7 +325,7 @@ struct fake_pending {
/** qtype */
int qtype;
/** The callback function to call when answer arrives (or timeout) */
- comm_point_callback_t* callback;
+ comm_point_callback_type* callback;
/** callback user argument */
void* cb_arg;
/** original timeout in seconds from 'then' */
@@ -380,7 +380,7 @@ struct fake_timer {
*/
struct replay_var {
/** rbtree node. Key is this structure. Sorted by name. */
- rbnode_t node;
+ rbnode_type node;
/** the variable name */
char* name;
/** the variable value */
@@ -413,13 +413,13 @@ struct fake_timer* replay_get_oldest_timer(struct replay_runtime* runtime);
* Create variable storage
* @return new or NULL on failure.
*/
-rbtree_t* macro_store_create(void);
+rbtree_type* macro_store_create(void);
/**
* Delete variable storage
* @param store: the macro storage to free up.
*/
-void macro_store_delete(rbtree_t* store);
+void macro_store_delete(rbtree_type* store);
/**
* Apply macro substitution to string.
@@ -428,7 +428,7 @@ void macro_store_delete(rbtree_t* store);
* @param text: string to work on.
* @return newly malloced string with result.
*/
-char* macro_process(rbtree_t* store, struct replay_runtime* runtime,
+char* macro_process(rbtree_type* store, struct replay_runtime* runtime,
char* text);
/**
@@ -438,7 +438,7 @@ char* macro_process(rbtree_t* store, struct replay_runtime* runtime,
* @return newly malloced string with result or strdup("") if not found.
* or NULL on malloc failure.
*/
-char* macro_lookup(rbtree_t* store, char* name);
+char* macro_lookup(rbtree_type* store, char* name);
/**
* Set macro value.
@@ -447,10 +447,10 @@ char* macro_lookup(rbtree_t* store, char* name);
* @param value: text to set it to. Not expanded.
* @return false on failure.
*/
-int macro_assign(rbtree_t* store, char* name, char* value);
+int macro_assign(rbtree_type* store, char* name, char* value);
/** Print macro variables stored as debug info */
-void macro_print_debug(rbtree_t* store);
+void macro_print_debug(rbtree_type* store);
/** testbounds self test */
void testbound_selftest(void);
diff --git a/testcode/unitlruhash.c b/testcode/unitlruhash.c
index 28fc617f4676..e196f0b63211 100644
--- a/testcode/unitlruhash.c
+++ b/testcode/unitlruhash.c
@@ -45,9 +45,9 @@
#include "util/storage/slabhash.h" /* for the test structures */
/** use this type for the lruhash test key */
-typedef struct slabhash_testkey testkey_t;
+typedef struct slabhash_testkey testkey_type;
/** use this type for the lruhash test data */
-typedef struct slabhash_testdata testdata_t;
+typedef struct slabhash_testdata testdata_type;
/** delete key */
static void delkey(struct slabhash_testkey* k) {
@@ -56,10 +56,10 @@ static void delkey(struct slabhash_testkey* k) {
static void deldata(struct slabhash_testdata* d) {free(d);}
/** hash func, very bad to improve collisions */
-static hashvalue_t myhash(int id) {return (hashvalue_t)id & 0x0f;}
+static hashvalue_type myhash(int id) {return (hashvalue_type)id & 0x0f;}
/** allocate new key, fill in hash */
-static testkey_t* newkey(int id) {
- testkey_t* k = (testkey_t*)calloc(1, sizeof(testkey_t));
+static testkey_type* newkey(int id) {
+ testkey_type* k = (testkey_type*)calloc(1, sizeof(testkey_type));
if(!k) fatal_exit("out of memory");
k->id = id;
k->entry.hash = myhash(id);
@@ -68,9 +68,9 @@ static testkey_t* newkey(int id) {
return k;
}
/** new data el */
-static testdata_t* newdata(int val) {
- testdata_t* d = (testdata_t*)calloc(1,
- sizeof(testdata_t));
+static testdata_type* newdata(int val) {
+ testdata_type* d = (testdata_type*)calloc(1,
+ sizeof(testdata_type));
if(!d) fatal_exit("out of memory");
d->data = val;
return d;
@@ -80,12 +80,12 @@ static testdata_t* newdata(int val) {
static void
test_bin_find_entry(struct lruhash* table)
{
- testkey_t* k = newkey(12);
- testdata_t* d = newdata(128);
- testkey_t* k2 = newkey(12 + 1024);
- testkey_t* k3 = newkey(14);
- testkey_t* k4 = newkey(12 + 1024*2);
- hashvalue_t h = myhash(12);
+ testkey_type* k = newkey(12);
+ testdata_type* d = newdata(128);
+ testkey_type* k2 = newkey(12 + 1024);
+ testkey_type* k3 = newkey(14);
+ testkey_type* k4 = newkey(12 + 1024*2);
+ hashvalue_type h = myhash(12);
struct lruhash_bin bin;
memset(&bin, 0, sizeof(bin));
bin_init(&bin, 1);
@@ -161,8 +161,8 @@ test_bin_find_entry(struct lruhash* table)
/** test lru_front lru_remove */
static void test_lru(struct lruhash* table)
{
- testkey_t* k = newkey(12);
- testkey_t* k2 = newkey(14);
+ testkey_type* k = newkey(12);
+ testkey_type* k2 = newkey(14);
lock_quick_lock(&table->lock);
unit_assert( table->lru_start == NULL && table->lru_end == NULL);
@@ -208,10 +208,10 @@ static void test_lru(struct lruhash* table)
static void
test_short_table(struct lruhash* table)
{
- testkey_t* k = newkey(12);
- testkey_t* k2 = newkey(14);
- testdata_t* d = newdata(128);
- testdata_t* d2 = newdata(129);
+ testkey_type* k = newkey(12);
+ testkey_type* k2 = newkey(14);
+ testdata_type* d = newdata(128);
+ testdata_type* d2 = newdata(129);
k->entry.data = d;
k2->entry.data = d2;
@@ -232,11 +232,11 @@ test_short_table(struct lruhash* table)
/** test adding a random element */
static void
-testadd(struct lruhash* table, testdata_t* ref[])
+testadd(struct lruhash* table, testdata_type* ref[])
{
int numtoadd = random() % HASHTESTMAX;
- testdata_t* data = newdata(numtoadd);
- testkey_t* key = newkey(numtoadd);
+ testdata_type* data = newdata(numtoadd);
+ testkey_type* key = newkey(numtoadd);
key->entry.data = data;
lruhash_insert(table, myhash(numtoadd), &key->entry, data, NULL);
ref[numtoadd] = data;
@@ -244,10 +244,10 @@ testadd(struct lruhash* table, testdata_t* ref[])
/** test adding a random element */
static void
-testremove(struct lruhash* table, testdata_t* ref[])
+testremove(struct lruhash* table, testdata_type* ref[])
{
int num = random() % HASHTESTMAX;
- testkey_t* key = newkey(num);
+ testkey_type* key = newkey(num);
lruhash_remove(table, myhash(num), key);
ref[num] = NULL;
delkey(key);
@@ -255,12 +255,12 @@ testremove(struct lruhash* table, testdata_t* ref[])
/** test adding a random element */
static void
-testlookup(struct lruhash* table, testdata_t* ref[])
+testlookup(struct lruhash* table, testdata_type* ref[])
{
int num = random() % HASHTESTMAX;
- testkey_t* key = newkey(num);
+ testkey_type* key = newkey(num);
struct lruhash_entry* en = lruhash_lookup(table, myhash(num), key, 0);
- testdata_t* data = en? (testdata_t*)en->data : NULL;
+ testdata_type* data = en? (testdata_type*)en->data : NULL;
if(en) {
unit_assert(en->key);
unit_assert(en->data);
@@ -310,11 +310,11 @@ check_table(struct lruhash* table)
/** test adding a random element (unlimited range) */
static void
-testadd_unlim(struct lruhash* table, testdata_t** ref)
+testadd_unlim(struct lruhash* table, testdata_type** ref)
{
int numtoadd = random() % (HASHTESTMAX * 10);
- testdata_t* data = newdata(numtoadd);
- testkey_t* key = newkey(numtoadd);
+ testdata_type* data = newdata(numtoadd);
+ testkey_type* key = newkey(numtoadd);
key->entry.data = data;
lruhash_insert(table, myhash(numtoadd), &key->entry, data, NULL);
if(ref)
@@ -323,10 +323,10 @@ testadd_unlim(struct lruhash* table, testdata_t** ref)
/** test adding a random element (unlimited range) */
static void
-testremove_unlim(struct lruhash* table, testdata_t** ref)
+testremove_unlim(struct lruhash* table, testdata_type** ref)
{
int num = random() % (HASHTESTMAX*10);
- testkey_t* key = newkey(num);
+ testkey_type* key = newkey(num);
lruhash_remove(table, myhash(num), key);
if(ref)
ref[num] = NULL;
@@ -335,12 +335,12 @@ testremove_unlim(struct lruhash* table, testdata_t** ref)
/** test adding a random element (unlimited range) */
static void
-testlookup_unlim(struct lruhash* table, testdata_t** ref)
+testlookup_unlim(struct lruhash* table, testdata_type** ref)
{
int num = random() % (HASHTESTMAX*10);
- testkey_t* key = newkey(num);
+ testkey_type* key = newkey(num);
struct lruhash_entry* en = lruhash_lookup(table, myhash(num), key, 0);
- testdata_t* data = en? (testdata_t*)en->data : NULL;
+ testdata_type* data = en? (testdata_type*)en->data : NULL;
if(en) {
unit_assert(en->key);
unit_assert(en->data);
@@ -360,7 +360,7 @@ static void
test_long_table(struct lruhash* table)
{
/* assuming it all fits in the hashtable, this check will work */
- testdata_t* ref[HASHTESTMAX * 100];
+ testdata_type* ref[HASHTESTMAX * 100];
size_t i;
memset(ref, 0, sizeof(ref));
/* test assumption */
@@ -422,7 +422,7 @@ struct test_thr {
/** thread num, first entry. */
int num;
/** id */
- ub_thread_t id;
+ ub_thread_type id;
/** hash table */
struct lruhash* table;
};
diff --git a/testcode/unitmain.c b/testcode/unitmain.c
index 988346a1efc9..e3d7a59b4c4c 100644
--- a/testcode/unitmain.c
+++ b/testcode/unitmain.c
@@ -73,7 +73,7 @@ int testcount = 0;
/** test alloc code */
static void
alloc_test(void) {
- alloc_special_t *t1, *t2;
+ alloc_special_type *t1, *t2;
struct alloc_cache major, minor1, minor2;
int i;
diff --git a/testcode/unitneg.c b/testcode/unitneg.c
index 36fa6b906e3f..2b67df18232f 100644
--- a/testcode/unitneg.c
+++ b/testcode/unitneg.c
@@ -242,7 +242,7 @@ static void remove_item(struct val_neg_cache* neg)
{
int n, i;
struct val_neg_data* d;
- rbnode_t* walk;
+ rbnode_type* walk;
struct val_neg_zone* z;
lock_basic_lock(&neg->lock);
@@ -324,7 +324,7 @@ static size_t sumtrees_inuse(struct val_neg_cache* neg)
RBTREE_FOR(z, struct val_neg_zone*, &neg->tree) {
/* get count of highest parent for num in use */
d = (struct val_neg_data*)rbtree_first(&z->tree);
- if(d && (rbnode_t*)d!=RBTREE_NULL)
+ if(d && (rbnode_type*)d!=RBTREE_NULL)
res += d->count;
}
return res;
diff --git a/testcode/unitslabhash.c b/testcode/unitslabhash.c
index 783468883572..565d361394d1 100644
--- a/testcode/unitslabhash.c
+++ b/testcode/unitslabhash.c
@@ -44,24 +44,24 @@
#include "util/storage/slabhash.h"
/** use this type for the slabhash test key */
-typedef struct slabhash_testkey testkey_t;
+typedef struct slabhash_testkey testkey_type;
/** use this type for the slabhash test data */
-typedef struct slabhash_testdata testdata_t;
+typedef struct slabhash_testdata testdata_type;
/** delete key */
static void delkey(struct slabhash_testkey* k) {
lock_rw_destroy(&k->entry.lock); free(k);}
/** hash func, very bad to improve collisions, both high and low bits */
-static hashvalue_t myhash(int id) {
- hashvalue_t h = (hashvalue_t)id & 0x0f;
+static hashvalue_type myhash(int id) {
+ hashvalue_type h = (hashvalue_type)id & 0x0f;
h |= (h << 28);
return h;
}
/** allocate new key, fill in hash */
-static testkey_t* newkey(int id) {
- testkey_t* k = (testkey_t*)calloc(1, sizeof(testkey_t));
+static testkey_type* newkey(int id) {
+ testkey_type* k = (testkey_type*)calloc(1, sizeof(testkey_type));
if(!k) fatal_exit("out of memory");
k->id = id;
k->entry.hash = myhash(id);
@@ -70,9 +70,9 @@ static testkey_t* newkey(int id) {
return k;
}
/** new data el */
-static testdata_t* newdata(int val) {
- testdata_t* d = (testdata_t*)calloc(1,
- sizeof(testdata_t));
+static testdata_type* newdata(int val) {
+ testdata_type* d = (testdata_type*)calloc(1,
+ sizeof(testdata_type));
if(!d) fatal_exit("out of memory");
d->data = val;
return d;
@@ -82,10 +82,10 @@ static testdata_t* newdata(int val) {
static void
test_short_table(struct slabhash* table)
{
- testkey_t* k = newkey(12);
- testkey_t* k2 = newkey(14);
- testdata_t* d = newdata(128);
- testdata_t* d2 = newdata(129);
+ testkey_type* k = newkey(12);
+ testkey_type* k2 = newkey(14);
+ testdata_type* d = newdata(128);
+ testdata_type* d2 = newdata(129);
k->entry.data = d;
k2->entry.data = d2;
@@ -106,11 +106,11 @@ test_short_table(struct slabhash* table)
/** test adding a random element */
static void
-testadd(struct slabhash* table, testdata_t* ref[])
+testadd(struct slabhash* table, testdata_type* ref[])
{
int numtoadd = random() % HASHTESTMAX;
- testdata_t* data = newdata(numtoadd);
- testkey_t* key = newkey(numtoadd);
+ testdata_type* data = newdata(numtoadd);
+ testkey_type* key = newkey(numtoadd);
key->entry.data = data;
slabhash_insert(table, myhash(numtoadd), &key->entry, data, NULL);
ref[numtoadd] = data;
@@ -118,10 +118,10 @@ testadd(struct slabhash* table, testdata_t* ref[])
/** test adding a random element */
static void
-testremove(struct slabhash* table, testdata_t* ref[])
+testremove(struct slabhash* table, testdata_type* ref[])
{
int num = random() % HASHTESTMAX;
- testkey_t* key = newkey(num);
+ testkey_type* key = newkey(num);
slabhash_remove(table, myhash(num), key);
ref[num] = NULL;
delkey(key);
@@ -129,12 +129,12 @@ testremove(struct slabhash* table, testdata_t* ref[])
/** test adding a random element */
static void
-testlookup(struct slabhash* table, testdata_t* ref[])
+testlookup(struct slabhash* table, testdata_type* ref[])
{
int num = random() % HASHTESTMAX;
- testkey_t* key = newkey(num);
+ testkey_type* key = newkey(num);
struct lruhash_entry* en = slabhash_lookup(table, myhash(num), key, 0);
- testdata_t* data = en? (testdata_t*)en->data : NULL;
+ testdata_type* data = en? (testdata_type*)en->data : NULL;
if(en) {
unit_assert(en->key);
unit_assert(en->data);
@@ -193,11 +193,11 @@ check_table(struct slabhash* table)
/** test adding a random element (unlimited range) */
static void
-testadd_unlim(struct slabhash* table, testdata_t** ref)
+testadd_unlim(struct slabhash* table, testdata_type** ref)
{
int numtoadd = random() % (HASHTESTMAX * 10);
- testdata_t* data = newdata(numtoadd);
- testkey_t* key = newkey(numtoadd);
+ testdata_type* data = newdata(numtoadd);
+ testkey_type* key = newkey(numtoadd);
key->entry.data = data;
slabhash_insert(table, myhash(numtoadd), &key->entry, data, NULL);
if(ref)
@@ -206,10 +206,10 @@ testadd_unlim(struct slabhash* table, testdata_t** ref)
/** test adding a random element (unlimited range) */
static void
-testremove_unlim(struct slabhash* table, testdata_t** ref)
+testremove_unlim(struct slabhash* table, testdata_type** ref)
{
int num = random() % (HASHTESTMAX*10);
- testkey_t* key = newkey(num);
+ testkey_type* key = newkey(num);
slabhash_remove(table, myhash(num), key);
if(ref)
ref[num] = NULL;
@@ -218,12 +218,12 @@ testremove_unlim(struct slabhash* table, testdata_t** ref)
/** test adding a random element (unlimited range) */
static void
-testlookup_unlim(struct slabhash* table, testdata_t** ref)
+testlookup_unlim(struct slabhash* table, testdata_type** ref)
{
int num = random() % (HASHTESTMAX*10);
- testkey_t* key = newkey(num);
+ testkey_type* key = newkey(num);
struct lruhash_entry* en = slabhash_lookup(table, myhash(num), key, 0);
- testdata_t* data = en? (testdata_t*)en->data : NULL;
+ testdata_type* data = en? (testdata_type*)en->data : NULL;
if(en) {
unit_assert(en->key);
unit_assert(en->data);
@@ -243,7 +243,7 @@ static void
test_long_table(struct slabhash* table)
{
/* assuming it all fits in the hashtable, this check will work */
- testdata_t* ref[HASHTESTMAX * 100];
+ testdata_type* ref[HASHTESTMAX * 100];
size_t i;
memset(ref, 0, sizeof(ref));
/* test assumption */
@@ -301,7 +301,7 @@ struct slab_test_thr {
/** thread num, first entry. */
int num;
/** id */
- ub_thread_t id;
+ ub_thread_type id;
/** hash table */
struct slabhash* table;
};
diff --git a/testcode/unitverify.c b/testcode/unitverify.c
index f6445e2815c4..b74ea5131b90 100644
--- a/testcode/unitverify.c
+++ b/testcode/unitverify.c
@@ -412,7 +412,7 @@ nsectest(void)
/** Test hash algo - NSEC3 hash it and compare result */
static void
-nsec3_hash_test_entry(struct entry* e, rbtree_t* ct,
+nsec3_hash_test_entry(struct entry* e, rbtree_type* ct,
struct alloc_cache* alloc, struct regional* region,
sldns_buffer* buf)
{
@@ -468,7 +468,7 @@ nsec3_hash_test(const char* fname)
*
* The test does not perform canonicalization during the compare.
*/
- rbtree_t ct;
+ rbtree_type ct;
struct regional* region = regional_create();
struct alloc_cache alloc;
sldns_buffer* buf = sldns_buffer_new(65535);
diff --git a/testdata/root_anchor.tpkg b/testdata/root_anchor.tpkg
index dfb4c5a1c2c2..98aa57e5257e 100644
--- a/testdata/root_anchor.tpkg
+++ b/testdata/root_anchor.tpkg
Binary files differ
diff --git a/util/alloc.c b/util/alloc.c
index a1152a7cf9fa..2c6e1a23f6c0 100644
--- a/util/alloc.c
+++ b/util/alloc.c
@@ -52,7 +52,7 @@
/** setup new special type */
static void
-alloc_setup_special(alloc_special_t* t)
+alloc_setup_special(alloc_special_type* t)
{
memset(t, 0, sizeof(*t));
lock_rw_init(&t->entry.lock);
@@ -66,10 +66,11 @@ alloc_setup_special(alloc_special_t* t)
static void
prealloc_setup(struct alloc_cache* alloc)
{
- alloc_special_t* p;
+ alloc_special_type* p;
int i;
for(i=0; i<ALLOC_SPECIAL_MAX; i++) {
- if(!(p = (alloc_special_t*)malloc(sizeof(alloc_special_t)))) {
+ if(!(p = (alloc_special_type*)malloc(
+ sizeof(alloc_special_type)))) {
log_err("prealloc: out of memory");
return;
}
@@ -128,7 +129,7 @@ alloc_init(struct alloc_cache* alloc, struct alloc_cache* super,
void
alloc_clear(struct alloc_cache* alloc)
{
- alloc_special_t* p, *np;
+ alloc_special_type* p, *np;
struct regional* r, *nr;
if(!alloc)
return;
@@ -187,10 +188,10 @@ alloc_get_id(struct alloc_cache* alloc)
return id;
}
-alloc_special_t*
+alloc_special_type*
alloc_special_obtain(struct alloc_cache* alloc)
{
- alloc_special_t* p;
+ alloc_special_type* p;
log_assert(alloc);
/* see if in local cache */
if(alloc->quar) {
@@ -217,7 +218,7 @@ alloc_special_obtain(struct alloc_cache* alloc)
}
/* allocate new */
prealloc_setup(alloc);
- if(!(p = (alloc_special_t*)malloc(sizeof(alloc_special_t)))) {
+ if(!(p = (alloc_special_type*)malloc(sizeof(alloc_special_type)))) {
log_err("alloc_special_obtain: out of memory");
return NULL;
}
@@ -228,10 +229,10 @@ alloc_special_obtain(struct alloc_cache* alloc)
/** push mem and some more items to the super */
static void
-pushintosuper(struct alloc_cache* alloc, alloc_special_t* mem)
+pushintosuper(struct alloc_cache* alloc, alloc_special_type* mem)
{
int i;
- alloc_special_t *p = alloc->quar;
+ alloc_special_type *p = alloc->quar;
log_assert(p);
log_assert(alloc && alloc->super &&
alloc->num_quar >= ALLOC_SPECIAL_MAX);
@@ -253,7 +254,7 @@ pushintosuper(struct alloc_cache* alloc, alloc_special_t* mem)
}
void
-alloc_special_release(struct alloc_cache* alloc, alloc_special_t* mem)
+alloc_special_release(struct alloc_cache* alloc, alloc_special_type* mem)
{
log_assert(alloc);
if(!mem)
@@ -286,12 +287,12 @@ alloc_stats(struct alloc_cache* alloc)
size_t alloc_get_mem(struct alloc_cache* alloc)
{
- alloc_special_t* p;
+ alloc_special_type* p;
size_t s = sizeof(*alloc);
if(!alloc->super) {
lock_quick_lock(&alloc->lock); /* superalloc needs locking */
}
- s += sizeof(alloc_special_t) * alloc->num_quar;
+ s += sizeof(alloc_special_type) * alloc->num_quar;
for(p = alloc->quar; p; p = alloc_special_next(p)) {
s += lock_get_mem(&p->entry.lock);
}
diff --git a/util/alloc.h b/util/alloc.h
index 43fc30f98f21..9839a4550175 100644
--- a/util/alloc.h
+++ b/util/alloc.h
@@ -53,11 +53,11 @@ struct ub_packed_rrset_key;
struct regional;
/** The special type, packed rrset. Not allowed to be used for other memory */
-typedef struct ub_packed_rrset_key alloc_special_t;
+typedef struct ub_packed_rrset_key alloc_special_type;
/** clean the special type. Pass pointer. */
#define alloc_special_clean(x) (x)->id = 0;
/** access next pointer. (in available spot). Pass pointer. */
-#define alloc_special_next(x) ((alloc_special_t*)((x)->entry.overflow_next))
+#define alloc_special_next(x) ((alloc_special_type*)((x)->entry.overflow_next))
/** set next pointer. (in available spot). Pass pointers. */
#define alloc_set_special_next(x, y) \
((x)->entry.overflow_next) = (struct lruhash_entry*)(y);
@@ -71,11 +71,11 @@ typedef struct ub_packed_rrset_key alloc_special_t;
*/
struct alloc_cache {
/** lock, only used for the super. */
- lock_quick_t lock;
+ lock_quick_type lock;
/** global allocator above this one. NULL for none (malloc/free) */
struct alloc_cache* super;
/** singly linked lists of special type. These are free for use. */
- alloc_special_t* quar;
+ alloc_special_type* quar;
/** number of items in quarantine. */
size_t num_quar;
/** thread number for id creation */
@@ -116,20 +116,20 @@ void alloc_init(struct alloc_cache* alloc, struct alloc_cache* super,
void alloc_clear(struct alloc_cache* alloc);
/**
- * Get a new special_t element.
+ * Get a new special_type element.
* @param alloc: where to alloc it.
* @return: memory block. Will not return NULL (instead fatal_exit).
* The block is zeroed.
*/
-alloc_special_t* alloc_special_obtain(struct alloc_cache* alloc);
+alloc_special_type* alloc_special_obtain(struct alloc_cache* alloc);
/**
- * Return special_t back to pool.
+ * Return special_type back to pool.
* The block is cleaned up (zeroed) which also invalidates the ID inside.
* @param alloc: where to alloc it.
* @param mem: block to free.
*/
-void alloc_special_release(struct alloc_cache* alloc, alloc_special_t* mem);
+void alloc_special_release(struct alloc_cache* alloc, alloc_special_type* mem);
/**
* Set ID number of special type to a fresh new ID number.
diff --git a/util/config_file.c b/util/config_file.c
index 881c85f599db..1eba4af860c3 100644
--- a/util/config_file.c
+++ b/util/config_file.c
@@ -108,6 +108,7 @@ config_create(void)
cfg->log_identity = NULL; /* changed later with argv[0] */
cfg->log_time_ascii = 0;
cfg->log_queries = 0;
+ cfg->log_replies = 0;
#ifndef USE_WINSOCK
# ifdef USE_MINI_EVENT
/* select max 1024 sockets */
@@ -158,6 +159,7 @@ config_create(void)
cfg->donotqueryaddrs = NULL;
cfg->donotquery_localhost = 1;
cfg->root_hints = NULL;
+ cfg->use_systemd = 0;
cfg->do_daemonize = 1;
cfg->if_automatic = 0;
cfg->so_rcvbuf = 0;
@@ -243,11 +245,15 @@ config_create(void)
goto error_exit;
#endif
cfg->disable_dnssec_lame_check = 0;
+ cfg->ip_ratelimit = 0;
cfg->ratelimit = 0;
+ cfg->ip_ratelimit_slabs = 4;
cfg->ratelimit_slabs = 4;
+ cfg->ip_ratelimit_size = 4*1024*1024;
cfg->ratelimit_size = 4*1024*1024;
cfg->ratelimit_for_domain = NULL;
cfg->ratelimit_below_domain = NULL;
+ cfg->ip_ratelimit_factor = 10;
cfg->ratelimit_factor = 10;
cfg->qname_minimisation = 0;
cfg->qname_minimisation_strict = 0;
@@ -386,6 +392,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_STR("ssl-service-pem:", ssl_service_pem)
else S_NUMBER_NONZERO("ssl-port:", ssl_port)
else S_YNO("interface-automatic:", if_automatic)
+ else S_YNO("use-systemd:", use_systemd)
else S_YNO("do-daemonize:", do_daemonize)
else S_NUMBER_NONZERO("port:", port)
else S_NUMBER_NONZERO("outgoing-range:", outgoing_num_ports)
@@ -456,6 +463,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_NUMBER_OR_ZERO("val-log-level:", val_log_level)
else S_YNO("val-log-squelch:", val_log_squelch)
else S_YNO("log-queries:", log_queries)
+ else S_YNO("log-replies:", log_replies)
else S_YNO("val-permissive-mode:", val_permissive_mode)
else S_YNO("ignore-cd-flag:", ignore_cd)
else S_YNO("serve-expired:", serve_expired)
@@ -484,12 +492,19 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_STR("module-config:", module_conf)
else S_STR("python-script:", python_script)
else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check)
+ else if(strcmp(opt, "ip-ratelimit:") == 0) {
+ IS_NUMBER_OR_ZERO; cfg->ip_ratelimit = atoi(val);
+ infra_ip_ratelimit=cfg->ip_ratelimit;
+ }
else if(strcmp(opt, "ratelimit:") == 0) {
IS_NUMBER_OR_ZERO; cfg->ratelimit = atoi(val);
infra_dp_ratelimit=cfg->ratelimit;
}
+ else S_MEMSIZE("ip-ratelimit-size:", ip_ratelimit_size)
else S_MEMSIZE("ratelimit-size:", ratelimit_size)
+ else S_POW2("ip-ratelimit-slabs:", ip_ratelimit_slabs)
else S_POW2("ratelimit-slabs:", ratelimit_slabs)
+ else S_NUMBER_OR_ZERO("ip-ratelimit-factor:", ip_ratelimit_factor)
else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor)
else S_YNO("qname-minimisation:", qname_minimisation)
else S_YNO("qname-minimisation-strict:", qname_minimisation_strict)
@@ -727,12 +742,14 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_STR(opt, "ssl-service-key", ssl_service_key)
else O_STR(opt, "ssl-service-pem", ssl_service_pem)
else O_DEC(opt, "ssl-port", ssl_port)
+ else O_YNO(opt, "use-systemd", use_systemd)
else O_YNO(opt, "do-daemonize", do_daemonize)
else O_STR(opt, "chroot", chrootdir)
else O_STR(opt, "username", username)
else O_STR(opt, "directory", directory)
else O_STR(opt, "logfile", logfile)
else O_YNO(opt, "log-queries", log_queries)
+ else O_YNO(opt, "log-replies", log_replies)
else O_STR(opt, "pidfile", pidfile)
else O_YNO(opt, "hide-identity", hide_identity)
else O_YNO(opt, "hide-version", hide_version)
@@ -792,11 +809,15 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_DEC(opt, "max-udp-size", max_udp_size)
else O_STR(opt, "python-script", python_script)
else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check)
+ else O_DEC(opt, "ip-ratelimit", ip_ratelimit)
else O_DEC(opt, "ratelimit", ratelimit)
+ else O_MEM(opt, "ip-ratelimit-size", ip_ratelimit_size)
else O_MEM(opt, "ratelimit-size", ratelimit_size)
+ else O_DEC(opt, "ip-ratelimit-slabs", ip_ratelimit_slabs)
else O_DEC(opt, "ratelimit-slabs", ratelimit_slabs)
else O_LS2(opt, "ratelimit-for-domain", ratelimit_for_domain)
else O_LS2(opt, "ratelimit-below-domain", ratelimit_below_domain)
+ else O_DEC(opt, "ip-ratelimit-factor", ip_ratelimit_factor)
else O_DEC(opt, "ratelimit-factor", ratelimit_factor)
else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min)
else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max)
diff --git a/util/config_file.h b/util/config_file.h
index 071b408e7c34..d52c2f48104d 100644
--- a/util/config_file.h
+++ b/util/config_file.h
@@ -229,6 +229,8 @@ struct config_file {
int log_time_ascii;
/** log queries with one line per query */
int log_queries;
+ /** log replies with one line per reply */
+ int log_replies;
/** log identity to report */
char* log_identity;
@@ -344,6 +346,9 @@ struct config_file {
/** Python script file */
char* python_script;
+ /** Use systemd socket activation. */
+ int use_systemd;
+
/** daemonize, i.e. fork into the background. */
int do_daemonize;
@@ -391,7 +396,16 @@ struct config_file {
/** true to disable DNSSEC lameness check in iterator */
int disable_dnssec_lame_check;
- /** ratelimit 0 is off, otherwise qps (unless overridden) */
+ /** ratelimit for ip addresses. 0 is off, otherwise qps (unless overridden) */
+ int ip_ratelimit;
+ /** number of slabs for ip_ratelimit cache */
+ size_t ip_ratelimit_slabs;
+ /** memory size in bytes for ip_ratelimit cache */
+ size_t ip_ratelimit_size;
+ /** ip_ratelimit factor, 0 blocks all, 10 allows 1/10 of traffic */
+ int ip_ratelimit_factor;
+
+ /** ratelimit for domains. 0 is off, otherwise qps (unless overridden) */
int ratelimit;
/** number of slabs for ratelimit cache */
size_t ratelimit_slabs;
diff --git a/util/configlexer.c b/util/configlexer.c
index a47eb9513b6d..b48f92faefc2 100644
--- a/util/configlexer.c
+++ b/util/configlexer.c
@@ -378,8 +378,8 @@ static void yy_fatal_error (yyconst char msg[] );
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 197
-#define YY_END_OF_BUFFER 198
+#define YY_NUM_RULES 203
+#define YY_END_OF_BUFFER 204
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -387,223 +387,228 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[1956] =
+static yyconst flex_int16_t yy_accept[1997] =
{ 0,
- 1, 1, 179, 179, 183, 183, 187, 187, 191, 191,
- 1, 1, 198, 195, 1, 177, 177, 196, 2, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 196,
- 179, 180, 180, 181, 196, 183, 184, 184, 185, 196,
- 190, 187, 188, 188, 189, 196, 191, 192, 192, 193,
- 196, 194, 178, 2, 182, 194, 196, 195, 0, 1,
- 2, 2, 2, 2, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 179, 0,
- 183, 0, 190, 0, 187, 191, 0, 194, 0, 2,
- 2, 194, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 194, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 194, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 76,
- 195, 195, 195, 195, 195, 195, 8, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 87, 194, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 194, 195, 195,
- 195, 195, 195, 36, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 157, 195, 14, 15, 195, 18,
- 17, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 143, 195, 195, 195, 195,
- 195, 195, 195, 195, 3, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 194, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 186, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 39, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 40, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 20, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 95, 195, 186, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 111, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 94, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 74, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 25, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 37, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 38, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 27, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 171, 195, 195, 195, 195, 195, 195, 195, 31, 195,
- 32, 195, 195, 195, 77, 195, 78, 195, 195, 75,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 7, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 150, 195, 195, 195, 195, 97, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 28, 195, 195, 195, 195, 195, 195, 126, 195, 125,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 16, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 41, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 80, 79, 195,
- 195, 195, 195, 195, 195, 195, 195, 121, 195, 195,
- 195, 195, 195, 195, 195, 88, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 59, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 63, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 35,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 124,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 6,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 117, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 136, 195, 118, 195, 195, 148, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 26,
- 195, 195, 195, 195, 83, 195, 84, 195, 82, 195,
- 195, 195, 195, 195, 195, 195, 93, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 119,
- 195, 195, 195, 195, 195, 122, 195, 147, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 73, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 33, 195, 195,
- 22, 195, 195, 195, 195, 19, 195, 102, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 48, 50, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 158, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 85, 195, 195,
- 195, 195, 195, 195, 195, 92, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 96, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 142,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 110, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 106, 195, 112, 195, 195, 195,
- 195, 195, 91, 195, 195, 69, 195, 134, 195, 195,
- 195, 195, 195, 149, 195, 195, 195, 195, 195, 195,
- 195, 163, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 109, 195, 195, 195, 195, 195,
- 51, 52, 195, 195, 34, 58, 113, 195, 127, 195,
- 151, 123, 195, 195, 44, 195, 115, 195, 195, 195,
- 195, 195, 9, 195, 195, 195, 72, 195, 195, 195,
- 195, 173, 195, 133, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 98, 162, 195, 195, 195,
- 195, 195, 195, 195, 195, 144, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 114, 195, 195, 43, 45, 195, 195, 195,
- 195, 195, 195, 195, 71, 195, 195, 195, 195, 172,
- 195, 195, 195, 195, 138, 23, 24, 195, 195, 195,
- 195, 195, 195, 195, 195, 68, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 140, 137,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 42,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 13, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 12,
- 195, 195, 21, 195, 195, 195, 176, 195, 46, 195,
- 146, 139, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 105, 104, 195, 195, 195, 195,
- 141, 135, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 53, 195, 195, 195, 145, 195, 195, 195,
- 195, 195, 195, 195, 195, 47, 195, 195, 81, 195,
- 99, 101, 128, 195, 195, 195, 103, 195, 195, 152,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 159, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 129, 195, 195, 195, 29, 195,
- 195, 195, 195, 4, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 155, 195, 195, 195, 195,
- 195, 195, 195, 195, 161, 195, 195, 132, 195, 195,
- 195, 195, 195, 195, 195, 195, 56, 195, 30, 156,
- 195, 11, 195, 195, 195, 195, 195, 195, 130, 60,
- 195, 195, 195, 108, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 160, 89, 195, 86, 195, 195,
-
- 195, 62, 66, 61, 195, 54, 195, 10, 195, 195,
- 195, 174, 195, 195, 107, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 67, 65,
- 195, 55, 195, 120, 195, 195, 131, 195, 195, 195,
- 195, 100, 49, 195, 195, 195, 195, 195, 195, 195,
- 90, 64, 57, 195, 175, 195, 195, 195, 154, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 70, 195,
- 153, 170, 195, 195, 195, 195, 195, 195, 5, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
-
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 116, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 166,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
- 195, 195, 195, 164, 195, 167, 168, 195, 195, 195,
- 195, 195, 165, 169, 0
+ 1, 1, 185, 185, 189, 189, 193, 193, 197, 197,
+ 1, 1, 204, 201, 1, 183, 183, 202, 2, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 202,
+ 185, 186, 186, 187, 202, 189, 190, 190, 191, 202,
+ 196, 193, 194, 194, 195, 202, 197, 198, 198, 199,
+ 202, 200, 184, 2, 188, 200, 202, 201, 0, 1,
+ 2, 2, 2, 2, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 185, 0,
+ 189, 0, 196, 0, 193, 197, 0, 200, 0, 2,
+ 2, 200, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 200, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 200,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 77, 201, 201, 201, 201, 201, 201, 8,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 88, 200, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 200, 201, 201, 201, 201, 201, 37, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 159,
+ 201, 14, 15, 201, 18, 17, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 145, 201, 201, 201, 201, 201, 201, 201,
+ 201, 3, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 200, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 192, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 40, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 41, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 20, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 96, 201, 192, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 112, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 95, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 75, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 25,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 38, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 39, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 28, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 174, 201, 201, 201, 201,
+ 201, 201, 201, 32, 201, 33, 201, 201, 201, 78,
+ 201, 79, 201, 201, 76, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 7, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 152, 201, 201, 201,
+ 201, 98, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 29, 201, 201, 201,
+ 201, 201, 201, 201, 128, 201, 127, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 16, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 42, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 81, 80, 201, 201, 201,
+ 201, 201, 201, 201, 201, 122, 201, 201, 201, 201,
+ 201, 201, 201, 201, 89, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 60,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 64, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 36, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 125,
+ 126, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 6, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 26, 201, 201, 201,
+ 201, 201, 201, 201, 201, 118, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 138, 201, 119, 201, 201,
+ 150, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 27, 201, 201, 201, 201, 84, 201, 85, 201,
+ 83, 201, 201, 201, 201, 201, 201, 201, 94, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 173, 201, 201, 120, 201, 201, 201, 201, 201, 123,
+ 201, 149, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 74, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 34, 201, 201, 22, 201, 201, 201, 201, 19,
+ 201, 103, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 49, 51, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 160, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 86, 201, 201, 201, 201, 201, 201, 201, 93,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 97, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 144, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 111, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 107, 201, 113, 201, 201, 201, 201, 201, 92, 201,
+ 201, 70, 201, 136, 201, 201, 201, 201, 201, 151,
+ 201, 201, 201, 201, 201, 201, 201, 165, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 110, 201, 201, 201, 201, 201, 52, 53, 201, 201,
+ 201, 201, 201, 35, 59, 114, 201, 129, 201, 153,
+ 124, 201, 201, 45, 201, 116, 201, 201, 201, 201,
+
+ 201, 9, 201, 201, 201, 73, 201, 201, 201, 201,
+ 178, 201, 135, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 99, 164, 201, 201, 201, 201,
+ 201, 201, 201, 201, 146, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 115, 201, 201, 44, 46, 201,
+ 201, 201, 201, 201, 201, 201, 72, 201, 201, 201,
+ 201, 176, 201, 201, 201, 201, 140, 23, 24, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 69, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 142, 139, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 43, 201, 201, 201, 201, 201, 201, 201, 201,
+ 13, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 12, 201, 201, 21, 201, 201,
+ 201, 182, 201, 47, 201, 148, 141, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 106,
+ 105, 201, 201, 201, 201, 143, 137, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 54, 201, 201,
+ 201, 177, 201, 201, 147, 201, 201, 201, 201, 201,
+ 201, 201, 201, 48, 201, 201, 82, 201, 100, 102,
+ 130, 201, 201, 201, 104, 201, 201, 154, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 161, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 131, 201, 201, 175, 201, 201, 30, 201,
+ 201, 201, 201, 4, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 157, 201, 201, 201, 201,
+ 201, 201, 201, 201, 163, 201, 201, 134, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 57, 201, 31, 181,
+ 158, 201, 11, 201, 201, 201, 201, 201, 201, 132,
+ 61, 201, 201, 201, 109, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 162, 90, 201, 87, 201,
+ 201, 201, 63, 67, 62, 201, 55, 201, 10, 201,
+ 201, 201, 179, 201, 201, 108, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 68,
+ 66, 201, 56, 201, 121, 201, 201, 133, 201, 201,
+ 201, 201, 101, 50, 201, 201, 201, 201, 201, 201,
+ 201, 91, 65, 58, 201, 180, 201, 201, 201, 156,
+
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 71,
+ 201, 155, 172, 201, 201, 201, 201, 201, 201, 5,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 117, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 168, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 166, 201, 169, 170, 201, 201,
+ 201, 201, 201, 167, 171, 0
+
} ;
static yyconst YY_CHAR yy_ec[256] =
@@ -649,15 +654,15 @@ static yyconst YY_CHAR yy_meta[66] =
1, 1, 1, 1, 1
} ;
-static yyconst flex_uint16_t yy_base[1970] =
+static yyconst flex_uint16_t yy_base[2011] =
{ 0,
0, 0, 63, 66, 69, 71, 77, 83, 88, 91,
- 129, 135, 354, 275, 95, 5624, 5624, 5624, 107, 110,
+ 129, 135, 354, 275, 95, 5728, 5728, 5728, 107, 110,
142, 180, 108, 145, 152, 186, 50, 149, 121, 182,
210, 177, 254, 137, 225, 229, 205, 227, 273, 116,
- 271, 5624, 5624, 5624, 94, 268, 5624, 5624, 5624, 96,
- 261, 295, 5624, 5624, 5624, 299, 256, 5624, 5624, 5624,
- 102, 250, 5624, 318, 5624, 141, 322, 228, 326, 111,
+ 271, 5728, 5728, 5728, 94, 268, 5728, 5728, 5728, 96,
+ 261, 295, 5728, 5728, 5728, 299, 256, 5728, 5728, 5728,
+ 102, 250, 5728, 318, 5728, 141, 322, 228, 326, 111,
0, 330, 0, 0, 257, 235, 277, 324, 310, 266,
323, 314, 125, 312, 348, 322, 326, 341, 320, 351,
339, 359, 357, 374, 209, 362, 378, 392, 358, 373,
@@ -669,427 +674,437 @@ static yyconst flex_uint16_t yy_base[1970] =
0, 495, 519, 307, 515, 525, 513, 520, 514, 528,
542, 539, 547, 468, 557, 601, 552, 546, 540, 549,
559, 564, 580, 573, 574, 581, 572, 592, 598, 625,
- 586, 611, 602, 633, 640, 639, 632, 623, 643, 642,
- 655, 659, 649, 650, 651, 660, 658, 666, 654, 652,
- 670, 679, 676, 690, 677, 682, 702, 685, 706, 703,
-
- 715, 697, 707, 712, 718, 722, 729, 724, 726, 725,
- 733, 754, 750, 758, 742, 743, 745, 756, 751, 763,
- 760, 772, 454, 778, 791, 780, 782, 795, 790, 793,
- 784, 787, 799, 803, 805, 812, 807, 815, 814, 823,
- 837, 813, 826, 841, 828, 829, 839, 852, 854, 849,
- 850, 860, 862, 872, 863, 889, 509, 877, 878, 886,
- 873, 884, 903, 909, 905, 900, 912, 896, 904, 925,
- 918, 921, 944, 923, 939, 934, 950, 935, 959, 936,
- 942, 954, 970, 961, 1015, 963, 983, 998, 985, 974,
- 981, 994, 995, 986, 1008, 1011, 1019, 1022, 1036, 1020,
-
- 1038, 1025, 1047, 1032, 1055, 551, 1042, 1052, 1054, 1057,
- 1074, 1069, 1079, 1067, 1064, 1077, 1081, 1075, 1084, 1100,
- 1096, 1093, 1110, 1115, 1113, 1120, 1117, 1111, 1127, 1129,
- 1126, 1112, 1123, 1140, 1131, 1160, 1158, 1143, 1165, 5624,
- 1167, 1148, 1170, 1162, 1153, 1172, 5624, 1156, 1182, 1190,
- 1138, 1197, 1181, 1199, 1185, 1214, 1193, 1195, 1217, 1203,
- 1220, 1211, 1209, 1259, 1219, 1230, 1234, 1257, 1253, 1243,
- 1268, 1246, 1273, 1264, 1270, 1266, 1280, 1288, 1298, 1295,
- 1292, 1301, 1231, 5624, 1309, 1318, 1305, 1302, 1308, 1315,
- 1324, 1322, 1331, 1327, 1330, 1326, 1347, 1343, 1340, 1369,
-
- 1349, 1355, 1363, 1368, 1371, 1372, 1379, 1357, 1375, 1358,
- 1383, 1385, 1384, 1386, 1373, 1396, 1389, 1395, 1416, 1390,
- 1402, 1407, 1421, 1413, 1405, 1422, 1430, 1435, 1432, 1436,
- 1429, 1440, 1449, 1458, 1448, 1444, 1471, 1475, 1468, 1462,
- 1467, 1483, 1477, 1487, 1488, 1479, 1490, 1486, 1503, 1497,
- 1510, 1509, 1515, 1525, 1521, 1513, 1526, 1504, 1511, 1514,
- 1524, 1530, 1536, 1543, 1546, 1547, 1550, 1571, 1549, 1556,
- 1561, 1574, 1569, 1576, 1563, 1567, 1584, 1592, 1577, 1593,
- 1605, 1607, 1596, 1608, 1609, 1602, 1613, 1620, 1627, 1617,
- 1629, 1637, 1624, 5624, 1632, 1635, 1649, 1651, 1640, 1665,
-
- 1660, 1648, 1644, 1692, 5624, 1657, 5624, 5624, 1662, 5624,
- 5624, 1682, 1675, 1690, 1685, 1678, 1741, 1683, 1680, 1695,
- 1700, 1723, 1722, 1734, 1724, 1736, 1747, 1751, 1750, 1738,
- 1757, 1763, 1766, 1765, 1770, 1774, 1777, 1778, 1790, 1788,
- 1730, 1798, 1799, 1800, 1801, 1803, 1813, 1814, 1817, 1815,
- 1808, 1812, 1829, 1818, 1828, 5624, 1823, 1840, 1850, 1838,
- 1842, 1839, 1833, 1860, 5624, 1841, 1867, 1861, 1858, 1864,
- 1873, 1874, 1888, 1877, 1884, 1887, 1885, 1894, 1900, 1875,
- 1898, 1902, 1911, 1921, 1922, 1909, 1919, 1927, 1913, 1936,
- 1943, 1938, 1924, 1939, 1948, 1930, 1947, 1944, 1956, 1945,
-
- 1963, 1954, 1958, 1964, 1966, 2011, 1975, 1980, 1977, 1971,
- 1997, 1991, 1983, 1985, 1994, 2013, 2010, 2024, 2026, 2028,
- 2009, 2034, 2040, 2038, 2045, 2075, 2050, 2055, 2057, 2051,
- 2069, 2059, 2072, 2065, 2066, 2068, 2084, 5624, 2078, 2097,
- 2090, 2091, 2117, 2111, 2095, 2110, 2107, 2120, 2106, 2121,
- 2112, 2128, 2131, 2136, 2134, 5624, 2130, 2144, 2139, 2155,
- 2159, 2163, 2156, 2166, 2174, 2171, 5624, 2161, 2179, 2195,
- 2170, 2188, 2183, 2190, 2187, 2182, 2192, 2200, 2215, 2219,
- 2212, 2209, 2222, 2208, 2229, 2223, 2230, 2226, 2235, 2239,
- 2245, 2252, 2256, 2262, 5624, 2246, 2260, 2265, 2257, 2274,
-
- 2278, 2280, 2275, 2279, 2283, 2281, 106, 2282, 2290, 2285,
- 2286, 5624, 2296, 90, 2302, 2303, 2294, 2323, 2332, 2328,
- 2329, 2321, 2322, 2339, 2325, 2327, 2330, 2338, 2349, 2347,
- 2355, 2352, 2345, 2357, 2374, 2376, 2378, 2372, 2380, 2371,
- 2379, 2382, 2373, 2406, 2398, 5624, 2414, 2412, 2405, 2403,
- 2408, 2419, 2415, 2409, 2410, 2416, 2445, 2425, 2436, 2448,
- 5624, 2397, 2446, 2454, 2439, 2463, 2452, 2469, 2455, 2466,
- 2470, 2472, 2467, 2481, 2487, 2495, 2483, 2497, 2503, 2496,
- 2501, 2499, 2491, 2515, 2520, 2512, 2521, 2544, 2540, 176,
- 2523, 5624, 2539, 2530, 2528, 2529, 2563, 2555, 2556, 2566,
-
- 2565, 2567, 2559, 2570, 2551, 2573, 2554, 5624, 2581, 2593,
- 2580, 2605, 2589, 2610, 2607, 2592, 2614, 2597, 2616, 2615,
- 2622, 2628, 2620, 2624, 2626, 5624, 2632, 2635, 2640, 2639,
- 2637, 2642, 2641, 2658, 2643, 2651, 2653, 2678, 2667, 2655,
- 2665, 2666, 2682, 2669, 2670, 2673, 2694, 2686, 2692, 2696,
- 5624, 2693, 2729, 2697, 2709, 2705, 2713, 2734, 2731, 2726,
- 2719, 2721, 2723, 2740, 2725, 2739, 2751, 2742, 2730, 2761,
- 2757, 2748, 2762, 2764, 2774, 2778, 2775, 2776, 2772, 2782,
- 2786, 2790, 2788, 2799, 2800, 2813, 2815, 5624, 2818, 2819,
- 2804, 2820, 2821, 2809, 2833, 2834, 2812, 2837, 2838, 2827,
-
- 2839, 2845, 2841, 2844, 2848, 2850, 2854, 2860, 2849, 2864,
- 2881, 2883, 2876, 2889, 2887, 2891, 2880, 2890, 2885, 2921,
- 5624, 2884, 2902, 2919, 2901, 2912, 2914, 2925, 5624, 2915,
- 5624, 2931, 2937, 2939, 5624, 2943, 5624, 2944, 2929, 5624,
- 2946, 2952, 2932, 2950, 2941, 2957, 2954, 2978, 2963, 2984,
- 2964, 2976, 2988, 2974, 2989, 5624, 2995, 2979, 2990, 2998,
- 3002, 3003, 3008, 2991, 3012, 3031, 3035, 3041, 3016, 3042,
- 5624, 3030, 3045, 3027, 3043, 5624, 3024, 3051, 3053, 3054,
- 3079, 3057, 3056, 3068, 3059, 3062, 3063, 3098, 3095, 3081,
- 3083, 3080, 3107, 3106, 3109, 3090, 3110, 3116, 3114, 3103,
-
- 3108, 3112, 3104, 3135, 3131, 3124, 3129, 3130, 3138, 3133,
- 5624, 3153, 3156, 3148, 3157, 3158, 3162, 5624, 3172, 5624,
- 3141, 3169, 3179, 3168, 3185, 3177, 3183, 3199, 3189, 3176,
- 3207, 3195, 3204, 3200, 3206, 3205, 3212, 5624, 3216, 3219,
- 3222, 3236, 3231, 3248, 3254, 3247, 3239, 5624, 3234, 3244,
- 3260, 3258, 3264, 3268, 3276, 3277, 3291, 5624, 5624, 3274,
- 3297, 3285, 3281, 3283, 3280, 3295, 3296, 5624, 3286, 3312,
- 3304, 3323, 3325, 3310, 3317, 5624, 3320, 3334, 3331, 3341,
- 3337, 3339, 3344, 3346, 3342, 3338, 3347, 3359, 3357, 3370,
- 5624, 3372, 3373, 3379, 3376, 3380, 3383, 3381, 3374, 3386,
-
- 3402, 3375, 3390, 3394, 3400, 3404, 3407, 3403, 3414, 3408,
- 3433, 3415, 3437, 3435, 3444, 3440, 5624, 3448, 3427, 3450,
- 3422, 3456, 3457, 3452, 3468, 3441, 3449, 3463, 3466, 5624,
- 3451, 3470, 3473, 3472, 3488, 3474, 3483, 3501, 3503, 5624,
- 3495, 3506, 3496, 3510, 3515, 3493, 3525, 3508, 3520, 5624,
- 3522, 3516, 3521, 3532, 3544, 3549, 3550, 3551, 3546, 3537,
- 3543, 3548, 3564, 3547, 3553, 3568, 3566, 3571, 3570, 3582,
- 3593, 3591, 3588, 3594, 3601, 3595, 3597, 3587, 3576, 3602,
- 3623, 3608, 3604, 3613, 3637, 3624, 3635, 3629, 3617, 3649,
- 3626, 3650, 3643, 5624, 3644, 3653, 3658, 3659, 3640, 3666,
-
- 3656, 3667, 3669, 5624, 3674, 5624, 3662, 3683, 5624, 3685,
- 3684, 3671, 3681, 3686, 3688, 3698, 3709, 3713, 3689, 5624,
- 3720, 3701, 3717, 3718, 5624, 3723, 5624, 3722, 5624, 3724,
- 3728, 3737, 3735, 3755, 3741, 3757, 5624, 3751, 3740, 3762,
- 3764, 3750, 3749, 3768, 3769, 3748, 3777, 3766, 3779, 5624,
- 3789, 3795, 3784, 3798, 3805, 5624, 3800, 5624, 3796, 3814,
- 3791, 3815, 3826, 3829, 3830, 3813, 3818, 3819, 3843, 3836,
- 3825, 5624, 3832, 3840, 3850, 3863, 3853, 3846, 3847, 3867,
- 3869, 3870, 3874, 3877, 3884, 3876, 3875, 5624, 3895, 3902,
- 5624, 3892, 3888, 3898, 3901, 5624, 3912, 5624, 3914, 3906,
-
- 3899, 3922, 3923, 3927, 3930, 3919, 3933, 3935, 3929, 3959,
- 3944, 3941, 5624, 5624, 3953, 3957, 3970, 3971, 3962, 3955,
- 3979, 3976, 3977, 5624, 3958, 3982, 3967, 3980, 3986, 3978,
- 3999, 3992, 3998, 3997, 4006, 3994, 4008, 5624, 4009, 4007,
- 4013, 4022, 4023, 4004, 4024, 5624, 4032, 4043, 4035, 4038,
- 4040, 4055, 4058, 4060, 4051, 4050, 4061, 4069, 4074, 4057,
- 4081, 4068, 4089, 4091, 4073, 5624, 4093, 4094, 4078, 4099,
- 4084, 4100, 4101, 4114, 4107, 4090, 4095, 4113, 4112, 5624,
- 4118, 4120, 4108, 4140, 4146, 4129, 4149, 4125, 4152, 4145,
- 5624, 4150, 4155, 4136, 4156, 4137, 4163, 4179, 4159, 4182,
-
- 4183, 4180, 4170, 4189, 5624, 4178, 5624, 4190, 4201, 4204,
- 4213, 4210, 5624, 4197, 4206, 5624, 4196, 5624, 4224, 4229,
- 4216, 4226, 4244, 5624, 4245, 4233, 4249, 4240, 4241, 4239,
- 4261, 5624, 4242, 4267, 4248, 4259, 4260, 4263, 4278, 4277,
- 4273, 4279, 4282, 4289, 5624, 4285, 4291, 4302, 4305, 4297,
- 5624, 5624, 4300, 4316, 5624, 5624, 5624, 4303, 5624, 4307,
- 5624, 5624, 4310, 4321, 5624, 4331, 5624, 4306, 4334, 4320,
- 4323, 4333, 5624, 4327, 4337, 4339, 5624, 4342, 4357, 4341,
- 4340, 5624, 4356, 5624, 4365, 4369, 4360, 4372, 4375, 4379,
- 4380, 4373, 4363, 4387, 4382, 4383, 4391, 4384, 4393, 4405,
-
- 4408, 4397, 4399, 4412, 4404, 4415, 4426, 4424, 4416, 4414,
- 4432, 4440, 4438, 4447, 4448, 5624, 5624, 4442, 4439, 4446,
- 4450, 4469, 4459, 4453, 4480, 5624, 4458, 4473, 4465, 4484,
- 4472, 4475, 4476, 4474, 4485, 4488, 4517, 4498, 4507, 4500,
- 4518, 4506, 5624, 4515, 4509, 5624, 5624, 4510, 4529, 4535,
- 4525, 4520, 4539, 4537, 5624, 4533, 4550, 4558, 4556, 5624,
- 4561, 4544, 4570, 4572, 5624, 5624, 5624, 4573, 4557, 4565,
- 4567, 4575, 4577, 4568, 4581, 5624, 4571, 4588, 4605, 4596,
- 4591, 4612, 4614, 4617, 4623, 4619, 4625, 4626, 5624, 5624,
- 4615, 4631, 4629, 4630, 4627, 4632, 4637, 4638, 4649, 5624,
-
- 4663, 4662, 4650, 4656, 4664, 4670, 4674, 4671, 5624, 4659,
- 4665, 4684, 4681, 4690, 4695, 4683, 4699, 4705, 4710, 5624,
- 4707, 4706, 5624, 4714, 4711, 4708, 5624, 4720, 5624, 4724,
- 5624, 5624, 4729, 4726, 4728, 4736, 4744, 4757, 4758, 4741,
- 4746, 4644, 4761, 4763, 5624, 5624, 4769, 4747, 4756, 4768,
- 5624, 5624, 4772, 4764, 4773, 4774, 4783, 4766, 4775, 4779,
- 4804, 4794, 4810, 4814, 4816, 4802, 4819, 4800, 4796, 4823,
- 4806, 4808, 5624, 4834, 4833, 4843, 5624, 4838, 4852, 4850,
- 4849, 4842, 4866, 4851, 4859, 5624, 4862, 4855, 5624, 4847,
- 5624, 5624, 5624, 4875, 4886, 4879, 5624, 4885, 4896, 5624,
-
- 4892, 4894, 4881, 4877, 4884, 4904, 4898, 4914, 4893, 4922,
- 5624, 4907, 4920, 4929, 4924, 4934, 4930, 4917, 4921, 4942,
- 4941, 4928, 4952, 4944, 5624, 4958, 4959, 4965, 5624, 4972,
- 4955, 4951, 4957, 5624, 4979, 4969, 4966, 4987, 4989, 4981,
- 4982, 4971, 4995, 5001, 5010, 5624, 4993, 4992, 5014, 5008,
- 5006, 5027, 5028, 5024, 5624, 5026, 5015, 5624, 5029, 5031,
- 5016, 5042, 5048, 5049, 5050, 5054, 5624, 5060, 5624, 5624,
- 5061, 5624, 5064, 5051, 5063, 5057, 5067, 5074, 5624, 5624,
- 5072, 5068, 5077, 5624, 5076, 5078, 5092, 5073, 5094, 5090,
- 5095, 5109, 5093, 5110, 5624, 5624, 5112, 5624, 5113, 5116,
-
- 5124, 5624, 5624, 5624, 5118, 5624, 5129, 5624, 5130, 5131,
- 5120, 5624, 5144, 5135, 5624, 5145, 5137, 5147, 5152, 5165,
- 5161, 5142, 5153, 5157, 5176, 5177, 5164, 5170, 5624, 5624,
- 5185, 5624, 5186, 5624, 5180, 5187, 5624, 5184, 5197, 5191,
- 5199, 5624, 5624, 5212, 5204, 5203, 5214, 5201, 5209, 5205,
- 5624, 5624, 5624, 5226, 5624, 5218, 5223, 5224, 5624, 5241,
- 5242, 5239, 5244, 5245, 5232, 5248, 5240, 5237, 5264, 5274,
- 5276, 5272, 5275, 5256, 5271, 5282, 5278, 5293, 5624, 5279,
- 5624, 5624, 5291, 5299, 5300, 5297, 5301, 5296, 5624, 5298,
- 5303, 5304, 5316, 5313, 5328, 5330, 5326, 5346, 5331, 5343,
-
- 5349, 5342, 5338, 5350, 5344, 5360, 5363, 5356, 5365, 5353,
- 5624, 5359, 5370, 5375, 5372, 5395, 5393, 5381, 5402, 5404,
- 5408, 5407, 5391, 5368, 5412, 5417, 5409, 5421, 5423, 5624,
- 5433, 5440, 5430, 5435, 5446, 5437, 5439, 5451, 5443, 5461,
- 5459, 5463, 5464, 5624, 5470, 5624, 5624, 5472, 5465, 5474,
- 5480, 5482, 5624, 5624, 5624, 5532, 5539, 5546, 5553, 5560,
- 82, 5567, 5574, 5581, 5588, 5595, 5602, 5609, 5616
+ 586, 611, 602, 633, 640, 639, 632, 623, 651, 650,
+ 660, 661, 656, 649, 658, 654, 659, 653, 671, 680,
+ 689, 669, 677, 690, 678, 691, 703, 688, 711, 705,
+
+ 707, 704, 702, 718, 729, 730, 740, 721, 716, 733,
+ 741, 737, 746, 757, 739, 743, 748, 750, 738, 769,
+ 778, 781, 454, 786, 790, 767, 777, 794, 789, 802,
+ 799, 798, 804, 800, 810, 806, 803, 814, 813, 809,
+ 842, 841, 827, 831, 828, 847, 833, 840, 857, 853,
+ 854, 868, 855, 869, 874, 880, 895, 509, 873, 882,
+ 879, 896, 901, 889, 903, 917, 912, 906, 919, 914,
+ 924, 916, 935, 944, 928, 954, 941, 952, 951, 959,
+ 937, 967, 971, 984, 974, 1029, 977, 981, 993, 989,
+ 994, 991, 1002, 964, 1000, 1008, 1009, 1020, 1011, 969,
+
+ 1019, 1030, 1040, 1038, 1046, 1055, 551, 1056, 1047, 1061,
+ 1064, 1082, 1075, 1081, 1068, 1066, 1088, 1087, 1089, 1095,
+ 1091, 1065, 1098, 1111, 1116, 1123, 1109, 1130, 1127, 1121,
+ 1138, 1137, 1136, 1114, 1144, 1133, 1141, 1147, 1169, 1167,
+ 1152, 1174, 5728, 1176, 1160, 1178, 1179, 1162, 1171, 5728,
+ 1194, 1164, 1193, 1189, 1208, 1213, 1211, 1196, 1229, 1200,
+ 1203, 1227, 1221, 1223, 1210, 1233, 1279, 1237, 1240, 1245,
+ 1270, 1262, 1249, 1272, 1256, 1276, 1267, 1289, 1296, 1291,
+ 1293, 1308, 1312, 1300, 1302, 1318, 5728, 1322, 1266, 1329,
+ 1316, 1320, 1323, 1243, 1340, 1358, 1343, 1354, 1344, 1360,
+
+ 1361, 1347, 1373, 1349, 1372, 1375, 1381, 1378, 1380, 1387,
+ 1374, 1389, 1377, 1393, 1402, 1399, 1401, 1390, 1413, 1407,
+ 1404, 1424, 1417, 1414, 1420, 1441, 1443, 1439, 1423, 1416,
+ 1452, 1445, 1451, 1459, 1442, 1447, 1462, 1461, 1469, 1465,
+ 1478, 1487, 1492, 1488, 1479, 1485, 1504, 1496, 1506, 1500,
+ 1502, 1513, 1505, 1508, 1514, 1516, 1533, 1532, 1542, 1544,
+ 1520, 1547, 1535, 1538, 1531, 1534, 1563, 1548, 1555, 1561,
+ 1566, 1571, 1572, 1568, 1573, 1588, 1597, 1580, 1598, 1593,
+ 1577, 1595, 1604, 1600, 1610, 1616, 1624, 1615, 1619, 1625,
+ 1627, 1630, 1635, 1642, 1643, 1628, 1662, 1650, 5728, 1654,
+
+ 1638, 1660, 1661, 1657, 1682, 1672, 1665, 1668, 1716, 5728,
+ 1681, 5728, 5728, 1686, 5728, 5728, 1670, 1699, 1700, 1713,
+ 1715, 1765, 1707, 1706, 1692, 1719, 1718, 1729, 1746, 1743,
+ 1752, 1732, 1751, 1755, 1759, 1763, 1749, 1771, 1770, 1792,
+ 1802, 1786, 1793, 1787, 1794, 1804, 1808, 1816, 1819, 1814,
+ 1818, 1815, 1829, 1820, 1821, 1832, 1830, 1825, 1831, 1846,
+ 1859, 1841, 5728, 1852, 1853, 1866, 1856, 1871, 1848, 1850,
+ 1881, 5728, 1864, 1873, 1882, 1875, 1888, 1886, 1898, 1890,
+ 1896, 1897, 1909, 1908, 1912, 1921, 1904, 1922, 1924, 1932,
+ 1933, 1936, 1925, 1946, 1945, 1934, 1956, 1960, 1959, 1952,
+
+ 1951, 1972, 1954, 1975, 1976, 1980, 1973, 1986, 1977, 1968,
+ 1984, 1985, 2030, 2009, 2016, 2003, 1997, 2023, 2011, 2029,
+ 2017, 2028, 2036, 2037, 2060, 2054, 2056, 2050, 2058, 2068,
+ 2080, 2082, 2109, 2077, 2079, 2086, 2081, 2095, 2098, 2097,
+ 2104, 2102, 2112, 2122, 5728, 2092, 2111, 2124, 2120, 2138,
+ 2141, 2131, 2145, 2147, 2136, 2148, 2140, 2161, 2144, 2155,
+ 2158, 2167, 2171, 2165, 5728, 2168, 2172, 2174, 2192, 2195,
+ 2199, 2193, 2205, 2212, 2196, 5728, 2194, 2215, 2224, 2227,
+ 2220, 2218, 2226, 2223, 2232, 2219, 2233, 2239, 2251, 2242,
+ 2247, 2252, 2264, 2268, 2254, 2270, 2262, 2265, 2266, 2269,
+
+ 2291, 2283, 2289, 5728, 2285, 2295, 2290, 2293, 2306, 2310,
+ 2299, 2318, 2308, 2300, 2315, 2312, 106, 2313, 2325, 2317,
+ 2322, 5728, 2335, 90, 2339, 2328, 2337, 2342, 2352, 2355,
+ 2362, 2345, 2351, 2363, 2356, 2358, 2366, 2361, 2372, 2375,
+ 2382, 2379, 2395, 2385, 2406, 2403, 2404, 2399, 2412, 2392,
+ 2416, 2409, 2402, 2422, 2426, 5728, 2440, 2437, 2432, 2431,
+ 2436, 2448, 2449, 2438, 2435, 2442, 2462, 2464, 2465, 2471,
+ 5728, 2470, 2467, 2478, 2473, 2491, 2487, 2515, 2482, 2476,
+ 2489, 2503, 2497, 2512, 2523, 2524, 2517, 2518, 2528, 2529,
+ 2531, 2526, 2536, 2543, 2520, 2540, 2544, 2559, 2542, 2583,
+
+ 2577, 176, 2555, 5728, 2571, 2573, 2562, 2581, 2585, 2582,
+ 2560, 2586, 2600, 2602, 2598, 2593, 2595, 2617, 2631, 5728,
+ 2630, 2629, 2620, 2635, 2622, 2636, 2641, 2627, 2637, 2645,
+ 2647, 2643, 2650, 2666, 2653, 2670, 2674, 2672, 5728, 2547,
+ 2657, 2678, 2690, 2679, 2668, 2680, 2689, 2682, 2684, 2673,
+ 2694, 2699, 2700, 2710, 2706, 2727, 2705, 2709, 2712, 2733,
+ 2735, 2718, 2737, 5728, 2729, 2763, 2744, 2750, 2764, 2756,
+ 2747, 2768, 2762, 2757, 2752, 2769, 2777, 2774, 2761, 2790,
+ 2780, 2783, 2799, 2801, 2791, 2797, 2803, 2808, 2809, 2818,
+ 2814, 2825, 2829, 2821, 2810, 2841, 2824, 2851, 2852, 2854,
+
+ 5728, 2857, 2856, 2858, 2845, 2859, 2848, 2847, 2869, 2892,
+ 2850, 2876, 2879, 2880, 2874, 2883, 2903, 2908, 2886, 2893,
+ 2896, 2897, 2904, 2890, 2906, 2913, 2925, 2922, 2937, 2939,
+ 2942, 2938, 2941, 2940, 2956, 5728, 2927, 2957, 2954, 2966,
+ 2945, 2967, 2964, 5728, 2961, 5728, 2971, 2981, 2996, 5728,
+ 2995, 5728, 2999, 2984, 5728, 2998, 3003, 2990, 2985, 2993,
+ 3008, 3006, 3015, 3012, 3009, 3017, 2997, 3027, 3037, 3028,
+ 3044, 5728, 3050, 3033, 3039, 3056, 3054, 3042, 3043, 3052,
+ 3055, 3065, 3068, 3076, 3071, 3089, 5728, 3079, 3087, 3077,
+ 3095, 5728, 3081, 3098, 3085, 3090, 3124, 3111, 3104, 3112,
+
+ 3108, 3116, 3126, 3119, 3132, 3131, 3125, 3135, 3123, 3140,
+ 3138, 3143, 3156, 3147, 3158, 3146, 3157, 3159, 3167, 3168,
+ 3162, 3182, 3172, 3176, 3173, 3184, 5728, 3197, 3190, 3193,
+ 3186, 3208, 3209, 3200, 5728, 3211, 5728, 3214, 3222, 3229,
+ 3227, 3228, 3224, 3225, 3243, 3238, 3237, 3248, 3259, 3249,
+ 3255, 3245, 3257, 3264, 3266, 5728, 3254, 3265, 3284, 3272,
+ 3291, 3282, 3293, 3292, 3295, 5728, 3306, 3298, 3312, 3307,
+ 3318, 3303, 3330, 3319, 3333, 5728, 5728, 3310, 3339, 3325,
+ 3331, 3334, 3345, 3346, 3337, 5728, 3348, 3350, 3363, 3366,
+ 3373, 3374, 3359, 3358, 5728, 3369, 3383, 3377, 3380, 3376,
+
+ 3390, 3393, 3396, 3397, 3395, 3410, 3399, 3418, 3419, 5728,
+ 3420, 3422, 3427, 3423, 3428, 3429, 3430, 3417, 3436, 3444,
+ 3447, 3446, 3451, 3468, 3449, 3456, 3452, 3477, 3462, 3481,
+ 3463, 3485, 3483, 3490, 3488, 5728, 3496, 3480, 3500, 3476,
+ 3505, 3512, 3504, 3507, 3502, 3510, 3528, 3515, 5728, 3545,
+ 3524, 3523, 3506, 3532, 3542, 3534, 3541, 3551, 3556, 5728,
+ 5728, 3555, 3560, 3559, 3566, 3567, 3562, 3579, 3569, 3581,
+ 5728, 3572, 3540, 3578, 3585, 3606, 3613, 3584, 3605, 3607,
+ 3594, 3599, 3608, 3624, 3611, 3604, 3622, 3621, 3625, 3631,
+ 3635, 3647, 3633, 3628, 3648, 3661, 3649, 3651, 3652, 3671,
+
+ 3668, 3681, 3686, 3657, 3673, 3691, 5728, 3677, 3690, 3684,
+ 3676, 3697, 3680, 3709, 3703, 5728, 3711, 3705, 3719, 3720,
+ 3707, 3716, 3721, 3725, 3728, 5728, 3730, 5728, 3736, 3732,
+ 5728, 3733, 3740, 3741, 3742, 3738, 3754, 3766, 3769, 3779,
+ 3762, 5728, 3783, 3759, 3771, 3778, 5728, 3782, 5728, 3775,
+ 5728, 3793, 3785, 3789, 3796, 3814, 3790, 3794, 5728, 3817,
+ 3805, 3826, 3819, 3809, 3821, 3822, 3831, 3811, 3832, 3844,
+ 5728, 3842, 3845, 5728, 3851, 3864, 3849, 3868, 3872, 5728,
+ 3871, 5728, 3861, 3881, 3858, 3877, 3885, 3891, 3892, 3883,
+ 3893, 3890, 3898, 3902, 3908, 5728, 3907, 3917, 3905, 3920,
+
+ 3912, 3918, 3937, 3936, 3944, 3910, 3943, 3948, 3951, 3947,
+ 3945, 5728, 3954, 3961, 5728, 3949, 3940, 3967, 3953, 5728,
+ 3984, 5728, 3986, 3976, 3970, 3989, 3999, 3993, 4000, 3982,
+ 4003, 4005, 4008, 4040, 3996, 4018, 5728, 5728, 4006, 4015,
+ 4014, 4042, 4027, 4026, 4019, 4045, 4047, 5728, 4030, 4051,
+ 4035, 4034, 4054, 4046, 4036, 4060, 4071, 4053, 4079, 4062,
+ 4073, 5728, 4074, 4067, 4072, 4078, 4082, 4095, 4083, 5728,
+ 4108, 4109, 4100, 4102, 4101, 4117, 4121, 4125, 4111, 4119,
+ 4136, 4138, 4133, 4142, 4149, 4135, 4151, 4139, 4155, 4156,
+ 4148, 5728, 4153, 4161, 4152, 4168, 4169, 4164, 4183, 4188,
+
+ 4172, 4173, 4175, 4174, 4203, 5728, 4185, 4184, 4191, 4217,
+ 4208, 4209, 4222, 4197, 4224, 4218, 5728, 4214, 4232, 4213,
+ 4216, 4236, 4234, 4241, 4243, 4233, 4253, 4260, 4251, 4263,
+ 5728, 4252, 5728, 4266, 4270, 4280, 4282, 4284, 5728, 4273,
+ 4286, 5728, 4269, 5728, 4289, 4298, 4285, 4302, 4317, 5728,
+ 4320, 4307, 4322, 4312, 4313, 4309, 4325, 5728, 4331, 4334,
+ 4338, 4340, 4336, 4339, 4343, 4342, 4348, 4355, 4347, 4365,
+ 5728, 4361, 4373, 4380, 4381, 4383, 5728, 5728, 4376, 4392,
+ 4388, 4353, 4395, 5728, 5728, 5728, 4394, 5728, 4384, 5728,
+ 5728, 4404, 4397, 5728, 4399, 5728, 4405, 4412, 4398, 4406,
+
+ 4422, 5728, 4411, 4423, 4434, 5728, 4433, 4441, 4425, 4429,
+ 5728, 4445, 5728, 4446, 4456, 4439, 4454, 4447, 4448, 4463,
+ 4452, 4449, 4476, 4470, 4472, 4475, 4483, 4469, 4465, 4486,
+ 4474, 4478, 4480, 4494, 4492, 4507, 4503, 4499, 4501, 4519,
+ 4526, 4529, 4532, 4535, 5728, 5728, 4520, 4525, 4515, 4521,
+ 4545, 4546, 4542, 4548, 5728, 4538, 4552, 4553, 4550, 4559,
+ 4564, 4565, 4562, 4575, 4585, 4599, 4572, 4581, 4584, 4592,
+ 4580, 4586, 4609, 4602, 5728, 4607, 4601, 5728, 5728, 4595,
+ 4622, 4618, 4617, 4619, 4635, 4634, 5728, 4624, 4636, 4648,
+ 4641, 5728, 4650, 4651, 4653, 4655, 5728, 5728, 5728, 4656,
+
+ 4647, 4645, 4662, 4668, 4674, 4667, 4680, 5728, 4672, 4685,
+ 4697, 4676, 4692, 4693, 4698, 4699, 4712, 4706, 4709, 4710,
+ 5728, 5728, 4703, 4725, 4718, 4723, 4726, 4719, 4732, 4736,
+ 4715, 5728, 4744, 4743, 4733, 4745, 4755, 4756, 4768, 4757,
+ 5728, 4754, 4759, 4761, 4776, 4770, 4778, 4775, 4777, 4782,
+ 4794, 4799, 4800, 4805, 5728, 4802, 4806, 5728, 4809, 4804,
+ 4797, 5728, 4814, 5728, 4820, 5728, 5728, 4803, 4821, 4834,
+ 4840, 4844, 4851, 4852, 4835, 4841, 4858, 4856, 4859, 5728,
+ 5728, 4864, 4842, 4860, 4861, 5728, 5728, 4867, 4857, 4868,
+ 4871, 4876, 4883, 4877, 4886, 4898, 4888, 4908, 4910, 4913,
+
+ 4901, 4915, 4892, 4895, 4918, 4923, 4926, 5728, 4881, 4928,
+ 4933, 5728, 4929, 4925, 5728, 4941, 4949, 4957, 4953, 4948,
+ 4969, 4954, 4955, 5728, 4965, 4960, 5728, 4952, 5728, 5728,
+ 5728, 4966, 4982, 4976, 5728, 4990, 4996, 5728, 5002, 4998,
+ 4986, 5009, 4987, 5010, 4993, 5020, 4994, 5018, 5728, 5012,
+ 5013, 5026, 5017, 5037, 5023, 5027, 5029, 5044, 5046, 5034,
+ 5049, 5047, 5728, 5062, 5063, 5728, 5065, 5064, 5728, 5067,
+ 5057, 5058, 5053, 5728, 5082, 5074, 5073, 5086, 5097, 5079,
+ 5090, 5085, 5103, 5104, 5110, 5728, 5106, 5094, 5113, 5115,
+ 5100, 5127, 5131, 5126, 5728, 5128, 5117, 5728, 5135, 5134,
+
+ 5137, 5145, 5152, 5156, 5157, 5154, 5728, 5160, 5728, 5728,
+ 5728, 5164, 5728, 5167, 5155, 5153, 5161, 5168, 5166, 5728,
+ 5728, 5177, 5174, 5184, 5728, 5179, 5182, 5198, 5178, 5200,
+ 5192, 5191, 5196, 5194, 5217, 5728, 5728, 5204, 5728, 5220,
+ 5228, 5229, 5728, 5728, 5728, 5232, 5728, 5234, 5728, 5236,
+ 5221, 5231, 5728, 5243, 5235, 5728, 5246, 5244, 5251, 5254,
+ 5257, 5262, 5249, 5260, 5261, 5263, 5278, 5266, 5269, 5728,
+ 5728, 5286, 5728, 5292, 5728, 5288, 5298, 5728, 5287, 5302,
+ 5289, 5300, 5728, 5728, 5305, 5310, 5293, 5306, 5309, 5321,
+ 5324, 5728, 5728, 5728, 5314, 5728, 5318, 5323, 5332, 5728,
+
+ 5331, 5334, 5333, 5335, 5338, 5350, 5341, 5337, 5363, 5362,
+ 5372, 5376, 5373, 5377, 5360, 5379, 5390, 5374, 5391, 5728,
+ 5380, 5728, 5728, 5389, 5396, 5397, 5399, 5398, 5400, 5728,
+ 5406, 5409, 5416, 5417, 5412, 5405, 5436, 5415, 5444, 5443,
+ 5446, 5447, 5435, 5453, 5450, 5457, 5440, 5463, 5469, 5466,
+ 5470, 5728, 5471, 5468, 5473, 5475, 5493, 5484, 5480, 5500,
+ 5503, 5508, 5498, 5510, 5506, 5511, 5515, 5517, 5519, 5520,
+ 5728, 5538, 5545, 5533, 5534, 5540, 5535, 5555, 5556, 5548,
+ 5551, 5559, 5564, 5562, 5728, 5566, 5728, 5728, 5568, 5575,
+ 5578, 5576, 5587, 5728, 5728, 5728, 5636, 5643, 5650, 5657,
+
+ 5664, 82, 5671, 5678, 5685, 5692, 5699, 5706, 5713, 5720
} ;
-static yyconst flex_int16_t yy_def[1970] =
+static yyconst flex_int16_t yy_def[2011] =
{ 0,
- 1955, 1, 1956, 1956, 1957, 1957, 1958, 1958, 1959, 1959,
- 1960, 1960, 1955, 1961, 1955, 1955, 1955, 1955, 1962, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1963, 1955, 1955, 1955, 1963, 1964, 1955, 1955, 1955, 1964,
- 1965, 1955, 1955, 1955, 1955, 1965, 1966, 1955, 1955, 1955,
- 1966, 1967, 1955, 1968, 1955, 1967, 1967, 1961, 1961, 1955,
- 1969, 1962, 1969, 1962, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1963, 1963,
- 1964, 1964, 1965, 1965, 1955, 1966, 1966, 1967, 1967, 1968,
- 1968, 1967, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1967, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1967, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
- 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1955, 1967, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1967, 1961, 1961,
- 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1955, 1961, 1955, 1955, 1961, 1955,
- 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1967, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1955, 1961, 1967, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961,
- 1955, 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1961, 1955,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1955, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1955,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1961, 1955, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
- 1961, 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1955, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
- 1955, 1961, 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1961, 1961,
- 1961, 1961, 1955, 1961, 1961, 1955, 1961, 1955, 1961, 1961,
- 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961,
- 1955, 1955, 1961, 1961, 1955, 1955, 1955, 1961, 1955, 1961,
- 1955, 1955, 1961, 1961, 1955, 1961, 1955, 1961, 1961, 1961,
- 1961, 1961, 1955, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
- 1961, 1955, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1955, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1955, 1961, 1961, 1955, 1955, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1955,
- 1961, 1961, 1961, 1961, 1955, 1955, 1955, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
- 1961, 1961, 1955, 1961, 1961, 1961, 1955, 1961, 1955, 1961,
- 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1955, 1955, 1961, 1961, 1961, 1961,
- 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1955, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1955, 1961,
- 1955, 1955, 1955, 1961, 1961, 1961, 1955, 1961, 1961, 1955,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1955, 1961,
- 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1955, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1955, 1955,
- 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955,
- 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1955, 1955, 1961, 1955, 1961, 1961,
-
- 1961, 1955, 1955, 1955, 1961, 1955, 1961, 1955, 1961, 1961,
- 1961, 1955, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955,
- 1961, 1955, 1961, 1955, 1961, 1961, 1955, 1961, 1961, 1961,
- 1961, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1955, 1955, 1955, 1961, 1955, 1961, 1961, 1961, 1955, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961,
- 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
- 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
- 1961, 1961, 1961, 1955, 1961, 1955, 1955, 1961, 1961, 1961,
- 1961, 1961, 1955, 1955, 0, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955
+ 1996, 1, 1997, 1997, 1998, 1998, 1999, 1999, 2000, 2000,
+ 2001, 2001, 1996, 2002, 1996, 1996, 1996, 1996, 2003, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2004, 1996, 1996, 1996, 2004, 2005, 1996, 1996, 1996, 2005,
+ 2006, 1996, 1996, 1996, 1996, 2006, 2007, 1996, 1996, 1996,
+ 2007, 2008, 1996, 2009, 1996, 2008, 2008, 2002, 2002, 1996,
+ 2010, 2003, 2010, 2003, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2004, 2004,
+ 2005, 2005, 2006, 2006, 1996, 2007, 2007, 2008, 2008, 2009,
+ 2009, 2008, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2008, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2008,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2008, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2008, 2002, 2002, 2002, 2002, 2002, 1996, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 2002, 1996, 1996, 2002, 1996, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2008, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2008, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 1996, 2002, 1996, 2002, 2002, 2002, 1996,
+ 2002, 1996, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 1996, 2002, 1996, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 1996, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 1996, 2002, 2002,
+ 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2002, 2002, 2002, 1996, 2002, 1996, 2002,
+ 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 1996, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 1996,
+ 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 1996,
+ 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 1996, 1996, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 1996, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 1996, 2002,
+ 2002, 1996, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 1996,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 1996, 2002, 2002, 2002, 2002, 2002, 1996, 1996, 2002, 2002,
+ 2002, 2002, 2002, 1996, 1996, 1996, 2002, 1996, 2002, 1996,
+ 1996, 2002, 2002, 1996, 2002, 1996, 2002, 2002, 2002, 2002,
+
+ 2002, 1996, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 1996, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 1996, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 1996, 2002, 2002, 1996, 1996, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2002, 2002, 2002, 1996, 1996, 1996, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 1996, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 1996, 2002, 2002, 1996, 2002, 2002,
+ 2002, 1996, 2002, 1996, 2002, 1996, 1996, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 1996, 2002, 2002, 2002, 2002, 1996, 1996, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002,
+ 2002, 1996, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 1996, 2002, 2002, 1996, 2002, 1996, 1996,
+ 1996, 2002, 2002, 2002, 1996, 2002, 2002, 1996, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 1996, 2002, 2002, 1996, 2002, 2002, 1996, 2002,
+ 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 1996, 2002, 2002, 1996, 2002, 2002,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 1996, 2002, 1996, 1996,
+ 1996, 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 1996, 2002, 2002, 2002, 1996, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 1996, 1996, 2002, 1996, 2002,
+ 2002, 2002, 1996, 1996, 1996, 2002, 1996, 2002, 1996, 2002,
+ 2002, 2002, 1996, 2002, 2002, 1996, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 1996, 2002, 1996, 2002, 1996, 2002, 2002, 1996, 2002, 2002,
+ 2002, 2002, 1996, 1996, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 1996, 1996, 1996, 2002, 1996, 2002, 2002, 2002, 1996,
+
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 2002, 1996, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 1996,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 1996, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
+ 2002, 2002, 2002, 2002, 1996, 2002, 1996, 1996, 2002, 2002,
+ 2002, 2002, 2002, 1996, 1996, 0, 1996, 1996, 1996, 1996,
+
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996
} ;
-static yyconst flex_uint16_t yy_nxt[5690] =
+static yyconst flex_uint16_t yy_nxt[5794] =
{ 0,
14, 15, 16, 17, 18, 19, 18, 14, 14, 14,
14, 18, 20, 14, 21, 22, 23, 24, 14, 25,
@@ -1103,14 +1118,14 @@ static yyconst flex_uint16_t yy_nxt[5690] =
58, 59, 60, 58, 59, 60, 70, 129, 129, 131,
71, 45, 131, 96, 45, 136, 136, 50, 73, 50,
- 73, 73, 70, 73, 830, 56, 71, 68, 73, 68,
+ 73, 73, 70, 73, 843, 56, 71, 68, 73, 68,
68, 56, 68, 86, 75, 76, 61, 68, 139, 61,
15, 16, 17, 63, 64, 65, 15, 16, 17, 63,
64, 65, 77, 87, 69, 74, 69, 98, 69, 66,
86, 75, 76, 131, 78, 66, 131, 88, 154, 69,
139, 79, 112, 69, 90, 97, 142, 67, 80, 77,
87, 89, 91, 67, 98, 69, 66, 129, 129, 139,
- 69, 78, 66, 69, 88, 154, 914, 69, 79, 112,
+ 69, 78, 66, 69, 88, 154, 929, 69, 79, 112,
69, 90, 97, 142, 99, 80, 81, 137, 89, 91,
82, 92, 100, 83, 93, 84, 85, 135, 101, 106,
@@ -1129,596 +1144,609 @@ static yyconst flex_uint16_t yy_nxt[5690] =
128, 73, 73, 138, 73, 138, 138, 68, 138, 68,
68, 73, 68, 73, 73, 145, 73, 68, 146, 148,
150, 73, 155, 152, 153, 69, 151, 158, 69, 161,
- 69, 147, 69, 1955, 163, 156, 141, 159, 69, 1955,
+ 69, 147, 69, 1996, 163, 156, 141, 159, 69, 1996,
69, 69, 69, 160, 69, 146, 148, 150, 74, 155,
152, 153, 157, 151, 158, 164, 161, 69, 147, 69,
- 162, 163, 165, 1955, 159, 1955, 69, 1955, 166, 69,
+ 162, 163, 165, 1996, 159, 1996, 69, 1996, 166, 69,
160, 167, 171, 176, 172, 69, 69, 69, 177, 157,
- 69, 178, 164, 1955, 168, 169, 174, 162, 184, 165,
+ 69, 178, 164, 1996, 168, 169, 174, 162, 184, 165,
175, 69, 69, 180, 173, 166, 69, 69, 167, 171,
- 176, 172, 179, 181, 69, 177, 1955, 69, 178, 183,
+ 176, 172, 179, 181, 69, 177, 1996, 69, 178, 183,
69, 168, 169, 174, 182, 184, 69, 175, 186, 185,
- 180, 173, 69, 69, 190, 189, 1955, 69, 69, 179,
- 181, 187, 69, 191, 192, 188, 183, 193, 1955, 194,
- 69, 182, 69, 303, 197, 186, 185, 69, 69, 69,
+ 180, 173, 69, 69, 190, 189, 1996, 69, 69, 179,
+ 181, 187, 69, 191, 192, 188, 183, 193, 1996, 194,
+ 69, 182, 69, 304, 197, 186, 185, 69, 69, 69,
69, 190, 189, 69, 195, 222, 198, 201, 187, 69,
191, 192, 188, 69, 193, 200, 194, 202, 69, 207,
203, 197, 69, 69, 69, 206, 199, 205, 69, 208,
- 1955, 195, 69, 198, 201, 1955, 69, 1955, 1955, 209,
- 69, 204, 200, 1955, 202, 69, 207, 203, 1955, 69,
- 340, 69, 206, 199, 205, 133, 208, 133, 133, 138,
+ 1996, 195, 69, 198, 201, 1996, 69, 1996, 1996, 209,
+ 69, 204, 200, 1996, 202, 69, 207, 203, 1996, 69,
+ 343, 69, 206, 199, 205, 133, 208, 133, 133, 138,
133, 138, 138, 139, 138, 210, 209, 73, 204, 73,
73, 212, 73, 214, 213, 216, 215, 69, 217, 218,
- 1955, 69, 69, 69, 219, 220, 232, 69, 69, 221,
- 402, 403, 210, 69, 230, 233, 69, 223, 212, 1955,
+ 1996, 69, 69, 69, 219, 220, 232, 69, 69, 221,
+ 405, 406, 210, 69, 230, 233, 69, 223, 212, 1996,
214, 213, 216, 215, 141, 217, 231, 69, 69, 235,
69, 219, 220, 232, 69, 69, 221, 69, 224, 69,
- 69, 230, 233, 234, 1955, 69, 236, 69, 237, 1955,
-
- 238, 241, 69, 231, 239, 1955, 235, 240, 242, 249,
- 69, 69, 69, 1955, 243, 224, 225, 247, 69, 69,
- 234, 226, 1955, 236, 69, 237, 227, 238, 241, 1955,
- 69, 239, 228, 229, 240, 242, 69, 244, 248, 69,
- 69, 243, 245, 225, 247, 250, 253, 251, 226, 69,
- 256, 1955, 254, 227, 1955, 255, 246, 252, 257, 228,
- 229, 69, 258, 69, 244, 248, 259, 260, 262, 245,
- 69, 69, 250, 266, 261, 264, 267, 69, 69, 254,
- 69, 69, 255, 246, 252, 257, 268, 69, 69, 69,
- 69, 263, 69, 69, 260, 262, 69, 69, 69, 265,
-
- 266, 261, 264, 267, 69, 269, 271, 270, 69, 275,
- 272, 273, 274, 268, 69, 69, 276, 69, 263, 277,
- 69, 278, 279, 69, 282, 283, 265, 280, 69, 285,
- 281, 1955, 269, 271, 270, 69, 1955, 272, 273, 274,
- 69, 69, 286, 276, 69, 69, 277, 284, 278, 289,
- 69, 282, 291, 69, 280, 290, 69, 281, 288, 287,
- 69, 292, 69, 69, 139, 294, 293, 69, 295, 286,
- 297, 69, 296, 301, 284, 298, 289, 300, 1955, 291,
- 69, 69, 290, 69, 302, 288, 287, 299, 69, 69,
- 304, 311, 69, 293, 69, 295, 69, 297, 69, 296,
-
- 301, 69, 298, 305, 300, 309, 313, 306, 307, 308,
- 69, 302, 312, 310, 299, 314, 69, 304, 69, 316,
- 69, 315, 69, 1955, 1955, 69, 1955, 322, 69, 69,
- 305, 69, 309, 69, 306, 307, 308, 69, 317, 312,
- 310, 69, 314, 69, 318, 69, 319, 320, 315, 321,
- 69, 69, 69, 69, 322, 323, 324, 325, 326, 328,
- 1955, 69, 327, 1955, 69, 317, 69, 69, 329, 1955,
- 331, 318, 330, 319, 320, 69, 321, 69, 332, 69,
- 334, 333, 323, 324, 325, 326, 337, 69, 69, 327,
- 69, 341, 69, 345, 335, 329, 336, 331, 69, 330,
-
- 69, 69, 338, 339, 346, 332, 342, 334, 333, 343,
- 69, 69, 344, 337, 347, 69, 69, 349, 341, 352,
- 345, 335, 69, 336, 69, 348, 350, 69, 351, 338,
- 339, 346, 354, 342, 69, 353, 343, 356, 69, 344,
- 1955, 69, 69, 69, 349, 1955, 352, 69, 359, 355,
- 69, 365, 348, 350, 363, 351, 69, 364, 357, 69,
- 358, 69, 353, 69, 356, 1955, 360, 368, 369, 361,
- 1955, 362, 69, 69, 69, 359, 355, 69, 365, 370,
- 69, 363, 69, 366, 371, 357, 373, 358, 69, 381,
- 1955, 367, 69, 360, 368, 369, 361, 69, 362, 69,
-
- 372, 69, 389, 382, 386, 383, 370, 387, 69, 384,
- 366, 371, 69, 373, 1955, 1955, 381, 385, 367, 69,
- 390, 69, 1955, 139, 69, 388, 1955, 372, 374, 375,
- 382, 386, 69, 69, 387, 393, 69, 392, 376, 391,
- 377, 378, 379, 395, 385, 380, 69, 390, 394, 69,
- 398, 396, 388, 69, 399, 374, 375, 69, 69, 400,
- 69, 397, 393, 69, 392, 376, 391, 377, 378, 379,
- 69, 401, 380, 404, 69, 394, 69, 398, 396, 405,
- 69, 406, 407, 1955, 409, 69, 400, 408, 397, 412,
- 69, 416, 69, 69, 410, 69, 411, 413, 401, 417,
-
- 404, 415, 69, 419, 1955, 69, 405, 69, 406, 407,
- 414, 409, 69, 69, 408, 69, 412, 69, 416, 69,
- 418, 410, 69, 411, 413, 420, 417, 421, 415, 423,
- 422, 69, 424, 425, 69, 426, 428, 414, 69, 427,
- 1955, 429, 1955, 431, 430, 448, 433, 418, 69, 69,
- 69, 69, 420, 69, 421, 69, 423, 422, 69, 424,
- 425, 69, 426, 432, 69, 69, 427, 69, 429, 69,
- 431, 430, 434, 433, 435, 436, 69, 437, 69, 438,
- 439, 69, 441, 1955, 442, 444, 69, 445, 1955, 440,
- 432, 69, 452, 1955, 69, 443, 69, 450, 69, 434,
-
- 69, 435, 436, 69, 437, 69, 438, 439, 69, 441,
- 69, 442, 444, 446, 445, 447, 440, 449, 451, 69,
- 69, 453, 443, 69, 450, 1955, 455, 456, 69, 458,
- 1955, 69, 457, 69, 1955, 69, 459, 69, 460, 461,
- 446, 69, 447, 454, 449, 451, 1955, 69, 487, 69,
- 468, 1955, 69, 455, 456, 69, 458, 69, 69, 457,
- 469, 470, 1955, 459, 471, 460, 461, 473, 69, 69,
- 454, 462, 69, 472, 474, 487, 463, 468, 464, 1955,
- 475, 69, 476, 1955, 69, 477, 465, 469, 470, 466,
- 478, 69, 480, 479, 473, 69, 467, 69, 462, 1955,
-
- 472, 474, 69, 463, 69, 464, 69, 475, 69, 476,
- 481, 69, 477, 465, 483, 484, 466, 478, 69, 480,
- 479, 482, 485, 467, 488, 489, 69, 486, 490, 1955,
- 69, 491, 492, 69, 493, 494, 69, 481, 496, 69,
- 69, 483, 484, 69, 498, 495, 69, 139, 482, 485,
- 497, 488, 499, 69, 486, 490, 69, 501, 491, 492,
- 69, 493, 69, 500, 69, 69, 507, 502, 69, 69,
- 503, 498, 495, 506, 508, 509, 504, 497, 69, 499,
- 505, 69, 510, 511, 501, 69, 512, 69, 515, 513,
- 500, 514, 517, 69, 502, 69, 69, 503, 516, 518,
-
- 506, 69, 519, 521, 520, 522, 69, 69, 1955, 69,
- 69, 69, 532, 69, 528, 515, 513, 69, 514, 527,
- 523, 69, 69, 69, 69, 516, 518, 69, 69, 519,
- 524, 520, 522, 69, 69, 525, 529, 530, 531, 526,
- 69, 528, 533, 69, 534, 69, 527, 523, 537, 1955,
- 535, 69, 538, 539, 69, 543, 540, 524, 1955, 69,
- 69, 544, 525, 529, 530, 531, 526, 69, 69, 533,
- 69, 534, 536, 69, 69, 537, 541, 535, 69, 538,
- 539, 542, 69, 540, 547, 545, 69, 69, 544, 546,
- 550, 548, 549, 551, 552, 554, 69, 555, 1955, 536,
-
- 69, 556, 553, 541, 559, 69, 69, 1955, 542, 69,
- 557, 547, 545, 69, 1955, 69, 546, 69, 548, 549,
- 551, 69, 554, 561, 69, 69, 69, 558, 69, 553,
- 560, 563, 564, 569, 566, 69, 565, 557, 562, 568,
- 570, 69, 69, 567, 571, 573, 1955, 69, 69, 69,
- 561, 69, 69, 69, 558, 572, 574, 560, 563, 69,
- 569, 566, 69, 69, 69, 562, 568, 570, 69, 575,
- 567, 571, 573, 582, 69, 576, 578, 577, 579, 580,
- 1955, 69, 572, 574, 69, 69, 581, 69, 69, 583,
- 586, 584, 585, 590, 69, 1955, 575, 587, 1955, 69,
-
- 582, 69, 576, 578, 577, 69, 580, 69, 588, 69,
- 589, 591, 69, 581, 69, 69, 583, 586, 584, 585,
- 590, 592, 69, 593, 587, 594, 595, 597, 1955, 596,
- 69, 69, 601, 598, 69, 588, 599, 589, 591, 606,
- 69, 600, 1955, 69, 605, 69, 69, 69, 592, 603,
- 593, 69, 594, 595, 597, 69, 596, 604, 139, 601,
- 598, 602, 69, 599, 608, 69, 607, 69, 600, 610,
- 69, 605, 611, 69, 609, 69, 603, 613, 69, 612,
- 614, 1955, 69, 620, 604, 626, 69, 69, 602, 69,
- 621, 608, 623, 607, 1955, 69, 610, 625, 69, 634,
-
- 69, 609, 622, 69, 613, 624, 612, 614, 615, 635,
- 620, 1955, 616, 69, 637, 617, 69, 621, 69, 623,
- 69, 69, 618, 69, 625, 619, 634, 1955, 69, 622,
- 69, 636, 624, 69, 638, 615, 635, 657, 69, 616,
- 639, 637, 617, 1955, 1955, 1955, 640, 1955, 642, 618,
- 641, 646, 619, 627, 628, 1955, 629, 1955, 636, 630,
- 69, 69, 69, 643, 631, 644, 645, 639, 69, 1955,
- 632, 633, 69, 640, 69, 642, 69, 641, 646, 69,
- 627, 628, 651, 629, 650, 69, 630, 647, 69, 69,
- 643, 631, 644, 645, 648, 69, 649, 632, 633, 656,
-
- 652, 69, 653, 69, 69, 658, 655, 654, 69, 651,
- 1955, 650, 69, 659, 647, 69, 69, 660, 1955, 667,
- 661, 648, 662, 649, 1955, 670, 69, 652, 69, 653,
- 664, 1955, 668, 655, 654, 665, 69, 69, 69, 69,
- 659, 69, 663, 672, 660, 666, 69, 661, 669, 662,
- 69, 69, 69, 69, 676, 69, 69, 664, 671, 668,
- 673, 69, 665, 675, 674, 677, 69, 69, 678, 663,
- 672, 69, 666, 681, 679, 669, 69, 69, 69, 69,
- 69, 676, 680, 682, 1955, 671, 695, 673, 69, 684,
- 675, 674, 677, 683, 687, 678, 69, 685, 69, 69,
-
- 681, 679, 69, 688, 686, 69, 689, 691, 692, 680,
- 682, 69, 69, 69, 690, 69, 684, 694, 698, 693,
- 683, 687, 69, 69, 685, 69, 69, 697, 699, 696,
- 688, 686, 69, 689, 691, 692, 69, 700, 69, 701,
- 69, 690, 702, 703, 694, 704, 693, 69, 705, 69,
- 706, 69, 707, 708, 697, 710, 696, 69, 712, 69,
- 69, 711, 69, 709, 700, 69, 701, 714, 69, 702,
- 703, 715, 704, 713, 69, 705, 69, 69, 716, 707,
- 708, 69, 69, 69, 717, 69, 69, 727, 711, 719,
- 709, 1955, 69, 718, 139, 728, 69, 720, 715, 733,
-
- 713, 69, 69, 729, 69, 716, 1955, 730, 1955, 69,
- 734, 717, 731, 69, 727, 69, 719, 732, 69, 735,
- 718, 69, 728, 69, 720, 721, 733, 722, 736, 69,
- 729, 723, 69, 724, 730, 69, 737, 734, 725, 731,
- 738, 742, 740, 726, 732, 745, 735, 69, 69, 69,
- 739, 69, 721, 741, 722, 736, 746, 744, 723, 743,
- 724, 1955, 69, 737, 69, 725, 69, 738, 742, 740,
- 726, 753, 69, 752, 755, 757, 69, 739, 69, 761,
- 741, 756, 754, 69, 744, 763, 743, 747, 69, 69,
- 759, 758, 748, 69, 749, 69, 760, 69, 753, 762,
-
- 752, 755, 757, 69, 69, 750, 69, 69, 756, 754,
- 69, 764, 751, 69, 747, 766, 69, 759, 758, 748,
- 765, 749, 69, 760, 767, 769, 762, 768, 69, 69,
- 770, 1955, 750, 69, 771, 69, 773, 774, 764, 751,
- 772, 779, 766, 775, 69, 69, 1955, 765, 69, 69,
- 69, 1955, 769, 776, 768, 69, 778, 770, 69, 69,
- 780, 771, 777, 773, 774, 782, 69, 772, 69, 69,
- 775, 783, 69, 781, 69, 784, 786, 69, 787, 785,
- 776, 788, 69, 778, 795, 1955, 791, 780, 790, 777,
- 792, 1955, 782, 69, 69, 789, 800, 69, 783, 69,
-
- 781, 69, 784, 786, 69, 787, 785, 793, 69, 69,
- 794, 795, 69, 796, 797, 790, 798, 69, 799, 808,
- 69, 69, 789, 800, 801, 69, 69, 802, 69, 805,
- 69, 803, 1955, 69, 793, 804, 806, 794, 69, 807,
- 796, 797, 1955, 798, 811, 799, 69, 69, 1955, 809,
- 69, 801, 810, 69, 802, 812, 805, 69, 803, 816,
- 69, 69, 804, 806, 69, 813, 807, 69, 69, 815,
- 814, 811, 817, 69, 820, 819, 809, 69, 818, 810,
- 822, 823, 812, 69, 69, 824, 826, 821, 1955, 1955,
- 69, 1955, 813, 1955, 69, 69, 815, 814, 69, 817,
-
- 69, 820, 819, 69, 829, 818, 825, 822, 828, 827,
- 832, 831, 69, 69, 821, 833, 69, 69, 69, 69,
- 69, 69, 834, 69, 69, 838, 835, 836, 69, 837,
- 839, 829, 69, 825, 69, 828, 827, 832, 831, 840,
- 69, 69, 833, 1955, 841, 842, 843, 844, 848, 834,
- 1955, 846, 838, 835, 836, 845, 837, 847, 851, 69,
- 69, 69, 854, 69, 849, 69, 69, 69, 69, 1955,
- 69, 841, 842, 843, 844, 848, 69, 69, 846, 850,
- 852, 853, 845, 69, 847, 69, 856, 69, 855, 854,
- 69, 849, 857, 69, 860, 69, 858, 859, 863, 862,
-
- 861, 1955, 1955, 864, 881, 1955, 850, 852, 853, 69,
- 69, 69, 69, 856, 69, 855, 69, 69, 69, 857,
- 69, 860, 865, 858, 859, 863, 862, 861, 866, 867,
- 864, 869, 868, 870, 871, 69, 69, 872, 873, 874,
- 1955, 69, 875, 69, 69, 876, 69, 69, 69, 865,
- 69, 878, 69, 69, 69, 866, 867, 69, 869, 868,
- 870, 871, 877, 69, 872, 873, 874, 879, 880, 875,
- 884, 882, 876, 883, 69, 886, 887, 69, 878, 885,
- 888, 1955, 891, 69, 69, 889, 69, 893, 894, 877,
- 69, 890, 69, 69, 879, 880, 892, 884, 882, 895,
-
- 883, 69, 886, 897, 69, 69, 885, 69, 69, 891,
- 69, 896, 889, 898, 893, 899, 900, 901, 890, 69,
- 903, 69, 904, 892, 902, 69, 895, 905, 906, 69,
- 897, 1955, 1955, 69, 69, 69, 907, 69, 896, 69,
- 898, 69, 899, 900, 901, 915, 1955, 903, 1955, 919,
- 69, 902, 913, 69, 916, 906, 917, 918, 69, 69,
- 1955, 69, 929, 907, 908, 931, 69, 69, 69, 909,
- 920, 910, 915, 911, 921, 912, 919, 69, 69, 913,
- 922, 916, 69, 917, 918, 924, 923, 926, 927, 69,
- 925, 908, 69, 69, 69, 932, 909, 69, 910, 930,
-
- 911, 69, 912, 69, 69, 69, 928, 922, 69, 933,
- 934, 69, 924, 923, 926, 927, 935, 925, 69, 69,
- 936, 937, 932, 938, 939, 940, 930, 69, 941, 1955,
- 69, 69, 942, 928, 943, 69, 933, 934, 944, 949,
- 945, 947, 950, 69, 948, 69, 952, 936, 69, 946,
- 938, 939, 69, 69, 69, 941, 951, 953, 69, 942,
- 69, 943, 69, 955, 69, 944, 69, 945, 947, 956,
- 69, 948, 954, 69, 957, 69, 946, 69, 69, 69,
- 69, 69, 958, 951, 953, 960, 963, 959, 964, 69,
- 955, 69, 961, 69, 966, 965, 69, 971, 962, 954,
-
- 967, 957, 969, 69, 69, 69, 968, 69, 69, 958,
- 970, 69, 973, 963, 959, 964, 69, 977, 979, 961,
- 69, 966, 965, 974, 69, 962, 972, 967, 978, 969,
- 69, 69, 69, 968, 69, 69, 975, 970, 980, 973,
- 976, 981, 1955, 69, 977, 979, 982, 69, 983, 984,
- 974, 69, 986, 972, 988, 978, 987, 69, 985, 69,
- 992, 69, 1955, 69, 69, 980, 990, 69, 69, 69,
- 989, 991, 69, 982, 995, 983, 984, 69, 69, 986,
- 69, 988, 994, 987, 993, 985, 69, 992, 996, 69,
- 998, 1000, 1002, 990, 997, 69, 999, 989, 991, 69,
-
- 69, 995, 69, 1004, 1006, 1001, 1007, 1008, 1003, 994,
- 69, 993, 69, 69, 69, 996, 69, 998, 1000, 1002,
- 69, 997, 1005, 999, 69, 1009, 69, 1010, 69, 1011,
- 1004, 1006, 1001, 1013, 1012, 1003, 1014, 69, 69, 1016,
- 1017, 1019, 69, 1021, 1018, 1020, 1015, 69, 1027, 1005,
- 69, 69, 1009, 69, 1010, 1955, 69, 69, 69, 69,
- 1013, 1012, 1026, 1014, 1024, 69, 1016, 1022, 1023, 1025,
- 1021, 69, 69, 1015, 1028, 69, 69, 69, 1029, 69,
- 1030, 1033, 69, 69, 1031, 1032, 69, 69, 69, 1026,
- 1034, 1024, 69, 1035, 1022, 1023, 1025, 1036, 69, 1037,
-
- 1038, 1028, 69, 1039, 1041, 1029, 1040, 1030, 1033, 1043,
- 1042, 1031, 1032, 1048, 69, 1047, 1050, 1034, 69, 69,
- 1035, 69, 69, 69, 1036, 69, 1037, 69, 69, 69,
- 1039, 1041, 1053, 1040, 1044, 1049, 1043, 1042, 1045, 69,
- 69, 1051, 1047, 1050, 1054, 1052, 1057, 1055, 1955, 1056,
- 69, 1046, 69, 69, 1058, 1059, 1060, 69, 1063, 69,
- 1061, 1044, 1049, 69, 1062, 1045, 1065, 69, 1051, 69,
- 69, 1054, 1052, 1066, 1055, 69, 1056, 69, 1046, 69,
- 1067, 69, 69, 1060, 69, 1063, 1064, 1061, 69, 1068,
- 69, 1062, 69, 1065, 1069, 69, 1070, 1071, 1072, 1955,
-
- 1066, 69, 69, 1073, 1074, 1075, 1076, 1067, 1077, 1955,
- 1079, 1083, 69, 1064, 69, 1078, 69, 69, 1080, 1955,
- 1955, 1069, 69, 1070, 1071, 1072, 69, 69, 69, 69,
- 1073, 1074, 1075, 69, 1081, 1077, 69, 1079, 1083, 1082,
- 69, 69, 1078, 1084, 1085, 1080, 69, 1088, 1087, 1089,
- 69, 1086, 1955, 1955, 69, 1090, 1091, 1092, 1955, 1094,
- 1093, 1081, 69, 1095, 1101, 69, 1082, 1955, 69, 69,
- 1084, 1085, 1102, 69, 1088, 1104, 1096, 1106, 1086, 69,
- 69, 69, 1090, 69, 1092, 1097, 1094, 1093, 1103, 69,
- 1095, 69, 69, 1098, 69, 69, 1099, 69, 1105, 1102,
-
- 69, 69, 1104, 1096, 1106, 1107, 69, 1108, 1100, 1955,
- 1109, 1111, 1097, 1110, 1112, 1103, 1114, 69, 69, 69,
- 1098, 69, 1113, 1099, 1115, 1105, 1116, 1117, 69, 1122,
- 1118, 1125, 1119, 69, 1108, 1100, 69, 1109, 1111, 1120,
- 1110, 69, 69, 1121, 69, 69, 69, 69, 69, 1113,
- 69, 1115, 69, 1116, 69, 1124, 1122, 1118, 1123, 1119,
- 1126, 1127, 69, 1128, 1130, 1129, 1120, 69, 69, 69,
- 1121, 69, 1131, 69, 1132, 1133, 69, 1139, 1134, 69,
- 1140, 1135, 1124, 1149, 1142, 1123, 69, 1126, 1127, 1136,
- 1128, 69, 1129, 1141, 69, 69, 69, 1144, 1137, 1131,
-
- 69, 1132, 1133, 1138, 1139, 1134, 69, 69, 1135, 1148,
- 69, 1142, 1143, 1145, 69, 69, 1136, 69, 1150, 1146,
- 1141, 69, 1147, 69, 1144, 1137, 1151, 69, 1152, 1153,
- 1138, 1154, 1155, 69, 1159, 1156, 1148, 69, 69, 1143,
- 1145, 1168, 69, 69, 69, 69, 1146, 1955, 1158, 1147,
- 69, 1161, 1157, 1151, 69, 1152, 1153, 69, 1154, 1155,
- 69, 1159, 1156, 1160, 1162, 1171, 1163, 1165, 1167, 69,
- 1166, 1955, 69, 1169, 69, 1158, 1170, 69, 1161, 1157,
- 1164, 1172, 69, 1174, 1955, 69, 69, 1183, 1955, 1955,
- 1160, 1162, 69, 1163, 1165, 1167, 69, 1166, 69, 1173,
-
- 1169, 1175, 69, 1170, 1178, 1176, 69, 1164, 1172, 1180,
- 1181, 1177, 69, 1182, 69, 69, 1179, 1186, 69, 69,
- 1188, 69, 1184, 69, 69, 1185, 1173, 1187, 1175, 69,
- 1191, 1178, 1176, 69, 69, 69, 1180, 1181, 1177, 1189,
- 1182, 1190, 69, 1179, 1186, 1194, 1193, 1188, 69, 1184,
- 69, 1192, 1185, 1200, 1187, 69, 1195, 1191, 69, 1196,
- 1197, 69, 1198, 69, 1203, 1201, 1189, 1202, 1190, 69,
- 1204, 1205, 69, 1193, 1199, 69, 69, 69, 1192, 69,
- 69, 1206, 69, 1195, 69, 69, 1196, 1197, 1207, 1198,
- 1209, 1203, 1201, 1208, 1202, 69, 1211, 69, 1205, 1210,
-
- 1214, 1199, 1215, 1212, 1213, 1220, 1218, 1221, 69, 1955,
- 69, 69, 69, 69, 69, 1207, 1219, 69, 69, 69,
- 1208, 69, 1216, 1211, 69, 1225, 1210, 1214, 69, 1215,
- 1212, 1213, 69, 1218, 1224, 1217, 1222, 1223, 69, 1226,
- 69, 69, 69, 1219, 1227, 69, 69, 1228, 1229, 1216,
- 1230, 1231, 69, 69, 1232, 1233, 1234, 1235, 1236, 1239,
- 69, 1224, 1217, 1222, 1223, 69, 1226, 1237, 1955, 1238,
- 1246, 69, 1244, 69, 1228, 69, 1248, 1230, 69, 69,
- 1245, 1232, 69, 1234, 1250, 1236, 69, 69, 69, 69,
- 69, 1240, 1241, 1242, 69, 69, 1238, 1247, 1243, 1244,
-
- 1252, 69, 1249, 1248, 69, 1253, 69, 1245, 69, 1251,
- 69, 69, 69, 1255, 1256, 1257, 1254, 1258, 1240, 1241,
- 1242, 69, 1259, 1267, 1247, 1243, 69, 1252, 1260, 1249,
- 1262, 69, 1253, 69, 69, 1261, 1251, 1263, 1266, 69,
- 1255, 69, 1257, 1254, 69, 1264, 69, 1265, 69, 1259,
- 1269, 1270, 1268, 69, 69, 1260, 1271, 1262, 69, 69,
- 69, 1272, 1261, 69, 1263, 1266, 1274, 1273, 1275, 1955,
- 69, 1277, 1264, 1276, 1265, 69, 1279, 1269, 1278, 1268,
- 1281, 69, 69, 1295, 69, 69, 69, 69, 69, 69,
- 1280, 69, 1282, 1274, 1273, 1275, 1284, 1285, 1277, 1288,
-
- 1276, 1283, 69, 1279, 69, 1278, 69, 1281, 69, 69,
- 1286, 1287, 1291, 1296, 69, 1299, 1289, 1280, 1294, 1282,
- 69, 1290, 1293, 1284, 1285, 69, 69, 1292, 1283, 69,
- 1297, 69, 69, 69, 1298, 69, 1301, 1286, 1287, 69,
- 69, 1300, 69, 1289, 1302, 1294, 69, 1303, 1290, 1293,
- 1304, 69, 1305, 1306, 1292, 69, 1307, 1309, 1311, 1308,
- 1955, 69, 69, 1301, 69, 1312, 1310, 69, 1300, 1313,
- 1314, 1315, 1317, 69, 1303, 69, 1321, 1304, 69, 1305,
- 1306, 69, 69, 1316, 1318, 1311, 1308, 69, 69, 1319,
- 1320, 69, 1312, 1310, 69, 1324, 69, 69, 1315, 1317,
-
- 69, 1326, 1325, 1321, 69, 69, 1322, 69, 1323, 69,
- 1316, 1318, 69, 1329, 1332, 1327, 1319, 1320, 1328, 69,
- 1331, 69, 69, 69, 69, 1330, 69, 69, 1326, 1325,
- 1335, 1955, 1333, 1322, 1338, 1323, 69, 1336, 1337, 69,
- 1329, 1332, 1327, 1334, 1342, 1328, 1955, 69, 1955, 1339,
- 1340, 69, 1330, 1341, 1345, 69, 69, 1335, 69, 1333,
- 69, 69, 69, 1343, 1336, 1337, 69, 1344, 1346, 1347,
- 1334, 1348, 1352, 69, 1349, 69, 1339, 1340, 69, 69,
- 1341, 1345, 1351, 1955, 1350, 1355, 69, 69, 69, 69,
- 1343, 1353, 1354, 69, 1344, 69, 1347, 1357, 1348, 1352,
-
- 69, 1349, 69, 1356, 69, 1359, 69, 69, 1360, 1351,
- 1358, 1350, 1355, 1361, 1362, 69, 1955, 69, 1353, 1354,
- 1364, 1365, 69, 1363, 1357, 1366, 1374, 69, 1367, 69,
- 1356, 1368, 1359, 69, 69, 1360, 69, 1358, 69, 1369,
- 1361, 1362, 1372, 69, 1377, 1370, 1371, 1364, 1365, 1373,
- 1363, 69, 69, 69, 1384, 1367, 69, 69, 1368, 1375,
- 1376, 1380, 1378, 69, 69, 1379, 1369, 69, 69, 1372,
- 69, 1377, 1370, 1371, 69, 1381, 1373, 1383, 69, 1382,
- 1955, 69, 1386, 1385, 69, 69, 1375, 1376, 69, 1378,
- 1390, 69, 1379, 1387, 1388, 1391, 1392, 1389, 1393, 1955,
-
- 1955, 69, 1381, 1955, 1383, 69, 1382, 69, 69, 1386,
- 1385, 1394, 69, 69, 69, 69, 1396, 1390, 1395, 1397,
- 1387, 1388, 69, 1392, 1389, 1393, 69, 1398, 1399, 1400,
- 69, 1401, 1402, 69, 1405, 1403, 69, 69, 1394, 69,
- 69, 1407, 1404, 1396, 69, 1395, 1397, 1406, 1409, 1408,
- 69, 1410, 69, 1411, 1398, 1399, 1400, 69, 1401, 1402,
- 69, 69, 1403, 1414, 1416, 69, 1412, 69, 69, 1404,
- 1413, 69, 1415, 69, 1406, 1409, 1408, 1417, 1410, 69,
- 1411, 1418, 69, 1419, 1421, 1420, 1422, 1955, 1424, 1955,
- 1414, 69, 1423, 69, 1425, 69, 69, 69, 1426, 1415,
-
- 69, 1427, 1429, 1432, 1417, 69, 1428, 1430, 69, 69,
- 1419, 1421, 1420, 1433, 69, 69, 69, 69, 69, 1423,
- 69, 1425, 1435, 1434, 69, 1426, 1431, 1443, 1427, 1429,
- 69, 1436, 69, 1428, 1430, 69, 69, 69, 1437, 1438,
- 1433, 1439, 69, 1445, 69, 69, 69, 69, 1440, 1435,
- 1434, 69, 1441, 1431, 1443, 1442, 1444, 1446, 1436, 1447,
- 69, 69, 69, 1448, 1449, 1437, 1438, 1450, 1439, 1451,
- 69, 1452, 1455, 69, 1454, 1440, 69, 1453, 69, 1441,
- 1456, 69, 1442, 1444, 1446, 1457, 1447, 1458, 69, 69,
- 1448, 1449, 1459, 69, 1450, 69, 69, 1460, 69, 69,
-
- 1461, 1454, 1462, 1463, 1453, 1465, 69, 69, 1466, 1464,
- 1467, 69, 69, 1468, 1458, 1470, 69, 1469, 1473, 69,
- 1474, 1475, 69, 1477, 1460, 1955, 1471, 69, 69, 69,
- 1463, 69, 69, 69, 1480, 1466, 1464, 69, 69, 69,
- 1468, 1472, 1470, 1476, 1469, 69, 69, 1474, 1475, 1478,
- 69, 69, 69, 1471, 1479, 1481, 69, 1482, 69, 1483,
- 1484, 1480, 1485, 69, 1486, 1487, 1955, 69, 1472, 1492,
- 1476, 1489, 1490, 1488, 69, 69, 1478, 1499, 69, 1493,
- 1491, 1479, 1481, 69, 69, 1495, 1483, 69, 69, 1485,
- 69, 1486, 1487, 69, 69, 1494, 1492, 69, 1489, 1490,
-
- 1488, 69, 1496, 1497, 1500, 1498, 1493, 1491, 69, 1501,
- 1502, 1504, 1495, 1503, 1955, 1955, 69, 69, 69, 1511,
- 69, 69, 1494, 1509, 1955, 1505, 1510, 69, 69, 1496,
- 1497, 1500, 1498, 1506, 69, 69, 1501, 1502, 1512, 69,
- 1503, 1507, 69, 1508, 69, 1513, 1511, 1514, 69, 1515,
- 1509, 69, 1505, 1510, 69, 1516, 1517, 1524, 1518, 1526,
- 1506, 1519, 69, 1520, 69, 1512, 1521, 69, 1507, 1522,
- 1508, 69, 1513, 1523, 1514, 1527, 1515, 69, 69, 69,
- 69, 1525, 69, 69, 1524, 1518, 69, 69, 1519, 1534,
- 1520, 1528, 1531, 1521, 1529, 1533, 1522, 69, 69, 69,
-
- 1523, 69, 1527, 1530, 1532, 69, 1535, 1537, 1525, 1538,
- 1540, 69, 1536, 1548, 1543, 69, 69, 69, 1528, 1531,
- 69, 1529, 1533, 69, 1539, 1541, 1545, 69, 1542, 69,
- 1530, 1532, 1546, 1535, 1537, 69, 1544, 1540, 69, 1536,
- 69, 69, 1547, 69, 69, 69, 1549, 1550, 69, 1552,
- 1555, 1539, 1541, 1545, 69, 1542, 1551, 1553, 69, 69,
- 1554, 69, 1556, 1544, 1557, 69, 1559, 1560, 1955, 69,
- 1558, 69, 69, 1549, 1550, 69, 1552, 69, 69, 69,
- 69, 1561, 1562, 1551, 1553, 1563, 1565, 1554, 1564, 1556,
- 1566, 1567, 1569, 1559, 69, 69, 1568, 1558, 69, 1570,
-
- 1574, 69, 1955, 69, 1955, 1571, 1572, 69, 1561, 1562,
- 69, 69, 1563, 69, 1573, 1564, 1576, 69, 69, 1569,
- 69, 69, 69, 1568, 1575, 69, 1570, 1574, 1577, 69,
- 1579, 69, 1571, 1572, 1578, 69, 1580, 69, 1583, 1581,
- 1582, 1573, 69, 69, 1584, 1585, 69, 1586, 1587, 1589,
- 69, 1575, 69, 69, 69, 1577, 1588, 1579, 1590, 1955,
- 1591, 1578, 69, 1580, 69, 1583, 1581, 1582, 1593, 1600,
- 69, 1584, 1585, 1592, 1586, 1587, 69, 69, 69, 1594,
- 69, 1595, 1598, 1588, 69, 69, 69, 1591, 69, 1596,
- 1597, 69, 1599, 1601, 1602, 1593, 69, 69, 1604, 1609,
-
- 1592, 1607, 1603, 69, 1605, 1606, 1594, 69, 1595, 1598,
- 69, 69, 69, 69, 69, 1608, 1596, 1597, 69, 1599,
- 1601, 1602, 69, 69, 1610, 1604, 69, 1611, 1607, 1603,
- 1613, 1605, 1606, 1612, 1614, 1616, 69, 1615, 69, 1617,
- 1955, 1618, 1608, 1619, 69, 69, 1620, 69, 69, 1622,
- 1623, 1621, 1624, 69, 1611, 69, 69, 1613, 69, 1625,
- 1612, 1614, 1616, 69, 1615, 1626, 1617, 69, 1618, 1627,
- 1619, 69, 1629, 69, 1630, 69, 1622, 69, 1621, 1624,
- 1628, 1631, 69, 1632, 1955, 1633, 1625, 1636, 69, 1635,
- 1634, 1637, 1626, 1638, 69, 69, 69, 1641, 1639, 69,
-
- 1640, 1630, 1645, 69, 1642, 69, 69, 1628, 69, 69,
- 69, 69, 1633, 69, 1636, 69, 1635, 1634, 1637, 69,
- 1638, 1643, 1644, 1646, 1641, 1639, 69, 1640, 1955, 69,
- 1649, 1642, 1647, 1648, 69, 1650, 1651, 1652, 1654, 1653,
- 1955, 1955, 1955, 69, 1655, 1955, 1656, 1657, 1643, 1644,
- 69, 1696, 69, 69, 1660, 69, 1659, 69, 1658, 1647,
- 1648, 69, 1650, 69, 69, 69, 1653, 69, 69, 69,
- 69, 1655, 1661, 1656, 1657, 69, 69, 1662, 1663, 1664,
- 1665, 1660, 69, 1659, 1666, 1658, 1668, 69, 69, 1670,
- 1667, 1669, 1673, 1955, 69, 1955, 1671, 69, 1676, 1661,
-
- 69, 69, 69, 69, 1662, 1663, 1664, 1665, 69, 69,
- 1677, 1666, 69, 1668, 1672, 1675, 1670, 1667, 1669, 69,
- 1674, 69, 69, 1671, 1678, 1676, 1679, 1680, 69, 1682,
- 1681, 1955, 1685, 69, 1684, 1686, 1683, 69, 1688, 1689,
- 1955, 1672, 1675, 69, 69, 69, 69, 1674, 69, 69,
- 1690, 1678, 69, 1679, 1680, 1691, 1682, 1681, 69, 1685,
- 1687, 1684, 69, 1683, 69, 1688, 69, 69, 1692, 1693,
- 1694, 1695, 1697, 1702, 69, 1703, 1699, 1690, 1698, 69,
- 1700, 1701, 69, 1955, 69, 69, 1711, 1687, 1704, 1707,
- 1955, 1710, 1705, 1706, 69, 69, 69, 1694, 1695, 69,
-
- 1702, 69, 69, 1708, 69, 1698, 69, 69, 1701, 1712,
- 69, 69, 69, 69, 1709, 1704, 1707, 69, 1710, 1705,
- 1706, 69, 1715, 1713, 1714, 1955, 1716, 1955, 1717, 1718,
- 1708, 1720, 69, 1721, 69, 1719, 1712, 1723, 69, 1724,
- 69, 1709, 69, 1722, 69, 1725, 69, 1726, 69, 1715,
- 1713, 1714, 69, 1716, 69, 1717, 1718, 69, 1720, 1727,
- 1721, 69, 1719, 1729, 1723, 1730, 1724, 1728, 1732, 1731,
- 1722, 69, 69, 1733, 1726, 1735, 69, 1734, 1738, 1736,
- 69, 69, 1737, 1739, 1749, 69, 1727, 69, 69, 69,
- 69, 1740, 1730, 69, 1728, 1732, 1731, 69, 1741, 1742,
-
- 69, 1743, 1735, 1746, 69, 1738, 1736, 1955, 1744, 1737,
- 1739, 1745, 1748, 69, 1747, 69, 1750, 69, 1740, 69,
- 1751, 1753, 69, 69, 69, 1741, 1742, 1752, 1743, 1754,
- 69, 69, 69, 1755, 69, 1744, 69, 1756, 1745, 1748,
- 1758, 1747, 69, 1750, 1762, 69, 1757, 1751, 1759, 1760,
- 1761, 1763, 69, 1955, 1752, 69, 1754, 1765, 69, 69,
- 69, 1764, 69, 1767, 1756, 1766, 69, 69, 69, 1769,
- 1770, 1762, 69, 1757, 1768, 1759, 1760, 1761, 1763, 69,
- 69, 1771, 69, 1772, 1765, 1774, 1773, 1775, 1764, 69,
- 69, 1776, 1766, 69, 1777, 69, 69, 69, 1779, 1778,
-
- 1780, 1768, 1783, 69, 69, 1782, 1784, 69, 1771, 69,
- 69, 1781, 1774, 1773, 1775, 1785, 1787, 69, 1776, 69,
- 69, 1777, 1786, 1788, 1790, 69, 1778, 69, 1789, 1783,
- 69, 69, 1782, 69, 1792, 1795, 1791, 1796, 1781, 69,
- 1798, 1800, 1785, 1787, 69, 1797, 69, 1799, 69, 1786,
- 1788, 1790, 69, 69, 69, 1789, 1793, 1794, 1801, 1802,
- 1803, 1804, 69, 1791, 69, 69, 69, 69, 1800, 69,
- 1805, 1806, 1797, 1807, 1799, 1808, 1809, 1811, 1812, 1815,
- 69, 1955, 1955, 1793, 1794, 1801, 69, 69, 69, 69,
- 1813, 1814, 69, 1816, 1810, 69, 1820, 1805, 69, 69,
-
- 1807, 69, 69, 1809, 1811, 69, 69, 1817, 1819, 1818,
- 69, 69, 69, 1821, 69, 69, 69, 1813, 1814, 1822,
- 1816, 1810, 1823, 1820, 1829, 1826, 1827, 1830, 69, 1832,
- 69, 69, 69, 69, 1817, 1819, 1818, 1824, 1825, 1831,
- 1821, 1834, 1955, 1828, 1833, 1836, 1822, 69, 69, 1823,
- 69, 69, 1826, 1827, 69, 1837, 69, 1840, 69, 1841,
- 1835, 1838, 69, 1842, 1824, 1825, 1831, 69, 69, 69,
- 1828, 1833, 1836, 69, 1839, 69, 1843, 1844, 1845, 1846,
- 69, 1851, 69, 69, 1840, 69, 1841, 1835, 1838, 1847,
- 69, 69, 1848, 1849, 1850, 69, 1852, 1853, 1855, 69,
-
- 1854, 1839, 69, 69, 1844, 1845, 1846, 1856, 69, 1857,
- 1859, 1861, 1955, 1955, 69, 69, 1847, 1858, 69, 1848,
- 1849, 1850, 69, 69, 69, 69, 1860, 1854, 1862, 69,
- 1863, 1864, 1866, 1868, 1856, 69, 1857, 69, 1865, 69,
- 1867, 69, 69, 69, 1858, 1955, 1955, 69, 1879, 1870,
- 69, 1955, 69, 1860, 1869, 1862, 69, 1863, 1864, 1866,
- 1868, 69, 69, 1871, 69, 1865, 1872, 1867, 1876, 1873,
- 69, 1878, 1875, 1874, 1877, 69, 1870, 69, 69, 69,
- 69, 1869, 69, 69, 1880, 1881, 69, 1882, 1883, 1887,
- 1871, 1884, 1885, 1872, 69, 1876, 1873, 1886, 1878, 1875,
-
- 1874, 1877, 69, 1888, 1889, 1890, 1892, 1893, 1955, 69,
- 69, 1880, 69, 69, 69, 1883, 69, 69, 1884, 1885,
- 69, 1891, 1894, 1897, 1886, 1895, 1896, 1955, 1899, 69,
- 1888, 69, 1890, 1898, 69, 69, 69, 69, 69, 69,
- 1900, 69, 69, 1901, 1902, 1910, 1903, 1906, 1891, 1894,
- 1897, 69, 1895, 1896, 69, 1899, 1904, 1955, 1905, 1907,
- 1898, 1911, 1912, 1915, 69, 1908, 69, 1900, 69, 69,
- 1901, 1902, 1909, 1903, 1906, 1918, 69, 1917, 1955, 1930,
- 69, 69, 69, 1904, 69, 1905, 1907, 69, 69, 1912,
- 1913, 69, 1908, 1914, 69, 1916, 1921, 69, 69, 1909,
-
- 1919, 69, 1918, 69, 1917, 1920, 69, 1922, 69, 1923,
- 69, 1924, 1955, 69, 1925, 1955, 1926, 1913, 1955, 69,
- 1914, 1929, 1916, 1921, 1927, 1928, 1955, 1919, 1955, 69,
- 1931, 69, 1920, 69, 1922, 1932, 1923, 1934, 1924, 1933,
- 69, 1925, 69, 1926, 1955, 69, 69, 69, 1929, 1936,
- 69, 1927, 1928, 1935, 1944, 69, 1937, 1931, 1940, 69,
- 1938, 69, 1932, 1943, 1934, 1939, 1933, 1941, 69, 1942,
- 1946, 69, 1955, 69, 1947, 69, 1936, 69, 69, 1945,
- 1935, 69, 1948, 1937, 69, 1940, 1949, 1938, 1950, 69,
- 1943, 1953, 1939, 1954, 1941, 1951, 1942, 69, 1955, 69,
-
- 1955, 69, 69, 69, 1952, 1955, 1945, 1955, 69, 1948,
- 69, 1955, 69, 1949, 1955, 1950, 1955, 1955, 69, 1955,
- 69, 1955, 1951, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1952, 41, 41, 41, 41, 41, 41, 41, 46,
- 46, 46, 46, 46, 46, 46, 51, 51, 51, 51,
- 51, 51, 51, 57, 57, 57, 57, 57, 57, 57,
- 62, 62, 62, 62, 62, 62, 62, 72, 72, 1955,
- 72, 72, 72, 72, 129, 129, 1955, 1955, 1955, 129,
- 129, 131, 131, 1955, 1955, 131, 1955, 131, 133, 1955,
- 1955, 1955, 1955, 1955, 133, 136, 136, 1955, 1955, 1955,
-
- 136, 136, 138, 1955, 1955, 1955, 1955, 1955, 138, 140,
- 140, 1955, 140, 140, 140, 140, 73, 73, 1955, 73,
- 73, 73, 73, 13, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955
+ 69, 230, 233, 234, 1996, 69, 236, 69, 237, 1996,
+
+ 238, 241, 69, 231, 239, 1996, 235, 240, 242, 250,
+ 69, 69, 69, 1996, 243, 224, 225, 248, 69, 69,
+ 234, 226, 1996, 236, 69, 237, 227, 238, 241, 1996,
+ 69, 239, 228, 229, 240, 242, 69, 244, 249, 69,
+ 69, 243, 245, 225, 248, 251, 254, 252, 226, 69,
+ 1996, 1996, 255, 227, 246, 256, 247, 253, 257, 228,
+ 229, 69, 1996, 69, 244, 249, 258, 259, 260, 245,
+ 69, 69, 251, 262, 261, 263, 265, 69, 69, 255,
+ 1996, 246, 256, 247, 253, 264, 266, 69, 69, 69,
+ 267, 69, 69, 258, 69, 270, 69, 69, 69, 69,
+
+ 262, 261, 263, 265, 268, 269, 272, 69, 271, 69,
+ 276, 273, 264, 266, 280, 69, 69, 267, 69, 277,
+ 274, 275, 270, 279, 278, 282, 69, 69, 69, 69,
+ 283, 268, 269, 272, 281, 271, 284, 286, 273, 290,
+ 69, 69, 69, 69, 293, 69, 277, 274, 275, 69,
+ 279, 278, 282, 287, 139, 289, 69, 283, 285, 69,
+ 292, 281, 294, 291, 295, 296, 290, 69, 69, 299,
+ 288, 69, 297, 298, 300, 69, 69, 69, 69, 69,
+ 287, 69, 289, 301, 69, 285, 69, 292, 69, 294,
+ 291, 302, 296, 303, 307, 69, 299, 288, 305, 297,
+
+ 298, 300, 306, 308, 310, 69, 312, 69, 309, 1996,
+ 301, 314, 315, 317, 1996, 69, 69, 1996, 302, 69,
+ 303, 307, 311, 313, 69, 305, 316, 69, 69, 306,
+ 308, 310, 69, 321, 318, 309, 69, 69, 69, 315,
+ 69, 69, 69, 319, 69, 320, 325, 69, 69, 311,
+ 313, 69, 69, 316, 322, 323, 324, 326, 1996, 327,
+ 321, 318, 328, 329, 330, 69, 69, 331, 1996, 69,
+ 319, 69, 320, 325, 1996, 337, 1996, 332, 69, 69,
+ 69, 322, 323, 324, 326, 69, 327, 344, 333, 328,
+ 329, 69, 69, 69, 331, 69, 334, 335, 339, 336,
+
+ 350, 338, 337, 340, 332, 347, 69, 69, 341, 342,
+ 345, 69, 69, 346, 344, 333, 348, 69, 69, 351,
+ 69, 349, 354, 334, 335, 339, 336, 69, 338, 352,
+ 340, 357, 347, 69, 69, 341, 342, 345, 353, 69,
+ 346, 69, 355, 348, 69, 356, 351, 358, 349, 354,
+ 69, 359, 69, 362, 69, 69, 352, 69, 360, 367,
+ 361, 366, 69, 1996, 1996, 353, 69, 368, 371, 355,
+ 1996, 392, 356, 69, 358, 69, 398, 1996, 359, 69,
+ 362, 363, 69, 369, 364, 360, 365, 361, 366, 69,
+ 69, 370, 69, 372, 368, 371, 373, 69, 374, 376,
+
+ 386, 385, 69, 384, 387, 69, 1996, 69, 363, 69,
+ 369, 364, 69, 365, 375, 69, 1996, 390, 370, 69,
+ 372, 388, 69, 373, 389, 374, 376, 139, 385, 69,
+ 384, 69, 69, 391, 393, 395, 396, 397, 69, 394,
+ 69, 375, 377, 378, 390, 402, 69, 69, 388, 69,
+ 399, 389, 379, 400, 380, 381, 382, 69, 69, 383,
+ 391, 393, 395, 396, 397, 401, 394, 69, 69, 377,
+ 378, 404, 422, 403, 408, 1996, 69, 399, 69, 379,
+ 400, 380, 381, 382, 69, 69, 383, 407, 409, 410,
+ 412, 415, 401, 69, 69, 411, 413, 414, 404, 69,
+
+ 403, 408, 69, 69, 69, 419, 69, 418, 416, 1996,
+ 420, 421, 1996, 69, 407, 409, 410, 412, 415, 69,
+ 69, 417, 411, 413, 414, 69, 69, 69, 424, 69,
+ 423, 425, 419, 69, 418, 416, 69, 420, 421, 426,
+ 427, 1996, 428, 429, 432, 430, 434, 69, 417, 69,
+ 431, 433, 69, 436, 69, 424, 1996, 423, 425, 69,
+ 435, 69, 438, 1996, 437, 69, 426, 427, 69, 428,
+ 429, 69, 430, 434, 69, 69, 69, 431, 433, 69,
+ 436, 439, 69, 440, 441, 69, 442, 435, 443, 438,
+ 69, 437, 444, 447, 448, 451, 453, 445, 69, 446,
+
+ 69, 1996, 69, 457, 1996, 69, 1996, 69, 439, 69,
+ 440, 441, 69, 442, 69, 443, 69, 69, 452, 444,
+ 447, 448, 451, 449, 445, 450, 446, 69, 454, 455,
+ 456, 69, 69, 460, 69, 461, 458, 465, 69, 464,
+ 1996, 69, 462, 1996, 1996, 452, 69, 463, 69, 69,
+ 449, 69, 450, 1996, 499, 454, 455, 456, 459, 69,
+ 460, 69, 461, 466, 465, 69, 464, 69, 473, 462,
+ 474, 69, 475, 494, 463, 69, 478, 476, 69, 1996,
+ 479, 69, 1996, 69, 480, 459, 477, 69, 482, 1996,
+ 466, 467, 481, 483, 69, 473, 468, 474, 469, 475,
+
+ 69, 1996, 1996, 478, 69, 69, 470, 479, 69, 471,
+ 69, 480, 484, 477, 69, 482, 472, 69, 467, 481,
+ 483, 486, 485, 468, 488, 469, 487, 69, 491, 69,
+ 490, 69, 489, 470, 69, 492, 471, 493, 69, 484,
+ 69, 1996, 498, 472, 497, 496, 69, 1996, 486, 485,
+ 69, 488, 495, 487, 69, 491, 69, 490, 69, 489,
+ 139, 69, 492, 500, 493, 501, 502, 69, 503, 498,
+ 504, 497, 496, 511, 507, 506, 505, 508, 69, 495,
+ 509, 69, 69, 512, 510, 69, 513, 69, 514, 515,
+ 500, 516, 69, 502, 517, 503, 69, 504, 69, 69,
+
+ 511, 507, 506, 505, 508, 519, 518, 520, 521, 522,
+ 69, 69, 69, 69, 523, 69, 69, 524, 69, 69,
+ 526, 525, 1996, 527, 1996, 69, 533, 69, 69, 528,
+ 538, 69, 519, 518, 520, 521, 539, 69, 529, 69,
+ 69, 523, 69, 530, 524, 69, 532, 531, 525, 534,
+ 527, 69, 69, 533, 69, 69, 528, 535, 69, 536,
+ 541, 69, 69, 539, 537, 529, 540, 543, 1996, 545,
+ 530, 546, 550, 532, 531, 544, 534, 69, 547, 69,
+ 69, 69, 542, 69, 535, 69, 536, 541, 548, 69,
+ 69, 537, 549, 540, 543, 551, 545, 69, 546, 69,
+
+ 69, 552, 544, 69, 554, 547, 553, 69, 555, 542,
+ 556, 557, 558, 559, 560, 548, 69, 69, 561, 549,
+ 562, 566, 551, 69, 563, 69, 69, 1996, 552, 564,
+ 69, 554, 565, 553, 69, 555, 567, 556, 69, 558,
+ 69, 560, 69, 69, 69, 561, 69, 568, 570, 571,
+ 574, 69, 69, 572, 69, 1996, 564, 573, 69, 565,
+ 575, 578, 569, 567, 576, 579, 1996, 577, 581, 69,
+ 69, 69, 69, 69, 568, 570, 69, 574, 580, 586,
+ 69, 582, 69, 1996, 573, 69, 69, 575, 578, 569,
+ 583, 576, 579, 69, 577, 581, 584, 585, 587, 69,
+
+ 589, 69, 591, 588, 69, 580, 69, 594, 582, 69,
+ 69, 69, 590, 1996, 592, 69, 597, 583, 69, 595,
+ 593, 1996, 596, 584, 585, 587, 69, 589, 598, 591,
+ 588, 69, 599, 69, 594, 69, 69, 602, 69, 590,
+ 600, 592, 69, 597, 601, 603, 595, 593, 69, 596,
+ 605, 606, 604, 69, 69, 598, 607, 69, 608, 599,
+ 609, 613, 69, 69, 602, 69, 69, 600, 69, 614,
+ 612, 601, 603, 139, 610, 615, 69, 605, 606, 604,
+ 69, 69, 611, 607, 616, 608, 617, 609, 69, 618,
+ 629, 619, 69, 1996, 620, 69, 614, 612, 69, 69,
+
+ 69, 610, 615, 69, 621, 1996, 69, 627, 69, 611,
+ 69, 616, 1996, 617, 628, 631, 630, 629, 619, 69,
+ 69, 620, 633, 641, 69, 632, 1996, 1996, 643, 645,
+ 69, 621, 622, 644, 627, 642, 623, 69, 69, 624,
+ 1996, 628, 631, 630, 69, 69, 625, 646, 650, 626,
+ 641, 69, 632, 69, 69, 643, 69, 69, 647, 622,
+ 644, 1996, 642, 623, 649, 651, 624, 69, 1996, 648,
+ 69, 652, 653, 625, 646, 650, 626, 634, 635, 655,
+ 636, 69, 1996, 637, 69, 647, 654, 69, 638, 69,
+ 69, 649, 651, 69, 639, 640, 648, 69, 652, 653,
+
+ 657, 69, 656, 69, 634, 635, 655, 636, 69, 69,
+ 637, 658, 660, 654, 659, 638, 662, 663, 661, 665,
+ 664, 639, 640, 666, 69, 69, 667, 657, 668, 656,
+ 69, 69, 69, 1996, 670, 669, 676, 673, 658, 660,
+ 69, 659, 69, 662, 663, 661, 69, 664, 671, 672,
+ 674, 677, 69, 69, 69, 668, 69, 69, 69, 69,
+ 675, 670, 669, 69, 673, 678, 679, 69, 69, 69,
+ 69, 680, 681, 682, 686, 671, 672, 674, 677, 69,
+ 683, 684, 1996, 685, 69, 687, 69, 675, 69, 691,
+ 69, 69, 678, 1996, 69, 688, 690, 69, 680, 681,
+
+ 682, 686, 69, 689, 69, 697, 693, 683, 684, 69,
+ 685, 69, 687, 69, 692, 704, 691, 695, 696, 69,
+ 69, 694, 688, 690, 69, 698, 69, 699, 69, 700,
+ 689, 701, 697, 693, 69, 69, 69, 702, 703, 707,
+ 708, 692, 69, 1996, 695, 696, 69, 69, 694, 706,
+ 69, 709, 698, 705, 699, 710, 700, 1996, 701, 69,
+ 69, 713, 69, 69, 702, 703, 714, 716, 715, 711,
+ 69, 69, 69, 717, 69, 719, 706, 712, 709, 720,
+ 705, 718, 710, 69, 69, 721, 722, 1996, 713, 69,
+ 69, 724, 69, 714, 69, 715, 711, 69, 69, 725,
+
+ 717, 726, 719, 728, 712, 723, 69, 727, 718, 729,
+ 69, 69, 721, 69, 69, 69, 730, 1996, 139, 1996,
+ 1996, 737, 69, 69, 69, 1996, 725, 1996, 726, 739,
+ 728, 738, 723, 740, 727, 69, 729, 742, 741, 1996,
+ 1996, 69, 744, 730, 731, 743, 732, 69, 737, 69,
+ 733, 746, 734, 745, 69, 69, 739, 735, 738, 1996,
+ 740, 69, 736, 747, 742, 741, 69, 69, 69, 744,
+ 750, 731, 743, 732, 69, 69, 748, 733, 746, 734,
+ 745, 751, 752, 753, 735, 754, 749, 755, 69, 736,
+ 747, 1996, 69, 756, 69, 763, 69, 750, 69, 773,
+
+ 762, 1996, 1996, 748, 765, 1996, 69, 766, 751, 752,
+ 753, 764, 754, 749, 767, 69, 768, 69, 69, 69,
+ 69, 757, 763, 771, 69, 774, 758, 762, 759, 769,
+ 69, 765, 770, 69, 766, 69, 69, 772, 764, 760,
+ 69, 767, 69, 768, 776, 777, 761, 69, 757, 69,
+ 69, 1996, 774, 758, 775, 759, 769, 778, 69, 770,
+ 69, 779, 69, 782, 772, 780, 760, 781, 783, 69,
+ 784, 776, 791, 761, 69, 786, 69, 785, 69, 69,
+ 787, 775, 69, 69, 778, 69, 69, 789, 779, 788,
+ 782, 790, 780, 69, 781, 783, 69, 784, 792, 69,
+
+ 794, 793, 786, 69, 785, 69, 69, 787, 795, 69,
+ 69, 796, 69, 798, 789, 797, 788, 799, 790, 800,
+ 801, 802, 803, 1996, 1996, 792, 804, 794, 793, 1996,
+ 69, 69, 69, 69, 69, 795, 805, 69, 796, 806,
+ 798, 807, 797, 69, 799, 808, 812, 801, 802, 809,
+ 69, 813, 810, 69, 811, 815, 69, 69, 69, 817,
+ 814, 69, 69, 805, 69, 69, 806, 816, 807, 819,
+ 69, 69, 808, 812, 818, 820, 809, 69, 813, 810,
+ 69, 811, 815, 822, 823, 69, 817, 814, 821, 69,
+ 69, 824, 69, 827, 816, 825, 819, 826, 828, 829,
+
+ 69, 818, 69, 69, 69, 830, 69, 69, 69, 832,
+ 822, 823, 833, 835, 831, 821, 834, 836, 824, 839,
+ 827, 69, 825, 69, 826, 837, 829, 69, 69, 69,
+ 840, 69, 830, 69, 838, 842, 832, 69, 69, 833,
+ 841, 831, 844, 834, 69, 845, 69, 846, 69, 852,
+ 69, 69, 837, 69, 850, 69, 69, 840, 847, 853,
+ 69, 838, 842, 69, 849, 848, 69, 841, 851, 844,
+ 856, 854, 845, 69, 846, 69, 857, 69, 855, 858,
+ 69, 850, 859, 69, 861, 847, 864, 862, 860, 69,
+ 69, 849, 848, 69, 69, 851, 69, 856, 854, 69,
+
+ 69, 69, 863, 857, 69, 855, 858, 865, 866, 859,
+ 69, 861, 867, 69, 862, 860, 868, 69, 869, 870,
+ 69, 874, 871, 69, 872, 876, 873, 1996, 1996, 863,
+ 69, 1996, 877, 69, 865, 866, 875, 69, 878, 867,
+ 69, 69, 69, 868, 69, 869, 870, 69, 874, 871,
+ 69, 872, 876, 873, 69, 880, 879, 881, 882, 877,
+ 69, 883, 884, 875, 69, 878, 885, 888, 887, 69,
+ 69, 889, 886, 69, 69, 69, 69, 894, 69, 890,
+ 69, 1996, 880, 879, 881, 882, 69, 69, 883, 884,
+ 891, 893, 895, 885, 888, 887, 892, 896, 889, 886,
+
+ 69, 903, 69, 69, 897, 69, 890, 898, 69, 69,
+ 899, 69, 902, 904, 69, 905, 69, 891, 893, 895,
+ 69, 906, 900, 892, 896, 69, 901, 69, 903, 69,
+ 908, 897, 907, 910, 898, 69, 909, 899, 911, 902,
+ 904, 69, 905, 914, 912, 913, 915, 919, 906, 918,
+ 69, 920, 916, 69, 965, 69, 69, 922, 69, 907,
+ 910, 69, 69, 909, 69, 911, 69, 69, 917, 69,
+ 914, 912, 913, 915, 69, 921, 918, 930, 69, 916,
+ 69, 69, 69, 1996, 922, 69, 931, 1996, 1996, 928,
+ 938, 933, 935, 69, 1996, 917, 936, 69, 69, 932,
+
+ 69, 934, 921, 923, 930, 939, 944, 937, 924, 69,
+ 925, 69, 926, 931, 927, 69, 928, 938, 933, 69,
+ 69, 69, 941, 69, 69, 940, 932, 942, 934, 943,
+ 923, 69, 939, 69, 937, 924, 69, 925, 69, 926,
+ 69, 927, 946, 945, 947, 948, 950, 952, 955, 941,
+ 949, 1996, 940, 951, 942, 69, 943, 953, 69, 954,
+ 69, 1996, 958, 957, 966, 69, 959, 69, 69, 69,
+ 945, 947, 948, 69, 69, 69, 956, 949, 960, 69,
+ 951, 69, 961, 69, 953, 69, 954, 962, 69, 958,
+ 957, 69, 963, 959, 967, 69, 964, 968, 970, 969,
+
+ 972, 976, 971, 956, 69, 960, 69, 975, 69, 961,
+ 69, 69, 69, 973, 962, 974, 69, 69, 69, 963,
+ 69, 967, 69, 964, 977, 970, 969, 69, 69, 971,
+ 978, 979, 69, 980, 975, 981, 983, 69, 69, 982,
+ 973, 985, 974, 69, 69, 984, 987, 69, 69, 986,
+ 69, 977, 988, 989, 997, 1996, 69, 978, 979, 990,
+ 980, 1996, 981, 983, 993, 69, 982, 69, 985, 994,
+ 991, 69, 984, 69, 992, 69, 986, 995, 1996, 988,
+ 989, 996, 69, 998, 999, 69, 990, 1000, 69, 1001,
+ 69, 993, 1005, 1003, 69, 69, 994, 1996, 1002, 69,
+
+ 69, 69, 69, 1004, 995, 1006, 69, 69, 996, 1007,
+ 998, 999, 69, 1008, 1000, 69, 1001, 1011, 69, 1005,
+ 1003, 69, 1009, 1012, 1014, 1002, 1010, 1015, 69, 69,
+ 1004, 1023, 1006, 1013, 1016, 69, 1007, 69, 1020, 69,
+ 1008, 69, 1021, 1017, 1011, 1018, 69, 69, 69, 1009,
+ 1012, 1014, 69, 1010, 1015, 1019, 69, 1022, 1024, 69,
+ 1013, 1016, 69, 69, 1025, 1020, 1026, 69, 1027, 1021,
+ 1017, 1028, 1018, 1032, 1030, 1031, 1034, 1033, 1029, 69,
+ 1035, 1038, 1019, 69, 1022, 69, 69, 1996, 69, 69,
+ 69, 1025, 69, 1026, 69, 69, 69, 69, 1028, 1036,
+
+ 1032, 1030, 1031, 1037, 1033, 1029, 1039, 69, 1038, 1040,
+ 1041, 1042, 69, 1043, 69, 1045, 1046, 69, 69, 1996,
+ 1044, 69, 1051, 1047, 69, 1053, 1048, 1049, 69, 1050,
+ 69, 69, 1052, 1039, 69, 69, 1040, 1041, 1042, 1054,
+ 1043, 69, 69, 1046, 69, 1055, 69, 1044, 1056, 1051,
+ 1047, 69, 1053, 1048, 1049, 1057, 1050, 1058, 1065, 1052,
+ 69, 1060, 1059, 69, 1061, 69, 1054, 1996, 1066, 1062,
+ 1067, 1071, 1055, 1063, 1069, 69, 69, 69, 69, 69,
+ 69, 1068, 1057, 69, 1058, 1065, 1064, 1073, 1060, 1059,
+ 1072, 1061, 69, 1074, 69, 69, 1062, 1067, 1070, 69,
+
+ 1063, 1069, 69, 1075, 69, 69, 1076, 1996, 1068, 69,
+ 1077, 1078, 1079, 1064, 1073, 1080, 1081, 1072, 1083, 69,
+ 1074, 1082, 69, 69, 1084, 1070, 1086, 1087, 69, 1089,
+ 1090, 69, 1085, 69, 69, 69, 69, 69, 1078, 1079,
+ 1088, 69, 1080, 1081, 69, 1083, 69, 69, 1082, 1091,
+ 69, 1084, 1092, 69, 1087, 69, 1089, 1090, 1093, 1085,
+ 1094, 1095, 1096, 1996, 1097, 69, 69, 1088, 1098, 1996,
+ 1099, 69, 1102, 1100, 1101, 69, 1091, 69, 1104, 1092,
+ 69, 69, 69, 1106, 1105, 1093, 1103, 1094, 69, 1096,
+ 69, 1097, 69, 69, 69, 1098, 1108, 1099, 1110, 1102,
+
+ 1100, 1101, 1107, 69, 1109, 1104, 69, 1111, 1115, 69,
+ 1114, 1105, 1112, 1103, 69, 69, 1113, 69, 1120, 69,
+ 1121, 1116, 1996, 69, 1123, 69, 1126, 69, 69, 1107,
+ 1131, 1109, 1122, 69, 1111, 1115, 69, 1114, 1117, 1112,
+ 1125, 1118, 69, 1113, 1127, 1133, 69, 1121, 1116, 69,
+ 69, 1123, 1124, 1119, 69, 1129, 1132, 69, 1136, 1122,
+ 1128, 69, 69, 69, 69, 1117, 1130, 1125, 1118, 69,
+ 69, 1127, 1135, 69, 1137, 1138, 69, 1134, 69, 1124,
+ 1119, 69, 1129, 1132, 69, 69, 1143, 1128, 1139, 1144,
+ 1140, 1142, 1141, 1130, 69, 69, 69, 69, 1147, 1135,
+
+ 69, 1137, 1138, 1145, 1134, 69, 69, 1146, 1149, 1151,
+ 69, 69, 1152, 1143, 69, 1139, 1148, 1140, 1142, 1141,
+ 69, 1150, 69, 1996, 69, 1147, 1153, 1156, 69, 1154,
+ 1145, 69, 1155, 1160, 1146, 69, 1151, 1157, 69, 1152,
+ 1161, 1162, 1158, 1148, 1163, 1165, 69, 69, 1150, 69,
+ 1159, 1164, 69, 1153, 1156, 1170, 1154, 1169, 1167, 1155,
+ 69, 1168, 69, 69, 1157, 69, 69, 69, 1162, 1158,
+ 1171, 1163, 1165, 1166, 1174, 69, 69, 1159, 1164, 1173,
+ 1172, 69, 1175, 69, 1169, 1167, 69, 69, 1168, 1177,
+ 1178, 1176, 69, 69, 1179, 69, 1180, 69, 1183, 1181,
+
+ 1166, 1174, 69, 69, 69, 1184, 1173, 1172, 1996, 1175,
+ 69, 1182, 1186, 1189, 1192, 1187, 1177, 1178, 1176, 1185,
+ 69, 1179, 69, 1180, 1188, 1183, 1181, 1190, 1191, 69,
+ 69, 69, 1184, 69, 1194, 1193, 69, 1195, 1182, 1186,
+ 1199, 69, 1187, 1196, 69, 69, 1185, 1197, 69, 1201,
+ 69, 1188, 1204, 1198, 1190, 1191, 69, 69, 1200, 1207,
+ 1202, 1194, 1193, 69, 1203, 1996, 1206, 1199, 69, 69,
+ 1196, 69, 69, 1205, 1197, 69, 1201, 69, 1209, 1213,
+ 1198, 1208, 1210, 69, 69, 1200, 69, 1202, 69, 1211,
+ 1212, 1203, 1214, 1206, 1216, 1215, 69, 69, 1218, 1219,
+
+ 1205, 69, 1217, 1222, 69, 1209, 1213, 69, 1208, 1210,
+ 1226, 69, 69, 1220, 69, 69, 1211, 1212, 69, 1214,
+ 1223, 69, 1215, 1221, 1224, 1218, 1219, 1225, 69, 1217,
+ 1228, 69, 1227, 69, 69, 69, 1229, 69, 1231, 1996,
+ 1220, 1996, 1230, 1236, 1233, 1996, 1232, 1223, 69, 1234,
+ 1221, 1224, 1237, 1235, 1225, 69, 69, 69, 69, 1227,
+ 69, 69, 1242, 1229, 1238, 69, 69, 69, 69, 1230,
+ 1236, 1233, 1241, 1232, 69, 1243, 1234, 1239, 1240, 1237,
+ 1235, 1244, 69, 1246, 69, 69, 1245, 69, 1247, 69,
+ 69, 1238, 1249, 1248, 69, 1250, 1251, 1253, 1252, 1241,
+
+ 69, 69, 1254, 1255, 1239, 1240, 69, 1257, 1244, 1256,
+ 1246, 1261, 1258, 1245, 69, 69, 1259, 1274, 69, 69,
+ 1248, 69, 1250, 69, 1260, 1252, 69, 1996, 69, 1254,
+ 1262, 1263, 1264, 1266, 69, 1268, 1256, 1265, 69, 1258,
+ 69, 1267, 69, 69, 69, 69, 1269, 1291, 69, 1272,
+ 69, 1260, 1270, 69, 1276, 1273, 1271, 1262, 1263, 1264,
+ 1266, 69, 69, 1279, 1265, 1277, 69, 1280, 1267, 1275,
+ 69, 1282, 69, 1269, 1278, 1281, 1272, 1996, 69, 69,
+ 69, 1276, 1273, 69, 1284, 1283, 1996, 1285, 1290, 69,
+ 1279, 1287, 1277, 69, 69, 1296, 1275, 69, 69, 1286,
+
+ 69, 1278, 1281, 1293, 69, 69, 1288, 69, 1289, 1292,
+ 69, 1284, 1283, 1294, 1285, 1290, 69, 69, 1287, 69,
+ 1295, 1297, 69, 69, 1996, 1299, 1286, 1298, 1996, 1300,
+ 1293, 1301, 69, 1288, 1305, 1289, 1292, 69, 1302, 1312,
+ 1303, 1304, 69, 69, 69, 69, 69, 1306, 1297, 69,
+ 1309, 69, 1299, 1311, 1298, 1307, 1300, 1308, 1301, 69,
+ 69, 1305, 69, 69, 1310, 1302, 69, 1303, 1304, 69,
+ 1313, 69, 1315, 69, 1306, 1314, 1317, 1309, 1319, 1320,
+ 1311, 1316, 1307, 1318, 1308, 69, 69, 69, 1321, 69,
+ 69, 1310, 1322, 1323, 1324, 69, 1325, 1313, 1326, 69,
+
+ 1327, 1996, 1314, 1317, 1331, 1328, 69, 1329, 1316, 69,
+ 1318, 69, 1330, 1332, 69, 69, 1333, 1336, 69, 69,
+ 1996, 1324, 69, 1325, 69, 1335, 1334, 1327, 69, 69,
+ 1337, 1338, 1328, 1340, 1329, 69, 1996, 1341, 1339, 1330,
+ 1332, 69, 1342, 69, 1336, 69, 1344, 69, 1343, 69,
+ 1345, 1348, 1335, 1334, 69, 1346, 1347, 69, 69, 69,
+ 1340, 1996, 1350, 69, 1341, 1339, 69, 1351, 69, 1342,
+ 69, 69, 1349, 1344, 69, 1343, 69, 1345, 69, 69,
+ 69, 1353, 1346, 1347, 1352, 1354, 1355, 1356, 1359, 1350,
+ 1996, 1360, 69, 1362, 1351, 1357, 1366, 69, 1361, 1349,
+
+ 69, 1996, 1363, 1369, 69, 1370, 1358, 69, 1353, 69,
+ 1365, 1352, 1354, 69, 1356, 1359, 69, 69, 1360, 1364,
+ 69, 69, 1357, 69, 1367, 1361, 1368, 69, 69, 1363,
+ 1369, 69, 69, 1358, 69, 1371, 1372, 1365, 1373, 1374,
+ 1996, 1375, 1996, 69, 1376, 1377, 1364, 69, 1379, 69,
+ 1996, 1367, 69, 1368, 1378, 69, 1996, 69, 1380, 69,
+ 69, 1381, 1371, 1372, 69, 1373, 1374, 1385, 1375, 69,
+ 69, 1376, 1377, 1383, 1382, 1379, 1384, 1386, 1387, 1996,
+ 69, 1378, 69, 69, 1388, 1380, 1391, 69, 1381, 69,
+ 1389, 1390, 1392, 1394, 1385, 1393, 69, 1400, 1395, 69,
+
+ 1383, 1382, 69, 1384, 1386, 1387, 69, 1396, 1397, 69,
+ 69, 1388, 1398, 1391, 1401, 69, 1406, 1389, 1390, 69,
+ 1394, 69, 1393, 69, 1399, 1395, 1402, 1403, 69, 69,
+ 69, 69, 1407, 1413, 1396, 1397, 69, 1404, 1408, 1398,
+ 69, 1401, 1405, 69, 1410, 69, 69, 1996, 69, 1409,
+ 69, 1399, 1411, 1402, 1403, 69, 69, 1412, 69, 1407,
+ 1413, 1416, 1417, 1414, 1404, 1408, 1415, 1418, 1419, 1405,
+ 1420, 1423, 1996, 1422, 69, 69, 1409, 1421, 69, 1411,
+ 1425, 69, 69, 69, 1412, 69, 69, 69, 1416, 69,
+ 1414, 69, 69, 1415, 1418, 1419, 1424, 1420, 1423, 69,
+
+ 1422, 1426, 1428, 1427, 1421, 69, 1429, 1425, 69, 1430,
+ 1431, 1433, 1434, 1432, 69, 1440, 1996, 1442, 1435, 1996,
+ 69, 1436, 69, 1424, 69, 1444, 1448, 69, 1426, 1428,
+ 1427, 69, 1437, 1429, 69, 1443, 1430, 69, 69, 1434,
+ 1432, 69, 1440, 69, 69, 1435, 69, 1438, 1436, 1441,
+ 1446, 1439, 69, 69, 1445, 1447, 69, 69, 1450, 1437,
+ 1454, 1449, 1443, 1457, 69, 69, 1451, 1452, 69, 1453,
+ 1455, 1458, 69, 69, 69, 1456, 1441, 1446, 69, 1460,
+ 69, 1445, 1447, 69, 69, 69, 1459, 1454, 1449, 69,
+ 1457, 69, 69, 1451, 1452, 1461, 1453, 1455, 69, 1462,
+
+ 69, 1465, 1456, 1463, 1464, 69, 1460, 1466, 1467, 69,
+ 69, 69, 69, 1459, 1468, 1470, 69, 69, 1469, 1471,
+ 69, 69, 1461, 1472, 1473, 1475, 1462, 1474, 1465, 1476,
+ 1463, 1464, 1477, 69, 1466, 1467, 1478, 1479, 69, 69,
+ 69, 1468, 1470, 1480, 1484, 1469, 69, 69, 1481, 69,
+ 1472, 1473, 1475, 1485, 1474, 69, 1476, 69, 1482, 69,
+ 1486, 1483, 1488, 69, 1479, 1487, 1490, 1491, 1489, 1493,
+ 1480, 69, 1494, 69, 69, 1481, 69, 69, 1492, 1496,
+ 69, 1498, 1495, 1502, 1996, 1482, 69, 69, 1483, 69,
+ 69, 69, 1487, 69, 69, 1489, 1493, 1499, 1497, 69,
+
+ 1500, 1504, 69, 1503, 1505, 1492, 69, 69, 1498, 1495,
+ 69, 69, 69, 69, 1506, 1501, 1507, 1509, 1508, 1511,
+ 1996, 69, 69, 69, 1499, 1497, 69, 1500, 1504, 69,
+ 1503, 1505, 1510, 1513, 1514, 69, 1515, 1517, 1516, 1512,
+ 1520, 69, 1501, 1507, 1509, 1508, 69, 69, 1518, 1519,
+ 1522, 69, 69, 1525, 69, 69, 69, 1523, 1528, 1510,
+ 69, 1514, 69, 1515, 1517, 1516, 1512, 1520, 1521, 1524,
+ 69, 69, 69, 1526, 69, 1518, 1519, 1522, 1529, 69,
+ 1525, 69, 1532, 1530, 1523, 1527, 1531, 1533, 1996, 69,
+ 69, 69, 1540, 1996, 1534, 1521, 1524, 1996, 69, 1538,
+
+ 1526, 69, 1535, 1541, 69, 1529, 1539, 69, 69, 1532,
+ 1530, 69, 1527, 1531, 1542, 1536, 1543, 1537, 69, 1540,
+ 69, 1534, 69, 69, 69, 1544, 1538, 69, 1545, 1535,
+ 1541, 1546, 1547, 1539, 1548, 1549, 69, 1552, 1550, 1551,
+ 69, 1542, 1536, 1543, 1537, 69, 1553, 69, 1554, 1555,
+ 69, 69, 1544, 1996, 1563, 69, 1556, 1560, 69, 1547,
+ 69, 1548, 1549, 69, 1552, 1550, 1551, 1557, 1559, 69,
+ 1558, 1562, 69, 1553, 69, 1554, 69, 69, 69, 1561,
+ 69, 69, 1564, 1556, 1560, 69, 69, 1567, 1565, 1566,
+ 1573, 69, 1996, 69, 1557, 1559, 1569, 1558, 1562, 69,
+
+ 1568, 1570, 1572, 69, 1571, 1575, 1561, 1574, 1578, 1564,
+ 1579, 69, 1580, 1576, 69, 1565, 1566, 1573, 69, 69,
+ 1577, 69, 69, 1569, 1581, 1582, 69, 1568, 1570, 1572,
+ 69, 1571, 69, 69, 1574, 69, 69, 69, 1584, 1583,
+ 1576, 1585, 69, 69, 69, 1587, 1586, 1577, 1589, 69,
+ 69, 1581, 1582, 1588, 1590, 1591, 1592, 1996, 1597, 1598,
+ 69, 69, 1593, 69, 1595, 1584, 1583, 69, 1585, 1594,
+ 1596, 69, 69, 1586, 1599, 1600, 1608, 69, 1601, 69,
+ 1588, 1590, 1591, 69, 69, 69, 69, 69, 1602, 1593,
+ 69, 1595, 69, 1603, 69, 1604, 1594, 1596, 1605, 1606,
+
+ 1607, 69, 1600, 69, 1612, 1601, 1609, 69, 69, 1611,
+ 69, 1610, 69, 69, 69, 1602, 69, 1614, 69, 1615,
+ 1603, 69, 1604, 1616, 69, 1605, 1606, 1607, 1617, 1613,
+ 69, 1612, 69, 1609, 1618, 1619, 1611, 69, 1610, 69,
+ 1621, 69, 1620, 1622, 1614, 69, 1615, 1623, 1626, 1632,
+ 1616, 1624, 1627, 69, 1625, 1617, 1613, 69, 69, 69,
+ 1631, 1618, 1619, 69, 69, 1628, 1996, 69, 1635, 1620,
+ 69, 1630, 1633, 69, 1623, 1626, 69, 1629, 1624, 1627,
+ 69, 1625, 1634, 69, 69, 1636, 69, 1631, 69, 1639,
+ 69, 69, 1628, 1637, 1638, 1635, 1641, 69, 1630, 1633,
+
+ 69, 1643, 69, 69, 1629, 1640, 1642, 1644, 1646, 1634,
+ 69, 1647, 1636, 69, 1645, 1650, 1639, 1648, 69, 69,
+ 1637, 1638, 69, 69, 69, 1649, 1653, 1651, 1643, 1655,
+ 69, 1652, 1640, 69, 1644, 1646, 1654, 69, 1647, 69,
+ 69, 1645, 1650, 1656, 1648, 69, 1658, 69, 1657, 1659,
+ 1660, 1661, 1649, 1653, 1651, 69, 69, 69, 1652, 1662,
+ 69, 1664, 69, 1654, 1666, 1663, 1667, 1996, 1668, 1670,
+ 1656, 1996, 69, 69, 69, 1657, 1659, 1660, 1661, 69,
+ 1669, 1665, 1671, 69, 1672, 69, 69, 1996, 69, 69,
+ 1673, 69, 1663, 69, 69, 1668, 1670, 1674, 1676, 1675,
+
+ 69, 1677, 1679, 1680, 1681, 69, 69, 1669, 1665, 1671,
+ 69, 1672, 69, 1678, 69, 1683, 1682, 1673, 69, 1684,
+ 1686, 1687, 1685, 69, 1674, 1676, 1675, 1688, 1677, 1679,
+ 69, 69, 1689, 1690, 1996, 69, 69, 69, 1696, 1691,
+ 1678, 69, 1683, 1682, 69, 1693, 1692, 69, 69, 1685,
+ 69, 1694, 1695, 69, 1688, 1996, 69, 69, 1697, 1698,
+ 1690, 69, 1699, 69, 69, 1696, 1691, 1996, 1996, 1700,
+ 69, 69, 1693, 1692, 69, 1701, 1702, 1704, 1694, 1695,
+ 1703, 69, 69, 69, 1705, 1697, 1698, 1708, 1712, 1699,
+ 1706, 1707, 69, 69, 69, 69, 1700, 69, 1710, 69,
+
+ 1709, 1711, 1701, 1702, 1704, 1996, 69, 1703, 69, 1714,
+ 1715, 1705, 1713, 69, 69, 69, 69, 1706, 1707, 1716,
+ 69, 1717, 1718, 1722, 1720, 1710, 1723, 1709, 1711, 1721,
+ 1719, 1724, 69, 1726, 1725, 69, 1714, 69, 69, 1713,
+ 69, 69, 69, 69, 69, 1727, 1716, 69, 1717, 1718,
+ 1722, 1720, 69, 1723, 1728, 1729, 1721, 1719, 69, 69,
+ 1726, 1725, 1730, 1731, 1732, 1734, 1733, 1735, 1741, 1996,
+ 1996, 1737, 69, 69, 1736, 1738, 1739, 1740, 69, 69,
+ 69, 1728, 69, 1742, 1745, 1743, 1744, 1996, 1749, 69,
+ 69, 1732, 1763, 1733, 69, 69, 69, 69, 69, 69,
+
+ 1746, 1736, 69, 1739, 1740, 69, 69, 1747, 1748, 69,
+ 1742, 1745, 1743, 1744, 69, 69, 1750, 1751, 1752, 69,
+ 1753, 69, 1754, 1758, 69, 1755, 69, 1746, 1756, 1996,
+ 69, 1757, 1759, 69, 1747, 1748, 69, 1996, 1760, 69,
+ 1766, 1767, 1764, 1750, 1751, 1752, 69, 1753, 69, 1754,
+ 1758, 69, 1755, 69, 1761, 1756, 69, 1762, 1757, 1759,
+ 1769, 69, 1765, 69, 69, 1760, 69, 69, 1767, 1764,
+ 1768, 69, 1770, 1771, 1772, 1776, 1773, 1996, 1775, 69,
+ 1774, 1761, 1780, 1778, 1762, 1777, 69, 69, 1779, 1765,
+ 69, 69, 69, 69, 1781, 69, 1782, 1768, 69, 1770,
+
+ 1771, 1772, 1776, 69, 69, 1775, 1783, 69, 1784, 1780,
+ 1778, 1785, 1777, 1786, 69, 1779, 1789, 1788, 1787, 1790,
+ 69, 1781, 1792, 1782, 69, 69, 1791, 1793, 69, 1795,
+ 1794, 69, 69, 1783, 69, 1784, 69, 1798, 1785, 1797,
+ 69, 1799, 1796, 1801, 1788, 1787, 1790, 69, 69, 1792,
+ 69, 69, 1800, 1791, 1802, 69, 69, 1794, 69, 1803,
+ 1807, 69, 1805, 1804, 69, 69, 1797, 69, 1799, 1796,
+ 1801, 1806, 69, 1809, 1810, 69, 1811, 1808, 1813, 1800,
+ 1812, 1802, 69, 1816, 69, 69, 1803, 69, 1814, 1805,
+ 1804, 69, 1815, 1996, 1817, 69, 69, 1820, 1806, 1818,
+
+ 69, 69, 69, 69, 1808, 69, 1819, 1812, 1821, 1822,
+ 1816, 69, 69, 1823, 1825, 1814, 1824, 69, 1826, 1815,
+ 69, 1817, 1827, 69, 69, 1829, 1818, 1830, 69, 1828,
+ 1832, 1831, 69, 1819, 1833, 69, 1822, 1836, 69, 1837,
+ 1823, 69, 69, 1824, 69, 1826, 1839, 1838, 69, 1827,
+ 1840, 69, 1829, 69, 1830, 69, 1828, 1832, 1831, 1834,
+ 1835, 1842, 1841, 1843, 69, 69, 69, 1844, 1845, 69,
+ 1846, 1847, 69, 69, 1838, 69, 1848, 1840, 1849, 1853,
+ 1850, 1852, 1854, 69, 1851, 1856, 1834, 1835, 1842, 1841,
+ 69, 69, 69, 69, 69, 69, 1855, 1846, 69, 69,
+
+ 1857, 1861, 69, 1848, 69, 69, 69, 1850, 1852, 1854,
+ 1858, 1851, 69, 1859, 1860, 69, 69, 69, 1864, 1862,
+ 69, 1863, 69, 1855, 1865, 1866, 1867, 1857, 1861, 69,
+ 69, 1870, 69, 1868, 69, 1869, 69, 1858, 69, 1871,
+ 1859, 1860, 69, 1873, 1872, 1864, 1862, 1875, 1863, 1874,
+ 1876, 1865, 1866, 1867, 1878, 69, 1877, 1996, 69, 69,
+ 1868, 1879, 1869, 1882, 1881, 1883, 69, 69, 1884, 69,
+ 69, 1872, 69, 69, 69, 1880, 1874, 1876, 1885, 1889,
+ 1892, 69, 69, 1877, 69, 1886, 1887, 69, 1879, 69,
+ 1882, 1881, 69, 1888, 1890, 69, 1891, 1893, 69, 69,
+
+ 69, 69, 1880, 1894, 69, 1885, 1889, 69, 1895, 1896,
+ 1897, 1900, 1886, 1887, 1898, 1899, 69, 1902, 1903, 1901,
+ 1888, 1890, 1904, 1891, 69, 69, 69, 69, 1908, 1996,
+ 69, 69, 1996, 1909, 1996, 1895, 69, 1897, 69, 1905,
+ 69, 1898, 1899, 69, 69, 1903, 1901, 69, 69, 1904,
+ 1906, 1907, 69, 1912, 1910, 1908, 69, 1911, 1913, 69,
+ 1909, 69, 69, 1914, 1915, 1916, 1905, 1918, 1919, 69,
+ 69, 69, 69, 69, 1920, 69, 69, 1906, 1907, 69,
+ 1912, 1910, 1921, 1922, 1911, 1913, 1917, 1923, 69, 1924,
+ 1914, 1915, 1916, 1925, 1918, 1919, 1926, 1928, 69, 1929,
+
+ 69, 69, 1930, 1933, 1934, 1927, 1931, 1996, 1996, 1921,
+ 69, 69, 69, 1917, 69, 69, 1924, 69, 69, 1932,
+ 1925, 1943, 1936, 1926, 1935, 1996, 1929, 69, 69, 69,
+ 1937, 1938, 1927, 1931, 69, 69, 69, 69, 69, 1939,
+ 1940, 1941, 1942, 69, 69, 1945, 1932, 69, 1943, 1936,
+ 69, 1935, 1944, 69, 69, 69, 1946, 1937, 1938, 1947,
+ 1951, 1952, 1948, 1949, 1996, 1950, 1939, 1940, 1941, 1942,
+ 1954, 1996, 1945, 69, 69, 1953, 1956, 1996, 69, 1944,
+ 1996, 69, 69, 1946, 69, 69, 1947, 1959, 69, 1948,
+ 1949, 69, 1950, 1955, 1958, 69, 1957, 1954, 1960, 1962,
+
+ 1964, 69, 1953, 1961, 69, 1963, 69, 69, 69, 69,
+ 1965, 69, 1966, 69, 1959, 1967, 1969, 1971, 69, 1996,
+ 1955, 1958, 69, 1957, 1968, 1960, 1962, 1964, 1996, 1972,
+ 1961, 69, 1963, 1973, 1996, 1975, 69, 1965, 69, 1966,
+ 1970, 69, 1967, 1969, 69, 1996, 69, 1974, 69, 69,
+ 1976, 1968, 1981, 69, 1977, 69, 1972, 69, 69, 1985,
+ 1973, 1978, 1975, 1979, 1980, 1982, 1996, 1970, 1984, 1986,
+ 1987, 69, 69, 69, 1974, 1988, 69, 1976, 69, 1981,
+ 1989, 1977, 1990, 69, 1991, 1983, 69, 1994, 1978, 69,
+ 1979, 1980, 1982, 69, 69, 1984, 1986, 69, 1995, 1996,
+
+ 69, 1996, 69, 1996, 69, 1992, 69, 1989, 1993, 1990,
+ 1996, 1991, 1983, 69, 69, 1996, 69, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 69, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1992, 1996, 1996, 1993, 41, 41, 41, 41,
+ 41, 41, 41, 46, 46, 46, 46, 46, 46, 46,
+ 51, 51, 51, 51, 51, 51, 51, 57, 57, 57,
+ 57, 57, 57, 57, 62, 62, 62, 62, 62, 62,
+ 62, 72, 72, 1996, 72, 72, 72, 72, 129, 129,
+ 1996, 1996, 1996, 129, 129, 131, 131, 1996, 1996, 131,
+ 1996, 131, 133, 1996, 1996, 1996, 1996, 1996, 133, 136,
+
+ 136, 1996, 1996, 1996, 136, 136, 138, 1996, 1996, 1996,
+ 1996, 1996, 138, 140, 140, 1996, 140, 140, 140, 140,
+ 73, 73, 1996, 73, 73, 73, 73, 13, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996
+
} ;
-static yyconst flex_int16_t yy_chk[5690] =
+static yyconst flex_int16_t yy_chk[5794] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -1728,22 +1756,22 @@ static yyconst flex_int16_t yy_chk[5690] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 3, 3, 3, 4, 4,
4, 5, 5, 6, 6, 5, 27, 6, 7, 7,
- 7, 7, 1961, 7, 8, 8, 8, 8, 27, 8,
+ 7, 7, 2002, 7, 8, 8, 8, 8, 27, 8,
9, 9, 9, 10, 10, 10, 15, 45, 45, 50,
15, 3, 50, 27, 4, 61, 61, 5, 19, 6,
- 19, 19, 70, 19, 707, 7, 70, 40, 19, 40,
- 40, 8, 40, 23, 20, 20, 9, 40, 714, 10,
+ 19, 19, 70, 19, 717, 7, 70, 40, 19, 40,
+ 40, 8, 40, 23, 20, 20, 9, 40, 724, 10,
11, 11, 11, 11, 11, 11, 12, 12, 12, 12,
- 12, 12, 20, 23, 707, 19, 23, 29, 20, 11,
+ 12, 12, 20, 23, 717, 19, 23, 29, 20, 11,
23, 20, 20, 132, 21, 12, 132, 24, 83, 29,
138, 21, 34, 83, 25, 28, 66, 11, 21, 20,
23, 24, 25, 12, 29, 34, 11, 130, 130, 66,
- 21, 21, 12, 24, 24, 83, 790, 28, 21, 34,
+ 21, 21, 12, 24, 24, 83, 802, 28, 21, 34,
25, 25, 28, 66, 30, 21, 22, 136, 24, 25,
22, 26, 30, 22, 26, 22, 22, 135, 30, 32,
- 133, 26, 30, 26, 790, 32, 95, 37, 22, 37,
+ 133, 26, 30, 26, 802, 32, 95, 37, 22, 37,
30, 30, 31, 22, 26, 118, 31, 22, 26, 30,
22, 26, 22, 22, 37, 30, 32, 35, 26, 30,
26, 35, 31, 37, 37, 36, 37, 95, 31, 31,
@@ -1777,13 +1805,13 @@ static yyconst flex_int16_t yy_chk[5690] =
0, 117, 120, 120, 122, 0, 154, 0, 0, 142,
126, 124, 121, 0, 123, 124, 127, 124, 0, 125,
- 257, 128, 126, 120, 125, 134, 128, 134, 134, 139,
+ 258, 128, 126, 120, 125, 134, 128, 134, 134, 139,
134, 139, 139, 142, 139, 143, 142, 140, 124, 140,
- 140, 145, 140, 147, 146, 149, 148, 257, 150, 151,
+ 140, 145, 140, 147, 146, 149, 148, 258, 150, 151,
0, 147, 149, 145, 151, 152, 159, 143, 148, 153,
- 306, 306, 143, 146, 157, 160, 150, 155, 145, 0,
+ 307, 307, 143, 146, 157, 160, 150, 155, 145, 0,
147, 146, 149, 148, 140, 150, 158, 152, 159, 162,
- 151, 151, 152, 159, 158, 153, 153, 160, 155, 306,
+ 151, 151, 152, 159, 158, 153, 153, 160, 155, 307,
157, 157, 160, 161, 0, 155, 163, 161, 164, 0,
165, 167, 162, 158, 166, 0, 162, 166, 168, 173,
@@ -1791,560 +1819,573 @@ static yyconst flex_int16_t yy_chk[5690] =
161, 156, 0, 163, 171, 164, 156, 165, 167, 0,
168, 166, 156, 156, 166, 168, 169, 170, 172, 156,
173, 169, 170, 156, 171, 174, 176, 175, 156, 172,
- 179, 0, 177, 156, 0, 178, 170, 175, 180, 156,
- 156, 178, 181, 170, 170, 172, 182, 183, 185, 170,
- 177, 174, 174, 189, 184, 187, 190, 176, 175, 177,
- 180, 179, 178, 170, 175, 180, 191, 183, 184, 185,
- 190, 186, 189, 181, 183, 185, 187, 182, 186, 188,
-
- 189, 184, 187, 190, 188, 192, 194, 193, 191, 197,
- 195, 196, 196, 191, 193, 195, 198, 192, 186, 199,
- 196, 200, 201, 198, 204, 205, 188, 202, 194, 206,
- 203, 0, 192, 194, 193, 202, 0, 195, 196, 196,
- 197, 200, 207, 198, 199, 203, 199, 205, 200, 209,
- 204, 204, 211, 201, 202, 210, 205, 203, 208, 207,
- 206, 212, 208, 210, 209, 214, 213, 207, 215, 207,
- 217, 211, 216, 221, 205, 218, 209, 220, 0, 211,
- 215, 216, 210, 217, 222, 208, 207, 219, 213, 219,
- 224, 231, 212, 213, 218, 215, 214, 217, 221, 216,
-
- 221, 220, 218, 225, 220, 229, 233, 226, 227, 228,
- 222, 222, 232, 230, 219, 234, 224, 224, 226, 236,
- 227, 235, 231, 0, 0, 232, 0, 242, 229, 225,
- 225, 230, 229, 228, 226, 227, 228, 233, 237, 232,
- 230, 234, 234, 235, 238, 237, 239, 240, 235, 241,
- 236, 242, 239, 238, 242, 243, 244, 245, 246, 248,
- 0, 240, 247, 0, 243, 237, 245, 246, 249, 0,
- 251, 238, 250, 239, 240, 241, 241, 247, 251, 244,
- 252, 251, 243, 244, 245, 246, 255, 250, 251, 247,
- 248, 258, 249, 261, 253, 249, 254, 251, 252, 250,
-
- 253, 255, 256, 256, 262, 251, 259, 252, 251, 259,
- 254, 261, 260, 255, 263, 258, 259, 265, 258, 268,
- 261, 253, 262, 254, 260, 264, 266, 256, 267, 256,
- 256, 262, 270, 259, 268, 269, 259, 272, 266, 260,
- 0, 263, 269, 265, 265, 0, 268, 264, 274, 271,
- 267, 278, 264, 266, 276, 267, 271, 277, 273, 272,
- 273, 274, 269, 270, 272, 0, 275, 280, 281, 275,
- 0, 275, 276, 278, 280, 274, 271, 275, 278, 282,
- 281, 276, 273, 279, 283, 273, 284, 273, 277, 286,
- 0, 279, 282, 275, 280, 281, 275, 279, 275, 284,
-
- 283, 286, 293, 287, 290, 288, 282, 291, 283, 288,
- 279, 283, 290, 284, 0, 0, 286, 289, 279, 291,
- 294, 287, 0, 289, 294, 292, 0, 283, 285, 285,
- 287, 290, 292, 293, 291, 297, 288, 296, 285, 295,
- 285, 285, 285, 299, 289, 285, 295, 294, 298, 296,
- 302, 300, 292, 285, 303, 285, 285, 297, 300, 304,
- 298, 301, 297, 302, 296, 285, 295, 285, 285, 285,
- 304, 305, 285, 307, 299, 298, 301, 302, 300, 308,
- 307, 309, 310, 0, 312, 303, 304, 311, 301, 315,
- 308, 318, 309, 305, 313, 310, 314, 316, 305, 319,
-
- 307, 317, 315, 321, 0, 314, 308, 312, 309, 310,
- 316, 312, 311, 318, 311, 316, 315, 313, 318, 317,
- 320, 313, 319, 314, 316, 322, 319, 323, 317, 325,
- 324, 322, 326, 327, 321, 328, 330, 316, 320, 329,
- 0, 331, 0, 333, 332, 351, 335, 320, 323, 328,
- 332, 325, 322, 324, 323, 327, 325, 324, 326, 326,
- 327, 333, 328, 334, 331, 329, 329, 330, 331, 335,
- 333, 332, 336, 335, 337, 338, 351, 339, 334, 341,
- 342, 338, 344, 0, 345, 348, 342, 348, 0, 343,
- 334, 345, 355, 0, 348, 346, 337, 353, 336, 336,
-
- 344, 337, 338, 339, 339, 341, 341, 342, 343, 344,
- 346, 345, 348, 349, 348, 350, 343, 352, 354, 353,
- 349, 356, 346, 355, 353, 0, 357, 358, 350, 360,
- 0, 357, 359, 358, 0, 352, 361, 354, 362, 363,
- 349, 360, 350, 356, 352, 354, 0, 363, 383, 362,
- 365, 0, 356, 357, 358, 359, 360, 365, 361, 359,
- 366, 367, 0, 361, 368, 362, 363, 369, 366, 383,
- 356, 364, 367, 368, 370, 383, 364, 365, 364, 0,
- 371, 370, 372, 0, 372, 373, 364, 366, 367, 364,
- 374, 369, 376, 375, 369, 368, 364, 364, 364, 0,
-
- 368, 370, 374, 364, 376, 364, 371, 371, 375, 372,
- 377, 373, 373, 364, 379, 380, 364, 374, 377, 376,
- 375, 378, 381, 364, 385, 386, 378, 382, 387, 0,
- 381, 388, 389, 380, 390, 391, 379, 377, 393, 382,
- 388, 379, 380, 387, 395, 392, 389, 385, 378, 381,
- 394, 385, 396, 390, 382, 387, 386, 398, 388, 389,
- 392, 390, 391, 397, 396, 394, 402, 399, 395, 393,
- 399, 395, 392, 401, 403, 404, 400, 394, 399, 396,
- 400, 398, 405, 406, 398, 397, 407, 401, 410, 408,
- 397, 409, 412, 402, 399, 408, 410, 399, 411, 413,
-
- 401, 403, 414, 416, 415, 417, 404, 400, 0, 405,
- 406, 415, 425, 409, 421, 410, 408, 407, 409, 420,
- 418, 411, 413, 412, 414, 411, 413, 417, 420, 414,
- 419, 415, 417, 418, 416, 419, 422, 423, 424, 419,
- 421, 421, 426, 425, 427, 422, 420, 418, 429, 0,
- 428, 424, 430, 431, 419, 435, 432, 419, 0, 423,
- 426, 436, 419, 422, 423, 424, 419, 431, 427, 426,
- 429, 427, 428, 428, 430, 429, 433, 428, 432, 430,
- 431, 434, 436, 432, 439, 437, 435, 433, 436, 438,
- 442, 440, 441, 443, 444, 446, 434, 447, 0, 428,
-
- 440, 447, 445, 433, 450, 441, 439, 0, 434, 437,
- 448, 439, 437, 438, 0, 443, 438, 446, 440, 441,
- 443, 442, 446, 452, 448, 444, 445, 449, 447, 445,
- 451, 453, 454, 458, 455, 450, 454, 448, 452, 457,
- 459, 449, 458, 456, 460, 462, 0, 452, 451, 459,
- 452, 456, 460, 453, 449, 461, 463, 451, 453, 455,
- 458, 455, 461, 454, 457, 452, 457, 459, 462, 464,
- 456, 460, 462, 471, 463, 465, 467, 466, 468, 469,
- 0, 464, 461, 463, 465, 466, 470, 469, 467, 472,
- 475, 473, 474, 479, 470, 0, 464, 476, 0, 471,
-
- 471, 475, 465, 467, 466, 476, 469, 473, 477, 468,
- 478, 480, 472, 470, 474, 479, 472, 475, 473, 474,
- 479, 481, 477, 482, 476, 483, 484, 486, 0, 485,
- 478, 480, 490, 487, 483, 477, 488, 478, 480, 495,
- 486, 489, 0, 481, 493, 482, 484, 485, 481, 492,
- 482, 487, 483, 484, 486, 490, 485, 492, 488, 490,
- 487, 491, 493, 488, 497, 489, 496, 491, 489, 499,
- 495, 493, 500, 496, 498, 492, 492, 502, 499, 501,
- 503, 0, 503, 506, 492, 516, 502, 497, 491, 498,
- 509, 497, 513, 496, 0, 506, 499, 515, 501, 518,
-
- 509, 498, 512, 500, 502, 514, 501, 503, 504, 519,
- 506, 0, 504, 513, 521, 504, 516, 509, 519, 513,
- 512, 518, 504, 515, 515, 504, 518, 0, 514, 512,
- 504, 520, 514, 520, 522, 504, 519, 541, 521, 504,
- 523, 521, 504, 0, 0, 0, 524, 0, 526, 504,
- 525, 530, 504, 517, 517, 0, 517, 0, 520, 517,
- 523, 522, 525, 527, 517, 528, 529, 523, 541, 0,
- 517, 517, 524, 524, 526, 526, 530, 525, 530, 517,
- 517, 517, 535, 517, 534, 527, 517, 531, 529, 528,
- 527, 517, 528, 529, 532, 531, 533, 517, 517, 540,
-
- 536, 532, 537, 534, 533, 542, 539, 538, 535, 535,
- 0, 534, 536, 543, 531, 537, 538, 544, 0, 551,
- 545, 532, 546, 533, 0, 554, 540, 536, 539, 537,
- 548, 0, 552, 539, 538, 549, 542, 543, 544, 545,
- 543, 546, 547, 557, 544, 550, 551, 545, 553, 546,
- 552, 547, 548, 550, 561, 549, 554, 548, 555, 552,
- 558, 557, 549, 560, 559, 562, 555, 553, 563, 547,
- 557, 563, 550, 566, 564, 553, 560, 562, 558, 566,
- 561, 561, 564, 567, 0, 555, 580, 558, 559, 569,
- 560, 559, 562, 568, 572, 563, 569, 570, 564, 568,
-
- 566, 564, 570, 573, 571, 567, 574, 576, 577, 564,
- 567, 571, 572, 580, 575, 574, 569, 579, 583, 578,
- 568, 572, 575, 577, 570, 576, 573, 582, 584, 581,
- 573, 571, 578, 574, 576, 577, 581, 585, 579, 586,
- 582, 575, 587, 588, 579, 589, 578, 586, 590, 583,
- 591, 589, 592, 593, 582, 595, 581, 587, 597, 584,
- 585, 596, 593, 594, 585, 588, 586, 599, 596, 587,
- 588, 600, 589, 598, 590, 590, 592, 594, 601, 592,
- 593, 591, 598, 600, 602, 597, 595, 607, 596, 604,
- 594, 0, 602, 603, 599, 608, 603, 605, 600, 613,
-
- 598, 601, 604, 609, 605, 601, 0, 610, 0, 610,
- 614, 602, 611, 607, 607, 609, 604, 612, 608, 615,
- 603, 613, 608, 614, 605, 606, 613, 606, 616, 612,
- 609, 606, 615, 606, 610, 611, 617, 614, 606, 611,
- 618, 621, 619, 606, 612, 624, 615, 621, 617, 606,
- 618, 616, 606, 620, 606, 616, 625, 623, 606, 622,
- 606, 0, 618, 617, 619, 606, 620, 618, 621, 619,
- 606, 628, 622, 627, 630, 632, 624, 618, 623, 636,
- 620, 631, 629, 625, 623, 639, 622, 626, 627, 630,
- 634, 633, 626, 628, 626, 629, 635, 632, 628, 637,
-
- 627, 630, 632, 634, 635, 626, 636, 631, 631, 629,
- 633, 640, 626, 626, 626, 642, 639, 634, 633, 626,
- 641, 626, 637, 635, 643, 645, 637, 644, 641, 642,
- 646, 0, 626, 645, 647, 640, 649, 650, 640, 626,
- 648, 655, 642, 651, 649, 647, 0, 641, 646, 644,
- 651, 0, 645, 652, 644, 643, 654, 646, 648, 650,
- 657, 647, 653, 649, 650, 659, 652, 648, 657, 653,
- 651, 660, 655, 658, 654, 661, 663, 659, 664, 662,
- 652, 665, 658, 654, 671, 0, 669, 657, 668, 653,
- 669, 0, 659, 660, 663, 666, 676, 661, 660, 668,
-
- 658, 662, 661, 663, 664, 664, 662, 670, 671, 666,
- 670, 671, 665, 672, 673, 668, 674, 669, 675, 684,
- 676, 673, 666, 676, 677, 675, 672, 678, 674, 681,
- 677, 679, 0, 670, 670, 680, 682, 670, 678, 683,
- 672, 673, 0, 674, 687, 675, 684, 682, 0, 685,
- 681, 677, 686, 679, 678, 688, 681, 680, 679, 692,
- 683, 686, 680, 682, 688, 689, 683, 685, 687, 691,
- 690, 687, 693, 689, 697, 696, 685, 690, 694, 686,
- 699, 700, 688, 691, 696, 701, 703, 698, 0, 0,
- 692, 0, 689, 0, 693, 699, 691, 690, 697, 693,
-
- 694, 697, 696, 698, 706, 694, 702, 699, 705, 704,
- 709, 708, 700, 703, 698, 710, 701, 704, 702, 706,
- 708, 705, 711, 710, 711, 717, 713, 715, 709, 716,
- 718, 706, 717, 702, 713, 705, 704, 709, 708, 719,
- 715, 716, 710, 0, 720, 721, 722, 723, 727, 711,
- 0, 725, 717, 713, 715, 724, 716, 726, 730, 722,
- 723, 718, 733, 725, 728, 726, 720, 721, 727, 0,
- 719, 720, 721, 722, 723, 727, 728, 724, 725, 729,
- 731, 732, 724, 733, 726, 730, 735, 729, 734, 733,
- 732, 728, 736, 731, 739, 734, 737, 738, 742, 741,
-
- 740, 0, 0, 743, 762, 0, 729, 731, 732, 740,
- 738, 743, 735, 735, 736, 734, 737, 741, 739, 736,
- 742, 739, 744, 737, 738, 742, 741, 740, 745, 747,
- 743, 749, 748, 750, 751, 762, 745, 752, 753, 754,
- 0, 750, 755, 749, 744, 756, 751, 754, 755, 744,
- 748, 758, 747, 753, 756, 745, 747, 752, 749, 748,
- 750, 751, 757, 758, 752, 753, 754, 759, 760, 755,
- 765, 763, 756, 764, 759, 767, 768, 765, 758, 766,
- 768, 0, 771, 757, 763, 769, 760, 773, 774, 757,
- 767, 770, 764, 769, 759, 760, 772, 765, 763, 775,
-
- 764, 766, 767, 777, 770, 773, 766, 768, 771, 771,
- 772, 776, 769, 778, 773, 779, 780, 781, 770, 774,
- 783, 777, 784, 772, 782, 775, 775, 785, 786, 783,
- 777, 0, 0, 776, 780, 778, 787, 782, 776, 781,
- 778, 779, 779, 780, 781, 791, 0, 783, 0, 796,
- 786, 782, 789, 784, 793, 786, 794, 795, 785, 787,
- 0, 791, 805, 787, 788, 807, 795, 796, 794, 788,
- 797, 788, 791, 788, 797, 788, 796, 793, 789, 789,
- 798, 793, 788, 794, 795, 800, 799, 802, 803, 805,
- 801, 788, 807, 798, 799, 809, 788, 803, 788, 806,
-
- 788, 797, 788, 801, 800, 802, 804, 798, 804, 810,
- 811, 806, 800, 799, 802, 803, 812, 801, 811, 809,
- 813, 814, 809, 815, 816, 817, 806, 813, 818, 0,
- 816, 810, 819, 804, 820, 818, 810, 811, 821, 827,
- 822, 824, 828, 812, 825, 815, 830, 813, 814, 823,
- 815, 816, 817, 820, 819, 818, 829, 831, 823, 819,
- 821, 820, 824, 833, 825, 821, 822, 822, 824, 834,
- 827, 825, 832, 828, 835, 831, 823, 830, 829, 833,
- 832, 835, 836, 829, 831, 838, 840, 837, 841, 836,
- 833, 837, 839, 840, 843, 842, 834, 848, 839, 832,
-
- 844, 835, 846, 841, 842, 839, 845, 844, 845, 836,
- 847, 846, 850, 840, 837, 841, 838, 854, 856, 839,
- 843, 843, 842, 852, 848, 839, 849, 844, 855, 846,
- 849, 852, 847, 845, 850, 854, 853, 847, 857, 850,
- 853, 858, 0, 856, 854, 856, 859, 855, 860, 861,
- 852, 857, 863, 849, 865, 855, 864, 861, 862, 862,
- 869, 863, 0, 865, 860, 857, 867, 853, 869, 859,
- 866, 868, 858, 859, 872, 860, 861, 866, 864, 863,
- 868, 865, 871, 864, 870, 862, 872, 869, 873, 867,
- 875, 877, 879, 867, 874, 871, 876, 866, 868, 870,
-
- 873, 872, 874, 881, 883, 878, 884, 885, 880, 871,
- 879, 870, 875, 877, 878, 873, 876, 875, 877, 879,
- 880, 874, 882, 876, 881, 886, 883, 887, 882, 889,
- 881, 883, 878, 891, 890, 880, 892, 884, 885, 894,
- 895, 896, 891, 897, 895, 896, 893, 894, 903, 882,
- 897, 886, 886, 887, 887, 0, 889, 890, 892, 893,
- 891, 890, 902, 892, 900, 900, 894, 898, 899, 901,
- 897, 895, 896, 893, 904, 898, 899, 901, 905, 903,
- 906, 909, 904, 902, 907, 908, 905, 909, 906, 902,
- 910, 900, 907, 911, 898, 899, 901, 912, 908, 913,
-
- 914, 904, 910, 915, 917, 905, 916, 906, 909, 919,
- 918, 907, 908, 923, 913, 922, 925, 910, 917, 911,
- 911, 912, 922, 919, 912, 915, 913, 914, 918, 916,
- 915, 917, 928, 916, 920, 924, 919, 918, 920, 925,
- 923, 926, 922, 925, 930, 927, 934, 932, 0, 933,
- 926, 920, 927, 930, 936, 938, 939, 924, 943, 920,
- 941, 920, 924, 928, 942, 920, 945, 939, 926, 932,
- 943, 930, 927, 946, 932, 933, 933, 934, 920, 945,
- 947, 936, 938, 939, 941, 943, 944, 941, 944, 948,
- 942, 942, 947, 945, 949, 946, 950, 951, 952, 0,
-
- 946, 949, 951, 953, 954, 955, 957, 947, 958, 0,
- 960, 964, 954, 944, 952, 959, 948, 958, 961, 0,
- 0, 949, 950, 950, 951, 952, 953, 955, 959, 964,
- 953, 954, 955, 957, 962, 958, 960, 960, 964, 963,
- 961, 962, 959, 965, 966, 961, 963, 969, 968, 970,
- 965, 967, 0, 0, 969, 972, 973, 974, 0, 977,
- 975, 962, 977, 978, 982, 974, 963, 0, 972, 966,
- 965, 966, 983, 967, 969, 985, 979, 987, 967, 968,
- 970, 975, 972, 973, 974, 980, 977, 975, 984, 978,
- 978, 979, 980, 981, 983, 982, 981, 985, 986, 983,
-
- 986, 987, 985, 979, 987, 988, 984, 989, 981, 0,
- 990, 992, 980, 991, 993, 984, 995, 981, 992, 990,
- 981, 991, 994, 981, 996, 986, 997, 998, 996, 1003,
- 999, 1006, 1000, 989, 989, 981, 988, 990, 992, 1001,
- 991, 1000, 1003, 1002, 994, 993, 1001, 995, 997, 994,
- 1002, 996, 999, 997, 998, 1005, 1003, 999, 1004, 1000,
- 1007, 1008, 1006, 1009, 1012, 1010, 1001, 1007, 1008, 1005,
- 1002, 1010, 1013, 1004, 1014, 1015, 1009, 1021, 1016, 1021,
- 1022, 1016, 1005, 1030, 1024, 1004, 1014, 1007, 1008, 1017,
- 1009, 1012, 1010, 1023, 1013, 1015, 1016, 1026, 1019, 1013,
-
- 1017, 1014, 1015, 1019, 1021, 1016, 1024, 1022, 1016, 1029,
- 1019, 1024, 1025, 1027, 1030, 1026, 1017, 1023, 1031, 1028,
- 1023, 1027, 1028, 1025, 1026, 1019, 1032, 1029, 1033, 1034,
- 1019, 1035, 1036, 1032, 1041, 1037, 1029, 1028, 1034, 1025,
- 1027, 1049, 1033, 1036, 1035, 1031, 1028, 0, 1040, 1028,
- 1037, 1043, 1039, 1032, 1039, 1033, 1034, 1040, 1035, 1036,
- 1041, 1041, 1037, 1042, 1044, 1052, 1045, 1046, 1047, 1043,
- 1046, 0, 1049, 1050, 1042, 1040, 1051, 1047, 1043, 1039,
- 1045, 1053, 1050, 1055, 0, 1046, 1044, 1065, 0, 0,
- 1042, 1044, 1045, 1045, 1046, 1047, 1052, 1046, 1051, 1054,
-
- 1050, 1056, 1053, 1051, 1060, 1057, 1054, 1045, 1053, 1062,
- 1063, 1057, 1060, 1064, 1055, 1056, 1061, 1069, 1065, 1063,
- 1071, 1064, 1066, 1062, 1069, 1067, 1054, 1070, 1056, 1057,
- 1074, 1060, 1057, 1066, 1067, 1061, 1062, 1063, 1057, 1072,
- 1064, 1073, 1071, 1061, 1069, 1078, 1077, 1071, 1074, 1066,
- 1070, 1075, 1067, 1084, 1070, 1075, 1079, 1074, 1077, 1080,
- 1081, 1072, 1082, 1073, 1087, 1085, 1072, 1086, 1073, 1079,
- 1088, 1089, 1078, 1077, 1083, 1081, 1086, 1082, 1075, 1080,
- 1085, 1090, 1083, 1079, 1084, 1087, 1080, 1081, 1092, 1082,
- 1094, 1087, 1085, 1093, 1086, 1089, 1096, 1088, 1089, 1095,
-
- 1099, 1083, 1100, 1097, 1098, 1104, 1102, 1105, 1090, 0,
- 1092, 1093, 1099, 1102, 1095, 1092, 1103, 1094, 1096, 1098,
- 1093, 1097, 1101, 1096, 1100, 1109, 1095, 1099, 1103, 1100,
- 1097, 1098, 1104, 1102, 1108, 1101, 1106, 1107, 1105, 1110,
- 1101, 1108, 1106, 1103, 1111, 1107, 1110, 1112, 1113, 1101,
- 1114, 1115, 1109, 1112, 1116, 1118, 1119, 1120, 1121, 1124,
- 1121, 1108, 1101, 1106, 1107, 1119, 1110, 1122, 0, 1123,
- 1128, 1111, 1126, 1114, 1112, 1113, 1131, 1114, 1116, 1126,
- 1127, 1116, 1115, 1119, 1133, 1121, 1118, 1127, 1120, 1131,
- 1124, 1125, 1125, 1125, 1122, 1123, 1123, 1129, 1125, 1126,
-
- 1135, 1128, 1132, 1131, 1129, 1136, 1125, 1127, 1132, 1134,
- 1134, 1133, 1136, 1138, 1139, 1141, 1137, 1142, 1125, 1125,
- 1125, 1137, 1143, 1152, 1129, 1125, 1135, 1135, 1144, 1132,
- 1146, 1146, 1136, 1141, 1143, 1145, 1134, 1147, 1151, 1138,
- 1138, 1139, 1141, 1137, 1142, 1148, 1148, 1149, 1144, 1143,
- 1154, 1155, 1153, 1145, 1152, 1144, 1156, 1146, 1149, 1153,
- 1151, 1157, 1145, 1147, 1147, 1151, 1159, 1158, 1160, 0,
- 1154, 1162, 1148, 1161, 1149, 1160, 1164, 1154, 1163, 1153,
- 1166, 1161, 1155, 1179, 1159, 1164, 1162, 1156, 1157, 1158,
- 1165, 1165, 1167, 1159, 1158, 1160, 1169, 1170, 1162, 1173,
-
- 1161, 1168, 1163, 1164, 1167, 1163, 1166, 1166, 1169, 1168,
- 1171, 1172, 1175, 1180, 1179, 1182, 1174, 1165, 1178, 1167,
- 1170, 1174, 1177, 1169, 1170, 1178, 1173, 1176, 1168, 1172,
- 1181, 1171, 1174, 1176, 1181, 1177, 1184, 1171, 1172, 1175,
- 1180, 1183, 1183, 1174, 1185, 1178, 1182, 1186, 1174, 1177,
- 1187, 1184, 1188, 1189, 1176, 1189, 1190, 1192, 1195, 1191,
- 0, 1181, 1186, 1184, 1191, 1196, 1193, 1188, 1183, 1197,
- 1198, 1199, 1201, 1187, 1186, 1185, 1207, 1187, 1199, 1188,
- 1189, 1193, 1195, 1200, 1202, 1195, 1191, 1190, 1192, 1203,
- 1205, 1196, 1196, 1193, 1201, 1211, 1197, 1198, 1199, 1201,
-
- 1207, 1213, 1212, 1207, 1200, 1202, 1208, 1203, 1210, 1212,
- 1200, 1202, 1205, 1216, 1219, 1214, 1203, 1205, 1215, 1213,
- 1218, 1208, 1211, 1210, 1214, 1217, 1215, 1219, 1213, 1212,
- 1222, 0, 1221, 1208, 1226, 1210, 1216, 1223, 1224, 1222,
- 1216, 1219, 1214, 1221, 1232, 1215, 0, 1217, 0, 1228,
- 1230, 1218, 1217, 1231, 1235, 1223, 1224, 1222, 1221, 1221,
- 1228, 1226, 1230, 1233, 1223, 1224, 1231, 1234, 1236, 1238,
- 1221, 1239, 1243, 1233, 1240, 1232, 1228, 1230, 1239, 1235,
- 1231, 1235, 1242, 0, 1241, 1246, 1246, 1243, 1242, 1238,
- 1233, 1244, 1245, 1234, 1234, 1236, 1238, 1248, 1239, 1243,
-
- 1240, 1240, 1241, 1247, 1248, 1251, 1244, 1245, 1252, 1242,
- 1249, 1241, 1246, 1253, 1254, 1247, 0, 1249, 1244, 1245,
- 1257, 1259, 1253, 1255, 1248, 1260, 1268, 1251, 1261, 1261,
- 1247, 1262, 1251, 1252, 1259, 1252, 1254, 1249, 1257, 1263,
- 1253, 1254, 1266, 1255, 1271, 1264, 1265, 1257, 1259, 1267,
- 1255, 1266, 1260, 1262, 1279, 1261, 1267, 1268, 1262, 1269,
- 1270, 1275, 1273, 1271, 1263, 1274, 1263, 1264, 1265, 1266,
- 1273, 1271, 1264, 1265, 1270, 1276, 1267, 1278, 1274, 1277,
- 0, 1269, 1281, 1280, 1278, 1279, 1269, 1270, 1275, 1273,
- 1284, 1277, 1274, 1282, 1283, 1285, 1286, 1283, 1287, 0,
-
- 0, 1276, 1276, 0, 1278, 1280, 1277, 1281, 1282, 1281,
- 1280, 1289, 1283, 1287, 1286, 1284, 1292, 1284, 1290, 1293,
- 1282, 1283, 1285, 1286, 1283, 1287, 1293, 1294, 1295, 1297,
- 1292, 1299, 1300, 1289, 1303, 1301, 1294, 1301, 1289, 1295,
- 1290, 1305, 1302, 1292, 1300, 1290, 1293, 1304, 1307, 1306,
- 1297, 1308, 1299, 1309, 1294, 1295, 1297, 1306, 1299, 1300,
- 1302, 1303, 1301, 1311, 1315, 1304, 1310, 1309, 1305, 1302,
- 1310, 1307, 1312, 1308, 1304, 1307, 1306, 1316, 1308, 1312,
- 1309, 1317, 1311, 1318, 1320, 1319, 1321, 0, 1323, 0,
- 1311, 1315, 1322, 1320, 1325, 1316, 1325, 1310, 1326, 1312,
-
- 1319, 1327, 1329, 1332, 1316, 1327, 1328, 1330, 1317, 1318,
- 1318, 1320, 1319, 1333, 1322, 1323, 1330, 1321, 1328, 1322,
- 1326, 1325, 1335, 1334, 1329, 1326, 1331, 1344, 1327, 1329,
- 1332, 1336, 1336, 1328, 1330, 1334, 1333, 1331, 1337, 1339,
- 1333, 1340, 1344, 1347, 1335, 1340, 1337, 1339, 1341, 1335,
- 1334, 1341, 1342, 1331, 1344, 1343, 1345, 1348, 1336, 1349,
- 1342, 1343, 1345, 1350, 1351, 1337, 1339, 1352, 1340, 1353,
- 1347, 1354, 1357, 1349, 1356, 1341, 1350, 1355, 1351, 1342,
- 1358, 1348, 1343, 1345, 1348, 1359, 1349, 1360, 1356, 1355,
- 1350, 1351, 1361, 1352, 1352, 1360, 1353, 1362, 1354, 1357,
-
- 1363, 1356, 1364, 1365, 1355, 1368, 1362, 1358, 1369, 1367,
- 1370, 1365, 1359, 1371, 1360, 1373, 1369, 1372, 1375, 1361,
- 1376, 1377, 1371, 1379, 1362, 0, 1374, 1363, 1376, 1364,
- 1365, 1367, 1368, 1377, 1383, 1369, 1367, 1370, 1372, 1373,
- 1371, 1374, 1373, 1378, 1372, 1375, 1383, 1376, 1377, 1381,
- 1379, 1378, 1374, 1374, 1382, 1384, 1381, 1385, 1382, 1386,
- 1387, 1383, 1388, 1388, 1389, 1390, 0, 1386, 1374, 1396,
- 1378, 1393, 1394, 1392, 1394, 1396, 1381, 1403, 1384, 1397,
- 1395, 1382, 1384, 1390, 1385, 1399, 1386, 1387, 1392, 1388,
- 1389, 1389, 1390, 1393, 1395, 1398, 1396, 1399, 1393, 1394,
-
- 1392, 1397, 1400, 1401, 1404, 1402, 1397, 1395, 1403, 1406,
- 1408, 1410, 1399, 1409, 0, 0, 1406, 1398, 1402, 1417,
- 1400, 1401, 1398, 1414, 0, 1411, 1415, 1404, 1408, 1400,
- 1401, 1404, 1402, 1411, 1417, 1414, 1406, 1408, 1419, 1409,
- 1409, 1412, 1410, 1412, 1415, 1420, 1417, 1421, 1412, 1422,
- 1414, 1411, 1411, 1415, 1421, 1423, 1425, 1433, 1426, 1435,
- 1411, 1427, 1419, 1428, 1422, 1419, 1429, 1420, 1412, 1430,
- 1412, 1426, 1420, 1431, 1421, 1436, 1422, 1430, 1428, 1429,
- 1433, 1434, 1423, 1425, 1433, 1426, 1435, 1427, 1427, 1443,
- 1428, 1437, 1440, 1429, 1438, 1442, 1430, 1436, 1437, 1431,
-
- 1431, 1438, 1436, 1439, 1441, 1434, 1444, 1447, 1434, 1448,
- 1450, 1441, 1446, 1468, 1458, 1440, 1439, 1442, 1437, 1440,
- 1443, 1438, 1442, 1446, 1449, 1453, 1463, 1444, 1454, 1447,
- 1439, 1441, 1464, 1444, 1447, 1450, 1460, 1450, 1453, 1446,
- 1448, 1458, 1466, 1449, 1468, 1460, 1469, 1470, 1463, 1472,
- 1476, 1449, 1453, 1463, 1454, 1454, 1471, 1474, 1470, 1464,
- 1475, 1471, 1478, 1460, 1479, 1474, 1481, 1483, 0, 1466,
- 1480, 1472, 1469, 1469, 1470, 1475, 1472, 1476, 1481, 1480,
- 1478, 1485, 1486, 1471, 1474, 1487, 1489, 1475, 1488, 1478,
- 1490, 1491, 1493, 1481, 1483, 1479, 1492, 1480, 1487, 1494,
-
- 1498, 1493, 0, 1485, 0, 1495, 1496, 1486, 1485, 1486,
- 1488, 1492, 1487, 1489, 1497, 1488, 1500, 1490, 1491, 1493,
- 1495, 1496, 1498, 1492, 1499, 1494, 1494, 1498, 1501, 1497,
- 1503, 1499, 1495, 1496, 1502, 1502, 1504, 1503, 1507, 1505,
- 1506, 1497, 1505, 1500, 1508, 1509, 1501, 1510, 1511, 1513,
- 1504, 1499, 1510, 1506, 1509, 1501, 1512, 1503, 1514, 0,
- 1515, 1502, 1508, 1504, 1507, 1507, 1505, 1506, 1519, 1527,
- 1511, 1508, 1509, 1518, 1510, 1511, 1513, 1519, 1512, 1520,
- 1518, 1521, 1524, 1512, 1520, 1514, 1515, 1515, 1521, 1522,
- 1523, 1524, 1525, 1528, 1529, 1519, 1527, 1523, 1531, 1536,
-
- 1518, 1534, 1530, 1529, 1532, 1533, 1520, 1522, 1521, 1524,
- 1531, 1528, 1534, 1532, 1533, 1535, 1522, 1523, 1525, 1525,
- 1528, 1529, 1530, 1535, 1537, 1531, 1536, 1538, 1534, 1530,
- 1540, 1532, 1533, 1539, 1541, 1544, 1538, 1542, 1540, 1545,
- 0, 1548, 1535, 1549, 1542, 1539, 1550, 1545, 1548, 1552,
- 1553, 1551, 1554, 1544, 1538, 1537, 1541, 1540, 1552, 1556,
- 1539, 1541, 1544, 1551, 1542, 1557, 1545, 1549, 1548, 1558,
- 1549, 1556, 1561, 1550, 1562, 1554, 1552, 1553, 1551, 1554,
- 1559, 1563, 1562, 1564, 0, 1568, 1556, 1571, 1557, 1570,
- 1569, 1572, 1557, 1573, 1559, 1569, 1558, 1577, 1574, 1561,
-
- 1575, 1562, 1581, 1570, 1578, 1571, 1574, 1559, 1563, 1577,
- 1564, 1568, 1568, 1572, 1571, 1573, 1570, 1569, 1572, 1575,
- 1573, 1579, 1580, 1582, 1577, 1574, 1578, 1575, 0, 1581,
- 1585, 1578, 1583, 1584, 1580, 1586, 1587, 1588, 1592, 1591,
- 0, 0, 0, 1579, 1593, 0, 1594, 1595, 1579, 1580,
- 1582, 1642, 1583, 1591, 1598, 1584, 1597, 1586, 1596, 1583,
- 1584, 1585, 1586, 1587, 1588, 1595, 1591, 1593, 1594, 1592,
- 1596, 1593, 1599, 1594, 1595, 1597, 1598, 1601, 1602, 1603,
- 1604, 1598, 1642, 1597, 1605, 1596, 1607, 1599, 1603, 1610,
- 1606, 1608, 1613, 0, 1604, 0, 1611, 1610, 1616, 1599,
-
- 1602, 1601, 1605, 1611, 1601, 1602, 1603, 1604, 1606, 1608,
- 1617, 1605, 1607, 1607, 1612, 1615, 1610, 1606, 1608, 1613,
- 1614, 1616, 1612, 1611, 1618, 1616, 1619, 1621, 1614, 1624,
- 1622, 0, 1628, 1615, 1626, 1630, 1625, 1617, 1634, 1635,
- 0, 1612, 1615, 1618, 1622, 1621, 1626, 1614, 1619, 1625,
- 1636, 1618, 1624, 1619, 1621, 1637, 1624, 1622, 1628, 1628,
- 1633, 1626, 1630, 1625, 1634, 1634, 1635, 1633, 1638, 1639,
- 1640, 1641, 1643, 1649, 1636, 1650, 1647, 1636, 1644, 1640,
- 1647, 1648, 1637, 0, 1641, 1648, 1659, 1633, 1653, 1655,
- 0, 1658, 1654, 1654, 1649, 1638, 1639, 1640, 1641, 1643,
-
- 1649, 1644, 1654, 1656, 1658, 1644, 1650, 1647, 1648, 1660,
- 1653, 1655, 1656, 1659, 1657, 1653, 1655, 1660, 1658, 1654,
- 1654, 1657, 1663, 1661, 1662, 0, 1664, 0, 1665, 1666,
- 1656, 1668, 1662, 1669, 1669, 1667, 1660, 1671, 1668, 1672,
- 1666, 1657, 1661, 1670, 1671, 1674, 1672, 1675, 1663, 1663,
- 1661, 1662, 1664, 1664, 1665, 1665, 1666, 1667, 1668, 1676,
- 1669, 1670, 1667, 1679, 1671, 1680, 1672, 1678, 1682, 1681,
- 1670, 1675, 1674, 1683, 1675, 1684, 1678, 1683, 1688, 1685,
- 1682, 1676, 1687, 1690, 1704, 1690, 1676, 1681, 1680, 1684,
- 1679, 1694, 1680, 1688, 1678, 1682, 1681, 1685, 1695, 1696,
-
- 1687, 1698, 1684, 1701, 1683, 1688, 1685, 0, 1699, 1687,
- 1690, 1699, 1703, 1694, 1702, 1704, 1705, 1696, 1694, 1703,
- 1706, 1708, 1705, 1698, 1695, 1695, 1696, 1707, 1698, 1709,
- 1701, 1709, 1702, 1710, 1699, 1699, 1707, 1712, 1699, 1703,
- 1714, 1702, 1706, 1705, 1718, 1712, 1713, 1706, 1715, 1716,
- 1717, 1719, 1708, 0, 1707, 1718, 1709, 1721, 1713, 1719,
- 1710, 1720, 1715, 1723, 1712, 1722, 1722, 1714, 1717, 1726,
- 1727, 1718, 1716, 1713, 1724, 1715, 1716, 1717, 1719, 1721,
- 1720, 1728, 1724, 1730, 1721, 1732, 1731, 1733, 1720, 1732,
- 1723, 1735, 1722, 1731, 1736, 1733, 1726, 1727, 1738, 1737,
-
- 1739, 1724, 1742, 1728, 1737, 1741, 1743, 1736, 1728, 1742,
- 1730, 1740, 1732, 1731, 1733, 1744, 1747, 1735, 1735, 1740,
- 1741, 1736, 1745, 1748, 1750, 1738, 1737, 1739, 1749, 1742,
- 1748, 1747, 1741, 1743, 1752, 1754, 1751, 1756, 1740, 1744,
- 1759, 1761, 1744, 1747, 1751, 1757, 1750, 1760, 1745, 1745,
- 1748, 1750, 1749, 1757, 1761, 1749, 1753, 1753, 1762, 1763,
- 1764, 1765, 1754, 1751, 1756, 1752, 1753, 1759, 1761, 1760,
- 1766, 1768, 1757, 1771, 1760, 1773, 1774, 1776, 1777, 1782,
- 1762, 0, 0, 1753, 1753, 1762, 1763, 1764, 1765, 1774,
- 1778, 1781, 1766, 1783, 1775, 1776, 1788, 1766, 1768, 1771,
-
- 1771, 1775, 1773, 1774, 1776, 1777, 1782, 1785, 1787, 1786,
- 1781, 1788, 1778, 1789, 1785, 1783, 1786, 1778, 1781, 1790,
- 1783, 1775, 1791, 1788, 1799, 1793, 1794, 1800, 1790, 1805,
- 1787, 1793, 1789, 1791, 1785, 1787, 1786, 1792, 1792, 1801,
- 1789, 1809, 0, 1797, 1807, 1811, 1790, 1792, 1794, 1791,
- 1797, 1799, 1793, 1794, 1800, 1813, 1805, 1817, 1811, 1818,
- 1810, 1814, 1801, 1819, 1792, 1792, 1801, 1807, 1809, 1810,
- 1797, 1807, 1811, 1814, 1816, 1817, 1820, 1821, 1822, 1823,
- 1822, 1828, 1813, 1816, 1817, 1818, 1818, 1810, 1814, 1824,
- 1819, 1823, 1825, 1826, 1827, 1824, 1831, 1833, 1836, 1821,
-
- 1835, 1816, 1827, 1820, 1821, 1822, 1823, 1838, 1828, 1839,
- 1841, 1845, 0, 0, 1825, 1826, 1824, 1840, 1835, 1825,
- 1826, 1827, 1838, 1831, 1833, 1836, 1844, 1835, 1846, 1840,
- 1847, 1848, 1850, 1856, 1838, 1839, 1839, 1841, 1849, 1848,
- 1854, 1846, 1845, 1850, 1840, 0, 0, 1849, 1868, 1858,
- 1844, 0, 1847, 1844, 1857, 1846, 1856, 1847, 1848, 1850,
- 1856, 1857, 1858, 1860, 1854, 1849, 1861, 1854, 1865, 1862,
- 1865, 1867, 1864, 1863, 1866, 1868, 1858, 1862, 1867, 1860,
- 1861, 1857, 1863, 1864, 1869, 1870, 1866, 1871, 1872, 1876,
- 1860, 1873, 1874, 1861, 1874, 1865, 1862, 1875, 1867, 1864,
-
- 1863, 1866, 1869, 1877, 1878, 1880, 1884, 1885, 0, 1875,
- 1872, 1869, 1870, 1873, 1871, 1872, 1877, 1880, 1873, 1874,
- 1876, 1883, 1886, 1890, 1875, 1887, 1888, 0, 1892, 1883,
- 1877, 1878, 1880, 1891, 1888, 1886, 1890, 1884, 1885, 1887,
- 1893, 1891, 1892, 1894, 1895, 1903, 1896, 1899, 1883, 1886,
- 1890, 1894, 1887, 1888, 1893, 1892, 1897, 0, 1898, 1900,
- 1891, 1904, 1905, 1908, 1897, 1901, 1895, 1893, 1896, 1899,
- 1894, 1895, 1902, 1896, 1899, 1912, 1903, 1910, 0, 1924,
- 1902, 1900, 1905, 1897, 1898, 1898, 1900, 1901, 1904, 1905,
- 1906, 1910, 1901, 1907, 1908, 1909, 1915, 1912, 1906, 1902,
-
- 1913, 1907, 1912, 1909, 1910, 1914, 1924, 1916, 1913, 1917,
- 1915, 1918, 0, 1914, 1919, 0, 1920, 1906, 0, 1918,
- 1907, 1923, 1909, 1915, 1921, 1922, 0, 1913, 0, 1923,
- 1925, 1917, 1914, 1916, 1916, 1926, 1917, 1928, 1918, 1927,
- 1919, 1919, 1920, 1920, 0, 1922, 1921, 1927, 1923, 1931,
- 1925, 1921, 1922, 1929, 1939, 1926, 1932, 1925, 1935, 1928,
- 1933, 1929, 1926, 1938, 1928, 1934, 1927, 1936, 1933, 1937,
- 1941, 1931, 0, 1934, 1942, 1936, 1931, 1937, 1932, 1940,
- 1929, 1939, 1943, 1932, 1935, 1935, 1945, 1933, 1948, 1938,
- 1938, 1951, 1934, 1952, 1936, 1949, 1937, 1941, 0, 1940,
-
- 0, 1942, 1943, 1949, 1950, 0, 1940, 0, 1945, 1943,
- 1948, 0, 1950, 1945, 0, 1948, 0, 0, 1951, 0,
- 1952, 0, 1949, 0, 0, 0, 0, 0, 0, 0,
- 0, 1950, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1957,
- 1957, 1957, 1957, 1957, 1957, 1957, 1958, 1958, 1958, 1958,
- 1958, 1958, 1958, 1959, 1959, 1959, 1959, 1959, 1959, 1959,
- 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1962, 1962, 0,
- 1962, 1962, 1962, 1962, 1963, 1963, 0, 0, 0, 1963,
- 1963, 1964, 1964, 0, 0, 1964, 0, 1964, 1965, 0,
- 0, 0, 0, 0, 1965, 1966, 1966, 0, 0, 0,
-
- 1966, 1966, 1967, 0, 0, 0, 0, 0, 1967, 1968,
- 1968, 0, 1968, 1968, 1968, 1968, 1969, 1969, 0, 1969,
- 1969, 1969, 1969, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
- 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955
+ 0, 0, 177, 156, 170, 178, 170, 175, 179, 156,
+ 156, 178, 0, 170, 170, 172, 180, 181, 182, 170,
+ 177, 174, 174, 184, 183, 185, 187, 176, 175, 177,
+ 0, 170, 178, 170, 175, 186, 188, 184, 180, 179,
+ 189, 188, 186, 180, 183, 192, 185, 187, 181, 182,
+
+ 184, 183, 185, 187, 190, 191, 194, 192, 193, 189,
+ 197, 195, 186, 188, 201, 193, 195, 189, 190, 198,
+ 196, 196, 192, 200, 199, 203, 198, 191, 194, 196,
+ 204, 190, 191, 194, 202, 193, 205, 206, 195, 209,
+ 203, 197, 202, 200, 212, 201, 198, 196, 196, 199,
+ 200, 199, 203, 207, 209, 208, 204, 204, 205, 208,
+ 211, 202, 213, 210, 214, 215, 209, 205, 206, 218,
+ 207, 210, 216, 217, 219, 212, 219, 215, 207, 211,
+ 207, 216, 208, 220, 213, 205, 217, 211, 218, 213,
+ 210, 221, 215, 222, 226, 214, 218, 207, 224, 216,
+
+ 217, 219, 225, 227, 229, 226, 231, 220, 228, 0,
+ 220, 233, 234, 236, 0, 227, 221, 0, 221, 222,
+ 222, 226, 230, 232, 224, 224, 235, 229, 225, 225,
+ 227, 229, 228, 240, 237, 228, 232, 231, 234, 234,
+ 230, 237, 233, 238, 236, 239, 244, 240, 235, 230,
+ 232, 239, 238, 235, 241, 242, 243, 245, 0, 246,
+ 240, 237, 247, 248, 249, 243, 245, 250, 0, 244,
+ 238, 247, 239, 244, 0, 253, 0, 251, 248, 242,
+ 241, 241, 242, 243, 245, 246, 246, 259, 252, 247,
+ 248, 250, 251, 253, 250, 249, 252, 252, 255, 252,
+
+ 264, 254, 253, 256, 251, 261, 252, 254, 257, 257,
+ 260, 259, 255, 260, 259, 252, 262, 261, 256, 265,
+ 260, 263, 268, 252, 252, 255, 252, 264, 254, 266,
+ 256, 271, 261, 257, 262, 257, 257, 260, 267, 263,
+ 260, 265, 269, 262, 268, 270, 265, 272, 263, 268,
+ 267, 273, 270, 275, 272, 266, 266, 269, 274, 278,
+ 274, 277, 271, 0, 0, 267, 275, 279, 281, 269,
+ 0, 294, 270, 273, 272, 281, 300, 0, 273, 277,
+ 275, 276, 274, 280, 276, 274, 276, 274, 277, 279,
+ 278, 280, 276, 282, 279, 281, 283, 280, 284, 285,
+
+ 289, 288, 294, 287, 289, 282, 0, 300, 276, 283,
+ 280, 276, 285, 276, 284, 287, 0, 292, 280, 288,
+ 282, 290, 284, 283, 291, 284, 285, 290, 288, 292,
+ 287, 289, 291, 293, 295, 297, 298, 299, 295, 296,
+ 293, 284, 286, 286, 292, 304, 296, 297, 290, 299,
+ 301, 291, 286, 302, 286, 286, 286, 301, 298, 286,
+ 293, 295, 297, 298, 299, 303, 296, 286, 302, 286,
+ 286, 306, 322, 305, 309, 0, 304, 301, 303, 286,
+ 302, 286, 286, 286, 305, 309, 286, 308, 310, 311,
+ 313, 316, 303, 306, 308, 312, 314, 315, 306, 310,
+
+ 305, 309, 311, 322, 316, 319, 315, 318, 317, 0,
+ 320, 321, 0, 313, 308, 310, 311, 313, 316, 314,
+ 312, 317, 312, 314, 315, 318, 317, 319, 324, 321,
+ 323, 325, 319, 320, 318, 317, 323, 320, 321, 326,
+ 327, 0, 328, 329, 332, 330, 334, 327, 317, 324,
+ 331, 333, 334, 336, 325, 324, 0, 323, 325, 330,
+ 335, 326, 338, 0, 337, 329, 326, 327, 328, 328,
+ 329, 336, 330, 334, 333, 332, 331, 331, 333, 337,
+ 336, 339, 335, 340, 341, 338, 342, 335, 344, 338,
+ 341, 337, 345, 348, 349, 352, 354, 346, 345, 347,
+
+ 348, 0, 352, 358, 0, 340, 0, 339, 339, 349,
+ 340, 341, 342, 342, 344, 344, 346, 347, 353, 345,
+ 348, 349, 352, 351, 346, 351, 347, 354, 355, 356,
+ 357, 353, 351, 360, 358, 361, 359, 365, 360, 364,
+ 0, 361, 362, 0, 0, 353, 355, 363, 365, 357,
+ 351, 356, 351, 0, 394, 355, 356, 357, 359, 363,
+ 360, 364, 361, 366, 365, 362, 364, 359, 368, 362,
+ 369, 366, 370, 389, 363, 368, 372, 371, 369, 0,
+ 373, 394, 0, 370, 374, 359, 371, 373, 376, 0,
+ 366, 367, 375, 377, 375, 368, 367, 369, 367, 370,
+
+ 372, 0, 0, 372, 389, 377, 367, 373, 371, 367,
+ 374, 374, 378, 371, 376, 376, 367, 367, 367, 375,
+ 377, 380, 379, 367, 382, 367, 381, 378, 385, 380,
+ 384, 381, 383, 367, 379, 386, 367, 388, 384, 378,
+ 385, 0, 393, 367, 392, 391, 382, 0, 380, 379,
+ 383, 382, 390, 381, 391, 385, 386, 384, 392, 383,
+ 388, 393, 386, 395, 388, 396, 397, 390, 398, 393,
+ 399, 392, 391, 404, 402, 401, 400, 402, 395, 390,
+ 403, 397, 399, 405, 403, 402, 406, 404, 407, 408,
+ 395, 409, 398, 397, 410, 398, 396, 399, 400, 401,
+
+ 404, 402, 401, 400, 402, 412, 411, 413, 414, 415,
+ 405, 403, 411, 406, 416, 413, 408, 417, 409, 407,
+ 419, 418, 0, 420, 0, 410, 424, 412, 418, 421,
+ 429, 414, 412, 411, 413, 414, 430, 416, 422, 417,
+ 415, 416, 421, 422, 417, 420, 423, 422, 418, 425,
+ 420, 419, 424, 424, 430, 423, 421, 426, 425, 427,
+ 432, 429, 422, 430, 428, 422, 431, 433, 0, 435,
+ 422, 436, 440, 423, 422, 434, 425, 428, 437, 426,
+ 435, 427, 432, 432, 426, 436, 427, 432, 438, 433,
+ 431, 428, 439, 431, 433, 441, 435, 434, 436, 438,
+
+ 437, 442, 434, 440, 444, 437, 443, 439, 445, 432,
+ 446, 447, 448, 449, 450, 438, 441, 445, 451, 439,
+ 452, 455, 441, 446, 452, 442, 444, 0, 442, 453,
+ 443, 444, 454, 443, 448, 445, 456, 446, 450, 448,
+ 451, 450, 447, 453, 449, 451, 454, 457, 458, 459,
+ 461, 452, 455, 459, 456, 0, 453, 460, 461, 454,
+ 462, 465, 457, 456, 463, 466, 0, 464, 468, 465,
+ 458, 457, 466, 463, 457, 458, 464, 461, 467, 473,
+ 459, 469, 460, 0, 460, 462, 468, 462, 465, 457,
+ 470, 463, 466, 469, 464, 468, 471, 472, 474, 470,
+
+ 476, 467, 478, 475, 471, 467, 474, 481, 469, 472,
+ 473, 475, 477, 0, 479, 481, 484, 470, 478, 482,
+ 480, 0, 483, 471, 472, 474, 476, 476, 485, 478,
+ 475, 480, 486, 482, 481, 477, 479, 489, 484, 477,
+ 487, 479, 483, 484, 488, 490, 482, 480, 485, 483,
+ 492, 493, 491, 488, 486, 485, 494, 489, 495, 486,
+ 496, 500, 487, 490, 489, 491, 496, 487, 492, 501,
+ 498, 488, 490, 493, 497, 502, 501, 492, 493, 491,
+ 494, 495, 497, 494, 503, 495, 504, 496, 498, 505,
+ 517, 506, 500, 0, 507, 504, 501, 498, 502, 503,
+
+ 497, 497, 502, 507, 508, 0, 508, 511, 517, 497,
+ 506, 503, 0, 504, 514, 519, 518, 517, 506, 511,
+ 505, 507, 521, 523, 514, 520, 0, 0, 525, 527,
+ 525, 508, 509, 526, 511, 524, 509, 518, 519, 509,
+ 0, 514, 519, 518, 524, 523, 509, 528, 532, 509,
+ 523, 520, 520, 521, 509, 525, 527, 526, 529, 509,
+ 526, 0, 524, 509, 531, 533, 509, 528, 0, 530,
+ 532, 534, 535, 509, 528, 532, 509, 522, 522, 537,
+ 522, 530, 0, 522, 529, 529, 536, 537, 522, 533,
+ 531, 531, 533, 534, 522, 522, 530, 535, 534, 535,
+
+ 539, 536, 538, 522, 522, 522, 537, 522, 539, 538,
+ 522, 540, 542, 536, 541, 522, 544, 545, 543, 547,
+ 546, 522, 522, 548, 542, 544, 549, 539, 550, 538,
+ 540, 543, 545, 0, 552, 551, 558, 555, 540, 542,
+ 541, 541, 546, 544, 545, 543, 547, 546, 553, 554,
+ 556, 559, 550, 552, 548, 550, 551, 549, 554, 555,
+ 557, 552, 551, 558, 555, 560, 561, 553, 557, 559,
+ 556, 562, 564, 565, 569, 553, 554, 556, 559, 562,
+ 566, 567, 0, 568, 560, 570, 569, 557, 570, 574,
+ 564, 565, 560, 0, 567, 571, 573, 561, 562, 564,
+
+ 565, 569, 573, 571, 566, 580, 576, 566, 567, 568,
+ 568, 574, 570, 576, 575, 587, 574, 578, 579, 571,
+ 575, 577, 571, 573, 578, 581, 577, 582, 580, 583,
+ 571, 584, 580, 576, 581, 582, 579, 585, 586, 590,
+ 591, 575, 587, 0, 578, 579, 584, 583, 577, 589,
+ 585, 592, 581, 588, 582, 593, 583, 0, 584, 586,
+ 588, 595, 589, 593, 585, 586, 596, 598, 597, 594,
+ 590, 591, 596, 599, 592, 601, 589, 594, 592, 602,
+ 588, 600, 593, 595, 594, 603, 604, 0, 595, 601,
+ 600, 606, 603, 596, 597, 597, 594, 599, 598, 607,
+
+ 599, 608, 601, 610, 594, 605, 610, 609, 600, 611,
+ 602, 607, 603, 604, 605, 609, 612, 0, 606, 0,
+ 0, 614, 611, 612, 608, 0, 607, 0, 608, 616,
+ 610, 615, 605, 617, 609, 617, 611, 619, 618, 0,
+ 0, 616, 621, 612, 613, 620, 613, 614, 614, 619,
+ 613, 623, 613, 622, 615, 621, 616, 613, 615, 0,
+ 617, 618, 613, 624, 619, 618, 622, 620, 613, 621,
+ 626, 613, 620, 613, 623, 624, 625, 613, 623, 613,
+ 622, 627, 628, 629, 613, 630, 625, 631, 628, 613,
+ 624, 0, 626, 632, 627, 635, 629, 626, 625, 646,
+
+ 634, 0, 0, 625, 637, 0, 630, 638, 627, 628,
+ 629, 636, 630, 625, 639, 634, 640, 635, 631, 637,
+ 632, 633, 635, 643, 636, 647, 633, 634, 633, 641,
+ 646, 637, 642, 638, 638, 640, 639, 644, 636, 633,
+ 642, 639, 641, 640, 649, 650, 633, 633, 633, 647,
+ 643, 0, 647, 633, 648, 633, 641, 651, 649, 642,
+ 644, 652, 648, 655, 644, 653, 633, 654, 656, 652,
+ 657, 649, 664, 633, 655, 659, 650, 658, 657, 651,
+ 660, 648, 659, 653, 651, 654, 656, 662, 652, 661,
+ 655, 663, 653, 660, 654, 656, 661, 657, 666, 658,
+
+ 668, 667, 659, 664, 658, 662, 666, 660, 669, 663,
+ 667, 670, 668, 672, 662, 671, 661, 673, 663, 674,
+ 675, 677, 678, 0, 0, 666, 678, 668, 667, 0,
+ 669, 672, 677, 670, 675, 669, 679, 671, 670, 679,
+ 672, 680, 671, 673, 673, 681, 685, 675, 677, 682,
+ 674, 686, 683, 678, 684, 688, 682, 686, 681, 690,
+ 687, 684, 679, 679, 683, 680, 679, 689, 680, 692,
+ 685, 687, 681, 685, 691, 693, 682, 688, 686, 683,
+ 690, 684, 688, 695, 696, 691, 690, 687, 694, 689,
+ 692, 697, 695, 700, 689, 698, 692, 699, 701, 702,
+
+ 697, 691, 693, 698, 699, 703, 694, 700, 696, 706,
+ 695, 696, 707, 709, 705, 694, 708, 710, 697, 713,
+ 700, 702, 698, 705, 699, 711, 702, 703, 707, 701,
+ 714, 708, 703, 706, 712, 716, 706, 711, 714, 707,
+ 715, 705, 718, 708, 709, 719, 713, 720, 710, 728,
+ 716, 718, 711, 715, 726, 720, 712, 714, 721, 729,
+ 721, 712, 716, 719, 725, 723, 726, 715, 727, 718,
+ 732, 730, 719, 723, 720, 727, 733, 725, 731, 734,
+ 728, 726, 735, 732, 737, 721, 740, 738, 736, 733,
+ 729, 725, 723, 730, 735, 727, 736, 732, 730, 738,
+
+ 731, 734, 739, 733, 737, 731, 734, 741, 742, 735,
+ 739, 737, 743, 740, 738, 736, 744, 742, 745, 746,
+ 741, 750, 747, 744, 748, 752, 749, 0, 0, 739,
+ 750, 0, 753, 743, 741, 742, 751, 748, 754, 743,
+ 753, 746, 747, 744, 745, 745, 746, 752, 750, 747,
+ 749, 748, 752, 749, 751, 757, 755, 758, 759, 753,
+ 754, 760, 761, 751, 755, 754, 762, 765, 764, 760,
+ 759, 766, 763, 765, 761, 758, 764, 772, 757, 767,
+ 766, 0, 757, 755, 758, 759, 762, 763, 760, 761,
+ 768, 770, 773, 762, 765, 764, 769, 774, 766, 763,
+
+ 767, 780, 768, 769, 775, 773, 767, 776, 772, 770,
+ 777, 775, 779, 781, 780, 782, 774, 768, 770, 773,
+ 779, 783, 778, 769, 774, 777, 778, 781, 780, 776,
+ 785, 775, 784, 787, 776, 783, 786, 777, 788, 779,
+ 781, 782, 782, 791, 789, 790, 792, 796, 783, 795,
+ 784, 797, 793, 778, 840, 787, 788, 799, 795, 784,
+ 787, 785, 786, 786, 792, 788, 789, 790, 794, 791,
+ 791, 789, 790, 792, 793, 798, 795, 803, 796, 793,
+ 799, 794, 797, 0, 799, 840, 805, 0, 0, 801,
+ 811, 807, 809, 803, 0, 794, 809, 798, 811, 806,
+
+ 807, 808, 798, 800, 803, 812, 817, 810, 800, 805,
+ 800, 806, 800, 805, 800, 801, 801, 811, 807, 808,
+ 810, 800, 814, 809, 812, 813, 806, 815, 808, 816,
+ 800, 816, 812, 817, 810, 800, 815, 800, 813, 800,
+ 814, 800, 819, 818, 821, 822, 824, 826, 829, 814,
+ 823, 0, 813, 825, 815, 818, 816, 827, 823, 828,
+ 825, 0, 832, 831, 841, 828, 833, 822, 821, 819,
+ 818, 821, 822, 824, 826, 829, 830, 823, 834, 827,
+ 825, 832, 835, 830, 827, 831, 828, 836, 833, 832,
+ 831, 835, 837, 833, 842, 841, 838, 843, 845, 844,
+
+ 847, 851, 846, 830, 834, 834, 845, 850, 836, 835,
+ 838, 850, 837, 848, 836, 849, 842, 844, 846, 837,
+ 848, 842, 849, 838, 852, 845, 844, 847, 843, 846,
+ 852, 853, 851, 854, 850, 855, 857, 852, 853, 856,
+ 848, 859, 849, 857, 855, 858, 861, 858, 854, 860,
+ 859, 852, 862, 863, 871, 0, 862, 852, 853, 865,
+ 854, 0, 855, 857, 867, 856, 856, 865, 859, 868,
+ 866, 860, 858, 861, 866, 863, 860, 869, 0, 862,
+ 863, 870, 867, 872, 873, 871, 865, 874, 868, 875,
+ 875, 867, 879, 877, 870, 874, 868, 0, 876, 879,
+
+ 873, 866, 869, 878, 869, 880, 872, 876, 870, 881,
+ 872, 873, 878, 882, 874, 877, 875, 885, 881, 879,
+ 877, 882, 883, 886, 888, 876, 884, 889, 880, 885,
+ 878, 897, 880, 887, 890, 886, 881, 883, 894, 884,
+ 882, 887, 895, 891, 885, 892, 888, 889, 895, 883,
+ 886, 888, 891, 884, 889, 893, 890, 896, 898, 894,
+ 887, 890, 897, 892, 899, 894, 900, 893, 902, 895,
+ 891, 903, 892, 907, 905, 906, 909, 908, 904, 896,
+ 909, 911, 893, 905, 896, 908, 907, 0, 911, 898,
+ 899, 899, 900, 900, 903, 902, 904, 906, 903, 910,
+
+ 907, 905, 906, 910, 908, 904, 912, 909, 911, 913,
+ 914, 915, 915, 916, 912, 918, 919, 913, 914, 0,
+ 917, 916, 924, 920, 919, 926, 921, 922, 924, 923,
+ 910, 920, 925, 912, 921, 922, 913, 914, 915, 927,
+ 916, 917, 923, 919, 925, 928, 918, 917, 929, 924,
+ 920, 926, 926, 921, 922, 930, 923, 931, 937, 925,
+ 928, 933, 932, 927, 934, 937, 927, 0, 938, 935,
+ 939, 943, 928, 935, 941, 929, 932, 930, 934, 933,
+ 931, 940, 930, 941, 931, 937, 935, 947, 933, 932,
+ 945, 934, 939, 948, 935, 938, 935, 939, 942, 945,
+
+ 935, 941, 943, 949, 940, 942, 951, 0, 940, 947,
+ 953, 954, 956, 935, 947, 957, 958, 945, 960, 948,
+ 948, 959, 954, 959, 961, 942, 963, 964, 958, 966,
+ 967, 960, 962, 951, 949, 967, 956, 953, 954, 956,
+ 965, 957, 957, 958, 962, 960, 961, 965, 959, 968,
+ 964, 961, 969, 963, 964, 966, 966, 967, 970, 962,
+ 971, 973, 974, 0, 975, 968, 970, 965, 976, 0,
+ 977, 974, 980, 978, 979, 969, 968, 975, 982, 969,
+ 978, 979, 971, 984, 983, 970, 981, 971, 973, 974,
+ 980, 975, 977, 981, 976, 976, 986, 977, 989, 980,
+
+ 978, 979, 985, 982, 988, 982, 983, 990, 995, 985,
+ 994, 983, 991, 981, 984, 990, 993, 988, 998, 993,
+ 999, 996, 0, 995, 1001, 989, 1004, 986, 996, 985,
+ 1009, 988, 1000, 991, 990, 995, 994, 994, 997, 991,
+ 1003, 997, 999, 993, 1005, 1011, 1001, 999, 996, 998,
+ 1000, 1001, 1002, 997, 1002, 1007, 1010, 1004, 1014, 1000,
+ 1006, 1009, 997, 1007, 1003, 997, 1008, 1003, 997, 1006,
+ 1005, 1005, 1013, 1008, 1015, 1016, 1011, 1012, 1010, 1002,
+ 997, 1012, 1007, 1010, 1016, 1014, 1021, 1006, 1017, 1022,
+ 1018, 1020, 1019, 1008, 1013, 1017, 1015, 1018, 1025, 1013,
+
+ 1021, 1015, 1016, 1023, 1012, 1019, 1020, 1024, 1028, 1030,
+ 1023, 1025, 1031, 1021, 1024, 1017, 1026, 1018, 1020, 1019,
+ 1022, 1029, 1026, 0, 1031, 1025, 1032, 1034, 1029, 1033,
+ 1023, 1030, 1033, 1039, 1024, 1028, 1030, 1036, 1034, 1031,
+ 1040, 1041, 1036, 1026, 1042, 1044, 1032, 1033, 1029, 1036,
+ 1038, 1043, 1038, 1032, 1034, 1048, 1033, 1047, 1046, 1033,
+ 1039, 1046, 1043, 1044, 1036, 1041, 1042, 1040, 1041, 1036,
+ 1049, 1042, 1044, 1045, 1052, 1047, 1046, 1038, 1043, 1051,
+ 1050, 1045, 1053, 1052, 1047, 1046, 1048, 1050, 1046, 1055,
+ 1057, 1054, 1057, 1051, 1058, 1053, 1059, 1049, 1062, 1060,
+
+ 1045, 1052, 1054, 1058, 1055, 1063, 1051, 1050, 0, 1053,
+ 1060, 1061, 1064, 1067, 1070, 1064, 1055, 1057, 1054, 1063,
+ 1062, 1058, 1059, 1059, 1065, 1062, 1060, 1068, 1069, 1061,
+ 1064, 1063, 1063, 1065, 1072, 1071, 1068, 1073, 1061, 1064,
+ 1078, 1072, 1064, 1074, 1067, 1070, 1063, 1075, 1078, 1080,
+ 1069, 1065, 1083, 1075, 1068, 1069, 1071, 1074, 1079, 1087,
+ 1081, 1072, 1071, 1080, 1082, 0, 1085, 1078, 1073, 1081,
+ 1074, 1075, 1082, 1084, 1075, 1085, 1080, 1079, 1089, 1093,
+ 1075, 1088, 1090, 1083, 1084, 1079, 1087, 1081, 1088, 1091,
+ 1092, 1082, 1094, 1085, 1097, 1096, 1094, 1093, 1099, 1100,
+
+ 1084, 1089, 1098, 1103, 1090, 1089, 1093, 1096, 1088, 1090,
+ 1107, 1091, 1092, 1101, 1100, 1098, 1091, 1092, 1099, 1094,
+ 1104, 1097, 1096, 1102, 1105, 1099, 1100, 1106, 1101, 1098,
+ 1109, 1102, 1108, 1105, 1103, 1104, 1111, 1107, 1113, 0,
+ 1101, 0, 1112, 1118, 1115, 0, 1114, 1104, 1106, 1116,
+ 1102, 1105, 1119, 1117, 1106, 1118, 1108, 1109, 1111, 1108,
+ 1112, 1114, 1123, 1111, 1120, 1113, 1115, 1116, 1117, 1112,
+ 1118, 1115, 1122, 1114, 1119, 1124, 1116, 1120, 1121, 1119,
+ 1117, 1125, 1120, 1127, 1122, 1121, 1126, 1125, 1128, 1123,
+ 1127, 1120, 1130, 1129, 1126, 1131, 1132, 1134, 1133, 1122,
+
+ 1129, 1131, 1135, 1137, 1120, 1121, 1124, 1139, 1125, 1138,
+ 1127, 1143, 1140, 1126, 1140, 1128, 1141, 1153, 1138, 1130,
+ 1129, 1133, 1131, 1132, 1142, 1133, 1135, 0, 1134, 1135,
+ 1144, 1144, 1144, 1145, 1137, 1147, 1138, 1144, 1139, 1140,
+ 1145, 1146, 1143, 1141, 1153, 1144, 1148, 1173, 1146, 1151,
+ 1142, 1142, 1150, 1148, 1155, 1152, 1150, 1144, 1144, 1144,
+ 1145, 1152, 1151, 1158, 1144, 1156, 1147, 1159, 1146, 1154,
+ 1154, 1163, 1156, 1148, 1157, 1162, 1151, 0, 1173, 1157,
+ 1155, 1155, 1152, 1150, 1165, 1164, 0, 1166, 1172, 1158,
+ 1158, 1168, 1156, 1162, 1159, 1178, 1154, 1164, 1163, 1167,
+
+ 1167, 1157, 1162, 1175, 1165, 1166, 1169, 1169, 1170, 1174,
+ 1172, 1165, 1164, 1176, 1166, 1172, 1174, 1168, 1168, 1170,
+ 1177, 1179, 1178, 1175, 0, 1181, 1167, 1180, 0, 1182,
+ 1175, 1183, 1181, 1169, 1187, 1170, 1174, 1182, 1184, 1194,
+ 1185, 1186, 1186, 1179, 1176, 1180, 1183, 1188, 1179, 1185,
+ 1191, 1177, 1181, 1193, 1180, 1189, 1182, 1190, 1183, 1188,
+ 1187, 1187, 1184, 1189, 1192, 1184, 1194, 1185, 1186, 1190,
+ 1195, 1193, 1196, 1191, 1188, 1195, 1198, 1191, 1200, 1201,
+ 1193, 1197, 1189, 1199, 1190, 1192, 1195, 1197, 1202, 1198,
+ 1199, 1192, 1202, 1203, 1204, 1204, 1205, 1195, 1206, 1196,
+
+ 1208, 0, 1195, 1198, 1212, 1209, 1201, 1210, 1197, 1200,
+ 1199, 1205, 1211, 1213, 1211, 1208, 1214, 1218, 1213, 1202,
+ 0, 1204, 1210, 1205, 1203, 1217, 1215, 1208, 1209, 1206,
+ 1219, 1220, 1209, 1222, 1210, 1212, 0, 1223, 1221, 1211,
+ 1213, 1215, 1224, 1218, 1218, 1221, 1227, 1214, 1225, 1217,
+ 1229, 1233, 1217, 1215, 1222, 1230, 1232, 1219, 1220, 1223,
+ 1222, 0, 1235, 1224, 1223, 1221, 1225, 1236, 1227, 1224,
+ 1230, 1232, 1234, 1227, 1229, 1225, 1236, 1229, 1233, 1234,
+ 1235, 1238, 1230, 1232, 1237, 1239, 1240, 1241, 1244, 1235,
+ 0, 1245, 1237, 1248, 1236, 1243, 1254, 1244, 1246, 1234,
+
+ 1241, 0, 1250, 1257, 1238, 1258, 1243, 1239, 1238, 1245,
+ 1253, 1237, 1239, 1250, 1241, 1244, 1246, 1240, 1245, 1252,
+ 1248, 1243, 1243, 1253, 1255, 1246, 1256, 1254, 1257, 1250,
+ 1257, 1252, 1258, 1243, 1255, 1260, 1261, 1253, 1262, 1263,
+ 0, 1264, 0, 1261, 1265, 1266, 1252, 1264, 1268, 1268,
+ 0, 1255, 1256, 1256, 1267, 1260, 0, 1263, 1269, 1265,
+ 1266, 1270, 1260, 1261, 1262, 1262, 1263, 1275, 1264, 1267,
+ 1269, 1265, 1266, 1272, 1270, 1268, 1273, 1276, 1277, 0,
+ 1272, 1267, 1270, 1273, 1278, 1269, 1283, 1277, 1270, 1275,
+ 1279, 1281, 1284, 1286, 1275, 1285, 1285, 1292, 1287, 1283,
+
+ 1272, 1270, 1276, 1273, 1276, 1277, 1278, 1288, 1289, 1281,
+ 1279, 1278, 1290, 1283, 1293, 1286, 1299, 1279, 1281, 1284,
+ 1286, 1290, 1285, 1287, 1291, 1287, 1294, 1295, 1292, 1288,
+ 1289, 1291, 1300, 1306, 1288, 1289, 1293, 1297, 1301, 1290,
+ 1294, 1293, 1298, 1299, 1303, 1297, 1295, 0, 1306, 1302,
+ 1301, 1291, 1304, 1294, 1295, 1298, 1302, 1305, 1300, 1300,
+ 1306, 1308, 1309, 1307, 1297, 1301, 1307, 1310, 1311, 1298,
+ 1313, 1317, 0, 1316, 1304, 1303, 1302, 1314, 1317, 1304,
+ 1319, 1307, 1305, 1311, 1305, 1310, 1308, 1316, 1308, 1309,
+ 1307, 1319, 1313, 1307, 1310, 1311, 1318, 1313, 1317, 1314,
+
+ 1316, 1321, 1324, 1323, 1314, 1318, 1325, 1319, 1325, 1326,
+ 1327, 1329, 1330, 1328, 1324, 1335, 0, 1339, 1331, 0,
+ 1330, 1332, 1321, 1318, 1323, 1341, 1345, 1326, 1321, 1324,
+ 1323, 1328, 1333, 1325, 1335, 1340, 1326, 1327, 1329, 1330,
+ 1328, 1331, 1335, 1332, 1339, 1331, 1333, 1334, 1332, 1336,
+ 1343, 1334, 1341, 1340, 1342, 1344, 1336, 1345, 1347, 1333,
+ 1352, 1346, 1340, 1355, 1344, 1343, 1349, 1350, 1349, 1351,
+ 1353, 1356, 1352, 1351, 1355, 1354, 1336, 1343, 1334, 1358,
+ 1342, 1342, 1344, 1346, 1354, 1347, 1357, 1352, 1346, 1350,
+ 1355, 1358, 1353, 1349, 1350, 1359, 1351, 1353, 1356, 1360,
+
+ 1360, 1364, 1354, 1361, 1363, 1364, 1358, 1365, 1366, 1357,
+ 1365, 1361, 1363, 1357, 1367, 1369, 1366, 1359, 1368, 1371,
+ 1367, 1369, 1359, 1372, 1373, 1375, 1360, 1374, 1364, 1376,
+ 1361, 1363, 1377, 1368, 1365, 1366, 1378, 1379, 1373, 1375,
+ 1374, 1367, 1369, 1380, 1383, 1368, 1371, 1372, 1381, 1379,
+ 1372, 1373, 1375, 1384, 1374, 1376, 1376, 1380, 1382, 1377,
+ 1385, 1382, 1387, 1378, 1379, 1386, 1389, 1390, 1388, 1393,
+ 1380, 1383, 1394, 1386, 1381, 1381, 1382, 1388, 1391, 1396,
+ 1384, 1398, 1395, 1401, 0, 1382, 1391, 1385, 1382, 1387,
+ 1395, 1393, 1386, 1389, 1390, 1388, 1393, 1399, 1397, 1394,
+
+ 1400, 1403, 1398, 1402, 1404, 1391, 1396, 1397, 1398, 1395,
+ 1401, 1402, 1404, 1403, 1405, 1400, 1407, 1409, 1408, 1411,
+ 0, 1399, 1408, 1407, 1399, 1397, 1400, 1400, 1403, 1409,
+ 1402, 1404, 1410, 1413, 1414, 1414, 1415, 1418, 1416, 1412,
+ 1421, 1405, 1400, 1407, 1409, 1408, 1411, 1412, 1419, 1420,
+ 1423, 1420, 1418, 1426, 1421, 1410, 1416, 1424, 1429, 1410,
+ 1413, 1414, 1415, 1415, 1418, 1416, 1412, 1421, 1422, 1425,
+ 1419, 1426, 1423, 1427, 1422, 1419, 1420, 1423, 1430, 1424,
+ 1426, 1425, 1435, 1432, 1424, 1428, 1434, 1436, 0, 1429,
+ 1432, 1427, 1443, 0, 1437, 1422, 1425, 0, 1428, 1440,
+
+ 1427, 1430, 1437, 1445, 1434, 1430, 1441, 1443, 1435, 1435,
+ 1432, 1440, 1428, 1434, 1446, 1438, 1447, 1438, 1436, 1443,
+ 1437, 1437, 1438, 1447, 1441, 1448, 1440, 1445, 1449, 1437,
+ 1445, 1451, 1452, 1441, 1453, 1454, 1446, 1457, 1455, 1456,
+ 1448, 1446, 1438, 1447, 1438, 1452, 1459, 1456, 1460, 1461,
+ 1454, 1455, 1448, 0, 1469, 1449, 1462, 1466, 1451, 1452,
+ 1453, 1453, 1454, 1457, 1457, 1455, 1456, 1463, 1465, 1459,
+ 1464, 1468, 1460, 1459, 1463, 1460, 1461, 1464, 1462, 1467,
+ 1466, 1465, 1470, 1462, 1466, 1469, 1467, 1474, 1472, 1473,
+ 1482, 1482, 0, 1468, 1463, 1465, 1476, 1464, 1468, 1472,
+
+ 1475, 1479, 1481, 1470, 1480, 1487, 1467, 1483, 1493, 1470,
+ 1495, 1473, 1497, 1489, 1479, 1472, 1473, 1482, 1474, 1475,
+ 1492, 1476, 1489, 1476, 1498, 1499, 1481, 1475, 1479, 1481,
+ 1480, 1480, 1487, 1483, 1483, 1493, 1499, 1495, 1501, 1500,
+ 1489, 1503, 1492, 1497, 1500, 1505, 1504, 1492, 1508, 1503,
+ 1498, 1498, 1499, 1507, 1509, 1510, 1512, 0, 1518, 1519,
+ 1501, 1504, 1514, 1509, 1516, 1501, 1500, 1510, 1503, 1515,
+ 1517, 1507, 1505, 1504, 1520, 1521, 1529, 1516, 1522, 1508,
+ 1507, 1509, 1510, 1512, 1514, 1518, 1519, 1522, 1523, 1514,
+ 1521, 1516, 1517, 1524, 1515, 1525, 1515, 1517, 1526, 1527,
+
+ 1528, 1520, 1521, 1529, 1533, 1522, 1530, 1528, 1524, 1532,
+ 1525, 1531, 1531, 1526, 1523, 1523, 1532, 1535, 1533, 1536,
+ 1524, 1527, 1525, 1537, 1530, 1526, 1527, 1528, 1538, 1534,
+ 1535, 1533, 1534, 1530, 1539, 1540, 1532, 1538, 1531, 1539,
+ 1542, 1537, 1541, 1543, 1535, 1536, 1536, 1544, 1549, 1556,
+ 1537, 1547, 1550, 1549, 1548, 1538, 1534, 1540, 1547, 1550,
+ 1554, 1539, 1540, 1548, 1541, 1551, 0, 1542, 1559, 1541,
+ 1543, 1553, 1557, 1544, 1544, 1549, 1556, 1552, 1547, 1550,
+ 1553, 1548, 1558, 1551, 1552, 1560, 1554, 1554, 1559, 1563,
+ 1557, 1558, 1551, 1561, 1562, 1559, 1565, 1560, 1553, 1557,
+
+ 1563, 1567, 1561, 1562, 1552, 1564, 1566, 1568, 1570, 1558,
+ 1567, 1571, 1560, 1564, 1569, 1574, 1563, 1572, 1571, 1568,
+ 1561, 1562, 1569, 1565, 1572, 1573, 1580, 1576, 1567, 1582,
+ 1570, 1577, 1564, 1580, 1568, 1570, 1581, 1566, 1571, 1577,
+ 1574, 1569, 1574, 1583, 1572, 1576, 1585, 1573, 1584, 1586,
+ 1588, 1589, 1573, 1580, 1576, 1583, 1582, 1584, 1577, 1590,
+ 1581, 1593, 1588, 1581, 1595, 1591, 1596, 0, 1600, 1602,
+ 1583, 0, 1586, 1585, 1589, 1584, 1586, 1588, 1589, 1591,
+ 1601, 1594, 1603, 1602, 1604, 1601, 1590, 0, 1593, 1594,
+ 1605, 1595, 1591, 1596, 1600, 1600, 1602, 1606, 1609, 1607,
+
+ 1603, 1610, 1612, 1613, 1614, 1606, 1604, 1601, 1594, 1603,
+ 1609, 1604, 1605, 1611, 1612, 1616, 1615, 1605, 1607, 1617,
+ 1619, 1620, 1618, 1610, 1606, 1609, 1607, 1623, 1610, 1612,
+ 1613, 1614, 1624, 1625, 0, 1611, 1615, 1616, 1631, 1626,
+ 1611, 1623, 1616, 1615, 1618, 1628, 1627, 1619, 1620, 1618,
+ 1617, 1629, 1630, 1631, 1623, 0, 1625, 1628, 1633, 1634,
+ 1625, 1626, 1635, 1624, 1627, 1631, 1626, 0, 0, 1636,
+ 1629, 1635, 1628, 1627, 1630, 1637, 1638, 1640, 1629, 1630,
+ 1639, 1634, 1633, 1636, 1642, 1633, 1634, 1645, 1649, 1635,
+ 1643, 1644, 1642, 1637, 1638, 1640, 1636, 1643, 1647, 1644,
+
+ 1646, 1648, 1637, 1638, 1640, 0, 1639, 1639, 1646, 1651,
+ 1652, 1642, 1650, 1648, 1645, 1649, 1647, 1643, 1644, 1653,
+ 1650, 1654, 1656, 1661, 1659, 1647, 1663, 1646, 1648, 1660,
+ 1657, 1665, 1651, 1669, 1668, 1661, 1651, 1652, 1653, 1650,
+ 1656, 1668, 1660, 1654, 1657, 1670, 1653, 1659, 1654, 1656,
+ 1661, 1659, 1663, 1663, 1671, 1672, 1660, 1657, 1665, 1669,
+ 1669, 1668, 1673, 1674, 1675, 1677, 1676, 1678, 1685, 0,
+ 0, 1682, 1670, 1675, 1679, 1682, 1683, 1684, 1671, 1676,
+ 1683, 1671, 1672, 1688, 1690, 1689, 1689, 0, 1694, 1673,
+ 1674, 1675, 1709, 1676, 1678, 1689, 1677, 1679, 1684, 1685,
+
+ 1691, 1679, 1682, 1683, 1684, 1688, 1690, 1692, 1693, 1691,
+ 1688, 1690, 1689, 1689, 1692, 1694, 1695, 1696, 1697, 1709,
+ 1698, 1693, 1699, 1703, 1695, 1700, 1697, 1691, 1701, 0,
+ 1703, 1702, 1704, 1704, 1692, 1693, 1696, 0, 1705, 1701,
+ 1713, 1714, 1710, 1695, 1696, 1697, 1698, 1698, 1699, 1699,
+ 1703, 1700, 1700, 1702, 1706, 1701, 1705, 1707, 1702, 1704,
+ 1717, 1706, 1711, 1714, 1707, 1705, 1710, 1713, 1714, 1710,
+ 1716, 1711, 1718, 1719, 1720, 1723, 1721, 0, 1722, 1716,
+ 1721, 1706, 1732, 1726, 1707, 1725, 1720, 1717, 1728, 1711,
+ 1728, 1719, 1722, 1723, 1733, 1718, 1734, 1716, 1726, 1718,
+
+ 1719, 1720, 1723, 1725, 1732, 1722, 1736, 1721, 1737, 1732,
+ 1726, 1737, 1725, 1739, 1734, 1728, 1742, 1741, 1740, 1743,
+ 1733, 1733, 1745, 1734, 1741, 1743, 1744, 1746, 1736, 1748,
+ 1747, 1745, 1747, 1736, 1737, 1737, 1740, 1752, 1737, 1751,
+ 1739, 1753, 1750, 1755, 1741, 1740, 1743, 1742, 1744, 1745,
+ 1750, 1751, 1754, 1744, 1756, 1753, 1748, 1747, 1746, 1757,
+ 1761, 1755, 1759, 1758, 1752, 1756, 1751, 1757, 1753, 1750,
+ 1755, 1760, 1760, 1764, 1765, 1754, 1767, 1762, 1770, 1754,
+ 1768, 1756, 1758, 1773, 1759, 1762, 1757, 1761, 1771, 1759,
+ 1758, 1773, 1772, 0, 1775, 1771, 1772, 1778, 1760, 1776,
+
+ 1764, 1765, 1768, 1767, 1762, 1770, 1777, 1768, 1779, 1780,
+ 1773, 1777, 1776, 1781, 1783, 1771, 1782, 1780, 1784, 1772,
+ 1775, 1775, 1785, 1782, 1778, 1788, 1776, 1789, 1781, 1787,
+ 1791, 1790, 1788, 1777, 1792, 1779, 1780, 1794, 1791, 1796,
+ 1781, 1783, 1784, 1782, 1787, 1784, 1799, 1797, 1785, 1785,
+ 1800, 1789, 1788, 1790, 1789, 1797, 1787, 1791, 1790, 1793,
+ 1793, 1802, 1801, 1803, 1794, 1792, 1796, 1804, 1805, 1793,
+ 1806, 1808, 1800, 1799, 1797, 1801, 1812, 1800, 1814, 1818,
+ 1815, 1817, 1819, 1802, 1816, 1823, 1793, 1793, 1802, 1801,
+ 1803, 1816, 1806, 1815, 1804, 1805, 1822, 1806, 1808, 1817,
+
+ 1824, 1829, 1812, 1812, 1819, 1814, 1818, 1815, 1817, 1819,
+ 1826, 1816, 1823, 1827, 1828, 1822, 1829, 1826, 1832, 1830,
+ 1827, 1831, 1824, 1822, 1833, 1833, 1834, 1824, 1829, 1832,
+ 1831, 1840, 1834, 1835, 1833, 1838, 1828, 1826, 1830, 1841,
+ 1827, 1828, 1838, 1846, 1842, 1832, 1830, 1850, 1831, 1848,
+ 1851, 1833, 1833, 1834, 1854, 1835, 1852, 0, 1840, 1851,
+ 1835, 1855, 1838, 1859, 1858, 1860, 1841, 1842, 1861, 1852,
+ 1846, 1842, 1848, 1855, 1850, 1857, 1848, 1851, 1862, 1866,
+ 1869, 1854, 1858, 1852, 1857, 1863, 1864, 1863, 1855, 1859,
+ 1859, 1858, 1860, 1865, 1867, 1861, 1868, 1872, 1864, 1865,
+
+ 1862, 1866, 1857, 1874, 1868, 1862, 1866, 1869, 1876, 1877,
+ 1879, 1882, 1863, 1864, 1880, 1881, 1867, 1886, 1887, 1885,
+ 1865, 1867, 1888, 1868, 1872, 1879, 1876, 1881, 1895, 0,
+ 1874, 1887, 0, 1897, 0, 1876, 1877, 1879, 1882, 1889,
+ 1880, 1880, 1881, 1885, 1888, 1887, 1885, 1889, 1886, 1888,
+ 1890, 1891, 1895, 1901, 1898, 1895, 1897, 1899, 1902, 1890,
+ 1897, 1898, 1891, 1903, 1904, 1905, 1889, 1907, 1908, 1901,
+ 1899, 1903, 1902, 1904, 1909, 1908, 1905, 1890, 1891, 1907,
+ 1901, 1898, 1910, 1911, 1899, 1902, 1906, 1912, 1906, 1913,
+ 1903, 1904, 1905, 1914, 1907, 1908, 1915, 1917, 1915, 1918,
+
+ 1910, 1909, 1919, 1925, 1926, 1916, 1921, 0, 0, 1910,
+ 1911, 1913, 1918, 1906, 1912, 1914, 1913, 1916, 1921, 1924,
+ 1914, 1936, 1928, 1915, 1927, 0, 1918, 1924, 1917, 1919,
+ 1929, 1931, 1916, 1921, 1925, 1926, 1928, 1927, 1929, 1932,
+ 1933, 1934, 1935, 1936, 1931, 1938, 1924, 1932, 1936, 1928,
+ 1935, 1927, 1937, 1938, 1933, 1934, 1939, 1929, 1931, 1940,
+ 1944, 1945, 1941, 1942, 0, 1943, 1932, 1933, 1934, 1935,
+ 1947, 0, 1938, 1943, 1937, 1946, 1949, 0, 1947, 1937,
+ 0, 1940, 1939, 1939, 1941, 1942, 1940, 1953, 1945, 1941,
+ 1942, 1944, 1943, 1948, 1951, 1946, 1950, 1947, 1954, 1956,
+
+ 1958, 1948, 1946, 1955, 1950, 1957, 1954, 1949, 1951, 1953,
+ 1959, 1955, 1960, 1956, 1953, 1961, 1963, 1965, 1959, 0,
+ 1948, 1951, 1958, 1950, 1962, 1954, 1956, 1958, 0, 1966,
+ 1955, 1957, 1957, 1967, 0, 1969, 1963, 1959, 1960, 1960,
+ 1964, 1961, 1961, 1963, 1965, 0, 1962, 1968, 1964, 1966,
+ 1970, 1962, 1976, 1967, 1972, 1968, 1966, 1969, 1970, 1980,
+ 1967, 1973, 1969, 1974, 1975, 1977, 0, 1964, 1979, 1981,
+ 1982, 1974, 1975, 1977, 1968, 1983, 1972, 1970, 1976, 1976,
+ 1984, 1972, 1986, 1973, 1989, 1978, 1980, 1992, 1973, 1981,
+ 1974, 1975, 1977, 1978, 1979, 1979, 1981, 1982, 1993, 0,
+
+ 1984, 0, 1983, 0, 1986, 1990, 1989, 1984, 1991, 1986,
+ 0, 1989, 1978, 1990, 1992, 0, 1991, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1993, 0, 0, 0, 0,
+ 0, 0, 1990, 0, 0, 1991, 1997, 1997, 1997, 1997,
+ 1997, 1997, 1997, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
+ 1999, 1999, 1999, 1999, 1999, 1999, 1999, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2001, 2001, 2001, 2001, 2001, 2001,
+ 2001, 2003, 2003, 0, 2003, 2003, 2003, 2003, 2004, 2004,
+ 0, 0, 0, 2004, 2004, 2005, 2005, 0, 0, 2005,
+ 0, 2005, 2006, 0, 0, 0, 0, 0, 2006, 2007,
+
+ 2007, 0, 0, 0, 2007, 2007, 2008, 0, 0, 0,
+ 0, 0, 2008, 2009, 2009, 0, 2009, 2009, 2009, 2009,
+ 2010, 2010, 0, 2010, 2010, 2010, 2010, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996
+
} ;
static yy_state_type yy_last_accepting_state;
@@ -2555,7 +2596,7 @@ static void config_end_include(void)
#define YY_NO_INPUT 1
#endif
-#line 2557 "<stdout>"
+#line 2598 "<stdout>"
#define INITIAL 0
#define quotedstring 1
@@ -2778,7 +2819,7 @@ YY_DECL
{
#line 207 "util/configlexer.lex"
-#line 2780 "<stdout>"
+#line 2821 "<stdout>"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -2811,13 +2852,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1956 )
+ if ( yy_current_state >= 1997 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 5624 );
+ while ( yy_base[yy_current_state] != 5728 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -2972,12 +3013,12 @@ YY_RULE_SETUP
case 26:
YY_RULE_SETUP
#line 236 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_DAEMONIZE) }
+{ YDVAR(1, VAR_USE_SYSTEMD) }
YY_BREAK
case 27:
YY_RULE_SETUP
#line 237 "util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE) }
+{ YDVAR(1, VAR_DO_DAEMONIZE) }
YY_BREAK
case 28:
YY_RULE_SETUP
@@ -2987,785 +3028,815 @@ YY_RULE_SETUP
case 29:
YY_RULE_SETUP
#line 239 "util/configlexer.lex"
-{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
+{ YDVAR(1, VAR_INTERFACE) }
YY_BREAK
case 30:
YY_RULE_SETUP
#line 240 "util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
+{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
YY_BREAK
case 31:
YY_RULE_SETUP
#line 241 "util/configlexer.lex"
-{ YDVAR(1, VAR_SO_RCVBUF) }
+{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
YY_BREAK
case 32:
YY_RULE_SETUP
#line 242 "util/configlexer.lex"
-{ YDVAR(1, VAR_SO_SNDBUF) }
+{ YDVAR(1, VAR_SO_RCVBUF) }
YY_BREAK
case 33:
YY_RULE_SETUP
#line 243 "util/configlexer.lex"
-{ YDVAR(1, VAR_SO_REUSEPORT) }
+{ YDVAR(1, VAR_SO_SNDBUF) }
YY_BREAK
case 34:
YY_RULE_SETUP
#line 244 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_TRANSPARENT) }
+{ YDVAR(1, VAR_SO_REUSEPORT) }
YY_BREAK
case 35:
YY_RULE_SETUP
#line 245 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_FREEBIND) }
+{ YDVAR(1, VAR_IP_TRANSPARENT) }
YY_BREAK
case 36:
YY_RULE_SETUP
#line 246 "util/configlexer.lex"
-{ YDVAR(1, VAR_CHROOT) }
+{ YDVAR(1, VAR_IP_FREEBIND) }
YY_BREAK
case 37:
YY_RULE_SETUP
#line 247 "util/configlexer.lex"
-{ YDVAR(1, VAR_USERNAME) }
+{ YDVAR(1, VAR_CHROOT) }
YY_BREAK
case 38:
YY_RULE_SETUP
#line 248 "util/configlexer.lex"
-{ YDVAR(1, VAR_DIRECTORY) }
+{ YDVAR(1, VAR_USERNAME) }
YY_BREAK
case 39:
YY_RULE_SETUP
#line 249 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOGFILE) }
+{ YDVAR(1, VAR_DIRECTORY) }
YY_BREAK
case 40:
YY_RULE_SETUP
#line 250 "util/configlexer.lex"
-{ YDVAR(1, VAR_PIDFILE) }
+{ YDVAR(1, VAR_LOGFILE) }
YY_BREAK
case 41:
YY_RULE_SETUP
#line 251 "util/configlexer.lex"
-{ YDVAR(1, VAR_ROOT_HINTS) }
+{ YDVAR(1, VAR_PIDFILE) }
YY_BREAK
case 42:
YY_RULE_SETUP
#line 252 "util/configlexer.lex"
-{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
+{ YDVAR(1, VAR_ROOT_HINTS) }
YY_BREAK
case 43:
YY_RULE_SETUP
#line 253 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
+{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
YY_BREAK
case 44:
YY_RULE_SETUP
#line 254 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
+{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
YY_BREAK
case 45:
YY_RULE_SETUP
#line 255 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
+{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
YY_BREAK
case 46:
YY_RULE_SETUP
#line 256 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
+{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
YY_BREAK
case 47:
YY_RULE_SETUP
#line 257 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
+{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
YY_BREAK
case 48:
YY_RULE_SETUP
#line 258 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_TTL) }
+{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
YY_BREAK
case 49:
YY_RULE_SETUP
#line 259 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
+{ YDVAR(1, VAR_CACHE_MAX_TTL) }
YY_BREAK
case 50:
YY_RULE_SETUP
#line 260 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MIN_TTL) }
+{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
YY_BREAK
case 51:
YY_RULE_SETUP
#line 261 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_HOST_TTL) }
+{ YDVAR(1, VAR_CACHE_MIN_TTL) }
YY_BREAK
case 52:
YY_RULE_SETUP
#line 262 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_LAME_TTL) }
+{ YDVAR(1, VAR_INFRA_HOST_TTL) }
YY_BREAK
case 53:
YY_RULE_SETUP
#line 263 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
+{ YDVAR(1, VAR_INFRA_LAME_TTL) }
YY_BREAK
case 54:
YY_RULE_SETUP
#line 264 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
+{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
YY_BREAK
case 55:
YY_RULE_SETUP
#line 265 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
+{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
YY_BREAK
case 56:
YY_RULE_SETUP
#line 266 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
+{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
YY_BREAK
case 57:
YY_RULE_SETUP
#line 267 "util/configlexer.lex"
-{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
+{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
YY_BREAK
case 58:
YY_RULE_SETUP
#line 268 "util/configlexer.lex"
-{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
+{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
YY_BREAK
case 59:
YY_RULE_SETUP
#line 269 "util/configlexer.lex"
-{ YDVAR(1, VAR_DELAY_CLOSE) }
+{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
YY_BREAK
case 60:
YY_RULE_SETUP
#line 270 "util/configlexer.lex"
-{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
+{ YDVAR(1, VAR_DELAY_CLOSE) }
YY_BREAK
case 61:
YY_RULE_SETUP
#line 271 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
+{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
YY_BREAK
case 62:
YY_RULE_SETUP
#line 272 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
+{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
YY_BREAK
case 63:
YY_RULE_SETUP
#line 273 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_GLUE) }
+{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
YY_BREAK
case 64:
YY_RULE_SETUP
#line 274 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
+{ YDVAR(1, VAR_HARDEN_GLUE) }
YY_BREAK
case 65:
YY_RULE_SETUP
#line 275 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
+{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
YY_BREAK
case 66:
YY_RULE_SETUP
#line 276 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
+{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
YY_BREAK
case 67:
YY_RULE_SETUP
#line 277 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
+{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
YY_BREAK
case 68:
YY_RULE_SETUP
#line 278 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
+{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
YY_BREAK
case 69:
YY_RULE_SETUP
#line 279 "util/configlexer.lex"
-{ YDVAR(1, VAR_CAPS_WHITELIST) }
+{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
YY_BREAK
case 70:
YY_RULE_SETUP
#line 280 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
+{ YDVAR(1, VAR_CAPS_WHITELIST) }
YY_BREAK
case 71:
YY_RULE_SETUP
#line 281 "util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
+{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
YY_BREAK
case 72:
YY_RULE_SETUP
#line 282 "util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
+{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
YY_BREAK
case 73:
YY_RULE_SETUP
#line 283 "util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH_KEY) }
+{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
YY_BREAK
case 74:
YY_RULE_SETUP
#line 284 "util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH) }
+{ YDVAR(1, VAR_PREFETCH_KEY) }
YY_BREAK
case 75:
YY_RULE_SETUP
#line 285 "util/configlexer.lex"
-{ YDVAR(0, VAR_STUB_ZONE) }
+{ YDVAR(1, VAR_PREFETCH) }
YY_BREAK
case 76:
YY_RULE_SETUP
#line 286 "util/configlexer.lex"
-{ YDVAR(1, VAR_NAME) }
+{ YDVAR(0, VAR_STUB_ZONE) }
YY_BREAK
case 77:
YY_RULE_SETUP
#line 287 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_ADDR) }
+{ YDVAR(1, VAR_NAME) }
YY_BREAK
case 78:
YY_RULE_SETUP
#line 288 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_HOST) }
+{ YDVAR(1, VAR_STUB_ADDR) }
YY_BREAK
case 79:
YY_RULE_SETUP
#line 289 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_PRIME) }
+{ YDVAR(1, VAR_STUB_HOST) }
YY_BREAK
case 80:
YY_RULE_SETUP
#line 290 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_FIRST) }
+{ YDVAR(1, VAR_STUB_PRIME) }
YY_BREAK
case 81:
YY_RULE_SETUP
#line 291 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_STUB_FIRST) }
YY_BREAK
case 82:
YY_RULE_SETUP
#line 292 "util/configlexer.lex"
-{ YDVAR(0, VAR_FORWARD_ZONE) }
+{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
YY_BREAK
case 83:
YY_RULE_SETUP
#line 293 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_ADDR) }
+{ YDVAR(0, VAR_FORWARD_ZONE) }
YY_BREAK
case 84:
YY_RULE_SETUP
#line 294 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_HOST) }
+{ YDVAR(1, VAR_FORWARD_ADDR) }
YY_BREAK
case 85:
YY_RULE_SETUP
#line 295 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_FIRST) }
+{ YDVAR(1, VAR_FORWARD_HOST) }
YY_BREAK
case 86:
YY_RULE_SETUP
#line 296 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_FORWARD_FIRST) }
YY_BREAK
case 87:
YY_RULE_SETUP
#line 297 "util/configlexer.lex"
-{ YDVAR(0, VAR_VIEW) }
+{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
YY_BREAK
case 88:
YY_RULE_SETUP
#line 298 "util/configlexer.lex"
-{ YDVAR(1, VAR_VIEW_FIRST) }
+{ YDVAR(0, VAR_VIEW) }
YY_BREAK
case 89:
YY_RULE_SETUP
#line 299 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+{ YDVAR(1, VAR_VIEW_FIRST) }
YY_BREAK
case 90:
YY_RULE_SETUP
#line 300 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
YY_BREAK
case 91:
YY_RULE_SETUP
#line 301 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
YY_BREAK
case 92:
YY_RULE_SETUP
#line 302 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
YY_BREAK
case 93:
YY_RULE_SETUP
#line 303 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
YY_BREAK
case 94:
YY_RULE_SETUP
#line 304 "util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+{ YDVAR(1, VAR_HIDE_VERSION) }
YY_BREAK
case 95:
YY_RULE_SETUP
#line 305 "util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+{ YDVAR(1, VAR_IDENTITY) }
YY_BREAK
case 96:
YY_RULE_SETUP
#line 306 "util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+{ YDVAR(1, VAR_VERSION) }
YY_BREAK
case 97:
YY_RULE_SETUP
#line 307 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+{ YDVAR(1, VAR_MODULE_CONF) }
YY_BREAK
case 98:
YY_RULE_SETUP
#line 308 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR) }
YY_BREAK
case 99:
YY_RULE_SETUP
#line 309 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
YY_BREAK
case 100:
YY_RULE_SETUP
#line 310 "util/configlexer.lex"
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
YY_BREAK
case 101:
YY_RULE_SETUP
#line 311 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
YY_BREAK
case 102:
YY_RULE_SETUP
#line 312 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
YY_BREAK
case 103:
YY_RULE_SETUP
#line 313 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
YY_BREAK
case 104:
YY_RULE_SETUP
#line 314 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
YY_BREAK
case 105:
YY_RULE_SETUP
#line 315 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
YY_BREAK
case 106:
YY_RULE_SETUP
#line 316 "util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
YY_BREAK
case 107:
YY_RULE_SETUP
#line 317 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+{ YDVAR(1, VAR_BOGUS_TTL) }
YY_BREAK
case 108:
YY_RULE_SETUP
#line 318 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
YY_BREAK
case 109:
YY_RULE_SETUP
#line 319 "util/configlexer.lex"
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
YY_BREAK
case 110:
YY_RULE_SETUP
#line 320 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED) }
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
YY_BREAK
case 111:
YY_RULE_SETUP
#line 321 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_DSA) }
+{ YDVAR(1, VAR_SERVE_EXPIRED) }
YY_BREAK
case 112:
YY_RULE_SETUP
#line 322 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+{ YDVAR(1, VAR_FAKE_DSA) }
YY_BREAK
case 113:
YY_RULE_SETUP
#line 323 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
YY_BREAK
case 114:
YY_RULE_SETUP
#line 324 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
YY_BREAK
case 115:
YY_RULE_SETUP
#line 325 "util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
YY_BREAK
case 116:
YY_RULE_SETUP
#line 326 "util/configlexer.lex"
-{
- YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 328 "util/configlexer.lex"
-{ YDVAR(1, VAR_ADD_HOLDDOWN) }
+#line 327 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
YY_BREAK
case 118:
YY_RULE_SETUP
#line 329 "util/configlexer.lex"
-{ YDVAR(1, VAR_DEL_HOLDDOWN) }
+{ YDVAR(1, VAR_ADD_HOLDDOWN) }
YY_BREAK
case 119:
YY_RULE_SETUP
#line 330 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEEP_MISSING) }
+{ YDVAR(1, VAR_DEL_HOLDDOWN) }
YY_BREAK
case 120:
YY_RULE_SETUP
#line 331 "util/configlexer.lex"
-{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
+{ YDVAR(1, VAR_KEEP_MISSING) }
YY_BREAK
case 121:
YY_RULE_SETUP
#line 332 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
YY_BREAK
case 122:
YY_RULE_SETUP
#line 333 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_IDENTITY) }
+{ YDVAR(1, VAR_USE_SYSLOG) }
YY_BREAK
case 123:
YY_RULE_SETUP
#line 334 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+{ YDVAR(1, VAR_LOG_IDENTITY) }
YY_BREAK
case 124:
YY_RULE_SETUP
#line 335 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_QUERIES) }
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
YY_BREAK
case 125:
YY_RULE_SETUP
#line 336 "util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+{ YDVAR(1, VAR_LOG_QUERIES) }
YY_BREAK
case 126:
YY_RULE_SETUP
#line 337 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+{ YDVAR(1, VAR_LOG_REPLIES) }
YY_BREAK
case 127:
YY_RULE_SETUP
#line 338 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+{ YDVAR(2, VAR_LOCAL_ZONE) }
YY_BREAK
case 128:
YY_RULE_SETUP
#line 339 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
+{ YDVAR(1, VAR_LOCAL_DATA) }
YY_BREAK
case 129:
YY_RULE_SETUP
#line 340 "util/configlexer.lex"
-{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
YY_BREAK
case 130:
YY_RULE_SETUP
#line 341 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
YY_BREAK
case 131:
YY_RULE_SETUP
#line 342 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
YY_BREAK
case 132:
YY_RULE_SETUP
#line 343 "util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
YY_BREAK
case 133:
YY_RULE_SETUP
#line 344 "util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
YY_BREAK
case 134:
YY_RULE_SETUP
#line 345 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
YY_BREAK
case 135:
YY_RULE_SETUP
#line 346 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
YY_BREAK
case 136:
YY_RULE_SETUP
#line 347 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
YY_BREAK
case 137:
YY_RULE_SETUP
#line 348 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_USE_CERT) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
YY_BREAK
case 138:
YY_RULE_SETUP
#line 349 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
YY_BREAK
case 139:
YY_RULE_SETUP
#line 350 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_USE_CERT) }
YY_BREAK
case 140:
YY_RULE_SETUP
#line 351 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
YY_BREAK
case 141:
YY_RULE_SETUP
#line 352 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
YY_BREAK
case 142:
YY_RULE_SETUP
#line 353 "util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
YY_BREAK
case 143:
YY_RULE_SETUP
#line 354 "util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
YY_BREAK
case 144:
YY_RULE_SETUP
#line 355 "util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
YY_BREAK
case 145:
YY_RULE_SETUP
#line 356 "util/configlexer.lex"
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
+{ YDVAR(0, VAR_PYTHON) }
YY_BREAK
case 146:
YY_RULE_SETUP
#line 357 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
YY_BREAK
case 147:
YY_RULE_SETUP
#line 358 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_UDP_SIZE) }
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
YY_BREAK
case 148:
YY_RULE_SETUP
#line 359 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_PREFIX) }
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
YY_BREAK
case 149:
YY_RULE_SETUP
#line 360 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_SYNTHALL) }
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
YY_BREAK
case 150:
YY_RULE_SETUP
#line 361 "util/configlexer.lex"
-{ YDVAR(1, VAR_DEFINE_TAG) }
+{ YDVAR(1, VAR_DNS64_PREFIX) }
YY_BREAK
case 151:
YY_RULE_SETUP
#line 362 "util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
+{ YDVAR(1, VAR_DNS64_SYNTHALL) }
YY_BREAK
case 152:
YY_RULE_SETUP
#line 363 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
+{ YDVAR(1, VAR_DEFINE_TAG) }
YY_BREAK
case 153:
YY_RULE_SETUP
#line 364 "util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
+{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
YY_BREAK
case 154:
YY_RULE_SETUP
#line 365 "util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
YY_BREAK
case 155:
YY_RULE_SETUP
#line 366 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
YY_BREAK
case 156:
YY_RULE_SETUP
#line 367 "util/configlexer.lex"
-{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
YY_BREAK
case 157:
YY_RULE_SETUP
#line 368 "util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
YY_BREAK
case 158:
YY_RULE_SETUP
#line 369 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
YY_BREAK
case 159:
YY_RULE_SETUP
#line 370 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(0, VAR_DNSTAP) }
YY_BREAK
case 160:
YY_RULE_SETUP
#line 371 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
YY_BREAK
case 161:
YY_RULE_SETUP
#line 372 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
YY_BREAK
case 162:
YY_RULE_SETUP
#line 373 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
YY_BREAK
case 163:
YY_RULE_SETUP
#line 374 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
YY_BREAK
case 164:
YY_RULE_SETUP
#line 375 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
YY_BREAK
case 165:
YY_RULE_SETUP
-#line 377 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+#line 376 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
YY_BREAK
case 166:
YY_RULE_SETUP
-#line 379 "util/configlexer.lex"
+#line 377 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
YY_BREAK
case 167:
YY_RULE_SETUP
-#line 381 "util/configlexer.lex"
+#line 379 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
YY_BREAK
case 168:
YY_RULE_SETUP
-#line 383 "util/configlexer.lex"
+#line 381 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
YY_BREAK
case 169:
YY_RULE_SETUP
-#line 385 "util/configlexer.lex"
+#line 383 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
YY_BREAK
case 170:
YY_RULE_SETUP
-#line 387 "util/configlexer.lex"
-{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+#line 385 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
YY_BREAK
case 171:
YY_RULE_SETUP
-#line 388 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+#line 387 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
YY_BREAK
case 172:
YY_RULE_SETUP
#line 389 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
YY_BREAK
case 173:
YY_RULE_SETUP
#line 390 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_IP_RATELIMIT) }
YY_BREAK
case 174:
YY_RULE_SETUP
#line 391 "util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT) }
YY_BREAK
case 175:
YY_RULE_SETUP
#line 392 "util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
YY_BREAK
case 176:
YY_RULE_SETUP
#line 393 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
YY_BREAK
case 177:
-/* rule 177 can match eol */
YY_RULE_SETUP
#line 394 "util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++; }
+{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
YY_BREAK
-/* Quoted strings. Strip leading and ending quotes */
case 178:
YY_RULE_SETUP
+#line 395 "util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+ YY_BREAK
+case 179:
+YY_RULE_SETUP
+#line 396 "util/configlexer.lex"
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+ YY_BREAK
+case 180:
+YY_RULE_SETUP
#line 397 "util/configlexer.lex"
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+ YY_BREAK
+case 181:
+YY_RULE_SETUP
+#line 398 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
+ YY_BREAK
+case 182:
+YY_RULE_SETUP
+#line 399 "util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+ YY_BREAK
+case 183:
+/* rule 183 can match eol */
+YY_RULE_SETUP
+#line 400 "util/configlexer.lex"
+{ LEXOUT(("NL\n")); cfg_parser->line++; }
+ YY_BREAK
+/* Quoted strings. Strip leading and ending quotes */
+case 184:
+YY_RULE_SETUP
+#line 403 "util/configlexer.lex"
{ BEGIN(quotedstring); LEXOUT(("QS ")); }
YY_BREAK
case YY_STATE_EOF(quotedstring):
-#line 398 "util/configlexer.lex"
+#line 404 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 179:
+case 185:
YY_RULE_SETUP
-#line 403 "util/configlexer.lex"
+#line 409 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 180:
-/* rule 180 can match eol */
+case 186:
+/* rule 186 can match eol */
YY_RULE_SETUP
-#line 404 "util/configlexer.lex"
+#line 410 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end \"");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 181:
+case 187:
YY_RULE_SETUP
-#line 406 "util/configlexer.lex"
+#line 412 "util/configlexer.lex"
{
LEXOUT(("QE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3778,34 +3849,34 @@ YY_RULE_SETUP
}
YY_BREAK
/* Single Quoted strings. Strip leading and ending quotes */
-case 182:
+case 188:
YY_RULE_SETUP
-#line 418 "util/configlexer.lex"
+#line 424 "util/configlexer.lex"
{ BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
YY_BREAK
case YY_STATE_EOF(singlequotedstr):
-#line 419 "util/configlexer.lex"
+#line 425 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 183:
+case 189:
YY_RULE_SETUP
-#line 424 "util/configlexer.lex"
+#line 430 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 184:
-/* rule 184 can match eol */
+case 190:
+/* rule 190 can match eol */
YY_RULE_SETUP
-#line 425 "util/configlexer.lex"
+#line 431 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end '");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 185:
+case 191:
YY_RULE_SETUP
-#line 427 "util/configlexer.lex"
+#line 433 "util/configlexer.lex"
{
LEXOUT(("SQE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3818,38 +3889,38 @@ YY_RULE_SETUP
}
YY_BREAK
/* include: directive */
-case 186:
+case 192:
YY_RULE_SETUP
-#line 439 "util/configlexer.lex"
+#line 445 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
YY_BREAK
case YY_STATE_EOF(include):
-#line 441 "util/configlexer.lex"
+#line 447 "util/configlexer.lex"
{
yyerror("EOF inside include directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 187:
+case 193:
YY_RULE_SETUP
-#line 445 "util/configlexer.lex"
+#line 451 "util/configlexer.lex"
{ LEXOUT(("ISP ")); /* ignore */ }
YY_BREAK
-case 188:
-/* rule 188 can match eol */
+case 194:
+/* rule 194 can match eol */
YY_RULE_SETUP
-#line 446 "util/configlexer.lex"
+#line 452 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++;}
YY_BREAK
-case 189:
+case 195:
YY_RULE_SETUP
-#line 447 "util/configlexer.lex"
+#line 453 "util/configlexer.lex"
{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
YY_BREAK
-case 190:
+case 196:
YY_RULE_SETUP
-#line 448 "util/configlexer.lex"
+#line 454 "util/configlexer.lex"
{
LEXOUT(("Iunquotedstr(%s) ", yytext));
config_start_include_glob(yytext);
@@ -3857,27 +3928,27 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_quoted):
-#line 453 "util/configlexer.lex"
+#line 459 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 191:
+case 197:
YY_RULE_SETUP
-#line 457 "util/configlexer.lex"
+#line 463 "util/configlexer.lex"
{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 192:
-/* rule 192 can match eol */
+case 198:
+/* rule 198 can match eol */
YY_RULE_SETUP
-#line 458 "util/configlexer.lex"
+#line 464 "util/configlexer.lex"
{ yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev); }
YY_BREAK
-case 193:
+case 199:
YY_RULE_SETUP
-#line 460 "util/configlexer.lex"
+#line 466 "util/configlexer.lex"
{
LEXOUT(("IQE "));
yytext[yyleng - 1] = '\0';
@@ -3887,7 +3958,7 @@ YY_RULE_SETUP
YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(val):
-#line 466 "util/configlexer.lex"
+#line 472 "util/configlexer.lex"
{
LEXOUT(("LEXEOF "));
yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
@@ -3899,33 +3970,33 @@ case YY_STATE_EOF(val):
}
}
YY_BREAK
-case 194:
+case 200:
YY_RULE_SETUP
-#line 477 "util/configlexer.lex"
+#line 483 "util/configlexer.lex"
{ LEXOUT(("unquotedstr(%s) ", yytext));
if(--num_args == 0) { BEGIN(INITIAL); }
yylval.str = strdup(yytext); return STRING_ARG; }
YY_BREAK
-case 195:
+case 201:
YY_RULE_SETUP
-#line 481 "util/configlexer.lex"
+#line 487 "util/configlexer.lex"
{
ub_c_error_msg("unknown keyword '%s'", yytext);
}
YY_BREAK
-case 196:
+case 202:
YY_RULE_SETUP
-#line 485 "util/configlexer.lex"
+#line 491 "util/configlexer.lex"
{
ub_c_error_msg("stray '%s'", yytext);
}
YY_BREAK
-case 197:
+case 203:
YY_RULE_SETUP
-#line 489 "util/configlexer.lex"
+#line 495 "util/configlexer.lex"
ECHO;
YY_BREAK
-#line 3927 "<stdout>"
+#line 3998 "<stdout>"
case YY_END_OF_BUFFER:
{
@@ -4216,7 +4287,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1956 )
+ if ( yy_current_state >= 1997 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4244,11 +4315,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1956 )
+ if ( yy_current_state >= 1997 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 1955);
+ yy_is_jam = (yy_current_state == 1996);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -4887,7 +4958,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 489 "util/configlexer.lex"
+#line 495 "util/configlexer.lex"
diff --git a/util/configlexer.lex b/util/configlexer.lex
index a42f3adfe426..0e6037cd1b5f 100644
--- a/util/configlexer.lex
+++ b/util/configlexer.lex
@@ -233,6 +233,7 @@ ssl-upstream{COLON} { YDVAR(1, VAR_SSL_UPSTREAM) }
ssl-service-key{COLON} { YDVAR(1, VAR_SSL_SERVICE_KEY) }
ssl-service-pem{COLON} { YDVAR(1, VAR_SSL_SERVICE_PEM) }
ssl-port{COLON} { YDVAR(1, VAR_SSL_PORT) }
+use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) }
do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) }
interface{COLON} { YDVAR(1, VAR_INTERFACE) }
ip-address{COLON} { YDVAR(1, VAR_INTERFACE) }
@@ -333,6 +334,7 @@ use-syslog{COLON} { YDVAR(1, VAR_USE_SYSLOG) }
log-identity{COLON} { YDVAR(1, VAR_LOG_IDENTITY) }
log-time-ascii{COLON} { YDVAR(1, VAR_LOG_TIME_ASCII) }
log-queries{COLON} { YDVAR(1, VAR_LOG_QUERIES) }
+log-replies{COLON} { YDVAR(1, VAR_LOG_REPLIES) }
local-zone{COLON} { YDVAR(2, VAR_LOCAL_ZONE) }
local-data{COLON} { YDVAR(1, VAR_LOCAL_DATA) }
local-data-ptr{COLON} { YDVAR(1, VAR_LOCAL_DATA_PTR) }
@@ -385,11 +387,15 @@ dnstap-log-forwarder-query-messages{COLON} {
dnstap-log-forwarder-response-messages{COLON} {
YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
disable-dnssec-lame-check{COLON} { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+ip-ratelimit{COLON} { YDVAR(1, VAR_IP_RATELIMIT) }
ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) }
+ip-ratelimit-slabs{COLON} { YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
ratelimit-slabs{COLON} { YDVAR(1, VAR_RATELIMIT_SLABS) }
+ip-ratelimit-size{COLON} { YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
ratelimit-size{COLON} { YDVAR(1, VAR_RATELIMIT_SIZE) }
ratelimit-for-domain{COLON} { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
ratelimit-below-domain{COLON} { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+ip-ratelimit-factor{COLON} { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
ratelimit-factor{COLON} { YDVAR(1, VAR_RATELIMIT_FACTOR) }
<INITIAL,val>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; }
diff --git a/util/configparser.c b/util/configparser.c
index 9ceed14bc699..e9654f95fb9d 100644
--- a/util/configparser.c
+++ b/util/configparser.c
@@ -247,64 +247,70 @@ extern int yydebug;
VAR_HARDEN_BELOW_NXDOMAIN = 378,
VAR_IGNORE_CD_FLAG = 379,
VAR_LOG_QUERIES = 380,
- VAR_TCP_UPSTREAM = 381,
- VAR_SSL_UPSTREAM = 382,
- VAR_SSL_SERVICE_KEY = 383,
- VAR_SSL_SERVICE_PEM = 384,
- VAR_SSL_PORT = 385,
- VAR_FORWARD_FIRST = 386,
- VAR_STUB_SSL_UPSTREAM = 387,
- VAR_FORWARD_SSL_UPSTREAM = 388,
- VAR_STUB_FIRST = 389,
- VAR_MINIMAL_RESPONSES = 390,
- VAR_RRSET_ROUNDROBIN = 391,
- VAR_MAX_UDP_SIZE = 392,
- VAR_DELAY_CLOSE = 393,
- VAR_UNBLOCK_LAN_ZONES = 394,
- VAR_INSECURE_LAN_ZONES = 395,
- VAR_INFRA_CACHE_MIN_RTT = 396,
- VAR_DNS64_PREFIX = 397,
- VAR_DNS64_SYNTHALL = 398,
- VAR_DNSTAP = 399,
- VAR_DNSTAP_ENABLE = 400,
- VAR_DNSTAP_SOCKET_PATH = 401,
- VAR_DNSTAP_SEND_IDENTITY = 402,
- VAR_DNSTAP_SEND_VERSION = 403,
- VAR_DNSTAP_IDENTITY = 404,
- VAR_DNSTAP_VERSION = 405,
- VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 406,
- VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 407,
- VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 408,
- VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 409,
- VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 410,
- VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 411,
- VAR_HARDEN_ALGO_DOWNGRADE = 412,
- VAR_IP_TRANSPARENT = 413,
- VAR_DISABLE_DNSSEC_LAME_CHECK = 414,
- VAR_RATELIMIT = 415,
- VAR_RATELIMIT_SLABS = 416,
- VAR_RATELIMIT_SIZE = 417,
- VAR_RATELIMIT_FOR_DOMAIN = 418,
- VAR_RATELIMIT_BELOW_DOMAIN = 419,
- VAR_RATELIMIT_FACTOR = 420,
- VAR_CAPS_WHITELIST = 421,
- VAR_CACHE_MAX_NEGATIVE_TTL = 422,
- VAR_PERMIT_SMALL_HOLDDOWN = 423,
- VAR_QNAME_MINIMISATION = 424,
- VAR_QNAME_MINIMISATION_STRICT = 425,
- VAR_IP_FREEBIND = 426,
- VAR_DEFINE_TAG = 427,
- VAR_LOCAL_ZONE_TAG = 428,
- VAR_ACCESS_CONTROL_TAG = 429,
- VAR_LOCAL_ZONE_OVERRIDE = 430,
- VAR_ACCESS_CONTROL_TAG_ACTION = 431,
- VAR_ACCESS_CONTROL_TAG_DATA = 432,
- VAR_VIEW = 433,
- VAR_ACCESS_CONTROL_VIEW = 434,
- VAR_VIEW_FIRST = 435,
- VAR_SERVE_EXPIRED = 436,
- VAR_FAKE_DSA = 437,
- VAR_LOG_IDENTITY = 438
+ VAR_LOG_REPLIES = 381,
+ VAR_TCP_UPSTREAM = 382,
+ VAR_SSL_UPSTREAM = 383,
+ VAR_SSL_SERVICE_KEY = 384,
+ VAR_SSL_SERVICE_PEM = 385,
+ VAR_SSL_PORT = 386,
+ VAR_FORWARD_FIRST = 387,
+ VAR_STUB_SSL_UPSTREAM = 388,
+ VAR_FORWARD_SSL_UPSTREAM = 389,
+ VAR_STUB_FIRST = 390,
+ VAR_MINIMAL_RESPONSES = 391,
+ VAR_RRSET_ROUNDROBIN = 392,
+ VAR_MAX_UDP_SIZE = 393,
+ VAR_DELAY_CLOSE = 394,
+ VAR_UNBLOCK_LAN_ZONES = 395,
+ VAR_INSECURE_LAN_ZONES = 396,
+ VAR_INFRA_CACHE_MIN_RTT = 397,
+ VAR_DNS64_PREFIX = 398,
+ VAR_DNS64_SYNTHALL = 399,
+ VAR_DNSTAP = 400,
+ VAR_DNSTAP_ENABLE = 401,
+ VAR_DNSTAP_SOCKET_PATH = 402,
+ VAR_DNSTAP_SEND_IDENTITY = 403,
+ VAR_DNSTAP_SEND_VERSION = 404,
+ VAR_DNSTAP_IDENTITY = 405,
+ VAR_DNSTAP_VERSION = 406,
+ VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 407,
+ VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 408,
+ VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 409,
+ VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 410,
+ VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 411,
+ VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 412,
+ VAR_HARDEN_ALGO_DOWNGRADE = 413,
+ VAR_IP_TRANSPARENT = 414,
+ VAR_DISABLE_DNSSEC_LAME_CHECK = 415,
+ VAR_IP_RATELIMIT = 416,
+ VAR_IP_RATELIMIT_SLABS = 417,
+ VAR_IP_RATELIMIT_SIZE = 418,
+ VAR_RATELIMIT = 419,
+ VAR_RATELIMIT_SLABS = 420,
+ VAR_RATELIMIT_SIZE = 421,
+ VAR_RATELIMIT_FOR_DOMAIN = 422,
+ VAR_RATELIMIT_BELOW_DOMAIN = 423,
+ VAR_IP_RATELIMIT_FACTOR = 424,
+ VAR_RATELIMIT_FACTOR = 425,
+ VAR_CAPS_WHITELIST = 426,
+ VAR_CACHE_MAX_NEGATIVE_TTL = 427,
+ VAR_PERMIT_SMALL_HOLDDOWN = 428,
+ VAR_QNAME_MINIMISATION = 429,
+ VAR_QNAME_MINIMISATION_STRICT = 430,
+ VAR_IP_FREEBIND = 431,
+ VAR_DEFINE_TAG = 432,
+ VAR_LOCAL_ZONE_TAG = 433,
+ VAR_ACCESS_CONTROL_TAG = 434,
+ VAR_LOCAL_ZONE_OVERRIDE = 435,
+ VAR_ACCESS_CONTROL_TAG_ACTION = 436,
+ VAR_ACCESS_CONTROL_TAG_DATA = 437,
+ VAR_VIEW = 438,
+ VAR_ACCESS_CONTROL_VIEW = 439,
+ VAR_VIEW_FIRST = 440,
+ VAR_SERVE_EXPIRED = 441,
+ VAR_FAKE_DSA = 442,
+ VAR_LOG_IDENTITY = 443,
+ VAR_USE_SYSTEMD = 444
};
#endif
/* Tokens. */
@@ -431,64 +437,70 @@ extern int yydebug;
#define VAR_HARDEN_BELOW_NXDOMAIN 378
#define VAR_IGNORE_CD_FLAG 379
#define VAR_LOG_QUERIES 380
-#define VAR_TCP_UPSTREAM 381
-#define VAR_SSL_UPSTREAM 382
-#define VAR_SSL_SERVICE_KEY 383
-#define VAR_SSL_SERVICE_PEM 384
-#define VAR_SSL_PORT 385
-#define VAR_FORWARD_FIRST 386
-#define VAR_STUB_SSL_UPSTREAM 387
-#define VAR_FORWARD_SSL_UPSTREAM 388
-#define VAR_STUB_FIRST 389
-#define VAR_MINIMAL_RESPONSES 390
-#define VAR_RRSET_ROUNDROBIN 391
-#define VAR_MAX_UDP_SIZE 392
-#define VAR_DELAY_CLOSE 393
-#define VAR_UNBLOCK_LAN_ZONES 394
-#define VAR_INSECURE_LAN_ZONES 395
-#define VAR_INFRA_CACHE_MIN_RTT 396
-#define VAR_DNS64_PREFIX 397
-#define VAR_DNS64_SYNTHALL 398
-#define VAR_DNSTAP 399
-#define VAR_DNSTAP_ENABLE 400
-#define VAR_DNSTAP_SOCKET_PATH 401
-#define VAR_DNSTAP_SEND_IDENTITY 402
-#define VAR_DNSTAP_SEND_VERSION 403
-#define VAR_DNSTAP_IDENTITY 404
-#define VAR_DNSTAP_VERSION 405
-#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 406
-#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 407
-#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 408
-#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 409
-#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 410
-#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 411
-#define VAR_HARDEN_ALGO_DOWNGRADE 412
-#define VAR_IP_TRANSPARENT 413
-#define VAR_DISABLE_DNSSEC_LAME_CHECK 414
-#define VAR_RATELIMIT 415
-#define VAR_RATELIMIT_SLABS 416
-#define VAR_RATELIMIT_SIZE 417
-#define VAR_RATELIMIT_FOR_DOMAIN 418
-#define VAR_RATELIMIT_BELOW_DOMAIN 419
-#define VAR_RATELIMIT_FACTOR 420
-#define VAR_CAPS_WHITELIST 421
-#define VAR_CACHE_MAX_NEGATIVE_TTL 422
-#define VAR_PERMIT_SMALL_HOLDDOWN 423
-#define VAR_QNAME_MINIMISATION 424
-#define VAR_QNAME_MINIMISATION_STRICT 425
-#define VAR_IP_FREEBIND 426
-#define VAR_DEFINE_TAG 427
-#define VAR_LOCAL_ZONE_TAG 428
-#define VAR_ACCESS_CONTROL_TAG 429
-#define VAR_LOCAL_ZONE_OVERRIDE 430
-#define VAR_ACCESS_CONTROL_TAG_ACTION 431
-#define VAR_ACCESS_CONTROL_TAG_DATA 432
-#define VAR_VIEW 433
-#define VAR_ACCESS_CONTROL_VIEW 434
-#define VAR_VIEW_FIRST 435
-#define VAR_SERVE_EXPIRED 436
-#define VAR_FAKE_DSA 437
-#define VAR_LOG_IDENTITY 438
+#define VAR_LOG_REPLIES 381
+#define VAR_TCP_UPSTREAM 382
+#define VAR_SSL_UPSTREAM 383
+#define VAR_SSL_SERVICE_KEY 384
+#define VAR_SSL_SERVICE_PEM 385
+#define VAR_SSL_PORT 386
+#define VAR_FORWARD_FIRST 387
+#define VAR_STUB_SSL_UPSTREAM 388
+#define VAR_FORWARD_SSL_UPSTREAM 389
+#define VAR_STUB_FIRST 390
+#define VAR_MINIMAL_RESPONSES 391
+#define VAR_RRSET_ROUNDROBIN 392
+#define VAR_MAX_UDP_SIZE 393
+#define VAR_DELAY_CLOSE 394
+#define VAR_UNBLOCK_LAN_ZONES 395
+#define VAR_INSECURE_LAN_ZONES 396
+#define VAR_INFRA_CACHE_MIN_RTT 397
+#define VAR_DNS64_PREFIX 398
+#define VAR_DNS64_SYNTHALL 399
+#define VAR_DNSTAP 400
+#define VAR_DNSTAP_ENABLE 401
+#define VAR_DNSTAP_SOCKET_PATH 402
+#define VAR_DNSTAP_SEND_IDENTITY 403
+#define VAR_DNSTAP_SEND_VERSION 404
+#define VAR_DNSTAP_IDENTITY 405
+#define VAR_DNSTAP_VERSION 406
+#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 407
+#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 408
+#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 409
+#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 410
+#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 411
+#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 412
+#define VAR_HARDEN_ALGO_DOWNGRADE 413
+#define VAR_IP_TRANSPARENT 414
+#define VAR_DISABLE_DNSSEC_LAME_CHECK 415
+#define VAR_IP_RATELIMIT 416
+#define VAR_IP_RATELIMIT_SLABS 417
+#define VAR_IP_RATELIMIT_SIZE 418
+#define VAR_RATELIMIT 419
+#define VAR_RATELIMIT_SLABS 420
+#define VAR_RATELIMIT_SIZE 421
+#define VAR_RATELIMIT_FOR_DOMAIN 422
+#define VAR_RATELIMIT_BELOW_DOMAIN 423
+#define VAR_IP_RATELIMIT_FACTOR 424
+#define VAR_RATELIMIT_FACTOR 425
+#define VAR_CAPS_WHITELIST 426
+#define VAR_CACHE_MAX_NEGATIVE_TTL 427
+#define VAR_PERMIT_SMALL_HOLDDOWN 428
+#define VAR_QNAME_MINIMISATION 429
+#define VAR_QNAME_MINIMISATION_STRICT 430
+#define VAR_IP_FREEBIND 431
+#define VAR_DEFINE_TAG 432
+#define VAR_LOCAL_ZONE_TAG 433
+#define VAR_ACCESS_CONTROL_TAG 434
+#define VAR_LOCAL_ZONE_OVERRIDE 435
+#define VAR_ACCESS_CONTROL_TAG_ACTION 436
+#define VAR_ACCESS_CONTROL_TAG_DATA 437
+#define VAR_VIEW 438
+#define VAR_ACCESS_CONTROL_VIEW 439
+#define VAR_VIEW_FIRST 440
+#define VAR_SERVE_EXPIRED 441
+#define VAR_FAKE_DSA 442
+#define VAR_LOG_IDENTITY 443
+#define VAR_USE_SYSTEMD 444
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -499,7 +511,7 @@ union YYSTYPE
char* str;
-#line 503 "util/configparser.c" /* yacc.c:355 */
+#line 515 "util/configparser.c" /* yacc.c:355 */
};
typedef union YYSTYPE YYSTYPE;
@@ -516,7 +528,7 @@ int yyparse (void);
/* Copy the second part of user declarations. */
-#line 520 "util/configparser.c" /* yacc.c:358 */
+#line 532 "util/configparser.c" /* yacc.c:358 */
#ifdef short
# undef short
@@ -758,21 +770,21 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 363
+#define YYLAST 375
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 184
+#define YYNTOKENS 190
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 194
+#define YYNNTS 200
/* YYNRULES -- Number of rules. */
-#define YYNRULES 371
+#define YYNRULES 383
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 556
+#define YYNSTATES 574
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 438
+#define YYMAXUTOK 444
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -824,51 +836,53 @@ static const yytype_uint8 yytranslate[] =
145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183
+ 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
+ 185, 186, 187, 188, 189
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 137, 137, 137, 138, 138, 139, 139, 140, 140,
- 140, 145, 150, 151, 152, 152, 152, 153, 153, 154,
- 154, 155, 155, 156, 156, 157, 157, 157, 158, 158,
- 158, 159, 159, 160, 160, 161, 161, 162, 162, 163,
- 163, 164, 164, 165, 165, 166, 166, 167, 167, 167,
- 168, 168, 168, 169, 169, 169, 170, 170, 171, 171,
- 172, 172, 173, 173, 174, 174, 174, 175, 175, 176,
- 176, 177, 177, 177, 178, 178, 179, 179, 180, 180,
- 181, 181, 181, 182, 182, 183, 183, 184, 184, 185,
- 185, 186, 186, 187, 187, 187, 188, 188, 189, 189,
- 189, 190, 190, 190, 191, 191, 191, 192, 192, 192,
- 193, 193, 193, 194, 194, 194, 195, 195, 196, 196,
- 197, 197, 198, 198, 199, 199, 199, 200, 200, 201,
- 201, 202, 202, 203, 203, 204, 204, 204, 205, 205,
- 206, 206, 207, 207, 208, 208, 209, 209, 211, 223,
- 224, 225, 225, 225, 225, 225, 226, 228, 240, 241,
- 242, 242, 242, 242, 243, 245, 259, 260, 261, 261,
- 261, 261, 263, 272, 281, 292, 301, 310, 319, 332,
- 347, 356, 365, 374, 383, 392, 401, 410, 419, 428,
- 437, 446, 455, 464, 473, 482, 489, 496, 505, 514,
- 528, 537, 546, 553, 560, 584, 592, 599, 606, 613,
- 620, 628, 636, 644, 651, 658, 667, 676, 683, 690,
- 698, 706, 716, 726, 736, 749, 760, 768, 781, 790,
- 799, 808, 818, 828, 836, 849, 858, 866, 875, 883,
- 896, 905, 912, 922, 932, 942, 952, 962, 972, 982,
- 992, 999, 1006, 1013, 1022, 1031, 1040, 1047, 1057, 1074,
- 1081, 1099, 1112, 1125, 1134, 1143, 1152, 1161, 1171, 1181,
- 1190, 1199, 1210, 1219, 1226, 1235, 1244, 1253, 1262, 1270,
- 1283, 1291, 1319, 1326, 1341, 1351, 1361, 1368, 1375, 1384,
- 1398, 1417, 1436, 1448, 1460, 1472, 1483, 1492, 1500, 1513,
- 1526, 1539, 1548, 1558, 1568, 1578, 1585, 1592, 1601, 1611,
- 1621, 1631, 1638, 1645, 1654, 1664, 1674, 1703, 1712, 1721,
- 1726, 1727, 1728, 1728, 1728, 1729, 1729, 1729, 1730, 1730,
- 1732, 1742, 1751, 1758, 1768, 1775, 1782, 1789, 1796, 1801,
- 1802, 1803, 1803, 1804, 1804, 1805, 1805, 1806, 1807, 1808,
- 1809, 1810, 1811, 1813, 1821, 1828, 1836, 1844, 1851, 1858,
- 1867, 1876, 1885, 1894, 1903, 1912, 1917, 1918, 1919, 1921,
- 1927, 1937
+ 0, 141, 141, 141, 142, 142, 143, 143, 144, 144,
+ 144, 149, 154, 155, 156, 156, 156, 157, 157, 158,
+ 158, 159, 159, 160, 160, 161, 161, 161, 162, 162,
+ 162, 163, 163, 164, 164, 165, 165, 166, 166, 167,
+ 167, 168, 168, 169, 169, 170, 170, 171, 171, 171,
+ 172, 172, 172, 173, 173, 173, 174, 174, 175, 175,
+ 176, 176, 177, 177, 178, 178, 178, 179, 179, 180,
+ 180, 181, 181, 181, 182, 182, 183, 183, 184, 184,
+ 185, 185, 185, 186, 186, 187, 187, 188, 188, 189,
+ 189, 190, 190, 191, 191, 191, 192, 192, 193, 193,
+ 193, 194, 194, 194, 195, 195, 195, 196, 196, 196,
+ 196, 197, 197, 197, 198, 198, 198, 199, 199, 200,
+ 200, 201, 201, 202, 202, 203, 203, 203, 204, 204,
+ 205, 205, 206, 207, 207, 208, 209, 209, 210, 210,
+ 211, 211, 211, 212, 212, 213, 213, 214, 214, 215,
+ 215, 216, 216, 216, 218, 230, 231, 232, 232, 232,
+ 232, 232, 233, 235, 247, 248, 249, 249, 249, 249,
+ 250, 252, 266, 267, 268, 268, 268, 268, 270, 279,
+ 288, 299, 308, 317, 326, 339, 354, 363, 372, 381,
+ 390, 399, 408, 417, 426, 435, 444, 453, 462, 471,
+ 480, 489, 496, 503, 512, 521, 530, 544, 553, 562,
+ 571, 578, 585, 611, 619, 626, 633, 640, 647, 655,
+ 663, 671, 678, 685, 694, 703, 710, 717, 725, 733,
+ 743, 753, 763, 776, 787, 795, 808, 817, 826, 835,
+ 845, 855, 863, 876, 885, 893, 902, 910, 923, 932,
+ 939, 949, 959, 969, 979, 989, 999, 1009, 1019, 1026,
+ 1033, 1040, 1049, 1058, 1067, 1074, 1084, 1101, 1108, 1126,
+ 1139, 1152, 1161, 1170, 1179, 1188, 1198, 1208, 1217, 1226,
+ 1239, 1248, 1255, 1264, 1273, 1282, 1291, 1299, 1312, 1320,
+ 1348, 1355, 1370, 1380, 1390, 1397, 1404, 1413, 1427, 1446,
+ 1465, 1477, 1489, 1501, 1512, 1522, 1531, 1539, 1547, 1560,
+ 1573, 1586, 1599, 1608, 1617, 1627, 1637, 1647, 1654, 1661,
+ 1670, 1680, 1690, 1700, 1707, 1714, 1723, 1733, 1743, 1772,
+ 1781, 1790, 1795, 1796, 1797, 1797, 1797, 1798, 1798, 1798,
+ 1799, 1799, 1801, 1811, 1820, 1827, 1837, 1844, 1851, 1858,
+ 1865, 1870, 1871, 1872, 1872, 1873, 1873, 1874, 1874, 1875,
+ 1876, 1877, 1878, 1879, 1880, 1882, 1890, 1897, 1905, 1913,
+ 1920, 1927, 1936, 1945, 1954, 1963, 1972, 1981, 1986, 1987,
+ 1988, 1990, 1996, 2006
};
#endif
@@ -916,15 +930,15 @@ static const char *const yytname[] =
"VAR_SO_RCVBUF", "VAR_EDNS_BUFFER_SIZE", "VAR_PREFETCH",
"VAR_PREFETCH_KEY", "VAR_SO_SNDBUF", "VAR_SO_REUSEPORT",
"VAR_HARDEN_BELOW_NXDOMAIN", "VAR_IGNORE_CD_FLAG", "VAR_LOG_QUERIES",
- "VAR_TCP_UPSTREAM", "VAR_SSL_UPSTREAM", "VAR_SSL_SERVICE_KEY",
- "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT", "VAR_FORWARD_FIRST",
- "VAR_STUB_SSL_UPSTREAM", "VAR_FORWARD_SSL_UPSTREAM", "VAR_STUB_FIRST",
- "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE",
- "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES",
- "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
- "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH",
- "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION",
- "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
+ "VAR_LOG_REPLIES", "VAR_TCP_UPSTREAM", "VAR_SSL_UPSTREAM",
+ "VAR_SSL_SERVICE_KEY", "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT",
+ "VAR_FORWARD_FIRST", "VAR_STUB_SSL_UPSTREAM", "VAR_FORWARD_SSL_UPSTREAM",
+ "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN",
+ "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES",
+ "VAR_INSECURE_LAN_ZONES", "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX",
+ "VAR_DNS64_SYNTHALL", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE",
+ "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_SEND_IDENTITY",
+ "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
"VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES",
"VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES",
"VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
@@ -932,17 +946,19 @@ static const char *const yytname[] =
"VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
"VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES",
"VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT",
- "VAR_DISABLE_DNSSEC_LAME_CHECK", "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS",
- "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN",
- "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_RATELIMIT_FACTOR",
- "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
- "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION",
- "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG",
- "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG",
- "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION",
- "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW",
- "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_FAKE_DSA",
- "VAR_LOG_IDENTITY", "$accept", "toplevelvars", "toplevelvar",
+ "VAR_DISABLE_DNSSEC_LAME_CHECK", "VAR_IP_RATELIMIT",
+ "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE", "VAR_RATELIMIT",
+ "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN",
+ "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_IP_RATELIMIT_FACTOR",
+ "VAR_RATELIMIT_FACTOR", "VAR_CAPS_WHITELIST",
+ "VAR_CACHE_MAX_NEGATIVE_TTL", "VAR_PERMIT_SMALL_HOLDDOWN",
+ "VAR_QNAME_MINIMISATION", "VAR_QNAME_MINIMISATION_STRICT",
+ "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG",
+ "VAR_ACCESS_CONTROL_TAG", "VAR_LOCAL_ZONE_OVERRIDE",
+ "VAR_ACCESS_CONTROL_TAG_ACTION", "VAR_ACCESS_CONTROL_TAG_DATA",
+ "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST",
+ "VAR_SERVE_EXPIRED", "VAR_FAKE_DSA", "VAR_LOG_IDENTITY",
+ "VAR_USE_SYSTEMD", "$accept", "toplevelvars", "toplevelvar",
"serverstart", "contents_server", "content_server", "stubstart",
"contents_stub", "content_stub", "forwardstart", "contents_forward",
"content_forward", "viewstart", "contents_view", "content_view",
@@ -955,9 +971,10 @@ static const char *const yytname[] =
"server_do_ip6", "server_do_udp", "server_do_tcp", "server_prefer_ip6",
"server_tcp_mss", "server_outgoing_tcp_mss", "server_tcp_upstream",
"server_ssl_upstream", "server_ssl_service_key",
- "server_ssl_service_pem", "server_ssl_port", "server_do_daemonize",
- "server_use_syslog", "server_log_time_ascii", "server_log_queries",
- "server_chroot", "server_username", "server_directory", "server_logfile",
+ "server_ssl_service_pem", "server_ssl_port", "server_use_systemd",
+ "server_do_daemonize", "server_use_syslog", "server_log_time_ascii",
+ "server_log_queries", "server_log_replies", "server_chroot",
+ "server_username", "server_directory", "server_logfile",
"server_pidfile", "server_root_hints", "server_dlv_anchor_file",
"server_dlv_anchor", "server_auto_trust_anchor_file",
"server_trust_anchor_file", "server_trusted_keys_file",
@@ -997,14 +1014,15 @@ static const char *const yytname[] =
"server_dns64_synthall", "server_define_tag", "server_local_zone_tag",
"server_access_control_tag", "server_access_control_tag_action",
"server_access_control_tag_data", "server_local_zone_override",
- "server_access_control_view", "server_ratelimit",
- "server_ratelimit_size", "server_ratelimit_slabs",
+ "server_access_control_view", "server_ip_ratelimit", "server_ratelimit",
+ "server_ip_ratelimit_size", "server_ratelimit_size",
+ "server_ip_ratelimit_slabs", "server_ratelimit_slabs",
"server_ratelimit_for_domain", "server_ratelimit_below_domain",
- "server_ratelimit_factor", "server_qname_minimisation",
- "server_qname_minimisation_strict", "stub_name", "stub_host",
- "stub_addr", "stub_first", "stub_ssl_upstream", "stub_prime",
- "forward_name", "forward_host", "forward_addr", "forward_first",
- "forward_ssl_upstream", "view_name", "view_local_zone",
+ "server_ip_ratelimit_factor", "server_ratelimit_factor",
+ "server_qname_minimisation", "server_qname_minimisation_strict",
+ "stub_name", "stub_host", "stub_addr", "stub_first", "stub_ssl_upstream",
+ "stub_prime", "forward_name", "forward_host", "forward_addr",
+ "forward_first", "forward_ssl_upstream", "view_name", "view_local_zone",
"view_local_data", "view_first", "rcstart", "contents_rc", "content_rc",
"rc_control_enable", "rc_control_port", "rc_control_interface",
"rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file",
@@ -1046,14 +1064,14 @@ static const yytype_uint16 yytoknum[] =
405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
415, 416, 417, 418, 419, 420, 421, 422, 423, 424,
425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
- 435, 436, 437, 438
+ 435, 436, 437, 438, 439, 440, 441, 442, 443, 444
};
# endif
-#define YYPACT_NINF -130
+#define YYPACT_NINF -132
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-130)))
+ (!!((Yystate) == (-132)))
#define YYTABLE_NINF -1
@@ -1064,62 +1082,64 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- -130, 0, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, 135, -38,
- -34, -39, -64, -129, -105, -3, -2, -1, 2, 3,
- 26, 29, 30, 32, 33, 34, 35, 36, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 56, 57, 58, 59, 60,
+ -132, 0, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, 134, -39,
+ -35, -11, -62, -131, -106, -4, -3, -2, -1, 2,
+ 17, 18, 28, 29, 30, 32, 33, 34, 35, 36,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
82, 83, 85, 88, 90, 91, 92, 93, 94, 95,
96, 98, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 132, 133, 136, 165, 166, 167,
- 172, 173, 174, 216, 217, 218, 219, 220, 221, 222,
- 223, 224, 228, 232, 233, 256, 257, 258, 259, 269,
- 270, 271, 272, 273, 274, 275, 276, 277, 278, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, 279, 280, 281, 303, 305, 309,
- -130, -130, -130, -130, -130, -130, -130, 310, 311, 312,
- 313, 314, -130, -130, -130, -130, -130, -130, 315, 316,
- 317, 318, -130, -130, -130, -130, -130, 319, 320, 321,
- 322, 323, 324, 325, 326, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, 327, 328, 329, 330, 331, 332,
- 333, 334, 335, 336, 337, 338, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, 339,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, 340, 341,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, 342, 343, -130,
- -130, -130, -130, -130, -130, -130, -130, 344, 345, 346,
- 347, 348, 349, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, 350, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, 351, 352,
- 353, -130, -130, -130, -130, -130
+ 127, 128, 129, 130, 131, 132, 133, 165, 166, 167,
+ 171, 172, 215, 216, 217, 218, 219, 220, 221, 222,
+ 223, 227, 231, 232, 256, 257, 258, 259, 269, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 307, 309, 314, 315, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, 316, 317, 318, 319,
+ 320, 321, -132, -132, -132, -132, -132, -132, -132, 322,
+ 323, 324, 325, 326, -132, -132, -132, -132, -132, -132,
+ 327, 328, 329, 330, -132, -132, -132, -132, -132, 331,
+ 332, 333, 334, 335, 336, 337, 338, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, 339, 340, 341, 342,
+ 343, 344, 345, 346, 347, 348, 349, 350, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, 351, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ 352, 353, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, 354, 355, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, 356, 357, 358, 359, 360, 361,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, 362, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, 363, 364, 365, -132,
+ -132, -132, -132, -132
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1127,8 +1147,8 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 2, 0, 1, 11, 148, 157, 319, 365, 338, 165,
- 3, 13, 150, 159, 167, 321, 340, 367, 4, 5,
+ 2, 0, 1, 11, 154, 163, 331, 377, 350, 171,
+ 3, 13, 156, 165, 173, 333, 352, 379, 4, 5,
6, 10, 8, 9, 7, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1142,97 +1162,99 @@ static const yytype_uint16 yydefact[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
- 14, 15, 74, 77, 86, 16, 25, 65, 17, 78,
- 79, 36, 58, 73, 18, 19, 21, 22, 20, 23,
- 24, 108, 109, 110, 111, 112, 75, 64, 90, 107,
- 26, 27, 28, 29, 30, 66, 80, 81, 96, 52,
- 62, 53, 91, 46, 47, 48, 49, 100, 104, 116,
- 124, 135, 101, 59, 31, 32, 33, 88, 117, 118,
- 119, 34, 35, 37, 38, 40, 41, 39, 122, 42,
- 43, 44, 50, 69, 105, 83, 123, 76, 131, 84,
- 85, 102, 103, 89, 45, 67, 70, 51, 54, 92,
- 93, 68, 132, 94, 55, 56, 57, 106, 145, 146,
- 95, 63, 97, 98, 99, 133, 60, 61, 82, 71,
- 72, 87, 113, 114, 115, 120, 121, 136, 137, 139,
- 141, 142, 140, 143, 125, 127, 126, 128, 129, 130,
- 134, 144, 138, 147, 0, 0, 0, 0, 0, 0,
- 149, 151, 152, 153, 155, 156, 154, 0, 0, 0,
- 0, 0, 158, 160, 161, 162, 163, 164, 0, 0,
- 0, 0, 166, 168, 169, 170, 171, 0, 0, 0,
- 0, 0, 0, 0, 0, 320, 322, 324, 323, 329,
- 325, 326, 327, 328, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 339, 341, 342, 343,
- 344, 345, 346, 347, 348, 349, 350, 351, 352, 0,
- 366, 368, 173, 172, 177, 180, 178, 186, 187, 190,
- 188, 189, 191, 192, 202, 203, 204, 205, 206, 226,
- 227, 228, 233, 234, 183, 235, 236, 239, 237, 238,
- 241, 242, 243, 256, 215, 216, 217, 218, 244, 259,
- 211, 213, 260, 266, 267, 268, 184, 225, 278, 279,
- 212, 273, 199, 179, 207, 257, 263, 245, 0, 0,
- 282, 185, 174, 198, 249, 175, 181, 182, 208, 209,
- 280, 247, 251, 252, 176, 283, 229, 255, 200, 214,
- 261, 262, 265, 272, 210, 276, 274, 275, 219, 224,
- 253, 254, 220, 221, 246, 269, 201, 193, 194, 195,
- 196, 197, 284, 285, 286, 230, 231, 232, 240, 287,
- 288, 248, 222, 370, 296, 298, 297, 0, 0, 301,
- 250, 264, 277, 302, 303, 223, 289, 0, 0, 0,
- 0, 0, 0, 270, 271, 371, 304, 305, 306, 309,
- 308, 307, 310, 311, 312, 313, 314, 315, 0, 317,
- 318, 330, 332, 331, 334, 335, 336, 337, 333, 353,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 12, 14, 15, 74, 77,
+ 86, 16, 25, 65, 17, 78, 79, 36, 58, 73,
+ 18, 19, 21, 22, 20, 23, 24, 109, 110, 111,
+ 112, 113, 153, 75, 64, 90, 107, 108, 26, 27,
+ 28, 29, 30, 66, 80, 81, 96, 52, 62, 53,
+ 91, 46, 47, 48, 49, 100, 104, 117, 125, 140,
+ 101, 59, 31, 32, 33, 88, 118, 119, 120, 34,
+ 35, 37, 38, 40, 41, 39, 123, 42, 43, 44,
+ 50, 69, 105, 83, 124, 76, 136, 84, 85, 102,
+ 103, 89, 45, 67, 70, 51, 54, 92, 93, 68,
+ 137, 94, 55, 56, 57, 106, 150, 151, 95, 63,
+ 97, 98, 99, 138, 60, 61, 82, 71, 72, 87,
+ 114, 115, 116, 121, 122, 141, 142, 144, 146, 147,
+ 145, 148, 126, 127, 130, 131, 128, 129, 132, 133,
+ 135, 134, 139, 149, 143, 152, 0, 0, 0, 0,
+ 0, 0, 155, 157, 158, 159, 161, 162, 160, 0,
+ 0, 0, 0, 0, 164, 166, 167, 168, 169, 170,
+ 0, 0, 0, 0, 172, 174, 175, 176, 177, 0,
+ 0, 0, 0, 0, 0, 0, 0, 332, 334, 336,
+ 335, 341, 337, 338, 339, 340, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 351, 353,
354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
- 364, 369, 258, 281, 299, 300, 290, 291, 0, 0,
- 0, 295, 316, 294, 292, 293
+ 364, 0, 378, 380, 179, 178, 183, 186, 184, 192,
+ 193, 196, 194, 195, 197, 198, 210, 211, 212, 213,
+ 214, 234, 235, 236, 241, 242, 189, 243, 244, 247,
+ 245, 246, 249, 250, 251, 264, 223, 224, 225, 226,
+ 252, 267, 219, 221, 268, 274, 275, 276, 190, 233,
+ 286, 287, 220, 281, 206, 185, 215, 265, 271, 253,
+ 0, 0, 290, 191, 180, 205, 257, 181, 187, 188,
+ 216, 217, 288, 255, 259, 260, 182, 291, 237, 263,
+ 207, 222, 269, 270, 273, 280, 218, 284, 282, 283,
+ 227, 232, 261, 262, 228, 229, 254, 277, 208, 209,
+ 199, 200, 201, 202, 203, 292, 293, 294, 238, 239,
+ 240, 248, 295, 296, 256, 230, 382, 304, 308, 306,
+ 305, 309, 307, 0, 0, 312, 313, 258, 272, 285,
+ 314, 315, 231, 297, 0, 0, 0, 0, 0, 0,
+ 278, 279, 383, 204, 316, 317, 318, 321, 320, 319,
+ 322, 323, 324, 325, 326, 327, 0, 329, 330, 342,
+ 344, 343, 346, 347, 348, 349, 345, 365, 366, 367,
+ 368, 369, 370, 371, 372, 373, 374, 375, 376, 381,
+ 266, 289, 310, 311, 298, 299, 0, 0, 0, 303,
+ 328, 302, 300, 301
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+ -132, -132, -132, -132, -132, -132, -132, -132, -132, -132
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 1, 10, 11, 18, 159, 12, 19, 300, 13,
- 20, 312, 14, 21, 322, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
- 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
- 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 301, 302, 303,
- 304, 305, 306, 313, 314, 315, 316, 317, 323, 324,
- 325, 326, 15, 22, 335, 336, 337, 338, 339, 340,
- 341, 342, 343, 16, 23, 356, 357, 358, 359, 360,
- 361, 362, 363, 364, 365, 366, 367, 368, 17, 24,
- 370, 371, 292, 293
+ -1, 1, 10, 11, 18, 165, 12, 19, 312, 13,
+ 20, 324, 14, 21, 334, 166, 167, 168, 169, 170,
+ 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
+ 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
+ 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
+ 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
+ 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
+ 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
+ 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
+ 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
+ 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
+ 301, 302, 303, 313, 314, 315, 316, 317, 318, 325,
+ 326, 327, 328, 329, 335, 336, 337, 338, 15, 22,
+ 347, 348, 349, 350, 351, 352, 353, 354, 355, 16,
+ 23, 368, 369, 370, 371, 372, 373, 374, 375, 376,
+ 377, 378, 379, 380, 17, 24, 382, 383, 304, 305
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -1240,93 +1262,95 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint16 yytable[] =
{
- 2, 318, 294, 369, 295, 296, 307, 372, 373, 374,
- 0, 3, 375, 376, 308, 309, 344, 345, 346, 347,
- 348, 349, 350, 351, 352, 353, 354, 355, 327, 328,
- 329, 330, 331, 332, 333, 334, 377, 319, 320, 378,
- 379, 4, 380, 381, 382, 383, 384, 5, 385, 386,
- 387, 388, 389, 390, 391, 392, 393, 394, 395, 396,
- 397, 398, 399, 400, 401, 297, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 414, 415,
- 416, 417, 418, 419, 420, 421, 422, 423, 424, 425,
- 426, 6, 427, 428, 298, 429, 299, 310, 430, 311,
- 431, 432, 433, 434, 435, 436, 437, 7, 438, 439,
- 440, 441, 442, 443, 444, 445, 446, 447, 448, 449,
- 450, 451, 452, 453, 454, 455, 456, 457, 458, 459,
- 460, 461, 462, 463, 464, 465, 466, 467, 468, 469,
- 470, 321, 471, 472, 8, 0, 473, 25, 26, 27,
- 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 474, 475, 476, 9, 53,
- 54, 55, 477, 478, 479, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 480, 481, 482, 483,
- 484, 485, 486, 487, 488, 97, 98, 99, 489, 100,
- 101, 102, 490, 491, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 492, 493, 494, 495,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 496,
- 497, 498, 499, 500, 501, 502, 503, 504, 505, 506,
- 507, 508, 134, 135, 136, 137, 138, 139, 140, 141,
- 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 509, 155, 510, 156, 157, 158, 511,
- 512, 513, 514, 515, 516, 517, 518, 519, 520, 521,
- 522, 523, 524, 525, 526, 527, 528, 529, 530, 531,
- 532, 533, 534, 535, 536, 537, 538, 539, 540, 541,
- 542, 543, 544, 545, 546, 547, 548, 549, 550, 551,
- 552, 553, 554, 555
+ 2, 306, 381, 307, 308, 319, 384, 385, 386, 387,
+ 0, 3, 388, 320, 321, 356, 357, 358, 359, 360,
+ 361, 362, 363, 364, 365, 366, 367, 389, 390, 330,
+ 339, 340, 341, 342, 343, 344, 345, 346, 391, 392,
+ 393, 4, 394, 395, 396, 397, 398, 5, 399, 400,
+ 401, 402, 403, 404, 405, 406, 407, 408, 409, 410,
+ 411, 412, 413, 414, 309, 331, 332, 415, 416, 417,
+ 418, 419, 420, 421, 422, 423, 424, 425, 426, 427,
+ 428, 429, 430, 431, 432, 433, 434, 435, 436, 437,
+ 438, 6, 439, 440, 310, 441, 311, 322, 442, 323,
+ 443, 444, 445, 446, 447, 448, 449, 7, 450, 451,
+ 452, 453, 454, 455, 456, 457, 458, 459, 460, 461,
+ 462, 463, 464, 465, 466, 467, 468, 469, 470, 471,
+ 472, 473, 474, 475, 476, 477, 478, 479, 480, 481,
+ 482, 483, 484, 485, 0, 8, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 333, 486, 487, 488, 53, 54,
+ 55, 489, 490, 9, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 491, 492, 493, 494, 495,
+ 496, 497, 498, 499, 97, 98, 99, 500, 100, 101,
+ 102, 501, 502, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 503, 504, 505, 506,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 507,
+ 508, 509, 510, 511, 512, 513, 514, 515, 516, 517,
+ 518, 519, 135, 136, 137, 138, 139, 140, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, 520, 160, 521,
+ 161, 162, 163, 164, 522, 523, 524, 525, 526, 527,
+ 528, 529, 530, 531, 532, 533, 534, 535, 536, 537,
+ 538, 539, 540, 541, 542, 543, 544, 545, 546, 547,
+ 548, 549, 550, 551, 552, 553, 554, 555, 556, 557,
+ 558, 559, 560, 561, 562, 563, 564, 565, 566, 567,
+ 568, 569, 570, 571, 572, 573
};
static const yytype_int16 yycheck[] =
{
- 0, 40, 40, 108, 42, 43, 40, 10, 10, 10,
- -1, 11, 10, 10, 48, 49, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 92, 93,
- 94, 95, 96, 97, 98, 99, 10, 76, 77, 10,
+ 0, 40, 108, 42, 43, 40, 10, 10, 10, 10,
+ -1, 11, 10, 48, 49, 146, 147, 148, 149, 150,
+ 151, 152, 153, 154, 155, 156, 157, 10, 10, 40,
+ 92, 93, 94, 95, 96, 97, 98, 99, 10, 10,
10, 41, 10, 10, 10, 10, 10, 47, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 103, 10, 10, 10, 10,
+ 10, 10, 10, 10, 103, 76, 77, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 91, 10, 10, 132, 10, 134, 131, 10, 133,
+ 10, 91, 10, 10, 133, 10, 135, 132, 10, 134,
10, 10, 10, 10, 10, 10, 10, 107, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 180, 10, 10, 144, -1, 10, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 10, 10, 10, 178, 44,
- 45, 46, 10, 10, 10, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 100, 101, 102, 10, 104,
- 105, 106, 10, 10, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 10, 10, 10, 10,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 10,
+ 10, 10, 10, 10, -1, 145, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 185, 10, 10, 10, 44, 45,
+ 46, 10, 10, 183, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 100, 101, 102, 10, 104, 105,
+ 106, 10, 10, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 10, 10, 10, 10,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 10, 179, 10, 181, 182, 183, 10,
+ 10, 10, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 10, 184, 10,
+ 186, 187, 188, 189, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10
+ 10, 10, 10, 10, 10, 10
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint16 yystos[] =
{
- 0, 185, 0, 11, 41, 47, 91, 107, 144, 178,
- 186, 187, 190, 193, 196, 346, 357, 372, 188, 191,
- 194, 197, 347, 358, 373, 12, 13, 14, 15, 16,
+ 0, 191, 0, 11, 41, 47, 91, 107, 145, 183,
+ 192, 193, 196, 199, 202, 358, 369, 384, 194, 197,
+ 200, 203, 359, 370, 385, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 44, 45, 46, 50, 51, 52, 53,
@@ -1336,11 +1360,11 @@ static const yytype_uint16 yystos[] =
84, 85, 86, 87, 88, 89, 90, 100, 101, 102,
104, 105, 106, 109, 110, 111, 112, 113, 114, 115,
116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
- 126, 127, 128, 129, 130, 135, 136, 137, 138, 139,
- 140, 141, 142, 143, 157, 158, 159, 160, 161, 162,
+ 126, 127, 128, 129, 130, 131, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 158, 159, 160, 161, 162,
163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 179, 181, 182, 183, 189,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
+ 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
+ 184, 186, 187, 188, 189, 195, 205, 206, 207, 208,
209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
@@ -1353,15 +1377,16 @@ static const yytype_uint16 yystos[] =
299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 376, 377, 40, 42, 43, 103, 132, 134,
- 192, 331, 332, 333, 334, 335, 336, 40, 48, 49,
- 131, 133, 195, 337, 338, 339, 340, 341, 40, 76,
- 77, 180, 198, 342, 343, 344, 345, 92, 93, 94,
- 95, 96, 97, 98, 99, 348, 349, 350, 351, 352,
- 353, 354, 355, 356, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 359, 360, 361, 362,
- 363, 364, 365, 366, 367, 368, 369, 370, 371, 108,
- 374, 375, 10, 10, 10, 10, 10, 10, 10, 10,
+ 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
+ 339, 340, 341, 342, 388, 389, 40, 42, 43, 103,
+ 133, 135, 198, 343, 344, 345, 346, 347, 348, 40,
+ 48, 49, 132, 134, 201, 349, 350, 351, 352, 353,
+ 40, 76, 77, 185, 204, 354, 355, 356, 357, 92,
+ 93, 94, 95, 96, 97, 98, 99, 360, 361, 362,
+ 363, 364, 365, 366, 367, 368, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 371, 372,
+ 373, 374, 375, 376, 377, 378, 379, 380, 381, 382,
+ 383, 108, 386, 387, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
@@ -1379,30 +1404,31 @@ static const yytype_uint16 yystos[] =
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint16 yyr1[] =
{
- 0, 184, 185, 185, 186, 186, 186, 186, 186, 186,
- 186, 187, 188, 188, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
- 189, 189, 189, 189, 189, 189, 189, 189, 190, 191,
- 191, 192, 192, 192, 192, 192, 192, 193, 194, 194,
- 195, 195, 195, 195, 195, 196, 197, 197, 198, 198,
- 198, 198, 199, 200, 201, 202, 203, 204, 205, 206,
+ 0, 190, 191, 191, 192, 192, 192, 192, 192, 192,
+ 192, 193, 194, 194, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 196, 197, 197, 198, 198, 198,
+ 198, 198, 198, 199, 200, 200, 201, 201, 201, 201,
+ 201, 202, 203, 203, 204, 204, 204, 204, 205, 206,
207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
@@ -1417,12 +1443,13 @@ static const yytype_uint16 yyr1[] =
317, 318, 319, 320, 321, 322, 323, 324, 325, 326,
327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
337, 338, 339, 340, 341, 342, 343, 344, 345, 346,
- 347, 347, 348, 348, 348, 348, 348, 348, 348, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
- 358, 359, 359, 359, 359, 359, 359, 359, 359, 359,
- 359, 359, 359, 360, 361, 362, 363, 364, 365, 366,
- 367, 368, 369, 370, 371, 372, 373, 373, 374, 375,
- 376, 377
+ 347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
+ 357, 358, 359, 359, 360, 360, 360, 360, 360, 360,
+ 360, 360, 361, 362, 363, 364, 365, 366, 367, 368,
+ 369, 370, 370, 371, 371, 371, 371, 371, 371, 371,
+ 371, 371, 371, 371, 371, 372, 373, 374, 375, 376,
+ 377, 378, 379, 380, 381, 382, 383, 384, 385, 385,
+ 386, 387, 388, 389
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -1442,10 +1469,10 @@ static const yytype_uint8 yyr2[] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 0, 1, 1, 1, 1, 1, 1, 1, 2, 0,
- 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
- 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 0, 1, 1, 1,
+ 1, 1, 1, 1, 2, 0, 1, 1, 1, 1,
+ 1, 1, 2, 0, 1, 1, 1, 1, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -1453,19 +1480,20 @@ static const yytype_uint8 yyr2[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 3, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 4, 4, 4, 3, 2, 2, 2, 3,
- 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 2, 2, 1,
- 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 1, 2,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 2, 0, 1, 2,
- 2, 2
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
+ 4, 4, 4, 3, 2, 2, 2, 2, 2, 2,
+ 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 1, 2, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 2, 0,
+ 1, 2, 2, 2
};
@@ -2142,15 +2170,15 @@ yyreduce:
switch (yyn)
{
case 11:
-#line 146 "util/configparser.y" /* yacc.c:1646 */
+#line 150 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("\nP(server:)\n"));
}
-#line 2150 "util/configparser.c" /* yacc.c:1646 */
+#line 2178 "util/configparser.c" /* yacc.c:1646 */
break;
- case 148:
-#line 212 "util/configparser.y" /* yacc.c:1646 */
+ case 154:
+#line 219 "util/configparser.y" /* yacc.c:1646 */
{
struct config_stub* s;
OUTYY(("\nP(stub_zone:)\n"));
@@ -2161,11 +2189,11 @@ yyreduce:
} else
yyerror("out of memory");
}
-#line 2165 "util/configparser.c" /* yacc.c:1646 */
+#line 2193 "util/configparser.c" /* yacc.c:1646 */
break;
- case 157:
-#line 229 "util/configparser.y" /* yacc.c:1646 */
+ case 163:
+#line 236 "util/configparser.y" /* yacc.c:1646 */
{
struct config_stub* s;
OUTYY(("\nP(forward_zone:)\n"));
@@ -2176,11 +2204,11 @@ yyreduce:
} else
yyerror("out of memory");
}
-#line 2180 "util/configparser.c" /* yacc.c:1646 */
+#line 2208 "util/configparser.c" /* yacc.c:1646 */
break;
- case 165:
-#line 246 "util/configparser.y" /* yacc.c:1646 */
+ case 171:
+#line 253 "util/configparser.y" /* yacc.c:1646 */
{
struct config_view* s;
OUTYY(("\nP(view:)\n"));
@@ -2193,11 +2221,11 @@ yyreduce:
} else
yyerror("out of memory");
}
-#line 2197 "util/configparser.c" /* yacc.c:1646 */
+#line 2225 "util/configparser.c" /* yacc.c:1646 */
break;
- case 172:
-#line 264 "util/configparser.y" /* yacc.c:1646 */
+ case 178:
+#line 271 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2205,11 +2233,11 @@ yyreduce:
else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2209 "util/configparser.c" /* yacc.c:1646 */
+#line 2237 "util/configparser.c" /* yacc.c:1646 */
break;
- case 173:
-#line 273 "util/configparser.y" /* yacc.c:1646 */
+ case 179:
+#line 280 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2217,11 +2245,11 @@ yyreduce:
else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2221 "util/configparser.c" /* yacc.c:1646 */
+#line 2249 "util/configparser.c" /* yacc.c:1646 */
break;
- case 174:
-#line 282 "util/configparser.y" /* yacc.c:1646 */
+ case 180:
+#line 289 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -2231,11 +2259,11 @@ yyreduce:
else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2235 "util/configparser.c" /* yacc.c:1646 */
+#line 2263 "util/configparser.c" /* yacc.c:1646 */
break;
- case 175:
-#line 293 "util/configparser.y" /* yacc.c:1646 */
+ case 181:
+#line 300 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2243,11 +2271,11 @@ yyreduce:
else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2247 "util/configparser.c" /* yacc.c:1646 */
+#line 2275 "util/configparser.c" /* yacc.c:1646 */
break;
- case 176:
-#line 302 "util/configparser.y" /* yacc.c:1646 */
+ case 182:
+#line 309 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2255,11 +2283,11 @@ yyreduce:
else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2259 "util/configparser.c" /* yacc.c:1646 */
+#line 2287 "util/configparser.c" /* yacc.c:1646 */
break;
- case 177:
-#line 311 "util/configparser.y" /* yacc.c:1646 */
+ case 183:
+#line 318 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2267,11 +2295,11 @@ yyreduce:
else cfg_parser->cfg->port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2271 "util/configparser.c" /* yacc.c:1646 */
+#line 2299 "util/configparser.c" /* yacc.c:1646 */
break;
- case 178:
-#line 320 "util/configparser.y" /* yacc.c:1646 */
+ case 184:
+#line 327 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_ifs == 0)
@@ -2283,11 +2311,11 @@ yyreduce:
else
cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
}
-#line 2287 "util/configparser.c" /* yacc.c:1646 */
+#line 2315 "util/configparser.c" /* yacc.c:1646 */
break;
- case 179:
-#line 333 "util/configparser.y" /* yacc.c:1646 */
+ case 185:
+#line 340 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2301,11 +2329,11 @@ yyreduce:
cfg_parser->cfg->out_ifs[
cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
}
-#line 2305 "util/configparser.c" /* yacc.c:1646 */
+#line 2333 "util/configparser.c" /* yacc.c:1646 */
break;
- case 180:
-#line 348 "util/configparser.y" /* yacc.c:1646 */
+ case 186:
+#line 355 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2313,11 +2341,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2317 "util/configparser.c" /* yacc.c:1646 */
+#line 2345 "util/configparser.c" /* yacc.c:1646 */
break;
- case 181:
-#line 357 "util/configparser.y" /* yacc.c:1646 */
+ case 187:
+#line 364 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
if(!cfg_mark_ports((yyvsp[0].str), 1,
@@ -2325,11 +2353,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 2329 "util/configparser.c" /* yacc.c:1646 */
+#line 2357 "util/configparser.c" /* yacc.c:1646 */
break;
- case 182:
-#line 366 "util/configparser.y" /* yacc.c:1646 */
+ case 188:
+#line 373 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
if(!cfg_mark_ports((yyvsp[0].str), 0,
@@ -2337,11 +2365,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 2341 "util/configparser.c" /* yacc.c:1646 */
+#line 2369 "util/configparser.c" /* yacc.c:1646 */
break;
- case 183:
-#line 375 "util/configparser.y" /* yacc.c:1646 */
+ case 189:
+#line 382 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2349,11 +2377,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2353 "util/configparser.c" /* yacc.c:1646 */
+#line 2381 "util/configparser.c" /* yacc.c:1646 */
break;
- case 184:
-#line 384 "util/configparser.y" /* yacc.c:1646 */
+ case 190:
+#line 391 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2361,11 +2389,11 @@ yyreduce:
else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2365 "util/configparser.c" /* yacc.c:1646 */
+#line 2393 "util/configparser.c" /* yacc.c:1646 */
break;
- case 185:
-#line 393 "util/configparser.y" /* yacc.c:1646 */
+ case 191:
+#line 400 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2373,11 +2401,11 @@ yyreduce:
else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2377 "util/configparser.c" /* yacc.c:1646 */
+#line 2405 "util/configparser.c" /* yacc.c:1646 */
break;
- case 186:
-#line 402 "util/configparser.y" /* yacc.c:1646 */
+ case 192:
+#line 409 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2385,11 +2413,11 @@ yyreduce:
else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2389 "util/configparser.c" /* yacc.c:1646 */
+#line 2417 "util/configparser.c" /* yacc.c:1646 */
break;
- case 187:
-#line 411 "util/configparser.y" /* yacc.c:1646 */
+ case 193:
+#line 418 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2397,11 +2425,11 @@ yyreduce:
else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2401 "util/configparser.c" /* yacc.c:1646 */
+#line 2429 "util/configparser.c" /* yacc.c:1646 */
break;
- case 188:
-#line 420 "util/configparser.y" /* yacc.c:1646 */
+ case 194:
+#line 427 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2409,11 +2437,11 @@ yyreduce:
else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2413 "util/configparser.c" /* yacc.c:1646 */
+#line 2441 "util/configparser.c" /* yacc.c:1646 */
break;
- case 189:
-#line 429 "util/configparser.y" /* yacc.c:1646 */
+ case 195:
+#line 436 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2421,11 +2449,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2425 "util/configparser.c" /* yacc.c:1646 */
+#line 2453 "util/configparser.c" /* yacc.c:1646 */
break;
- case 190:
-#line 438 "util/configparser.y" /* yacc.c:1646 */
+ case 196:
+#line 445 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2433,11 +2461,11 @@ yyreduce:
else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2437 "util/configparser.c" /* yacc.c:1646 */
+#line 2465 "util/configparser.c" /* yacc.c:1646 */
break;
- case 191:
-#line 447 "util/configparser.y" /* yacc.c:1646 */
+ case 197:
+#line 454 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2445,11 +2473,11 @@ yyreduce:
else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2449 "util/configparser.c" /* yacc.c:1646 */
+#line 2477 "util/configparser.c" /* yacc.c:1646 */
break;
- case 192:
-#line 456 "util/configparser.y" /* yacc.c:1646 */
+ case 198:
+#line 463 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2457,11 +2485,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2461 "util/configparser.c" /* yacc.c:1646 */
+#line 2489 "util/configparser.c" /* yacc.c:1646 */
break;
- case 193:
-#line 465 "util/configparser.y" /* yacc.c:1646 */
+ case 199:
+#line 472 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2469,11 +2497,11 @@ yyreduce:
else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2473 "util/configparser.c" /* yacc.c:1646 */
+#line 2501 "util/configparser.c" /* yacc.c:1646 */
break;
- case 194:
-#line 474 "util/configparser.y" /* yacc.c:1646 */
+ case 200:
+#line 481 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2481,31 +2509,31 @@ yyreduce:
else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2485 "util/configparser.c" /* yacc.c:1646 */
+#line 2513 "util/configparser.c" /* yacc.c:1646 */
break;
- case 195:
-#line 483 "util/configparser.y" /* yacc.c:1646 */
+ case 201:
+#line 490 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->ssl_service_key);
cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
}
-#line 2495 "util/configparser.c" /* yacc.c:1646 */
+#line 2523 "util/configparser.c" /* yacc.c:1646 */
break;
- case 196:
-#line 490 "util/configparser.y" /* yacc.c:1646 */
+ case 202:
+#line 497 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->ssl_service_pem);
cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
}
-#line 2505 "util/configparser.c" /* yacc.c:1646 */
+#line 2533 "util/configparser.c" /* yacc.c:1646 */
break;
- case 197:
-#line 497 "util/configparser.y" /* yacc.c:1646 */
+ case 203:
+#line 504 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2513,11 +2541,23 @@ yyreduce:
else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2517 "util/configparser.c" /* yacc.c:1646 */
+#line 2545 "util/configparser.c" /* yacc.c:1646 */
break;
- case 198:
-#line 506 "util/configparser.y" /* yacc.c:1646 */
+ case 204:
+#line 513 "util/configparser.y" /* yacc.c:1646 */
+ {
+ OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 2557 "util/configparser.c" /* yacc.c:1646 */
+ break;
+
+ case 205:
+#line 522 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2525,11 +2565,11 @@ yyreduce:
else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2529 "util/configparser.c" /* yacc.c:1646 */
+#line 2569 "util/configparser.c" /* yacc.c:1646 */
break;
- case 199:
-#line 515 "util/configparser.y" /* yacc.c:1646 */
+ case 206:
+#line 531 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2542,11 +2582,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 2546 "util/configparser.c" /* yacc.c:1646 */
+#line 2586 "util/configparser.c" /* yacc.c:1646 */
break;
- case 200:
-#line 529 "util/configparser.y" /* yacc.c:1646 */
+ case 207:
+#line 545 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2554,11 +2594,11 @@ yyreduce:
else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2558 "util/configparser.c" /* yacc.c:1646 */
+#line 2598 "util/configparser.c" /* yacc.c:1646 */
break;
- case 201:
-#line 538 "util/configparser.y" /* yacc.c:1646 */
+ case 208:
+#line 554 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2566,31 +2606,43 @@ yyreduce:
else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2570 "util/configparser.c" /* yacc.c:1646 */
+#line 2610 "util/configparser.c" /* yacc.c:1646 */
break;
- case 202:
-#line 547 "util/configparser.y" /* yacc.c:1646 */
+ case 209:
+#line 563 "util/configparser.y" /* yacc.c:1646 */
+ {
+ OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 2622 "util/configparser.c" /* yacc.c:1646 */
+ break;
+
+ case 210:
+#line 572 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->chrootdir);
cfg_parser->cfg->chrootdir = (yyvsp[0].str);
}
-#line 2580 "util/configparser.c" /* yacc.c:1646 */
+#line 2632 "util/configparser.c" /* yacc.c:1646 */
break;
- case 203:
-#line 554 "util/configparser.y" /* yacc.c:1646 */
+ case 211:
+#line 579 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->username);
cfg_parser->cfg->username = (yyvsp[0].str);
}
-#line 2590 "util/configparser.c" /* yacc.c:1646 */
+#line 2642 "util/configparser.c" /* yacc.c:1646 */
break;
- case 204:
-#line 561 "util/configparser.y" /* yacc.c:1646 */
+ case 212:
+#line 586 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->directory);
@@ -2608,120 +2660,122 @@ yyreduce:
strncmp(d, cfg_parser->chroot, strlen(
cfg_parser->chroot)) == 0)
d += strlen(cfg_parser->chroot);
- if(chdir(d))
+ if(d[0]) {
+ if(chdir(d))
log_err("cannot chdir to directory: %s (%s)",
d, strerror(errno));
+ }
}
}
-#line 2617 "util/configparser.c" /* yacc.c:1646 */
+#line 2671 "util/configparser.c" /* yacc.c:1646 */
break;
- case 205:
-#line 585 "util/configparser.y" /* yacc.c:1646 */
+ case 213:
+#line 612 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->logfile);
cfg_parser->cfg->logfile = (yyvsp[0].str);
cfg_parser->cfg->use_syslog = 0;
}
-#line 2628 "util/configparser.c" /* yacc.c:1646 */
+#line 2682 "util/configparser.c" /* yacc.c:1646 */
break;
- case 206:
-#line 593 "util/configparser.y" /* yacc.c:1646 */
+ case 214:
+#line 620 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->pidfile);
cfg_parser->cfg->pidfile = (yyvsp[0].str);
}
-#line 2638 "util/configparser.c" /* yacc.c:1646 */
+#line 2692 "util/configparser.c" /* yacc.c:1646 */
break;
- case 207:
-#line 600 "util/configparser.y" /* yacc.c:1646 */
+ case 215:
+#line 627 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 2648 "util/configparser.c" /* yacc.c:1646 */
+#line 2702 "util/configparser.c" /* yacc.c:1646 */
break;
- case 208:
-#line 607 "util/configparser.y" /* yacc.c:1646 */
+ case 216:
+#line 634 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dlv_anchor_file);
cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str);
}
-#line 2658 "util/configparser.c" /* yacc.c:1646 */
+#line 2712 "util/configparser.c" /* yacc.c:1646 */
break;
- case 209:
-#line 614 "util/configparser.y" /* yacc.c:1646 */
+ case 217:
+#line 641 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 2668 "util/configparser.c" /* yacc.c:1646 */
+#line 2722 "util/configparser.c" /* yacc.c:1646 */
break;
- case 210:
-#line 621 "util/configparser.y" /* yacc.c:1646 */
+ case 218:
+#line 648 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->
auto_trust_anchor_file_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 2679 "util/configparser.c" /* yacc.c:1646 */
+#line 2733 "util/configparser.c" /* yacc.c:1646 */
break;
- case 211:
-#line 629 "util/configparser.y" /* yacc.c:1646 */
+ case 219:
+#line 656 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->
trust_anchor_file_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 2690 "util/configparser.c" /* yacc.c:1646 */
+#line 2744 "util/configparser.c" /* yacc.c:1646 */
break;
- case 212:
-#line 637 "util/configparser.y" /* yacc.c:1646 */
+ case 220:
+#line 664 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->
trusted_keys_file_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 2701 "util/configparser.c" /* yacc.c:1646 */
+#line 2755 "util/configparser.c" /* yacc.c:1646 */
break;
- case 213:
-#line 645 "util/configparser.y" /* yacc.c:1646 */
+ case 221:
+#line 672 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 2711 "util/configparser.c" /* yacc.c:1646 */
+#line 2765 "util/configparser.c" /* yacc.c:1646 */
break;
- case 214:
-#line 652 "util/configparser.y" /* yacc.c:1646 */
+ case 222:
+#line 679 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 2721 "util/configparser.c" /* yacc.c:1646 */
+#line 2775 "util/configparser.c" /* yacc.c:1646 */
break;
- case 215:
-#line 659 "util/configparser.y" /* yacc.c:1646 */
+ case 223:
+#line 686 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2729,11 +2783,11 @@ yyreduce:
else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2733 "util/configparser.c" /* yacc.c:1646 */
+#line 2787 "util/configparser.c" /* yacc.c:1646 */
break;
- case 216:
-#line 668 "util/configparser.y" /* yacc.c:1646 */
+ case 224:
+#line 695 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2741,53 +2795,53 @@ yyreduce:
else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2745 "util/configparser.c" /* yacc.c:1646 */
+#line 2799 "util/configparser.c" /* yacc.c:1646 */
break;
- case 217:
-#line 677 "util/configparser.y" /* yacc.c:1646 */
+ case 225:
+#line 704 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->identity);
cfg_parser->cfg->identity = (yyvsp[0].str);
}
-#line 2755 "util/configparser.c" /* yacc.c:1646 */
+#line 2809 "util/configparser.c" /* yacc.c:1646 */
break;
- case 218:
-#line 684 "util/configparser.y" /* yacc.c:1646 */
+ case 226:
+#line 711 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->version);
cfg_parser->cfg->version = (yyvsp[0].str);
}
-#line 2765 "util/configparser.c" /* yacc.c:1646 */
+#line 2819 "util/configparser.c" /* yacc.c:1646 */
break;
- case 219:
-#line 691 "util/configparser.y" /* yacc.c:1646 */
+ case 227:
+#line 718 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
yyerror("buffer size expected");
free((yyvsp[0].str));
}
-#line 2776 "util/configparser.c" /* yacc.c:1646 */
+#line 2830 "util/configparser.c" /* yacc.c:1646 */
break;
- case 220:
-#line 699 "util/configparser.y" /* yacc.c:1646 */
+ case 228:
+#line 726 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
yyerror("buffer size expected");
free((yyvsp[0].str));
}
-#line 2787 "util/configparser.c" /* yacc.c:1646 */
+#line 2841 "util/configparser.c" /* yacc.c:1646 */
break;
- case 221:
-#line 707 "util/configparser.y" /* yacc.c:1646 */
+ case 229:
+#line 734 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2796,11 +2850,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2800 "util/configparser.c" /* yacc.c:1646 */
+#line 2854 "util/configparser.c" /* yacc.c:1646 */
break;
- case 222:
-#line 717 "util/configparser.y" /* yacc.c:1646 */
+ case 230:
+#line 744 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2809,11 +2863,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2813 "util/configparser.c" /* yacc.c:1646 */
+#line 2867 "util/configparser.c" /* yacc.c:1646 */
break;
- case 223:
-#line 727 "util/configparser.y" /* yacc.c:1646 */
+ case 231:
+#line 754 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2822,11 +2876,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2826 "util/configparser.c" /* yacc.c:1646 */
+#line 2880 "util/configparser.c" /* yacc.c:1646 */
break;
- case 224:
-#line 737 "util/configparser.y" /* yacc.c:1646 */
+ case 232:
+#line 764 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2838,11 +2892,11 @@ yyreduce:
else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2842 "util/configparser.c" /* yacc.c:1646 */
+#line 2896 "util/configparser.c" /* yacc.c:1646 */
break;
- case 225:
-#line 750 "util/configparser.y" /* yacc.c:1646 */
+ case 233:
+#line 777 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2852,22 +2906,22 @@ yyreduce:
else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2856 "util/configparser.c" /* yacc.c:1646 */
+#line 2910 "util/configparser.c" /* yacc.c:1646 */
break;
- case 226:
-#line 761 "util/configparser.y" /* yacc.c:1646 */
+ case 234:
+#line 788 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 2867 "util/configparser.c" /* yacc.c:1646 */
+#line 2921 "util/configparser.c" /* yacc.c:1646 */
break;
- case 227:
-#line 769 "util/configparser.y" /* yacc.c:1646 */
+ case 235:
+#line 796 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2879,11 +2933,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 2883 "util/configparser.c" /* yacc.c:1646 */
+#line 2937 "util/configparser.c" /* yacc.c:1646 */
break;
- case 228:
-#line 782 "util/configparser.y" /* yacc.c:1646 */
+ case 236:
+#line 809 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2891,11 +2945,11 @@ yyreduce:
else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2895 "util/configparser.c" /* yacc.c:1646 */
+#line 2949 "util/configparser.c" /* yacc.c:1646 */
break;
- case 229:
-#line 791 "util/configparser.y" /* yacc.c:1646 */
+ case 237:
+#line 818 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2903,11 +2957,11 @@ yyreduce:
else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2907 "util/configparser.c" /* yacc.c:1646 */
+#line 2961 "util/configparser.c" /* yacc.c:1646 */
break;
- case 230:
-#line 800 "util/configparser.y" /* yacc.c:1646 */
+ case 238:
+#line 827 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2915,11 +2969,11 @@ yyreduce:
else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2919 "util/configparser.c" /* yacc.c:1646 */
+#line 2973 "util/configparser.c" /* yacc.c:1646 */
break;
- case 231:
-#line 809 "util/configparser.y" /* yacc.c:1646 */
+ case 239:
+#line 836 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2928,11 +2982,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2932 "util/configparser.c" /* yacc.c:1646 */
+#line 2986 "util/configparser.c" /* yacc.c:1646 */
break;
- case 232:
-#line 819 "util/configparser.y" /* yacc.c:1646 */
+ case 240:
+#line 846 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2941,22 +2995,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2945 "util/configparser.c" /* yacc.c:1646 */
+#line 2999 "util/configparser.c" /* yacc.c:1646 */
break;
- case 233:
-#line 829 "util/configparser.y" /* yacc.c:1646 */
+ case 241:
+#line 856 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 2956 "util/configparser.c" /* yacc.c:1646 */
+#line 3010 "util/configparser.c" /* yacc.c:1646 */
break;
- case 234:
-#line 837 "util/configparser.y" /* yacc.c:1646 */
+ case 242:
+#line 864 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2968,11 +3022,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 2972 "util/configparser.c" /* yacc.c:1646 */
+#line 3026 "util/configparser.c" /* yacc.c:1646 */
break;
- case 235:
-#line 850 "util/configparser.y" /* yacc.c:1646 */
+ case 243:
+#line 877 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2980,22 +3034,22 @@ yyreduce:
else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2984 "util/configparser.c" /* yacc.c:1646 */
+#line 3038 "util/configparser.c" /* yacc.c:1646 */
break;
- case 236:
-#line 859 "util/configparser.y" /* yacc.c:1646 */
+ case 244:
+#line 886 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
"removed, use infra-host-ttl)", (yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2995 "util/configparser.c" /* yacc.c:1646 */
+#line 3049 "util/configparser.c" /* yacc.c:1646 */
break;
- case 237:
-#line 867 "util/configparser.y" /* yacc.c:1646 */
+ case 245:
+#line 894 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3003,22 +3057,22 @@ yyreduce:
else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3007 "util/configparser.c" /* yacc.c:1646 */
+#line 3061 "util/configparser.c" /* yacc.c:1646 */
break;
- case 238:
-#line 876 "util/configparser.y" /* yacc.c:1646 */
+ case 246:
+#line 903 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
"(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3018 "util/configparser.c" /* yacc.c:1646 */
+#line 3072 "util/configparser.c" /* yacc.c:1646 */
break;
- case 239:
-#line 884 "util/configparser.y" /* yacc.c:1646 */
+ case 247:
+#line 911 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3030,11 +3084,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3034 "util/configparser.c" /* yacc.c:1646 */
+#line 3088 "util/configparser.c" /* yacc.c:1646 */
break;
- case 240:
-#line 897 "util/configparser.y" /* yacc.c:1646 */
+ case 248:
+#line 924 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3042,21 +3096,21 @@ yyreduce:
else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3046 "util/configparser.c" /* yacc.c:1646 */
+#line 3100 "util/configparser.c" /* yacc.c:1646 */
break;
- case 241:
-#line 906 "util/configparser.y" /* yacc.c:1646 */
+ case 249:
+#line 933 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->target_fetch_policy);
cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
}
-#line 3056 "util/configparser.c" /* yacc.c:1646 */
+#line 3110 "util/configparser.c" /* yacc.c:1646 */
break;
- case 242:
-#line 913 "util/configparser.y" /* yacc.c:1646 */
+ case 250:
+#line 940 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3065,11 +3119,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3069 "util/configparser.c" /* yacc.c:1646 */
+#line 3123 "util/configparser.c" /* yacc.c:1646 */
break;
- case 243:
-#line 923 "util/configparser.y" /* yacc.c:1646 */
+ case 251:
+#line 950 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3078,11 +3132,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3082 "util/configparser.c" /* yacc.c:1646 */
+#line 3136 "util/configparser.c" /* yacc.c:1646 */
break;
- case 244:
-#line 933 "util/configparser.y" /* yacc.c:1646 */
+ case 252:
+#line 960 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3091,11 +3145,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3095 "util/configparser.c" /* yacc.c:1646 */
+#line 3149 "util/configparser.c" /* yacc.c:1646 */
break;
- case 245:
-#line 943 "util/configparser.y" /* yacc.c:1646 */
+ case 253:
+#line 970 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3104,11 +3158,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3108 "util/configparser.c" /* yacc.c:1646 */
+#line 3162 "util/configparser.c" /* yacc.c:1646 */
break;
- case 246:
-#line 953 "util/configparser.y" /* yacc.c:1646 */
+ case 254:
+#line 980 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3117,11 +3171,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3121 "util/configparser.c" /* yacc.c:1646 */
+#line 3175 "util/configparser.c" /* yacc.c:1646 */
break;
- case 247:
-#line 963 "util/configparser.y" /* yacc.c:1646 */
+ case 255:
+#line 990 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3130,11 +3184,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3134 "util/configparser.c" /* yacc.c:1646 */
+#line 3188 "util/configparser.c" /* yacc.c:1646 */
break;
- case 248:
-#line 973 "util/configparser.y" /* yacc.c:1646 */
+ case 256:
+#line 1000 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3143,11 +3197,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3147 "util/configparser.c" /* yacc.c:1646 */
+#line 3201 "util/configparser.c" /* yacc.c:1646 */
break;
- case 249:
-#line 983 "util/configparser.y" /* yacc.c:1646 */
+ case 257:
+#line 1010 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3156,41 +3210,41 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3160 "util/configparser.c" /* yacc.c:1646 */
+#line 3214 "util/configparser.c" /* yacc.c:1646 */
break;
- case 250:
-#line 993 "util/configparser.y" /* yacc.c:1646 */
+ case 258:
+#line 1020 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 3170 "util/configparser.c" /* yacc.c:1646 */
+#line 3224 "util/configparser.c" /* yacc.c:1646 */
break;
- case 251:
-#line 1000 "util/configparser.y" /* yacc.c:1646 */
+ case 259:
+#line 1027 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 3180 "util/configparser.c" /* yacc.c:1646 */
+#line 3234 "util/configparser.c" /* yacc.c:1646 */
break;
- case 252:
-#line 1007 "util/configparser.y" /* yacc.c:1646 */
+ case 260:
+#line 1034 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 3190 "util/configparser.c" /* yacc.c:1646 */
+#line 3244 "util/configparser.c" /* yacc.c:1646 */
break;
- case 253:
-#line 1014 "util/configparser.y" /* yacc.c:1646 */
+ case 261:
+#line 1041 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3198,11 +3252,11 @@ yyreduce:
else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3202 "util/configparser.c" /* yacc.c:1646 */
+#line 3256 "util/configparser.c" /* yacc.c:1646 */
break;
- case 254:
-#line 1023 "util/configparser.y" /* yacc.c:1646 */
+ case 262:
+#line 1050 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3210,11 +3264,11 @@ yyreduce:
else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3214 "util/configparser.c" /* yacc.c:1646 */
+#line 3268 "util/configparser.c" /* yacc.c:1646 */
break;
- case 255:
-#line 1032 "util/configparser.y" /* yacc.c:1646 */
+ case 263:
+#line 1059 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3222,21 +3276,21 @@ yyreduce:
else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3226 "util/configparser.c" /* yacc.c:1646 */
+#line 3280 "util/configparser.c" /* yacc.c:1646 */
break;
- case 256:
-#line 1041 "util/configparser.y" /* yacc.c:1646 */
+ case 264:
+#line 1068 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 3236 "util/configparser.c" /* yacc.c:1646 */
+#line 3290 "util/configparser.c" /* yacc.c:1646 */
break;
- case 257:
-#line 1048 "util/configparser.y" /* yacc.c:1646 */
+ case 265:
+#line 1075 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3245,11 +3299,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3249 "util/configparser.c" /* yacc.c:1646 */
+#line 3303 "util/configparser.c" /* yacc.c:1646 */
break;
- case 258:
-#line 1058 "util/configparser.y" /* yacc.c:1646 */
+ case 266:
+#line 1085 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
@@ -3265,21 +3319,21 @@ yyreduce:
fatal_exit("out of memory adding acl");
}
}
-#line 3269 "util/configparser.c" /* yacc.c:1646 */
+#line 3323 "util/configparser.c" /* yacc.c:1646 */
break;
- case 259:
-#line 1075 "util/configparser.y" /* yacc.c:1646 */
+ case 267:
+#line 1102 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->module_conf);
cfg_parser->cfg->module_conf = (yyvsp[0].str);
}
-#line 3279 "util/configparser.c" /* yacc.c:1646 */
+#line 3333 "util/configparser.c" /* yacc.c:1646 */
break;
- case 260:
-#line 1082 "util/configparser.y" /* yacc.c:1646 */
+ case 268:
+#line 1109 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3296,11 +3350,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3300 "util/configparser.c" /* yacc.c:1646 */
+#line 3354 "util/configparser.c" /* yacc.c:1646 */
break;
- case 261:
-#line 1100 "util/configparser.y" /* yacc.c:1646 */
+ case 269:
+#line 1127 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3312,11 +3366,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3316 "util/configparser.c" /* yacc.c:1646 */
+#line 3370 "util/configparser.c" /* yacc.c:1646 */
break;
- case 262:
-#line 1113 "util/configparser.y" /* yacc.c:1646 */
+ case 270:
+#line 1140 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3328,11 +3382,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3332 "util/configparser.c" /* yacc.c:1646 */
+#line 3386 "util/configparser.c" /* yacc.c:1646 */
break;
- case 263:
-#line 1126 "util/configparser.y" /* yacc.c:1646 */
+ case 271:
+#line 1153 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3340,11 +3394,11 @@ yyreduce:
else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3344 "util/configparser.c" /* yacc.c:1646 */
+#line 3398 "util/configparser.c" /* yacc.c:1646 */
break;
- case 264:
-#line 1135 "util/configparser.y" /* yacc.c:1646 */
+ case 272:
+#line 1162 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3352,11 +3406,11 @@ yyreduce:
else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3356 "util/configparser.c" /* yacc.c:1646 */
+#line 3410 "util/configparser.c" /* yacc.c:1646 */
break;
- case 265:
-#line 1144 "util/configparser.y" /* yacc.c:1646 */
+ case 273:
+#line 1171 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3364,11 +3418,11 @@ yyreduce:
else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3368 "util/configparser.c" /* yacc.c:1646 */
+#line 3422 "util/configparser.c" /* yacc.c:1646 */
break;
- case 266:
-#line 1153 "util/configparser.y" /* yacc.c:1646 */
+ case 274:
+#line 1180 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3376,11 +3430,11 @@ yyreduce:
else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3380 "util/configparser.c" /* yacc.c:1646 */
+#line 3434 "util/configparser.c" /* yacc.c:1646 */
break;
- case 267:
-#line 1162 "util/configparser.y" /* yacc.c:1646 */
+ case 275:
+#line 1189 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3389,11 +3443,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3393 "util/configparser.c" /* yacc.c:1646 */
+#line 3447 "util/configparser.c" /* yacc.c:1646 */
break;
- case 268:
-#line 1172 "util/configparser.y" /* yacc.c:1646 */
+ case 276:
+#line 1199 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3402,11 +3456,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3406 "util/configparser.c" /* yacc.c:1646 */
+#line 3460 "util/configparser.c" /* yacc.c:1646 */
break;
- case 269:
-#line 1182 "util/configparser.y" /* yacc.c:1646 */
+ case 277:
+#line 1209 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3414,11 +3468,11 @@ yyreduce:
else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3418 "util/configparser.c" /* yacc.c:1646 */
+#line 3472 "util/configparser.c" /* yacc.c:1646 */
break;
- case 270:
-#line 1191 "util/configparser.y" /* yacc.c:1646 */
+ case 278:
+#line 1218 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3426,25 +3480,27 @@ yyreduce:
else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3430 "util/configparser.c" /* yacc.c:1646 */
+#line 3484 "util/configparser.c" /* yacc.c:1646 */
break;
- case 271:
-#line 1200 "util/configparser.y" /* yacc.c:1646 */
+ case 279:
+#line 1227 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
+#ifdef HAVE_SSL
else fake_dsa = (strcmp((yyvsp[0].str), "yes")==0);
if(fake_dsa)
log_warn("test option fake_dsa is enabled");
+#endif
free((yyvsp[0].str));
}
-#line 3444 "util/configparser.c" /* yacc.c:1646 */
+#line 3500 "util/configparser.c" /* yacc.c:1646 */
break;
- case 272:
-#line 1211 "util/configparser.y" /* yacc.c:1646 */
+ case 280:
+#line 1240 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3452,21 +3508,21 @@ yyreduce:
else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3456 "util/configparser.c" /* yacc.c:1646 */
+#line 3512 "util/configparser.c" /* yacc.c:1646 */
break;
- case 273:
-#line 1220 "util/configparser.y" /* yacc.c:1646 */
+ case 281:
+#line 1249 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->val_nsec3_key_iterations);
cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
}
-#line 3466 "util/configparser.c" /* yacc.c:1646 */
+#line 3522 "util/configparser.c" /* yacc.c:1646 */
break;
- case 274:
-#line 1227 "util/configparser.y" /* yacc.c:1646 */
+ case 282:
+#line 1256 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3474,11 +3530,11 @@ yyreduce:
else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3478 "util/configparser.c" /* yacc.c:1646 */
+#line 3534 "util/configparser.c" /* yacc.c:1646 */
break;
- case 275:
-#line 1236 "util/configparser.y" /* yacc.c:1646 */
+ case 283:
+#line 1265 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3486,11 +3542,11 @@ yyreduce:
else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3490 "util/configparser.c" /* yacc.c:1646 */
+#line 3546 "util/configparser.c" /* yacc.c:1646 */
break;
- case 276:
-#line 1245 "util/configparser.y" /* yacc.c:1646 */
+ case 284:
+#line 1274 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3498,11 +3554,11 @@ yyreduce:
else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3502 "util/configparser.c" /* yacc.c:1646 */
+#line 3558 "util/configparser.c" /* yacc.c:1646 */
break;
- case 277:
-#line 1254 "util/configparser.y" /* yacc.c:1646 */
+ case 285:
+#line 1283 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3511,22 +3567,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3515 "util/configparser.c" /* yacc.c:1646 */
+#line 3571 "util/configparser.c" /* yacc.c:1646 */
break;
- case 278:
-#line 1263 "util/configparser.y" /* yacc.c:1646 */
+ case 286:
+#line 1292 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 3526 "util/configparser.c" /* yacc.c:1646 */
+#line 3582 "util/configparser.c" /* yacc.c:1646 */
break;
- case 279:
-#line 1271 "util/configparser.y" /* yacc.c:1646 */
+ case 287:
+#line 1300 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3538,22 +3594,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3542 "util/configparser.c" /* yacc.c:1646 */
+#line 3598 "util/configparser.c" /* yacc.c:1646 */
break;
- case 280:
-#line 1284 "util/configparser.y" /* yacc.c:1646 */
+ case 288:
+#line 1313 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 3553 "util/configparser.c" /* yacc.c:1646 */
+#line 3609 "util/configparser.c" /* yacc.c:1646 */
break;
- case 281:
-#line 1292 "util/configparser.y" /* yacc.c:1646 */
+ case 289:
+#line 1321 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -3580,21 +3636,21 @@ yyreduce:
fatal_exit("out of memory adding local-zone");
}
}
-#line 3584 "util/configparser.c" /* yacc.c:1646 */
+#line 3640 "util/configparser.c" /* yacc.c:1646 */
break;
- case 282:
-#line 1320 "util/configparser.y" /* yacc.c:1646 */
+ case 290:
+#line 1349 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
fatal_exit("out of memory adding local-data");
}
-#line 3594 "util/configparser.c" /* yacc.c:1646 */
+#line 3650 "util/configparser.c" /* yacc.c:1646 */
break;
- case 283:
-#line 1327 "util/configparser.y" /* yacc.c:1646 */
+ case 291:
+#line 1356 "util/configparser.y" /* yacc.c:1646 */
{
char* ptr;
OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -3608,11 +3664,11 @@ yyreduce:
yyerror("local-data-ptr could not be reversed");
}
}
-#line 3612 "util/configparser.c" /* yacc.c:1646 */
+#line 3668 "util/configparser.c" /* yacc.c:1646 */
break;
- case 284:
-#line 1342 "util/configparser.y" /* yacc.c:1646 */
+ case 292:
+#line 1371 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3621,11 +3677,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3625 "util/configparser.c" /* yacc.c:1646 */
+#line 3681 "util/configparser.c" /* yacc.c:1646 */
break;
- case 285:
-#line 1352 "util/configparser.y" /* yacc.c:1646 */
+ case 293:
+#line 1381 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3634,31 +3690,31 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3638 "util/configparser.c" /* yacc.c:1646 */
+#line 3694 "util/configparser.c" /* yacc.c:1646 */
break;
- case 286:
-#line 1362 "util/configparser.y" /* yacc.c:1646 */
+ case 294:
+#line 1391 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3648 "util/configparser.c" /* yacc.c:1646 */
+#line 3704 "util/configparser.c" /* yacc.c:1646 */
break;
- case 287:
-#line 1369 "util/configparser.y" /* yacc.c:1646 */
+ case 295:
+#line 1398 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dns64_prefix);
cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
}
-#line 3658 "util/configparser.c" /* yacc.c:1646 */
+#line 3714 "util/configparser.c" /* yacc.c:1646 */
break;
- case 288:
-#line 1376 "util/configparser.y" /* yacc.c:1646 */
+ case 296:
+#line 1405 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3666,11 +3722,11 @@ yyreduce:
else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3670 "util/configparser.c" /* yacc.c:1646 */
+#line 3726 "util/configparser.c" /* yacc.c:1646 */
break;
- case 289:
-#line 1385 "util/configparser.y" /* yacc.c:1646 */
+ case 297:
+#line 1414 "util/configparser.y" /* yacc.c:1646 */
{
char* p, *s = (yyvsp[0].str);
OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -3683,11 +3739,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3687 "util/configparser.c" /* yacc.c:1646 */
+#line 3743 "util/configparser.c" /* yacc.c:1646 */
break;
- case 290:
-#line 1399 "util/configparser.y" /* yacc.c:1646 */
+ case 298:
+#line 1428 "util/configparser.y" /* yacc.c:1646 */
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -3705,11 +3761,11 @@ yyreduce:
}
}
}
-#line 3709 "util/configparser.c" /* yacc.c:1646 */
+#line 3765 "util/configparser.c" /* yacc.c:1646 */
break;
- case 291:
-#line 1418 "util/configparser.y" /* yacc.c:1646 */
+ case 299:
+#line 1447 "util/configparser.y" /* yacc.c:1646 */
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -3727,11 +3783,11 @@ yyreduce:
}
}
}
-#line 3731 "util/configparser.c" /* yacc.c:1646 */
+#line 3787 "util/configparser.c" /* yacc.c:1646 */
break;
- case 292:
-#line 1437 "util/configparser.y" /* yacc.c:1646 */
+ case 300:
+#line 1466 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
@@ -3742,11 +3798,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 3746 "util/configparser.c" /* yacc.c:1646 */
+#line 3802 "util/configparser.c" /* yacc.c:1646 */
break;
- case 293:
-#line 1449 "util/configparser.y" /* yacc.c:1646 */
+ case 301:
+#line 1478 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
@@ -3757,11 +3813,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 3761 "util/configparser.c" /* yacc.c:1646 */
+#line 3817 "util/configparser.c" /* yacc.c:1646 */
break;
- case 294:
-#line 1461 "util/configparser.y" /* yacc.c:1646 */
+ case 302:
+#line 1490 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
@@ -3772,11 +3828,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 3776 "util/configparser.c" /* yacc.c:1646 */
+#line 3832 "util/configparser.c" /* yacc.c:1646 */
break;
- case 295:
-#line 1473 "util/configparser.y" /* yacc.c:1646 */
+ case 303:
+#line 1502 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
@@ -3786,11 +3842,23 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 3790 "util/configparser.c" /* yacc.c:1646 */
+#line 3846 "util/configparser.c" /* yacc.c:1646 */
break;
- case 296:
-#line 1484 "util/configparser.y" /* yacc.c:1646 */
+ case 304:
+#line 1513 "util/configparser.y" /* yacc.c:1646 */
+ {
+ OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3858 "util/configparser.c" /* yacc.c:1646 */
+ break;
+
+ case 305:
+#line 1523 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3798,22 +3866,49 @@ yyreduce:
else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3802 "util/configparser.c" /* yacc.c:1646 */
+#line 3870 "util/configparser.c" /* yacc.c:1646 */
break;
- case 297:
-#line 1493 "util/configparser.y" /* yacc.c:1646 */
+ case 306:
+#line 1532 "util/configparser.y" /* yacc.c:1646 */
+ {
+ OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
+ if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
+ yyerror("memory size expected");
+ free((yyvsp[0].str));
+ }
+#line 3881 "util/configparser.c" /* yacc.c:1646 */
+ break;
+
+ case 307:
+#line 1540 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 3813 "util/configparser.c" /* yacc.c:1646 */
+#line 3892 "util/configparser.c" /* yacc.c:1646 */
break;
- case 298:
-#line 1501 "util/configparser.y" /* yacc.c:1646 */
+ case 308:
+#line 1548 "util/configparser.y" /* yacc.c:1646 */
+ {
+ OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ else {
+ cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
+ }
+#line 3908 "util/configparser.c" /* yacc.c:1646 */
+ break;
+
+ case 309:
+#line 1561 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3825,11 +3920,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3829 "util/configparser.c" /* yacc.c:1646 */
+#line 3924 "util/configparser.c" /* yacc.c:1646 */
break;
- case 299:
-#line 1514 "util/configparser.y" /* yacc.c:1646 */
+ case 310:
+#line 1574 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -3841,11 +3936,11 @@ yyreduce:
"ratelimit-for-domain");
}
}
-#line 3845 "util/configparser.c" /* yacc.c:1646 */
+#line 3940 "util/configparser.c" /* yacc.c:1646 */
break;
- case 300:
-#line 1527 "util/configparser.y" /* yacc.c:1646 */
+ case 311:
+#line 1587 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -3857,11 +3952,23 @@ yyreduce:
"ratelimit-below-domain");
}
}
-#line 3861 "util/configparser.c" /* yacc.c:1646 */
+#line 3956 "util/configparser.c" /* yacc.c:1646 */
break;
- case 301:
-#line 1540 "util/configparser.y" /* yacc.c:1646 */
+ case 312:
+#line 1600 "util/configparser.y" /* yacc.c:1646 */
+ {
+ OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3968 "util/configparser.c" /* yacc.c:1646 */
+ break;
+
+ case 313:
+#line 1609 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3869,11 +3976,11 @@ yyreduce:
else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3873 "util/configparser.c" /* yacc.c:1646 */
+#line 3980 "util/configparser.c" /* yacc.c:1646 */
break;
- case 302:
-#line 1549 "util/configparser.y" /* yacc.c:1646 */
+ case 314:
+#line 1618 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3882,11 +3989,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3886 "util/configparser.c" /* yacc.c:1646 */
+#line 3993 "util/configparser.c" /* yacc.c:1646 */
break;
- case 303:
-#line 1559 "util/configparser.y" /* yacc.c:1646 */
+ case 315:
+#line 1628 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3895,11 +4002,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3899 "util/configparser.c" /* yacc.c:1646 */
+#line 4006 "util/configparser.c" /* yacc.c:1646 */
break;
- case 304:
-#line 1569 "util/configparser.y" /* yacc.c:1646 */
+ case 316:
+#line 1638 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->stubs->name)
@@ -3908,31 +4015,31 @@ yyreduce:
free(cfg_parser->cfg->stubs->name);
cfg_parser->cfg->stubs->name = (yyvsp[0].str);
}
-#line 3912 "util/configparser.c" /* yacc.c:1646 */
+#line 4019 "util/configparser.c" /* yacc.c:1646 */
break;
- case 305:
-#line 1579 "util/configparser.y" /* yacc.c:1646 */
+ case 317:
+#line 1648 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 3922 "util/configparser.c" /* yacc.c:1646 */
+#line 4029 "util/configparser.c" /* yacc.c:1646 */
break;
- case 306:
-#line 1586 "util/configparser.y" /* yacc.c:1646 */
+ case 318:
+#line 1655 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 3932 "util/configparser.c" /* yacc.c:1646 */
+#line 4039 "util/configparser.c" /* yacc.c:1646 */
break;
- case 307:
-#line 1593 "util/configparser.y" /* yacc.c:1646 */
+ case 319:
+#line 1662 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3940,11 +4047,11 @@ yyreduce:
else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3944 "util/configparser.c" /* yacc.c:1646 */
+#line 4051 "util/configparser.c" /* yacc.c:1646 */
break;
- case 308:
-#line 1602 "util/configparser.y" /* yacc.c:1646 */
+ case 320:
+#line 1671 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3953,11 +4060,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3957 "util/configparser.c" /* yacc.c:1646 */
+#line 4064 "util/configparser.c" /* yacc.c:1646 */
break;
- case 309:
-#line 1612 "util/configparser.y" /* yacc.c:1646 */
+ case 321:
+#line 1681 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3966,11 +4073,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3970 "util/configparser.c" /* yacc.c:1646 */
+#line 4077 "util/configparser.c" /* yacc.c:1646 */
break;
- case 310:
-#line 1622 "util/configparser.y" /* yacc.c:1646 */
+ case 322:
+#line 1691 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->forwards->name)
@@ -3979,31 +4086,31 @@ yyreduce:
free(cfg_parser->cfg->forwards->name);
cfg_parser->cfg->forwards->name = (yyvsp[0].str);
}
-#line 3983 "util/configparser.c" /* yacc.c:1646 */
+#line 4090 "util/configparser.c" /* yacc.c:1646 */
break;
- case 311:
-#line 1632 "util/configparser.y" /* yacc.c:1646 */
+ case 323:
+#line 1701 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 3993 "util/configparser.c" /* yacc.c:1646 */
+#line 4100 "util/configparser.c" /* yacc.c:1646 */
break;
- case 312:
-#line 1639 "util/configparser.y" /* yacc.c:1646 */
+ case 324:
+#line 1708 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4003 "util/configparser.c" /* yacc.c:1646 */
+#line 4110 "util/configparser.c" /* yacc.c:1646 */
break;
- case 313:
-#line 1646 "util/configparser.y" /* yacc.c:1646 */
+ case 325:
+#line 1715 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4011,11 +4118,11 @@ yyreduce:
else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4015 "util/configparser.c" /* yacc.c:1646 */
+#line 4122 "util/configparser.c" /* yacc.c:1646 */
break;
- case 314:
-#line 1655 "util/configparser.y" /* yacc.c:1646 */
+ case 326:
+#line 1724 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4024,11 +4131,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4028 "util/configparser.c" /* yacc.c:1646 */
+#line 4135 "util/configparser.c" /* yacc.c:1646 */
break;
- case 315:
-#line 1665 "util/configparser.y" /* yacc.c:1646 */
+ case 327:
+#line 1734 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->views->name)
@@ -4037,11 +4144,11 @@ yyreduce:
free(cfg_parser->cfg->views->name);
cfg_parser->cfg->views->name = (yyvsp[0].str);
}
-#line 4041 "util/configparser.c" /* yacc.c:1646 */
+#line 4148 "util/configparser.c" /* yacc.c:1646 */
break;
- case 316:
-#line 1675 "util/configparser.y" /* yacc.c:1646 */
+ case 328:
+#line 1744 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -4069,11 +4176,11 @@ yyreduce:
fatal_exit("out of memory adding local-zone");
}
}
-#line 4073 "util/configparser.c" /* yacc.c:1646 */
+#line 4180 "util/configparser.c" /* yacc.c:1646 */
break;
- case 317:
-#line 1704 "util/configparser.y" /* yacc.c:1646 */
+ case 329:
+#line 1773 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
@@ -4081,11 +4188,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 4085 "util/configparser.c" /* yacc.c:1646 */
+#line 4192 "util/configparser.c" /* yacc.c:1646 */
break;
- case 318:
-#line 1713 "util/configparser.y" /* yacc.c:1646 */
+ case 330:
+#line 1782 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4093,19 +4200,19 @@ yyreduce:
else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4097 "util/configparser.c" /* yacc.c:1646 */
+#line 4204 "util/configparser.c" /* yacc.c:1646 */
break;
- case 319:
-#line 1722 "util/configparser.y" /* yacc.c:1646 */
+ case 331:
+#line 1791 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("\nP(remote-control:)\n"));
}
-#line 4105 "util/configparser.c" /* yacc.c:1646 */
+#line 4212 "util/configparser.c" /* yacc.c:1646 */
break;
- case 330:
-#line 1733 "util/configparser.y" /* yacc.c:1646 */
+ case 342:
+#line 1802 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4114,11 +4221,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4118 "util/configparser.c" /* yacc.c:1646 */
+#line 4225 "util/configparser.c" /* yacc.c:1646 */
break;
- case 331:
-#line 1743 "util/configparser.y" /* yacc.c:1646 */
+ case 343:
+#line 1812 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4126,21 +4233,21 @@ yyreduce:
else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4130 "util/configparser.c" /* yacc.c:1646 */
+#line 4237 "util/configparser.c" /* yacc.c:1646 */
break;
- case 332:
-#line 1752 "util/configparser.y" /* yacc.c:1646 */
+ case 344:
+#line 1821 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4140 "util/configparser.c" /* yacc.c:1646 */
+#line 4247 "util/configparser.c" /* yacc.c:1646 */
break;
- case 333:
-#line 1759 "util/configparser.y" /* yacc.c:1646 */
+ case 345:
+#line 1828 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4149,122 +4256,122 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4153 "util/configparser.c" /* yacc.c:1646 */
+#line 4260 "util/configparser.c" /* yacc.c:1646 */
break;
- case 334:
-#line 1769 "util/configparser.y" /* yacc.c:1646 */
+ case 346:
+#line 1838 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->server_key_file);
cfg_parser->cfg->server_key_file = (yyvsp[0].str);
}
-#line 4163 "util/configparser.c" /* yacc.c:1646 */
+#line 4270 "util/configparser.c" /* yacc.c:1646 */
break;
- case 335:
-#line 1776 "util/configparser.y" /* yacc.c:1646 */
+ case 347:
+#line 1845 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->server_cert_file);
cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
}
-#line 4173 "util/configparser.c" /* yacc.c:1646 */
+#line 4280 "util/configparser.c" /* yacc.c:1646 */
break;
- case 336:
-#line 1783 "util/configparser.y" /* yacc.c:1646 */
+ case 348:
+#line 1852 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->control_key_file);
cfg_parser->cfg->control_key_file = (yyvsp[0].str);
}
-#line 4183 "util/configparser.c" /* yacc.c:1646 */
+#line 4290 "util/configparser.c" /* yacc.c:1646 */
break;
- case 337:
-#line 1790 "util/configparser.y" /* yacc.c:1646 */
+ case 349:
+#line 1859 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->control_cert_file);
cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
}
-#line 4193 "util/configparser.c" /* yacc.c:1646 */
+#line 4300 "util/configparser.c" /* yacc.c:1646 */
break;
- case 338:
-#line 1797 "util/configparser.y" /* yacc.c:1646 */
+ case 350:
+#line 1866 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("\nP(dnstap:)\n"));
}
-#line 4201 "util/configparser.c" /* yacc.c:1646 */
+#line 4308 "util/configparser.c" /* yacc.c:1646 */
break;
- case 353:
-#line 1814 "util/configparser.y" /* yacc.c:1646 */
+ case 365:
+#line 1883 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
}
-#line 4212 "util/configparser.c" /* yacc.c:1646 */
+#line 4319 "util/configparser.c" /* yacc.c:1646 */
break;
- case 354:
-#line 1822 "util/configparser.y" /* yacc.c:1646 */
+ case 366:
+#line 1891 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_socket_path);
cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
}
-#line 4222 "util/configparser.c" /* yacc.c:1646 */
+#line 4329 "util/configparser.c" /* yacc.c:1646 */
break;
- case 355:
-#line 1829 "util/configparser.y" /* yacc.c:1646 */
+ case 367:
+#line 1898 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
}
-#line 4233 "util/configparser.c" /* yacc.c:1646 */
+#line 4340 "util/configparser.c" /* yacc.c:1646 */
break;
- case 356:
-#line 1837 "util/configparser.y" /* yacc.c:1646 */
+ case 368:
+#line 1906 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
}
-#line 4244 "util/configparser.c" /* yacc.c:1646 */
+#line 4351 "util/configparser.c" /* yacc.c:1646 */
break;
- case 357:
-#line 1845 "util/configparser.y" /* yacc.c:1646 */
+ case 369:
+#line 1914 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_identity);
cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
}
-#line 4254 "util/configparser.c" /* yacc.c:1646 */
+#line 4361 "util/configparser.c" /* yacc.c:1646 */
break;
- case 358:
-#line 1852 "util/configparser.y" /* yacc.c:1646 */
+ case 370:
+#line 1921 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_version);
cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
}
-#line 4264 "util/configparser.c" /* yacc.c:1646 */
+#line 4371 "util/configparser.c" /* yacc.c:1646 */
break;
- case 359:
-#line 1859 "util/configparser.y" /* yacc.c:1646 */
+ case 371:
+#line 1928 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4272,11 +4379,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_resolver_query_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 4276 "util/configparser.c" /* yacc.c:1646 */
+#line 4383 "util/configparser.c" /* yacc.c:1646 */
break;
- case 360:
-#line 1868 "util/configparser.y" /* yacc.c:1646 */
+ case 372:
+#line 1937 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4284,11 +4391,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_resolver_response_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 4288 "util/configparser.c" /* yacc.c:1646 */
+#line 4395 "util/configparser.c" /* yacc.c:1646 */
break;
- case 361:
-#line 1877 "util/configparser.y" /* yacc.c:1646 */
+ case 373:
+#line 1946 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4296,11 +4403,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_client_query_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 4300 "util/configparser.c" /* yacc.c:1646 */
+#line 4407 "util/configparser.c" /* yacc.c:1646 */
break;
- case 362:
-#line 1886 "util/configparser.y" /* yacc.c:1646 */
+ case 374:
+#line 1955 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4308,11 +4415,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_client_response_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 4312 "util/configparser.c" /* yacc.c:1646 */
+#line 4419 "util/configparser.c" /* yacc.c:1646 */
break;
- case 363:
-#line 1895 "util/configparser.y" /* yacc.c:1646 */
+ case 375:
+#line 1964 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4320,11 +4427,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 4324 "util/configparser.c" /* yacc.c:1646 */
+#line 4431 "util/configparser.c" /* yacc.c:1646 */
break;
- case 364:
-#line 1904 "util/configparser.y" /* yacc.c:1646 */
+ case 376:
+#line 1973 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4332,29 +4439,29 @@ yyreduce:
else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
(strcmp((yyvsp[0].str), "yes")==0);
}
-#line 4336 "util/configparser.c" /* yacc.c:1646 */
+#line 4443 "util/configparser.c" /* yacc.c:1646 */
break;
- case 365:
-#line 1913 "util/configparser.y" /* yacc.c:1646 */
+ case 377:
+#line 1982 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("\nP(python:)\n"));
}
-#line 4344 "util/configparser.c" /* yacc.c:1646 */
+#line 4451 "util/configparser.c" /* yacc.c:1646 */
break;
- case 369:
-#line 1922 "util/configparser.y" /* yacc.c:1646 */
+ case 381:
+#line 1991 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->python_script);
cfg_parser->cfg->python_script = (yyvsp[0].str);
}
-#line 4354 "util/configparser.c" /* yacc.c:1646 */
+#line 4461 "util/configparser.c" /* yacc.c:1646 */
break;
- case 370:
-#line 1928 "util/configparser.y" /* yacc.c:1646 */
+ case 382:
+#line 1997 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4363,21 +4470,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4367 "util/configparser.c" /* yacc.c:1646 */
+#line 4474 "util/configparser.c" /* yacc.c:1646 */
break;
- case 371:
-#line 1938 "util/configparser.y" /* yacc.c:1646 */
+ case 383:
+#line 2007 "util/configparser.y" /* yacc.c:1646 */
{
OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->log_identity);
cfg_parser->cfg->log_identity = (yyvsp[0].str);
}
-#line 4377 "util/configparser.c" /* yacc.c:1646 */
+#line 4484 "util/configparser.c" /* yacc.c:1646 */
break;
-#line 4381 "util/configparser.c" /* yacc.c:1646 */
+#line 4488 "util/configparser.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -4605,7 +4712,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 1944 "util/configparser.y" /* yacc.c:1906 */
+#line 2013 "util/configparser.y" /* yacc.c:1906 */
/* parse helper routines could be here */
diff --git a/util/configparser.h b/util/configparser.h
index dc26c324a071..3db0c547c8e5 100644
--- a/util/configparser.h
+++ b/util/configparser.h
@@ -168,64 +168,70 @@ extern int yydebug;
VAR_HARDEN_BELOW_NXDOMAIN = 378,
VAR_IGNORE_CD_FLAG = 379,
VAR_LOG_QUERIES = 380,
- VAR_TCP_UPSTREAM = 381,
- VAR_SSL_UPSTREAM = 382,
- VAR_SSL_SERVICE_KEY = 383,
- VAR_SSL_SERVICE_PEM = 384,
- VAR_SSL_PORT = 385,
- VAR_FORWARD_FIRST = 386,
- VAR_STUB_SSL_UPSTREAM = 387,
- VAR_FORWARD_SSL_UPSTREAM = 388,
- VAR_STUB_FIRST = 389,
- VAR_MINIMAL_RESPONSES = 390,
- VAR_RRSET_ROUNDROBIN = 391,
- VAR_MAX_UDP_SIZE = 392,
- VAR_DELAY_CLOSE = 393,
- VAR_UNBLOCK_LAN_ZONES = 394,
- VAR_INSECURE_LAN_ZONES = 395,
- VAR_INFRA_CACHE_MIN_RTT = 396,
- VAR_DNS64_PREFIX = 397,
- VAR_DNS64_SYNTHALL = 398,
- VAR_DNSTAP = 399,
- VAR_DNSTAP_ENABLE = 400,
- VAR_DNSTAP_SOCKET_PATH = 401,
- VAR_DNSTAP_SEND_IDENTITY = 402,
- VAR_DNSTAP_SEND_VERSION = 403,
- VAR_DNSTAP_IDENTITY = 404,
- VAR_DNSTAP_VERSION = 405,
- VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 406,
- VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 407,
- VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 408,
- VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 409,
- VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 410,
- VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 411,
- VAR_HARDEN_ALGO_DOWNGRADE = 412,
- VAR_IP_TRANSPARENT = 413,
- VAR_DISABLE_DNSSEC_LAME_CHECK = 414,
- VAR_RATELIMIT = 415,
- VAR_RATELIMIT_SLABS = 416,
- VAR_RATELIMIT_SIZE = 417,
- VAR_RATELIMIT_FOR_DOMAIN = 418,
- VAR_RATELIMIT_BELOW_DOMAIN = 419,
- VAR_RATELIMIT_FACTOR = 420,
- VAR_CAPS_WHITELIST = 421,
- VAR_CACHE_MAX_NEGATIVE_TTL = 422,
- VAR_PERMIT_SMALL_HOLDDOWN = 423,
- VAR_QNAME_MINIMISATION = 424,
- VAR_QNAME_MINIMISATION_STRICT = 425,
- VAR_IP_FREEBIND = 426,
- VAR_DEFINE_TAG = 427,
- VAR_LOCAL_ZONE_TAG = 428,
- VAR_ACCESS_CONTROL_TAG = 429,
- VAR_LOCAL_ZONE_OVERRIDE = 430,
- VAR_ACCESS_CONTROL_TAG_ACTION = 431,
- VAR_ACCESS_CONTROL_TAG_DATA = 432,
- VAR_VIEW = 433,
- VAR_ACCESS_CONTROL_VIEW = 434,
- VAR_VIEW_FIRST = 435,
- VAR_SERVE_EXPIRED = 436,
- VAR_FAKE_DSA = 437,
- VAR_LOG_IDENTITY = 438
+ VAR_LOG_REPLIES = 381,
+ VAR_TCP_UPSTREAM = 382,
+ VAR_SSL_UPSTREAM = 383,
+ VAR_SSL_SERVICE_KEY = 384,
+ VAR_SSL_SERVICE_PEM = 385,
+ VAR_SSL_PORT = 386,
+ VAR_FORWARD_FIRST = 387,
+ VAR_STUB_SSL_UPSTREAM = 388,
+ VAR_FORWARD_SSL_UPSTREAM = 389,
+ VAR_STUB_FIRST = 390,
+ VAR_MINIMAL_RESPONSES = 391,
+ VAR_RRSET_ROUNDROBIN = 392,
+ VAR_MAX_UDP_SIZE = 393,
+ VAR_DELAY_CLOSE = 394,
+ VAR_UNBLOCK_LAN_ZONES = 395,
+ VAR_INSECURE_LAN_ZONES = 396,
+ VAR_INFRA_CACHE_MIN_RTT = 397,
+ VAR_DNS64_PREFIX = 398,
+ VAR_DNS64_SYNTHALL = 399,
+ VAR_DNSTAP = 400,
+ VAR_DNSTAP_ENABLE = 401,
+ VAR_DNSTAP_SOCKET_PATH = 402,
+ VAR_DNSTAP_SEND_IDENTITY = 403,
+ VAR_DNSTAP_SEND_VERSION = 404,
+ VAR_DNSTAP_IDENTITY = 405,
+ VAR_DNSTAP_VERSION = 406,
+ VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 407,
+ VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 408,
+ VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 409,
+ VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 410,
+ VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 411,
+ VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 412,
+ VAR_HARDEN_ALGO_DOWNGRADE = 413,
+ VAR_IP_TRANSPARENT = 414,
+ VAR_DISABLE_DNSSEC_LAME_CHECK = 415,
+ VAR_IP_RATELIMIT = 416,
+ VAR_IP_RATELIMIT_SLABS = 417,
+ VAR_IP_RATELIMIT_SIZE = 418,
+ VAR_RATELIMIT = 419,
+ VAR_RATELIMIT_SLABS = 420,
+ VAR_RATELIMIT_SIZE = 421,
+ VAR_RATELIMIT_FOR_DOMAIN = 422,
+ VAR_RATELIMIT_BELOW_DOMAIN = 423,
+ VAR_IP_RATELIMIT_FACTOR = 424,
+ VAR_RATELIMIT_FACTOR = 425,
+ VAR_CAPS_WHITELIST = 426,
+ VAR_CACHE_MAX_NEGATIVE_TTL = 427,
+ VAR_PERMIT_SMALL_HOLDDOWN = 428,
+ VAR_QNAME_MINIMISATION = 429,
+ VAR_QNAME_MINIMISATION_STRICT = 430,
+ VAR_IP_FREEBIND = 431,
+ VAR_DEFINE_TAG = 432,
+ VAR_LOCAL_ZONE_TAG = 433,
+ VAR_ACCESS_CONTROL_TAG = 434,
+ VAR_LOCAL_ZONE_OVERRIDE = 435,
+ VAR_ACCESS_CONTROL_TAG_ACTION = 436,
+ VAR_ACCESS_CONTROL_TAG_DATA = 437,
+ VAR_VIEW = 438,
+ VAR_ACCESS_CONTROL_VIEW = 439,
+ VAR_VIEW_FIRST = 440,
+ VAR_SERVE_EXPIRED = 441,
+ VAR_FAKE_DSA = 442,
+ VAR_LOG_IDENTITY = 443,
+ VAR_USE_SYSTEMD = 444
};
#endif
/* Tokens. */
@@ -352,64 +358,70 @@ extern int yydebug;
#define VAR_HARDEN_BELOW_NXDOMAIN 378
#define VAR_IGNORE_CD_FLAG 379
#define VAR_LOG_QUERIES 380
-#define VAR_TCP_UPSTREAM 381
-#define VAR_SSL_UPSTREAM 382
-#define VAR_SSL_SERVICE_KEY 383
-#define VAR_SSL_SERVICE_PEM 384
-#define VAR_SSL_PORT 385
-#define VAR_FORWARD_FIRST 386
-#define VAR_STUB_SSL_UPSTREAM 387
-#define VAR_FORWARD_SSL_UPSTREAM 388
-#define VAR_STUB_FIRST 389
-#define VAR_MINIMAL_RESPONSES 390
-#define VAR_RRSET_ROUNDROBIN 391
-#define VAR_MAX_UDP_SIZE 392
-#define VAR_DELAY_CLOSE 393
-#define VAR_UNBLOCK_LAN_ZONES 394
-#define VAR_INSECURE_LAN_ZONES 395
-#define VAR_INFRA_CACHE_MIN_RTT 396
-#define VAR_DNS64_PREFIX 397
-#define VAR_DNS64_SYNTHALL 398
-#define VAR_DNSTAP 399
-#define VAR_DNSTAP_ENABLE 400
-#define VAR_DNSTAP_SOCKET_PATH 401
-#define VAR_DNSTAP_SEND_IDENTITY 402
-#define VAR_DNSTAP_SEND_VERSION 403
-#define VAR_DNSTAP_IDENTITY 404
-#define VAR_DNSTAP_VERSION 405
-#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 406
-#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 407
-#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 408
-#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 409
-#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 410
-#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 411
-#define VAR_HARDEN_ALGO_DOWNGRADE 412
-#define VAR_IP_TRANSPARENT 413
-#define VAR_DISABLE_DNSSEC_LAME_CHECK 414
-#define VAR_RATELIMIT 415
-#define VAR_RATELIMIT_SLABS 416
-#define VAR_RATELIMIT_SIZE 417
-#define VAR_RATELIMIT_FOR_DOMAIN 418
-#define VAR_RATELIMIT_BELOW_DOMAIN 419
-#define VAR_RATELIMIT_FACTOR 420
-#define VAR_CAPS_WHITELIST 421
-#define VAR_CACHE_MAX_NEGATIVE_TTL 422
-#define VAR_PERMIT_SMALL_HOLDDOWN 423
-#define VAR_QNAME_MINIMISATION 424
-#define VAR_QNAME_MINIMISATION_STRICT 425
-#define VAR_IP_FREEBIND 426
-#define VAR_DEFINE_TAG 427
-#define VAR_LOCAL_ZONE_TAG 428
-#define VAR_ACCESS_CONTROL_TAG 429
-#define VAR_LOCAL_ZONE_OVERRIDE 430
-#define VAR_ACCESS_CONTROL_TAG_ACTION 431
-#define VAR_ACCESS_CONTROL_TAG_DATA 432
-#define VAR_VIEW 433
-#define VAR_ACCESS_CONTROL_VIEW 434
-#define VAR_VIEW_FIRST 435
-#define VAR_SERVE_EXPIRED 436
-#define VAR_FAKE_DSA 437
-#define VAR_LOG_IDENTITY 438
+#define VAR_LOG_REPLIES 381
+#define VAR_TCP_UPSTREAM 382
+#define VAR_SSL_UPSTREAM 383
+#define VAR_SSL_SERVICE_KEY 384
+#define VAR_SSL_SERVICE_PEM 385
+#define VAR_SSL_PORT 386
+#define VAR_FORWARD_FIRST 387
+#define VAR_STUB_SSL_UPSTREAM 388
+#define VAR_FORWARD_SSL_UPSTREAM 389
+#define VAR_STUB_FIRST 390
+#define VAR_MINIMAL_RESPONSES 391
+#define VAR_RRSET_ROUNDROBIN 392
+#define VAR_MAX_UDP_SIZE 393
+#define VAR_DELAY_CLOSE 394
+#define VAR_UNBLOCK_LAN_ZONES 395
+#define VAR_INSECURE_LAN_ZONES 396
+#define VAR_INFRA_CACHE_MIN_RTT 397
+#define VAR_DNS64_PREFIX 398
+#define VAR_DNS64_SYNTHALL 399
+#define VAR_DNSTAP 400
+#define VAR_DNSTAP_ENABLE 401
+#define VAR_DNSTAP_SOCKET_PATH 402
+#define VAR_DNSTAP_SEND_IDENTITY 403
+#define VAR_DNSTAP_SEND_VERSION 404
+#define VAR_DNSTAP_IDENTITY 405
+#define VAR_DNSTAP_VERSION 406
+#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 407
+#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 408
+#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 409
+#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 410
+#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 411
+#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 412
+#define VAR_HARDEN_ALGO_DOWNGRADE 413
+#define VAR_IP_TRANSPARENT 414
+#define VAR_DISABLE_DNSSEC_LAME_CHECK 415
+#define VAR_IP_RATELIMIT 416
+#define VAR_IP_RATELIMIT_SLABS 417
+#define VAR_IP_RATELIMIT_SIZE 418
+#define VAR_RATELIMIT 419
+#define VAR_RATELIMIT_SLABS 420
+#define VAR_RATELIMIT_SIZE 421
+#define VAR_RATELIMIT_FOR_DOMAIN 422
+#define VAR_RATELIMIT_BELOW_DOMAIN 423
+#define VAR_IP_RATELIMIT_FACTOR 424
+#define VAR_RATELIMIT_FACTOR 425
+#define VAR_CAPS_WHITELIST 426
+#define VAR_CACHE_MAX_NEGATIVE_TTL 427
+#define VAR_PERMIT_SMALL_HOLDDOWN 428
+#define VAR_QNAME_MINIMISATION 429
+#define VAR_QNAME_MINIMISATION_STRICT 430
+#define VAR_IP_FREEBIND 431
+#define VAR_DEFINE_TAG 432
+#define VAR_LOCAL_ZONE_TAG 433
+#define VAR_ACCESS_CONTROL_TAG 434
+#define VAR_LOCAL_ZONE_OVERRIDE 435
+#define VAR_ACCESS_CONTROL_TAG_ACTION 436
+#define VAR_ACCESS_CONTROL_TAG_DATA 437
+#define VAR_VIEW 438
+#define VAR_ACCESS_CONTROL_VIEW 439
+#define VAR_VIEW_FIRST 440
+#define VAR_SERVE_EXPIRED 441
+#define VAR_FAKE_DSA 442
+#define VAR_LOG_IDENTITY 443
+#define VAR_USE_SYSTEMD 444
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -420,7 +432,7 @@ union YYSTYPE
char* str;
-#line 424 "util/configparser.h" /* yacc.c:1909 */
+#line 436 "util/configparser.h" /* yacc.c:1909 */
};
typedef union YYSTYPE YYSTYPE;
diff --git a/util/configparser.y b/util/configparser.y
index 530e52881601..e6e3fb4744f5 100644
--- a/util/configparser.y
+++ b/util/configparser.y
@@ -104,7 +104,8 @@ extern struct config_parser_state* cfg_parser;
%token VAR_AUTO_TRUST_ANCHOR_FILE VAR_KEEP_MISSING VAR_ADD_HOLDDOWN
%token VAR_DEL_HOLDDOWN VAR_SO_RCVBUF VAR_EDNS_BUFFER_SIZE VAR_PREFETCH
%token VAR_PREFETCH_KEY VAR_SO_SNDBUF VAR_SO_REUSEPORT VAR_HARDEN_BELOW_NXDOMAIN
-%token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM
+%token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_LOG_REPLIES
+%token VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM
%token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST
%token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM
%token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN
@@ -123,8 +124,10 @@ extern struct config_parser_state* cfg_parser;
%token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES
%token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT
%token VAR_DISABLE_DNSSEC_LAME_CHECK
+%token VAR_IP_RATELIMIT VAR_IP_RATELIMIT_SLABS VAR_IP_RATELIMIT_SIZE
%token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE
-%token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN VAR_RATELIMIT_FACTOR
+%token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN
+%token VAR_IP_RATELIMIT_FACTOR VAR_RATELIMIT_FACTOR
%token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN
%token VAR_QNAME_MINIMISATION VAR_QNAME_MINIMISATION_STRICT VAR_IP_FREEBIND
%token VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG VAR_ACCESS_CONTROL_TAG
@@ -132,6 +135,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW
%token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_FAKE_DSA
%token VAR_LOG_IDENTITY
+%token VAR_USE_SYSTEMD
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -189,16 +193,19 @@ content_server: server_num_threads | server_verbosity | server_port |
server_del_holddown | server_keep_missing | server_so_rcvbuf |
server_edns_buffer_size | server_prefetch | server_prefetch_key |
server_so_sndbuf | server_harden_below_nxdomain | server_ignore_cd_flag |
- server_log_queries | server_tcp_upstream | server_ssl_upstream |
+ server_log_queries | server_log_replies | server_tcp_upstream | server_ssl_upstream |
server_ssl_service_key | server_ssl_service_pem | server_ssl_port |
server_minimal_responses | server_rrset_roundrobin | server_max_udp_size |
server_so_reuseport | server_delay_close |
server_unblock_lan_zones | server_insecure_lan_zones |
server_dns64_prefix | server_dns64_synthall |
server_infra_cache_min_rtt | server_harden_algo_downgrade |
- server_ip_transparent | server_ratelimit | server_ratelimit_slabs |
- server_ratelimit_size | server_ratelimit_for_domain |
+ server_ip_transparent | server_ip_ratelimit | server_ratelimit |
+ server_ip_ratelimit_slabs | server_ratelimit_slabs |
+ server_ip_ratelimit_size | server_ratelimit_size |
+ server_ratelimit_for_domain |
server_ratelimit_below_domain | server_ratelimit_factor |
+ server_ip_ratelimit_factor |
server_caps_whitelist | server_cache_max_negative_ttl |
server_permit_small_holddown | server_qname_minimisation |
server_ip_freebind | server_define_tag | server_local_zone_tag |
@@ -206,7 +213,7 @@ content_server: server_num_threads | server_verbosity | server_port |
server_local_zone_override | server_access_control_tag_action |
server_access_control_tag_data | server_access_control_view |
server_qname_minimisation_strict | server_serve_expired |
- server_fake_dsa | server_log_identity
+ server_fake_dsa | server_log_identity | server_use_systemd
;
stubstart: VAR_STUB_ZONE
{
@@ -502,6 +509,15 @@ server_ssl_port: VAR_SSL_PORT STRING_ARG
free($2);
}
;
+server_use_systemd: VAR_USE_SYSTEMD STRING_ARG
+ {
+ OUTYY(("P(server_use_systemd:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->use_systemd = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG
{
OUTYY(("P(server_do_daemonize:%s)\n", $2));
@@ -543,6 +559,15 @@ server_log_queries: VAR_LOG_QUERIES STRING_ARG
free($2);
}
;
+server_log_replies: VAR_LOG_REPLIES STRING_ARG
+ {
+ OUTYY(("P(server_log_replies:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_replies = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_chroot: VAR_CHROOT STRING_ARG
{
OUTYY(("P(server_chroot:%s)\n", $2));
@@ -575,9 +600,11 @@ server_directory: VAR_DIRECTORY STRING_ARG
strncmp(d, cfg_parser->chroot, strlen(
cfg_parser->chroot)) == 0)
d += strlen(cfg_parser->chroot);
- if(chdir(d))
+ if(d[0]) {
+ if(chdir(d))
log_err("cannot chdir to directory: %s (%s)",
d, strerror(errno));
+ }
}
}
;
@@ -1201,9 +1228,11 @@ server_fake_dsa: VAR_FAKE_DSA STRING_ARG
OUTYY(("P(server_fake_dsa:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
+#ifdef HAVE_SSL
else fake_dsa = (strcmp($2, "yes")==0);
if(fake_dsa)
log_warn("test option fake_dsa is enabled");
+#endif
free($2);
}
;
@@ -1480,6 +1509,16 @@ server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG
}
}
;
+server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG
+ {
+ OUTYY(("P(server_ip_ratelimit:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->ip_ratelimit = atoi($2);
+ free($2);
+ }
+ ;
+
server_ratelimit: VAR_RATELIMIT STRING_ARG
{
OUTYY(("P(server_ratelimit:%s)\n", $2));
@@ -1489,6 +1528,14 @@ server_ratelimit: VAR_RATELIMIT STRING_ARG
free($2);
}
;
+server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG
+ {
+ OUTYY(("P(server_ip_ratelimit_size:%s)\n", $2));
+ if(!cfg_parse_memsize($2, &cfg_parser->cfg->ip_ratelimit_size))
+ yyerror("memory size expected");
+ free($2);
+ }
+ ;
server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG
{
OUTYY(("P(server_ratelimit_size:%s)\n", $2));
@@ -1497,6 +1544,19 @@ server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG
free($2);
}
;
+server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG
+ {
+ OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", $2));
+ if(atoi($2) == 0)
+ yyerror("number expected");
+ else {
+ cfg_parser->cfg->ip_ratelimit_slabs = atoi($2);
+ if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
+ yyerror("must be a power of 2");
+ }
+ free($2);
+ }
+ ;
server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG
{
OUTYY(("P(server_ratelimit_slabs:%s)\n", $2));
@@ -1536,6 +1596,15 @@ server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG
}
}
;
+server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG
+ {
+ OUTYY(("P(server_ip_ratelimit_factor:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->ip_ratelimit_factor = atoi($2);
+ free($2);
+ }
+ ;
server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG
{
OUTYY(("P(server_ratelimit_factor:%s)\n", $2));
diff --git a/util/data/dname.c b/util/data/dname.c
index 8fc475f7f3f1..517af2843e2c 100644
--- a/util/data/dname.c
+++ b/util/data/dname.c
@@ -270,8 +270,8 @@ dname_pkt_compare(sldns_buffer* pkt, uint8_t* d1, uint8_t* d2)
return 0;
}
-hashvalue_t
-dname_query_hash(uint8_t* dname, hashvalue_t h)
+hashvalue_type
+dname_query_hash(uint8_t* dname, hashvalue_type h)
{
uint8_t labuf[LDNS_MAX_LABELLEN+1];
uint8_t lablen;
@@ -294,8 +294,8 @@ dname_query_hash(uint8_t* dname, hashvalue_t h)
return h;
}
-hashvalue_t
-dname_pkt_hash(sldns_buffer* pkt, uint8_t* dname, hashvalue_t h)
+hashvalue_type
+dname_pkt_hash(sldns_buffer* pkt, uint8_t* dname, hashvalue_type h)
{
uint8_t labuf[LDNS_MAX_LABELLEN+1];
uint8_t lablen;
diff --git a/util/data/dname.h b/util/data/dname.h
index ae2fbadc1d85..53b341bf7ef7 100644
--- a/util/data/dname.h
+++ b/util/data/dname.h
@@ -127,7 +127,7 @@ int dname_pkt_compare(struct sldns_buffer* pkt, uint8_t* d1, uint8_t* d2);
* @param h: initial hash value.
* @return: result hash value.
*/
-hashvalue_t dname_query_hash(uint8_t* dname, hashvalue_t h);
+hashvalue_type dname_query_hash(uint8_t* dname, hashvalue_type h);
/**
* Hash dname, label by label, lowercasing, into hashvalue.
@@ -139,7 +139,8 @@ hashvalue_t dname_query_hash(uint8_t* dname, hashvalue_t h);
* @return: result hash value.
* Result is the same as dname_query_hash, even if compression is used.
*/
-hashvalue_t dname_pkt_hash(struct sldns_buffer* pkt, uint8_t* dname, hashvalue_t h);
+hashvalue_type dname_pkt_hash(struct sldns_buffer* pkt, uint8_t* dname,
+ hashvalue_type h);
/**
* Copy over a valid dname and decompress it.
diff --git a/util/data/msgparse.c b/util/data/msgparse.c
index 3774054f5700..5381500e1523 100644
--- a/util/data/msgparse.c
+++ b/util/data/msgparse.c
@@ -71,7 +71,7 @@ smart_compare(sldns_buffer* pkt, uint8_t* dnow,
*/
static struct rrset_parse*
new_rrset(struct msg_parse* msg, uint8_t* dname, size_t dnamelen,
- uint16_t type, uint16_t dclass, hashvalue_t hash,
+ uint16_t type, uint16_t dclass, hashvalue_type hash,
uint32_t rrset_flags, sldns_pkt_section section,
struct regional* region)
{
@@ -159,13 +159,13 @@ pkt_rrset_flags(sldns_buffer* pkt, uint16_t type, sldns_pkt_section sec)
return f;
}
-hashvalue_t
+hashvalue_type
pkt_hash_rrset(sldns_buffer* pkt, uint8_t* dname, uint16_t type,
uint16_t dclass, uint32_t rrset_flags)
{
/* note this MUST be identical to rrset_key_hash in packed_rrset.c */
/* this routine handles compressed names */
- hashvalue_t h = 0xab;
+ hashvalue_type h = 0xab;
h = dname_pkt_hash(pkt, dname, h);
h = hashlittle(&type, sizeof(type), h); /* host order */
h = hashlittle(&dclass, sizeof(dclass), h); /* netw order */
@@ -174,25 +174,25 @@ pkt_hash_rrset(sldns_buffer* pkt, uint8_t* dname, uint16_t type,
}
/** create partial dname hash for rrset hash */
-static hashvalue_t
+static hashvalue_type
pkt_hash_rrset_first(sldns_buffer* pkt, uint8_t* dname)
{
/* works together with pkt_hash_rrset_rest */
/* note this MUST be identical to rrset_key_hash in packed_rrset.c */
/* this routine handles compressed names */
- hashvalue_t h = 0xab;
+ hashvalue_type h = 0xab;
h = dname_pkt_hash(pkt, dname, h);
return h;
}
/** create a rrset hash from a partial dname hash */
-static hashvalue_t
-pkt_hash_rrset_rest(hashvalue_t dname_h, uint16_t type, uint16_t dclass,
+static hashvalue_type
+pkt_hash_rrset_rest(hashvalue_type dname_h, uint16_t type, uint16_t dclass,
uint32_t rrset_flags)
{
/* works together with pkt_hash_rrset_first */
/* note this MUST be identical to rrset_key_hash in packed_rrset.c */
- hashvalue_t h;
+ hashvalue_type h;
h = hashlittle(&type, sizeof(type), dname_h); /* host order */
h = hashlittle(&dclass, sizeof(dclass), h); /* netw order */
h = hashlittle(&rrset_flags, sizeof(uint32_t), h);
@@ -201,7 +201,7 @@ pkt_hash_rrset_rest(hashvalue_t dname_h, uint16_t type, uint16_t dclass,
/** compare rrset_parse with data */
static int
-rrset_parse_equals(struct rrset_parse* p, sldns_buffer* pkt, hashvalue_t h,
+rrset_parse_equals(struct rrset_parse* p, sldns_buffer* pkt, hashvalue_type h,
uint32_t rrset_flags, uint8_t* dname, size_t dnamelen,
uint16_t type, uint16_t dclass)
{
@@ -215,8 +215,8 @@ rrset_parse_equals(struct rrset_parse* p, sldns_buffer* pkt, hashvalue_t h,
struct rrset_parse*
msgparse_hashtable_lookup(struct msg_parse* msg, sldns_buffer* pkt,
- hashvalue_t h, uint32_t rrset_flags, uint8_t* dname, size_t dnamelen,
- uint16_t type, uint16_t dclass)
+ hashvalue_type h, uint32_t rrset_flags, uint8_t* dname,
+ size_t dnamelen, uint16_t type, uint16_t dclass)
{
struct rrset_parse* p = msg->hashtable[h & (PARSE_TABLE_SIZE-1)];
while(p) {
@@ -388,7 +388,7 @@ change_rrsig_rrset(struct rrset_parse* sigset, struct msg_parse* msg,
int hasother, sldns_pkt_section section, struct regional* region)
{
struct rrset_parse* dataset = sigset;
- hashvalue_t hash = pkt_hash_rrset(pkt, sigset->dname, datatype,
+ hashvalue_type hash = pkt_hash_rrset(pkt, sigset->dname, datatype,
sigset->rrset_class, rrset_flags);
log_assert( sigset->type == LDNS_RR_TYPE_RRSIG );
log_assert( datatype != LDNS_RR_TYPE_RRSIG );
@@ -455,14 +455,14 @@ change_rrsig_rrset(struct rrset_parse* sigset, struct msg_parse* msg,
*/
static int
find_rrset(struct msg_parse* msg, sldns_buffer* pkt, uint8_t* dname,
- size_t dnamelen, uint16_t type, uint16_t dclass, hashvalue_t* hash,
+ size_t dnamelen, uint16_t type, uint16_t dclass, hashvalue_type* hash,
uint32_t* rrset_flags,
uint8_t** prev_dname_first, uint8_t** prev_dname_last,
size_t* prev_dnamelen, uint16_t* prev_type,
uint16_t* prev_dclass, struct rrset_parse** rrset_prev,
sldns_pkt_section section, struct regional* region)
{
- hashvalue_t dname_h = pkt_hash_rrset_first(pkt, dname);
+ hashvalue_type dname_h = pkt_hash_rrset_first(pkt, dname);
uint16_t covtype;
if(*rrset_prev) {
/* check if equal to previous item */
@@ -824,7 +824,7 @@ parse_section(sldns_buffer* pkt, struct msg_parse* msg,
uint16_t type, prev_type = 0;
uint16_t dclass, prev_dclass = 0;
uint32_t rrset_flags = 0;
- hashvalue_t hash = 0;
+ hashvalue_type hash = 0;
struct rrset_parse* rrset = NULL;
int r;
diff --git a/util/data/msgparse.h b/util/data/msgparse.h
index 594517b2db11..e21f8504ea7d 100644
--- a/util/data/msgparse.h
+++ b/util/data/msgparse.h
@@ -138,7 +138,7 @@ struct rrset_parse {
/** next in list of all rrsets */
struct rrset_parse* rrset_all_next;
/** hash value of rrset */
- hashvalue_t hash;
+ hashvalue_type hash;
/** which section was it found in: one of
* LDNS_SECTION_ANSWER, LDNS_SECTION_AUTHORITY, LDNS_SECTION_ADDITIONAL
*/
@@ -296,8 +296,8 @@ int parse_edns_from_pkt(struct sldns_buffer* pkt, struct edns_data* edns,
* @param rrset_flags: rrset flags (same as packed_rrset flags).
* @return hash value
*/
-hashvalue_t pkt_hash_rrset(struct sldns_buffer* pkt, uint8_t* dname, uint16_t type,
- uint16_t dclass, uint32_t rrset_flags);
+hashvalue_type pkt_hash_rrset(struct sldns_buffer* pkt, uint8_t* dname,
+ uint16_t type, uint16_t dclass, uint32_t rrset_flags);
/**
* Lookup in msg hashtable to find a rrset.
@@ -312,7 +312,7 @@ hashvalue_t pkt_hash_rrset(struct sldns_buffer* pkt, uint8_t* dname, uint16_t ty
* @return NULL or the rrset_parse if found.
*/
struct rrset_parse* msgparse_hashtable_lookup(struct msg_parse* msg,
- struct sldns_buffer* pkt, hashvalue_t h, uint32_t rrset_flags,
+ struct sldns_buffer* pkt, hashvalue_type h, uint32_t rrset_flags,
uint8_t* dname, size_t dnamelen, uint16_t type, uint16_t dclass);
/**
diff --git a/util/data/msgreply.c b/util/data/msgreply.c
index 2caee7789fde..8869716b6793 100644
--- a/util/data/msgreply.c
+++ b/util/data/msgreply.c
@@ -608,10 +608,10 @@ reply_info_delete(void* d, void* ATTR_UNUSED(arg))
free(r);
}
-hashvalue_t
+hashvalue_type
query_info_hash(struct query_info *q, uint16_t flags)
{
- hashvalue_t h = 0xab;
+ hashvalue_type h = 0xab;
h = hashlittle(&q->qtype, sizeof(q->qtype), h);
if(q->qtype == LDNS_RR_TYPE_AAAA && (flags&BIT_CD))
h++;
@@ -622,7 +622,7 @@ query_info_hash(struct query_info *q, uint16_t flags)
struct msgreply_entry*
query_info_entrysetup(struct query_info* q, struct reply_info* r,
- hashvalue_t h)
+ hashvalue_type h)
{
struct msgreply_entry* e = (struct msgreply_entry*)malloc(
sizeof(struct msgreply_entry));
@@ -819,7 +819,39 @@ log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep)
regional_destroy(region);
}
-void
+void
+log_reply_info(enum verbosity_value v, struct query_info *qinf,
+ struct sockaddr_storage *addr, socklen_t addrlen, struct timeval dur,
+ int cached, struct sldns_buffer *rmsg)
+{
+ char qname_buf[LDNS_MAX_DOMAINLEN+1];
+ char clientip_buf[128];
+ char rcode_buf[16];
+ char type_buf[16];
+ char class_buf[16];
+ size_t pktlen;
+ uint16_t rcode = FLAGS_GET_RCODE(sldns_buffer_read_u16_at(rmsg, 2));
+
+ if(verbosity < v)
+ return;
+
+ sldns_wire2str_rcode_buf((int)rcode, rcode_buf, sizeof(rcode_buf));
+ addr_to_str(addr, addrlen, clientip_buf, sizeof(clientip_buf));
+ if(rcode == LDNS_RCODE_FORMERR)
+ {
+ log_info("%s - - - %s - - - ", clientip_buf, rcode_buf);
+ } else {
+ dname_str(qinf->qname, qname_buf);
+ pktlen = sldns_buffer_limit(rmsg);
+ sldns_wire2str_type_buf(qinf->qtype, type_buf, sizeof(type_buf));
+ sldns_wire2str_class_buf(qinf->qclass, class_buf, sizeof(class_buf));
+ log_info("%s %s %s %s %s " ARG_LL "d.%6.6d %d %d",
+ clientip_buf, qname_buf, type_buf, class_buf,
+ rcode_buf, (long long)dur.tv_sec, (int)dur.tv_usec, cached, (int)pktlen);
+ }
+}
+
+void
log_query_info(enum verbosity_value v, const char* str,
struct query_info* qinf)
{
diff --git a/util/data/msgreply.h b/util/data/msgreply.h
index cc0216133377..485d49afa87d 100644
--- a/util/data/msgreply.h
+++ b/util/data/msgreply.h
@@ -105,7 +105,7 @@ struct rrset_ref {
/** the key with lock, and ptr to packed data. */
struct ub_packed_rrset_key* key;
/** id needed */
- rrset_id_t id;
+ rrset_id_type id;
};
/**
@@ -330,7 +330,7 @@ void reply_info_delete(void* d, void* arg);
/** calculate hash value of query_info, lowercases the qname,
* uses CD flag for AAAA qtype */
-hashvalue_t query_info_hash(struct query_info *q, uint16_t flags);
+hashvalue_type query_info_hash(struct query_info *q, uint16_t flags);
/**
* Setup query info entry
@@ -340,7 +340,7 @@ hashvalue_t query_info_hash(struct query_info *q, uint16_t flags);
* @return: newly allocated message reply cache item.
*/
struct msgreply_entry* query_info_entrysetup(struct query_info* q,
- struct reply_info* r, hashvalue_t h);
+ struct reply_info* r, hashvalue_type h);
/**
* Copy reply_info and all rrsets in it and allocate.
@@ -448,10 +448,27 @@ struct ub_packed_rrset_key* reply_find_rrset(struct reply_info* rep,
* @param qinfo: query section.
* @param rep: rest of message.
*/
-void log_dns_msg(const char* str, struct query_info* qinfo,
+void log_dns_msg(const char* str, struct query_info* qinfo,
struct reply_info* rep);
/**
+ * Print string with neat domain name, type, class,
+ * status code from, and size of a query response.
+ *
+ * @param v: at what verbosity level to print this.
+ * @param qinf: query section.
+ * @param addr: address of the client.
+ * @param addrlen: length of the client address.
+ * @param dur: how long it took to complete the query.
+ * @param cached: whether or not the reply is coming from
+ * the cache, or an outside network.
+ * @param rmsg: sldns buffer packet.
+ */
+void log_reply_info(enum verbosity_value v, struct query_info *qinf,
+ struct sockaddr_storage *addr, socklen_t addrlen, struct timeval dur,
+ int cached, struct sldns_buffer *rmsg);
+
+/**
* Print string with neat domain name, type, class from query info.
* @param v: at what verbosity level to print this.
* @param str: string of message.
diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c
index 66399085a65e..9944087cbf51 100644
--- a/util/data/packed_rrset.c
+++ b/util/data/packed_rrset.c
@@ -158,14 +158,14 @@ rrsetdata_equal(struct packed_rrset_data* d1, struct packed_rrset_data* d2)
return 1;
}
-hashvalue_t
+hashvalue_type
rrset_key_hash(struct packed_rrset_key* key)
{
/* type is hashed in host order */
uint16_t t = ntohs(key->type);
/* Note this MUST be identical to pkt_hash_rrset in msgparse.c */
/* this routine does not have a compressed name */
- hashvalue_t h = 0xab;
+ hashvalue_type h = 0xab;
h = dname_query_hash(key->dname, h);
h = hashlittle(&t, sizeof(t), h);
h = hashlittle(&key->rrset_class, sizeof(uint16_t), h);
diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h
index 6039aef242ca..a2f116afba43 100644
--- a/util/data/packed_rrset.h
+++ b/util/data/packed_rrset.h
@@ -47,7 +47,7 @@ struct regional;
/** type used to uniquely identify rrsets. Cannot be reused without
* clearing the cache. */
-typedef uint64_t rrset_id_t;
+typedef uint64_t rrset_id_type;
/** this rrset is NSEC and is at zone apex (at child side of zonecut) */
#define PACKED_RRSET_NSEC_AT_APEX 0x1
@@ -114,7 +114,7 @@ struct ub_packed_rrset_key {
* The other values in this struct may only be altered after changing
* the id (which needs a writelock on entry.lock).
*/
- rrset_id_t id;
+ rrset_id_type id;
/** key data: dname, type and class */
struct packed_rrset_key rk;
};
@@ -191,6 +191,12 @@ enum sec_status {
* RRset data.
*
* The data is packed, stored contiguously in memory.
+ *
+ * It is not always stored contiguously, in that case, an unpacked-packed
+ * rrset has the arrays separate. A bunch of routines work on that, but
+ * the packed rrset that is contiguous is for the rrset-cache and the
+ * cache-response routines in daemon/worker.c.
+ *
* memory layout:
* o base struct
* o rr_len size_t array
@@ -334,7 +340,7 @@ void rrset_data_delete(void* data, void* userdata);
* @param key: the rrset key with name, type, class, flags.
* @return hash value.
*/
-hashvalue_t rrset_key_hash(struct packed_rrset_key* key);
+hashvalue_type rrset_key_hash(struct packed_rrset_key* key);
/**
* Fixup pointers in fixed data packed_rrset_data blob.
diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c
index cbcf8f5f5487..8bd7b973c2f7 100644
--- a/util/fptr_wlist.c
+++ b/util/fptr_wlist.c
@@ -84,7 +84,7 @@
#endif
int
-fptr_whitelist_comm_point(comm_point_callback_t *fptr)
+fptr_whitelist_comm_point(comm_point_callback_type *fptr)
{
if(fptr == &worker_handle_request) return 1;
else if(fptr == &outnet_udp_cb) return 1;
@@ -94,7 +94,7 @@ fptr_whitelist_comm_point(comm_point_callback_t *fptr)
}
int
-fptr_whitelist_comm_point_raw(comm_point_callback_t *fptr)
+fptr_whitelist_comm_point_raw(comm_point_callback_type *fptr)
{
if(fptr == &tube_handle_listen) return 1;
else if(fptr == &tube_handle_write) return 1;
@@ -156,7 +156,7 @@ fptr_whitelist_event(void (*fptr)(int, short, void *))
}
int
-fptr_whitelist_pending_udp(comm_point_callback_t *fptr)
+fptr_whitelist_pending_udp(comm_point_callback_type *fptr)
{
if(fptr == &serviced_udp_callback) return 1;
else if(fptr == &worker_handle_reply) return 1;
@@ -165,7 +165,7 @@ fptr_whitelist_pending_udp(comm_point_callback_t *fptr)
}
int
-fptr_whitelist_pending_tcp(comm_point_callback_t *fptr)
+fptr_whitelist_pending_tcp(comm_point_callback_type *fptr)
{
if(fptr == &serviced_tcp_callback) return 1;
else if(fptr == &worker_handle_reply) return 1;
@@ -174,7 +174,7 @@ fptr_whitelist_pending_tcp(comm_point_callback_t *fptr)
}
int
-fptr_whitelist_serviced_query(comm_point_callback_t *fptr)
+fptr_whitelist_serviced_query(comm_point_callback_type *fptr)
{
if(fptr == &worker_handle_service_reply) return 1;
else if(fptr == &libworker_handle_service_reply) return 1;
@@ -209,43 +209,46 @@ fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *))
}
int
-fptr_whitelist_hash_sizefunc(lruhash_sizefunc_t fptr)
+fptr_whitelist_hash_sizefunc(lruhash_sizefunc_type fptr)
{
if(fptr == &msgreply_sizefunc) return 1;
else if(fptr == &ub_rrset_sizefunc) return 1;
else if(fptr == &infra_sizefunc) return 1;
else if(fptr == &key_entry_sizefunc) return 1;
else if(fptr == &rate_sizefunc) return 1;
+ else if(fptr == &ip_rate_sizefunc) return 1;
else if(fptr == &test_slabhash_sizefunc) return 1;
return 0;
}
int
-fptr_whitelist_hash_compfunc(lruhash_compfunc_t fptr)
+fptr_whitelist_hash_compfunc(lruhash_compfunc_type fptr)
{
if(fptr == &query_info_compare) return 1;
else if(fptr == &ub_rrset_compare) return 1;
else if(fptr == &infra_compfunc) return 1;
else if(fptr == &key_entry_compfunc) return 1;
else if(fptr == &rate_compfunc) return 1;
+ else if(fptr == &ip_rate_compfunc) return 1;
else if(fptr == &test_slabhash_compfunc) return 1;
return 0;
}
int
-fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_t fptr)
+fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_type fptr)
{
if(fptr == &query_entry_delete) return 1;
else if(fptr == &ub_rrset_key_delete) return 1;
else if(fptr == &infra_delkeyfunc) return 1;
else if(fptr == &key_entry_delkeyfunc) return 1;
else if(fptr == &rate_delkeyfunc) return 1;
+ else if(fptr == &ip_rate_delkeyfunc) return 1;
else if(fptr == &test_slabhash_delkey) return 1;
return 0;
}
int
-fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_t fptr)
+fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_type fptr)
{
if(fptr == &reply_info_delete) return 1;
else if(fptr == &rrset_data_delete) return 1;
@@ -257,7 +260,7 @@ fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_t fptr)
}
int
-fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_t fptr)
+fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_type fptr)
{
if(fptr == NULL) return 1;
else if(fptr == &rrset_markdel) return 1;
@@ -409,14 +412,14 @@ fptr_whitelist_alloc_cleanup(void (*fptr)(void*))
return 0;
}
-int fptr_whitelist_tube_listen(tube_callback_t* fptr)
+int fptr_whitelist_tube_listen(tube_callback_type* fptr)
{
if(fptr == &worker_handle_control_cmd) return 1;
else if(fptr == &libworker_handle_control_cmd) return 1;
return 0;
}
-int fptr_whitelist_mesh_cb(mesh_cb_func_t fptr)
+int fptr_whitelist_mesh_cb(mesh_cb_func_type fptr)
{
if(fptr == &libworker_fg_done_cb) return 1;
else if(fptr == &libworker_bg_done_cb) return 1;
@@ -433,7 +436,7 @@ int fptr_whitelist_print_func(void (*fptr)(char*,void*))
return 0;
}
-int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_t* fptr,
+int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr,
enum inplace_cb_list_type type)
{
#ifndef WITH_PYTHONMODULE
@@ -459,7 +462,7 @@ int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_t* fptr,
return 0;
}
-int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_t* ATTR_UNUSED(fptr))
+int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* ATTR_UNUSED(fptr))
{
return 0;
}
diff --git a/util/fptr_wlist.h b/util/fptr_wlist.h
index 57eec99a8df7..5ab69f88758c 100644
--- a/util/fptr_wlist.h
+++ b/util/fptr_wlist.h
@@ -80,7 +80,7 @@
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_comm_point(comm_point_callback_t *fptr);
+int fptr_whitelist_comm_point(comm_point_callback_type *fptr);
/**
* Check function pointer whitelist for raw comm_point callback values.
@@ -88,7 +88,7 @@ int fptr_whitelist_comm_point(comm_point_callback_t *fptr);
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_comm_point_raw(comm_point_callback_t *fptr);
+int fptr_whitelist_comm_point_raw(comm_point_callback_type *fptr);
/**
* Check function pointer whitelist for comm_timer callback values.
@@ -137,7 +137,7 @@ int fptr_whitelist_event(void (*fptr)(int, short, void *));
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_pending_udp(comm_point_callback_t *fptr);
+int fptr_whitelist_pending_udp(comm_point_callback_type *fptr);
/**
* Check function pointer whitelist for pending tcp callback values.
@@ -145,7 +145,7 @@ int fptr_whitelist_pending_udp(comm_point_callback_t *fptr);
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_pending_tcp(comm_point_callback_t *fptr);
+int fptr_whitelist_pending_tcp(comm_point_callback_type *fptr);
/**
* Check function pointer whitelist for serviced query callback values.
@@ -153,7 +153,7 @@ int fptr_whitelist_pending_tcp(comm_point_callback_t *fptr);
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_serviced_query(comm_point_callback_t *fptr);
+int fptr_whitelist_serviced_query(comm_point_callback_type *fptr);
/**
* Check function pointer whitelist for rbtree cmp callback values.
@@ -169,7 +169,7 @@ int fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *));
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_hash_sizefunc(lruhash_sizefunc_t fptr);
+int fptr_whitelist_hash_sizefunc(lruhash_sizefunc_type fptr);
/**
* Check function pointer whitelist for lruhash compfunc callback values.
@@ -177,7 +177,7 @@ int fptr_whitelist_hash_sizefunc(lruhash_sizefunc_t fptr);
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_hash_compfunc(lruhash_compfunc_t fptr);
+int fptr_whitelist_hash_compfunc(lruhash_compfunc_type fptr);
/**
* Check function pointer whitelist for lruhash delkeyfunc callback values.
@@ -185,7 +185,7 @@ int fptr_whitelist_hash_compfunc(lruhash_compfunc_t fptr);
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_t fptr);
+int fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_type fptr);
/**
* Check function pointer whitelist for lruhash deldata callback values.
@@ -193,7 +193,7 @@ int fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_t fptr);
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_t fptr);
+int fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_type fptr);
/**
* Check function pointer whitelist for lruhash markdel callback values.
@@ -201,7 +201,7 @@ int fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_t fptr);
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_t fptr);
+int fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_type fptr);
/**
* Check function pointer whitelist for module_env send_query callback values.
@@ -316,7 +316,7 @@ int fptr_whitelist_alloc_cleanup(void (*fptr)(void*));
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_tube_listen(tube_callback_t* fptr);
+int fptr_whitelist_tube_listen(tube_callback_type* fptr);
/**
* Check function pointer whitelist for mesh state callback values.
@@ -324,7 +324,7 @@ int fptr_whitelist_tube_listen(tube_callback_t* fptr);
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_mesh_cb(mesh_cb_func_t fptr);
+int fptr_whitelist_mesh_cb(mesh_cb_func_type fptr);
/**
* Check function pointer whitelist for config_get_option func values.
@@ -341,7 +341,7 @@ int fptr_whitelist_print_func(void (*fptr)(char*,void*));
* @param type: the type of the callback function.
* @return false if not in whitelist.
*/
-int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_t* fptr,
+int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr,
enum inplace_cb_list_type type);
/**
@@ -349,7 +349,7 @@ int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_t* fptr,
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_t* fptr);
+int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr);
/** Due to module breakage by fptr wlist, these test app declarations
* are presented here */
diff --git a/util/iana_ports.inc b/util/iana_ports.inc
index 9bf65ef8fdb8..5709a4976c19 100644
--- a/util/iana_ports.inc
+++ b/util/iana_ports.inc
@@ -3946,6 +3946,7 @@
4700,
4701,
4702,
+4711,
4725,
4726,
4727,
@@ -4849,6 +4850,7 @@
8793,
8800,
8804,
+8808,
8873,
8880,
8883,
@@ -5352,6 +5354,7 @@
30260,
30832,
30999,
+31016,
31029,
31416,
31457,
@@ -5392,6 +5395,7 @@
34980,
35001,
35004,
+35100,
35355,
36001,
36411,
diff --git a/util/locks.c b/util/locks.c
index adfb6c062fcd..b65a02bdc8df 100644
--- a/util/locks.c
+++ b/util/locks.c
@@ -110,15 +110,15 @@ void ub_thread_sig_unblock(int sig)
* @param arg: user argument to func.
*/
void
-ub_thr_fork_create(ub_thread_t* thr, void* (*func)(void*), void* arg)
+ub_thr_fork_create(ub_thread_type* thr, void* (*func)(void*), void* arg)
{
pid_t pid = fork();
switch(pid) {
default: /* main */
- *thr = (ub_thread_t)pid;
+ *thr = (ub_thread_type)pid;
return;
case 0: /* child */
- *thr = (ub_thread_t)getpid();
+ *thr = (ub_thread_type)getpid();
(void)(*func)(arg);
exit(0);
case -1: /* error */
@@ -128,10 +128,10 @@ ub_thr_fork_create(ub_thread_t* thr, void* (*func)(void*), void* arg)
/**
* There is no threading. Wait for a process to terminate.
- * Note that ub_thread_t is defined as pid_t.
+ * Note that ub_thread_type is defined as pid_t.
* @param thread: the process id to wait for.
*/
-void ub_thr_fork_wait(ub_thread_t thread)
+void ub_thr_fork_wait(ub_thread_type thread)
{
int status = 0;
if(waitpid((pid_t)thread, &status, 0) == -1)
@@ -143,7 +143,7 @@ void ub_thr_fork_wait(ub_thread_t thread)
#endif /* !defined(HAVE_PTHREAD) && !defined(HAVE_SOLARIS_THREADS) && !defined(HAVE_WINDOWS_THREADS) */
#ifdef HAVE_SOLARIS_THREADS
-void* ub_thread_key_get(ub_thread_key_t key)
+void* ub_thread_key_get(ub_thread_key_type key)
{
void* ret=NULL;
LOCKRET(thr_getspecific(key, &ret));
@@ -167,19 +167,19 @@ static void log_win_err(const char* str, DWORD err)
LocalFree(buf);
}
-void lock_basic_init(lock_basic_t* lock)
+void lock_basic_init(lock_basic_type* lock)
{
/* implement own lock, because windows HANDLE as Mutex usage
* uses too many handles and would bog down the whole system. */
(void)InterlockedExchange(lock, 0);
}
-void lock_basic_destroy(lock_basic_t* lock)
+void lock_basic_destroy(lock_basic_type* lock)
{
(void)InterlockedExchange(lock, 0);
}
-void lock_basic_lock(lock_basic_t* lock)
+void lock_basic_lock(lock_basic_type* lock)
{
LONG wait = 1; /* wait 1 msec at first */
@@ -191,13 +191,13 @@ void lock_basic_lock(lock_basic_t* lock)
/* the old value was 0, but we inserted 1, we locked it! */
}
-void lock_basic_unlock(lock_basic_t* lock)
+void lock_basic_unlock(lock_basic_type* lock)
{
/* unlock it by inserting the value of 0. xchg for cache coherency. */
(void)InterlockedExchange(lock, 0);
}
-void ub_thread_key_create(ub_thread_key_t* key, void* f)
+void ub_thread_key_create(ub_thread_key_type* key, void* f)
{
*key = TlsAlloc();
if(*key == TLS_OUT_OF_INDEXES) {
@@ -207,14 +207,14 @@ void ub_thread_key_create(ub_thread_key_t* key, void* f)
else ub_thread_key_set(*key, f);
}
-void ub_thread_key_set(ub_thread_key_t key, void* v)
+void ub_thread_key_set(ub_thread_key_type key, void* v)
{
if(!TlsSetValue(key, v)) {
log_win_err("TlsSetValue failed", GetLastError());
}
}
-void* ub_thread_key_get(ub_thread_key_t key)
+void* ub_thread_key_get(ub_thread_key_type key)
{
void* ret = (void*)TlsGetValue(key);
if(ret == NULL && GetLastError() != ERROR_SUCCESS) {
@@ -223,7 +223,7 @@ void* ub_thread_key_get(ub_thread_key_t key)
return ret;
}
-void ub_thread_create(ub_thread_t* thr, void* (*func)(void*), void* arg)
+void ub_thread_create(ub_thread_type* thr, void* (*func)(void*), void* arg)
{
#ifndef HAVE__BEGINTHREADEX
*thr = CreateThread(NULL, /* default security (no inherit handle) */
@@ -233,7 +233,7 @@ void ub_thread_create(ub_thread_t* thr, void* (*func)(void*), void* arg)
NULL); /* do not store thread identifier anywhere */
#else
/* the beginthreadex routine setups for the C lib; aligns stack */
- *thr=(ub_thread_t)_beginthreadex(NULL, 0, (void*)func, arg, 0, NULL);
+ *thr=(ub_thread_type)_beginthreadex(NULL, 0, (void*)func, arg, 0, NULL);
#endif
if(*thr == NULL) {
log_win_err("CreateThread failed", GetLastError());
@@ -241,12 +241,12 @@ void ub_thread_create(ub_thread_t* thr, void* (*func)(void*), void* arg)
}
}
-ub_thread_t ub_thread_self(void)
+ub_thread_type ub_thread_self(void)
{
return GetCurrentThread();
}
-void ub_thread_join(ub_thread_t thr)
+void ub_thread_join(ub_thread_type thr)
{
DWORD ret = WaitForSingleObject(thr, INFINITE);
if(ret == WAIT_FAILED) {
diff --git a/util/locks.h b/util/locks.h
index 3776912aaca2..d86ee4923f73 100644
--- a/util/locks.h
+++ b/util/locks.h
@@ -95,7 +95,7 @@
/******************* PTHREAD ************************/
/** use pthread mutex for basic lock */
-typedef pthread_mutex_t lock_basic_t;
+typedef pthread_mutex_t lock_basic_type;
/** small front for pthread init func, NULL is default attrs. */
#define lock_basic_init(lock) LOCKRET(pthread_mutex_init(lock, NULL))
#define lock_basic_destroy(lock) LOCKRET(pthread_mutex_destroy(lock))
@@ -104,7 +104,7 @@ typedef pthread_mutex_t lock_basic_t;
#ifndef HAVE_PTHREAD_RWLOCK_T
/** in case rwlocks are not supported, use a mutex. */
-typedef pthread_mutex_t lock_rw_t;
+typedef pthread_mutex_t lock_rw_type;
#define lock_rw_init(lock) LOCKRET(pthread_mutex_init(lock, NULL))
#define lock_rw_destroy(lock) LOCKRET(pthread_mutex_destroy(lock))
#define lock_rw_rdlock(lock) LOCKRET(pthread_mutex_lock(lock))
@@ -112,7 +112,7 @@ typedef pthread_mutex_t lock_rw_t;
#define lock_rw_unlock(lock) LOCKRET(pthread_mutex_unlock(lock))
#else /* HAVE_PTHREAD_RWLOCK_T */
/** we use the pthread rwlock */
-typedef pthread_rwlock_t lock_rw_t;
+typedef pthread_rwlock_t lock_rw_type;
/** small front for pthread init func, NULL is default attrs. */
#define lock_rw_init(lock) LOCKRET(pthread_rwlock_init(lock, NULL))
#define lock_rw_destroy(lock) LOCKRET(pthread_rwlock_destroy(lock))
@@ -123,7 +123,7 @@ typedef pthread_rwlock_t lock_rw_t;
#ifndef HAVE_PTHREAD_SPINLOCK_T
/** in case spinlocks are not supported, use a mutex. */
-typedef pthread_mutex_t lock_quick_t;
+typedef pthread_mutex_t lock_quick_type;
/** small front for pthread init func, NULL is default attrs. */
#define lock_quick_init(lock) LOCKRET(pthread_mutex_init(lock, NULL))
#define lock_quick_destroy(lock) LOCKRET(pthread_mutex_destroy(lock))
@@ -132,7 +132,7 @@ typedef pthread_mutex_t lock_quick_t;
#else /* HAVE_PTHREAD_SPINLOCK_T */
/** use pthread spinlock for the quick lock */
-typedef pthread_spinlock_t lock_quick_t;
+typedef pthread_spinlock_t lock_quick_type;
/**
* allocate process private since this is available whether
* Thread Process-Shared Synchronization is supported or not.
@@ -148,14 +148,31 @@ typedef pthread_spinlock_t lock_quick_t;
#endif /* HAVE SPINLOCK */
/** Thread creation */
-typedef pthread_t ub_thread_t;
-/** Pass where to store tread_t in thr. Use default NULL attributes. */
-#define ub_thread_create(thr, func, arg) LOCKRET(pthread_create(thr, NULL, func, arg))
+typedef pthread_t ub_thread_type;
+/** On alpine linux default thread stack size is 80 Kb. See
+http://wiki.musl-libc.org/wiki/Functional_differences_from_glibc#Thread_stack_size
+This is not enough and cause segfault. Other linux distros have 2 Mb at least.
+Wrapper for set up thread stack size */
+#define PTHREADSTACKSIZE 2*1024*1024
+#define PTHREADCREATE(thr, stackrequired, func, arg) do {\
+ pthread_attr_t attr; \
+ size_t stacksize; \
+ LOCKRET(pthread_attr_init(&attr)); \
+ LOCKRET(pthread_attr_getstacksize(&attr, &stacksize)); \
+ if (stacksize < stackrequired) { \
+ LOCKRET(pthread_attr_setstacksize(&attr, stackrequired)); \
+ LOCKRET(pthread_create(thr, &attr, func, arg)); \
+ LOCKRET(pthread_attr_getstacksize(&attr, &stacksize)); \
+ verbose(VERB_ALGO, "Thread stack size set to %u", (unsigned)stacksize); \
+ } else {LOCKRET(pthread_create(thr, NULL, func, arg));} \
+ } while(0)
+/** Use wrapper for set thread stack size on attributes. */
+#define ub_thread_create(thr, func, arg) PTHREADCREATE(thr, PTHREADSTACKSIZE, func, arg)
/** get self id. */
#define ub_thread_self() pthread_self()
/** wait for another thread to terminate */
#define ub_thread_join(thread) LOCKRET(pthread_join(thread, NULL))
-typedef pthread_key_t ub_thread_key_t;
+typedef pthread_key_t ub_thread_key_type;
#define ub_thread_key_create(key, f) LOCKRET(pthread_key_create(key, f))
#define ub_thread_key_set(key, v) LOCKRET(pthread_setspecific(key, v))
#define ub_thread_key_get(key) pthread_getspecific(key)
@@ -167,7 +184,7 @@ typedef pthread_key_t ub_thread_key_t;
#include <synch.h>
#include <thread.h>
-typedef rwlock_t lock_rw_t;
+typedef rwlock_t lock_rw_type;
#define lock_rw_init(lock) LOCKRET(rwlock_init(lock, USYNC_THREAD, NULL))
#define lock_rw_destroy(lock) LOCKRET(rwlock_destroy(lock))
#define lock_rw_rdlock(lock) LOCKRET(rw_rdlock(lock))
@@ -175,28 +192,28 @@ typedef rwlock_t lock_rw_t;
#define lock_rw_unlock(lock) LOCKRET(rw_unlock(lock))
/** use basic mutex */
-typedef mutex_t lock_basic_t;
+typedef mutex_t lock_basic_type;
#define lock_basic_init(lock) LOCKRET(mutex_init(lock, USYNC_THREAD, NULL))
#define lock_basic_destroy(lock) LOCKRET(mutex_destroy(lock))
#define lock_basic_lock(lock) LOCKRET(mutex_lock(lock))
#define lock_basic_unlock(lock) LOCKRET(mutex_unlock(lock))
/** No spinlocks in solaris threads API. Use a mutex. */
-typedef mutex_t lock_quick_t;
+typedef mutex_t lock_quick_type;
#define lock_quick_init(lock) LOCKRET(mutex_init(lock, USYNC_THREAD, NULL))
#define lock_quick_destroy(lock) LOCKRET(mutex_destroy(lock))
#define lock_quick_lock(lock) LOCKRET(mutex_lock(lock))
#define lock_quick_unlock(lock) LOCKRET(mutex_unlock(lock))
/** Thread creation, create a default thread. */
-typedef thread_t ub_thread_t;
+typedef thread_t ub_thread_type;
#define ub_thread_create(thr, func, arg) LOCKRET(thr_create(NULL, NULL, func, arg, NULL, thr))
#define ub_thread_self() thr_self()
#define ub_thread_join(thread) LOCKRET(thr_join(thread, NULL, NULL))
-typedef thread_key_t ub_thread_key_t;
+typedef thread_key_t ub_thread_key_type;
#define ub_thread_key_create(key, f) LOCKRET(thr_keycreate(key, f))
#define ub_thread_key_set(key, v) LOCKRET(thr_setspecific(key, v))
-void* ub_thread_key_get(ub_thread_key_t key);
+void* ub_thread_key_get(ub_thread_key_type key);
#else /* we do not HAVE_SOLARIS_THREADS and no PTHREADS */
@@ -205,7 +222,7 @@ void* ub_thread_key_get(ub_thread_key_t key);
#include <windows.h>
/* Use a mutex */
-typedef LONG lock_rw_t;
+typedef LONG lock_rw_type;
#define lock_rw_init(lock) lock_basic_init(lock)
#define lock_rw_destroy(lock) lock_basic_destroy(lock)
#define lock_rw_rdlock(lock) lock_basic_lock(lock)
@@ -213,35 +230,35 @@ typedef LONG lock_rw_t;
#define lock_rw_unlock(lock) lock_basic_unlock(lock)
/** the basic lock is a mutex, implemented opaquely, for error handling. */
-typedef LONG lock_basic_t;
-void lock_basic_init(lock_basic_t* lock);
-void lock_basic_destroy(lock_basic_t* lock);
-void lock_basic_lock(lock_basic_t* lock);
-void lock_basic_unlock(lock_basic_t* lock);
+typedef LONG lock_basic_type;
+void lock_basic_init(lock_basic_type* lock);
+void lock_basic_destroy(lock_basic_type* lock);
+void lock_basic_lock(lock_basic_type* lock);
+void lock_basic_unlock(lock_basic_type* lock);
/** on windows no spinlock, use mutex too. */
-typedef LONG lock_quick_t;
+typedef LONG lock_quick_type;
#define lock_quick_init(lock) lock_basic_init(lock)
#define lock_quick_destroy(lock) lock_basic_destroy(lock)
#define lock_quick_lock(lock) lock_basic_lock(lock)
#define lock_quick_unlock(lock) lock_basic_unlock(lock)
/** Thread creation, create a default thread. */
-typedef HANDLE ub_thread_t;
-void ub_thread_create(ub_thread_t* thr, void* (*func)(void*), void* arg);
-ub_thread_t ub_thread_self(void);
-void ub_thread_join(ub_thread_t thr);
-typedef DWORD ub_thread_key_t;
-void ub_thread_key_create(ub_thread_key_t* key, void* f);
-void ub_thread_key_set(ub_thread_key_t key, void* v);
-void* ub_thread_key_get(ub_thread_key_t key);
+typedef HANDLE ub_thread_type;
+void ub_thread_create(ub_thread_type* thr, void* (*func)(void*), void* arg);
+ub_thread_type ub_thread_self(void);
+void ub_thread_join(ub_thread_type thr);
+typedef DWORD ub_thread_key_type;
+void ub_thread_key_create(ub_thread_key_type* key, void* f);
+void ub_thread_key_set(ub_thread_key_type key, void* v);
+void* ub_thread_key_get(ub_thread_key_type key);
#else /* we do not HAVE_SOLARIS_THREADS, PTHREADS or WINDOWS_THREADS */
/******************* NO THREADS ************************/
#define THREADS_DISABLED 1
/** In case there is no thread support, define locks to do nothing */
-typedef int lock_rw_t;
+typedef int lock_rw_type;
#define lock_rw_init(lock) /* nop */
#define lock_rw_destroy(lock) /* nop */
#define lock_rw_rdlock(lock) /* nop */
@@ -249,30 +266,30 @@ typedef int lock_rw_t;
#define lock_rw_unlock(lock) /* nop */
/** define locks to do nothing */
-typedef int lock_basic_t;
+typedef int lock_basic_type;
#define lock_basic_init(lock) /* nop */
#define lock_basic_destroy(lock) /* nop */
#define lock_basic_lock(lock) /* nop */
#define lock_basic_unlock(lock) /* nop */
/** define locks to do nothing */
-typedef int lock_quick_t;
+typedef int lock_quick_type;
#define lock_quick_init(lock) /* nop */
#define lock_quick_destroy(lock) /* nop */
#define lock_quick_lock(lock) /* nop */
#define lock_quick_unlock(lock) /* nop */
/** Thread creation, threads do not exist */
-typedef pid_t ub_thread_t;
+typedef pid_t ub_thread_type;
/** ub_thread_create is simulated with fork (extremely heavy threads,
* with no shared memory). */
#define ub_thread_create(thr, func, arg) \
ub_thr_fork_create(thr, func, arg)
#define ub_thread_self() getpid()
#define ub_thread_join(thread) ub_thr_fork_wait(thread)
-void ub_thr_fork_wait(ub_thread_t thread);
-void ub_thr_fork_create(ub_thread_t* thr, void* (*func)(void*), void* arg);
-typedef void* ub_thread_key_t;
+void ub_thr_fork_wait(ub_thread_type thread);
+void ub_thr_fork_create(ub_thread_type* thr, void* (*func)(void*), void* arg);
+typedef void* ub_thread_key_type;
#define ub_thread_key_create(key, f) (*(key)) = NULL
#define ub_thread_key_set(key, v) (key) = (v)
#define ub_thread_key_get(key) (key)
diff --git a/util/log.c b/util/log.c
index 3ebd12025af9..439541a7ce4a 100644
--- a/util/log.c
+++ b/util/log.c
@@ -67,10 +67,10 @@ static FILE* logfile = 0;
/** if key has been created */
static int key_created = 0;
/** pthread key for thread ids in logfile */
-static ub_thread_key_t logkey;
+static ub_thread_key_type logkey;
#ifndef THREADS_DISABLED
/** pthread mutex to protect FILE* */
-static lock_quick_t log_lock;
+static lock_quick_type log_lock;
#endif
/** the identity of this executable/process */
static const char* ident="unbound";
diff --git a/util/mini_event.c b/util/mini_event.c
index 98d15f677b0a..14e9efe4790d 100644
--- a/util/mini_event.c
+++ b/util/mini_event.c
@@ -147,7 +147,7 @@ static void handle_timeouts(struct event_base* base, struct timeval* now,
wait->tv_sec = (time_t)-1;
#endif
- while((rbnode_t*)(p = (struct event*)rbtree_first(base->times))
+ while((rbnode_type*)(p = (struct event*)rbtree_first(base->times))
!=RBTREE_NULL) {
#ifndef S_SPLINT_S
if(p->ev_timeout.tv_sec > now->tv_sec ||
diff --git a/util/mini_event.h b/util/mini_event.h
index 1a5bcb445ae0..204894d97af2 100644
--- a/util/mini_event.h
+++ b/util/mini_event.h
@@ -96,7 +96,7 @@
struct event_base
{
/** sorted by timeout (absolute), ptr */
- rbtree_t* times;
+ rbtree_type* times;
/** array of 0 - maxfd of ptr to event for it */
struct event** fds;
/** max fd in use */
@@ -128,7 +128,7 @@ struct event_base
*/
struct event {
/** node in timeout rbtree */
- rbnode_t node;
+ rbnode_type node;
/** is event already added */
int added;
diff --git a/util/module.c b/util/module.c
index cc3328b13c9b..91983b18274d 100644
--- a/util/module.c
+++ b/util/module.c
@@ -124,7 +124,7 @@ edns_register_option(uint16_t opt_code, int bypass_cache_stage,
}
static int
-inplace_cb_reply_register_generic(inplace_cb_reply_func_t* cb,
+inplace_cb_reply_register_generic(inplace_cb_reply_func_type* cb,
enum inplace_cb_list_type type, void* cb_arg, struct module_env* env)
{
struct inplace_cb_reply* callback;
@@ -153,7 +153,7 @@ inplace_cb_reply_register_generic(inplace_cb_reply_func_t* cb,
}
int
-inplace_cb_reply_register(inplace_cb_reply_func_t* cb, void* cb_arg,
+inplace_cb_reply_register(inplace_cb_reply_func_type* cb, void* cb_arg,
struct module_env* env)
{
return inplace_cb_reply_register_generic(cb, inplace_cb_reply, cb_arg,
@@ -161,7 +161,7 @@ inplace_cb_reply_register(inplace_cb_reply_func_t* cb, void* cb_arg,
}
int
-inplace_cb_reply_cache_register(inplace_cb_reply_func_t* cb, void* cb_arg,
+inplace_cb_reply_cache_register(inplace_cb_reply_func_type* cb, void* cb_arg,
struct module_env* env)
{
return inplace_cb_reply_register_generic(cb, inplace_cb_reply_cache,
@@ -169,7 +169,7 @@ inplace_cb_reply_cache_register(inplace_cb_reply_func_t* cb, void* cb_arg,
}
int
-inplace_cb_reply_local_register(inplace_cb_reply_func_t* cb, void* cb_arg,
+inplace_cb_reply_local_register(inplace_cb_reply_func_type* cb, void* cb_arg,
struct module_env* env)
{
return inplace_cb_reply_register_generic(cb, inplace_cb_reply_local,
@@ -177,7 +177,7 @@ inplace_cb_reply_local_register(inplace_cb_reply_func_t* cb, void* cb_arg,
}
int
-inplace_cb_reply_servfail_register(inplace_cb_reply_func_t* cb, void* cb_arg,
+inplace_cb_reply_servfail_register(inplace_cb_reply_func_type* cb, void* cb_arg,
struct module_env* env)
{
return inplace_cb_reply_register_generic(cb, inplace_cb_reply_servfail,
@@ -216,7 +216,7 @@ void inplace_cb_reply_servfail_delete(struct module_env* env)
}
int
-inplace_cb_query_register(inplace_cb_query_func_t* cb, void* cb_arg,
+inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cb_arg,
struct module_env* env)
{
struct inplace_cb_query* callback;
diff --git a/util/module.h b/util/module.h
index 0e27e6a56d71..d3db3eaec151 100644
--- a/util/module.h
+++ b/util/module.h
@@ -176,7 +176,7 @@ struct iter_forwards;
struct iter_hints;
/** Maximum number of modules in operation */
-#define MAX_MODULE 5
+#define MAX_MODULE 16
/** Maximum number of known edns options */
#define MAX_KNOWN_EDNS_OPTS 256
@@ -226,7 +226,7 @@ struct edns_known_option {
* region: region to store data.
* python_callback: only used for registering a python callback function.
*/
-typedef int inplace_cb_reply_func_t(struct query_info* qinfo,
+typedef int inplace_cb_reply_func_type(struct query_info* qinfo,
struct module_qstate* qstate, struct reply_info* rep, int rcode,
struct edns_data* edns, struct edns_option** opt_list_out,
struct regional* region, void* python_callback);
@@ -244,7 +244,7 @@ struct inplace_cb_reply {
* opt_list_out, region, python_callback);
* python_callback is only used for registering a python callback function.
*/
- inplace_cb_reply_func_t* cb;
+ inplace_cb_reply_func_type* cb;
void* cb_arg;
};
@@ -265,7 +265,7 @@ struct inplace_cb_reply {
* region: region to store data.
* python_callback: only used for registering a python callback function.
*/
-typedef int inplace_cb_query_func_t(struct query_info* qinfo, uint16_t flags,
+typedef int inplace_cb_query_func_type(struct query_info* qinfo, uint16_t flags,
struct module_qstate* qstate, struct sockaddr_storage* addr,
socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region,
void* python_callback);
@@ -283,7 +283,7 @@ struct inplace_cb_query {
* region, python_callback);
* python_callback is only used for registering a python callback function.
*/
- inplace_cb_query_func_t* cb;
+ inplace_cb_query_func_type* cb;
void* cb_arg;
};
@@ -688,7 +688,7 @@ int edns_register_option(uint16_t opt_code, int bypass_cache_stage,
* @return true on success, false on failure (out of memory or trying to
* register after the environment is copied to the threads.)
*/
-int inplace_cb_reply_register(inplace_cb_reply_func_t* cb, void* cb_arg,
+int inplace_cb_reply_register(inplace_cb_reply_func_type* cb, void* cb_arg,
struct module_env* env);
/**
@@ -699,7 +699,7 @@ int inplace_cb_reply_register(inplace_cb_reply_func_t* cb, void* cb_arg,
* @return true on success, false on failure (out of memory or trying to
* register after the environment is copied to the threads.)
*/
-int inplace_cb_reply_cache_register(inplace_cb_reply_func_t* cb, void* cb_arg,
+int inplace_cb_reply_cache_register(inplace_cb_reply_func_type* cb, void* cb_arg,
struct module_env* env);
/**
@@ -711,7 +711,7 @@ int inplace_cb_reply_cache_register(inplace_cb_reply_func_t* cb, void* cb_arg,
* @return true on success, false on failure (out of memory or trying to
* register after the environment is copied to the threads.)
*/
-int inplace_cb_reply_local_register(inplace_cb_reply_func_t* cb, void* cb_arg,
+int inplace_cb_reply_local_register(inplace_cb_reply_func_type* cb, void* cb_arg,
struct module_env* env);
/**
@@ -722,7 +722,7 @@ int inplace_cb_reply_local_register(inplace_cb_reply_func_t* cb, void* cb_arg,
* @return true on success, false on failure (out of memory or trying to
* register after the environment is copied to the threads.)
*/
-int inplace_cb_reply_servfail_register(inplace_cb_reply_func_t* cb,
+int inplace_cb_reply_servfail_register(inplace_cb_reply_func_type* cb,
void* cb_arg, struct module_env* env);
/**
@@ -751,7 +751,7 @@ void inplace_cb_reply_servfail_delete(struct module_env* env);
* @return true on success, false on failure (out of memory or trying to
* register after the environment is copied to the threads.)
*/
-int inplace_cb_query_register(inplace_cb_query_func_t* cb, void* cb_arg,
+int inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cb_arg,
struct module_env* env);
/**
diff --git a/util/net_help.c b/util/net_help.c
index 248598918b8e..6c0d68e312b8 100644
--- a/util/net_help.c
+++ b/util/net_help.c
@@ -785,7 +785,7 @@ void* outgoing_ssl_fd(void* sslctx, int fd)
#if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK) && OPENSSL_VERSION_NUMBER < 0x10100000L
/** global lock list for openssl locks */
-static lock_basic_t *ub_openssl_locks = NULL;
+static lock_basic_type *ub_openssl_locks = NULL;
/** callback that gets thread id for openssl */
static unsigned long
@@ -810,8 +810,8 @@ int ub_openssl_lock_init(void)
{
#if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK) && OPENSSL_VERSION_NUMBER < 0x10100000L
int i;
- ub_openssl_locks = (lock_basic_t*)reallocarray(
- NULL, (size_t)CRYPTO_num_locks(), sizeof(lock_basic_t));
+ ub_openssl_locks = (lock_basic_type*)reallocarray(
+ NULL, (size_t)CRYPTO_num_locks(), sizeof(lock_basic_type));
if(!ub_openssl_locks)
return 0;
for(i=0; i<CRYPTO_num_locks(); i++) {
diff --git a/util/netevent.c b/util/netevent.c
index 8960b362c78d..8e66b9045fa1 100644
--- a/util/netevent.c
+++ b/util/netevent.c
@@ -146,7 +146,7 @@ struct internal_signal {
/** create a tcp handler with a parent */
static struct comm_point* comm_point_create_tcp_handler(
struct comm_base *base, struct comm_point* parent, size_t bufsize,
- comm_point_callback_t* callback, void* callback_arg);
+ comm_point_callback_type* callback, void* callback_arg);
/* -------- End of local definitions -------- */
@@ -654,7 +654,7 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg)
(void)fd;
(void)event;
(void)arg;
- fatal_exit("recvmsg: No support for IPV6_PKTINFO. "
+ fatal_exit("recvmsg: No support for IPV6_PKTINFO; IP_PKTINFO or IP_RECVDSTADDR. "
"Please disable interface-automatic");
#endif /* AF_INET6 && IPV6_PKTINFO && HAVE_RECVMSG */
}
@@ -1573,7 +1573,7 @@ void comm_point_raw_handle_callback(int ATTR_UNUSED(fd),
struct comm_point*
comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer,
- comm_point_callback_t* callback, void* callback_arg)
+ comm_point_callback_type* callback, void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
sizeof(struct comm_point));
@@ -1628,7 +1628,7 @@ comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer,
struct comm_point*
comm_point_create_udp_ancil(struct comm_base *base, int fd,
sldns_buffer* buffer,
- comm_point_callback_t* callback, void* callback_arg)
+ comm_point_callback_type* callback, void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
sizeof(struct comm_point));
@@ -1683,7 +1683,7 @@ comm_point_create_udp_ancil(struct comm_base *base, int fd,
static struct comm_point*
comm_point_create_tcp_handler(struct comm_base *base,
struct comm_point* parent, size_t bufsize,
- comm_point_callback_t* callback, void* callback_arg)
+ comm_point_callback_type* callback, void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
sizeof(struct comm_point));
@@ -1749,7 +1749,7 @@ comm_point_create_tcp_handler(struct comm_base *base,
struct comm_point*
comm_point_create_tcp(struct comm_base *base, int fd, int num, size_t bufsize,
- comm_point_callback_t* callback, void* callback_arg)
+ comm_point_callback_type* callback, void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
sizeof(struct comm_point));
@@ -1820,7 +1820,7 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, size_t bufsize,
struct comm_point*
comm_point_create_tcp_out(struct comm_base *base, size_t bufsize,
- comm_point_callback_t* callback, void* callback_arg)
+ comm_point_callback_type* callback, void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
sizeof(struct comm_point));
@@ -1877,7 +1877,7 @@ comm_point_create_tcp_out(struct comm_base *base, size_t bufsize,
struct comm_point*
comm_point_create_local(struct comm_base *base, int fd, size_t bufsize,
- comm_point_callback_t* callback, void* callback_arg)
+ comm_point_callback_type* callback, void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
sizeof(struct comm_point));
@@ -1938,7 +1938,7 @@ comm_point_create_local(struct comm_base *base, int fd, size_t bufsize,
struct comm_point*
comm_point_create_raw(struct comm_base* base, int fd, int writing,
- comm_point_callback_t* callback, void* callback_arg)
+ comm_point_callback_type* callback, void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
sizeof(struct comm_point));
diff --git a/util/netevent.h b/util/netevent.h
index 1d7ac0bc118b..2ce716b850e9 100644
--- a/util/netevent.h
+++ b/util/netevent.h
@@ -71,7 +71,7 @@ struct internal_base;
struct internal_timer; /* A sub struct of the comm_timer super struct */
/** callback from communication point function type */
-typedef int comm_point_callback_t(struct comm_point*, void*, int,
+typedef int comm_point_callback_type(struct comm_point*, void*, int,
struct comm_reply*);
/** to pass no_error to callback function */
@@ -264,7 +264,7 @@ struct comm_point {
For UDP this is done without changing the commpoint.
In TCP it sets write state.
*/
- comm_point_callback_t* callback;
+ comm_point_callback_type* callback;
/** argument to pass to callback. */
void *cb_arg;
};
@@ -382,7 +382,7 @@ struct ub_event_base* comm_base_internal(struct comm_base* b);
*/
struct comm_point* comm_point_create_udp(struct comm_base* base,
int fd, struct sldns_buffer* buffer,
- comm_point_callback_t* callback, void* callback_arg);
+ comm_point_callback_type* callback, void* callback_arg);
/**
* Create an UDP with ancillary data comm point. Calls malloc.
@@ -398,7 +398,7 @@ struct comm_point* comm_point_create_udp(struct comm_base* base,
*/
struct comm_point* comm_point_create_udp_ancil(struct comm_base* base,
int fd, struct sldns_buffer* buffer,
- comm_point_callback_t* callback, void* callback_arg);
+ comm_point_callback_type* callback, void* callback_arg);
/**
* Create a TCP listener comm point. Calls malloc.
@@ -419,7 +419,7 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base,
*/
struct comm_point* comm_point_create_tcp(struct comm_base* base,
int fd, int num, size_t bufsize,
- comm_point_callback_t* callback, void* callback_arg);
+ comm_point_callback_type* callback, void* callback_arg);
/**
* Create an outgoing TCP commpoint. No file descriptor is opened, left at -1.
@@ -430,7 +430,7 @@ struct comm_point* comm_point_create_tcp(struct comm_base* base,
* @return: the commpoint or NULL on error.
*/
struct comm_point* comm_point_create_tcp_out(struct comm_base* base,
- size_t bufsize, comm_point_callback_t* callback, void* callback_arg);
+ size_t bufsize, comm_point_callback_type* callback, void* callback_arg);
/**
* Create commpoint to listen to a local domain file descriptor.
@@ -443,7 +443,7 @@ struct comm_point* comm_point_create_tcp_out(struct comm_base* base,
*/
struct comm_point* comm_point_create_local(struct comm_base* base,
int fd, size_t bufsize,
- comm_point_callback_t* callback, void* callback_arg);
+ comm_point_callback_type* callback, void* callback_arg);
/**
* Create commpoint to listen to a local domain pipe descriptor.
@@ -456,7 +456,7 @@ struct comm_point* comm_point_create_local(struct comm_base* base,
*/
struct comm_point* comm_point_create_raw(struct comm_base* base,
int fd, int writing,
- comm_point_callback_t* callback, void* callback_arg);
+ comm_point_callback_type* callback, void* callback_arg);
/**
* Close a comm point fd.
diff --git a/util/rbtree.c b/util/rbtree.c
index ee5446f6cb56..f031c9a13faf 100644
--- a/util/rbtree.c
+++ b/util/rbtree.c
@@ -50,7 +50,7 @@
#define RED 1
/** the NULL node, global alloc */
-rbnode_t rbtree_null_node = {
+rbnode_type rbtree_null_node = {
RBTREE_NULL, /* Parent. */
RBTREE_NULL, /* Left. */
RBTREE_NULL, /* Right. */
@@ -59,13 +59,14 @@ rbnode_t rbtree_null_node = {
};
/** rotate subtree left (to preserve redblack property) */
-static void rbtree_rotate_left(rbtree_t *rbtree, rbnode_t *node);
+static void rbtree_rotate_left(rbtree_type *rbtree, rbnode_type *node);
/** rotate subtree right (to preserve redblack property) */
-static void rbtree_rotate_right(rbtree_t *rbtree, rbnode_t *node);
+static void rbtree_rotate_right(rbtree_type *rbtree, rbnode_type *node);
/** Fixup node colours when insert happened */
-static void rbtree_insert_fixup(rbtree_t *rbtree, rbnode_t *node);
+static void rbtree_insert_fixup(rbtree_type *rbtree, rbnode_type *node);
/** Fixup node colours when delete happened */
-static void rbtree_delete_fixup(rbtree_t* rbtree, rbnode_t* child, rbnode_t* child_parent);
+static void rbtree_delete_fixup(rbtree_type* rbtree, rbnode_type* child,
+ rbnode_type* child_parent);
/*
* Creates a new red black tree, initializes and returns a pointer to it.
@@ -73,13 +74,13 @@ static void rbtree_delete_fixup(rbtree_t* rbtree, rbnode_t* child, rbnode_t* chi
* Return NULL on failure.
*
*/
-rbtree_t *
+rbtree_type *
rbtree_create (int (*cmpf)(const void *, const void *))
{
- rbtree_t *rbtree;
+ rbtree_type *rbtree;
/* Allocate memory for it */
- rbtree = (rbtree_t *) malloc(sizeof(rbtree_t));
+ rbtree = (rbtree_type *) malloc(sizeof(rbtree_type));
if (!rbtree) {
return NULL;
}
@@ -91,7 +92,7 @@ rbtree_create (int (*cmpf)(const void *, const void *))
}
void
-rbtree_init(rbtree_t *rbtree, int (*cmpf)(const void *, const void *))
+rbtree_init(rbtree_type *rbtree, int (*cmpf)(const void *, const void *))
{
/* Initialize it */
rbtree->root = RBTREE_NULL;
@@ -104,9 +105,9 @@ rbtree_init(rbtree_t *rbtree, int (*cmpf)(const void *, const void *))
*
*/
static void
-rbtree_rotate_left(rbtree_t *rbtree, rbnode_t *node)
+rbtree_rotate_left(rbtree_type *rbtree, rbnode_type *node)
{
- rbnode_t *right = node->right;
+ rbnode_type *right = node->right;
node->right = right->left;
if (right->left != RBTREE_NULL)
right->left->parent = node;
@@ -131,9 +132,9 @@ rbtree_rotate_left(rbtree_t *rbtree, rbnode_t *node)
*
*/
static void
-rbtree_rotate_right(rbtree_t *rbtree, rbnode_t *node)
+rbtree_rotate_right(rbtree_type *rbtree, rbnode_type *node)
{
- rbnode_t *left = node->left;
+ rbnode_type *left = node->left;
node->left = left->right;
if (left->right != RBTREE_NULL)
left->right->parent = node;
@@ -154,9 +155,9 @@ rbtree_rotate_right(rbtree_t *rbtree, rbnode_t *node)
}
static void
-rbtree_insert_fixup(rbtree_t *rbtree, rbnode_t *node)
+rbtree_insert_fixup(rbtree_type *rbtree, rbnode_type *node)
{
- rbnode_t *uncle;
+ rbnode_type *uncle;
/* While not at the root and need fixing... */
while (node != rbtree->root && node->parent->color == RED) {
@@ -223,15 +224,15 @@ rbtree_insert_fixup(rbtree_t *rbtree, rbnode_t *node)
* Returns NULL on failure or the pointer to the newly added node
* otherwise.
*/
-rbnode_t *
-rbtree_insert (rbtree_t *rbtree, rbnode_t *data)
+rbnode_type *
+rbtree_insert (rbtree_type *rbtree, rbnode_type *data)
{
/* XXX Not necessary, but keeps compiler quiet... */
int r = 0;
/* We start at the root of the tree */
- rbnode_t *node = rbtree->root;
- rbnode_t *parent = RBTREE_NULL;
+ rbnode_type *node = rbtree->root;
+ rbnode_type *parent = RBTREE_NULL;
fptr_ok(fptr_whitelist_rbtree_cmp(rbtree->cmp));
/* Lets find the new parent... */
@@ -276,10 +277,10 @@ rbtree_insert (rbtree_t *rbtree, rbnode_t *data)
* Searches the red black tree, returns the data if key is found or NULL otherwise.
*
*/
-rbnode_t *
-rbtree_search (rbtree_t *rbtree, const void *key)
+rbnode_type *
+rbtree_search (rbtree_type *rbtree, const void *key)
{
- rbnode_t *node;
+ rbnode_type *node;
if (rbtree_find_less_equal(rbtree, key, &node)) {
return node;
@@ -295,13 +296,14 @@ static void swap_int8(uint8_t* x, uint8_t* y)
}
/** helpers for delete: swap node pointers */
-static void swap_np(rbnode_t** x, rbnode_t** y)
+static void swap_np(rbnode_type** x, rbnode_type** y)
{
- rbnode_t* t = *x; *x = *y; *y = t;
+ rbnode_type* t = *x; *x = *y; *y = t;
}
/** Update parent pointers of child trees of 'parent' */
-static void change_parent_ptr(rbtree_t* rbtree, rbnode_t* parent, rbnode_t* old, rbnode_t* new)
+static void change_parent_ptr(rbtree_type* rbtree, rbnode_type* parent,
+ rbnode_type* old, rbnode_type* new)
{
if(parent == RBTREE_NULL)
{
@@ -315,18 +317,19 @@ static void change_parent_ptr(rbtree_t* rbtree, rbnode_t* parent, rbnode_t* old,
if(parent->right == old) parent->right = new;
}
/** Update parent pointer of a node 'child' */
-static void change_child_ptr(rbnode_t* child, rbnode_t* old, rbnode_t* new)
+static void change_child_ptr(rbnode_type* child, rbnode_type* old,
+ rbnode_type* new)
{
if(child == RBTREE_NULL) return;
log_assert(child->parent == old || child->parent == new);
if(child->parent == old) child->parent = new;
}
-rbnode_t*
-rbtree_delete(rbtree_t *rbtree, const void *key)
+rbnode_type*
+rbtree_delete(rbtree_type *rbtree, const void *key)
{
- rbnode_t *to_delete;
- rbnode_t *child;
+ rbnode_type *to_delete;
+ rbnode_type *child;
if((to_delete = rbtree_search(rbtree, key)) == 0) return 0;
rbtree->count--;
@@ -334,11 +337,11 @@ rbtree_delete(rbtree_t *rbtree, const void *key)
if(to_delete->left != RBTREE_NULL && to_delete->right != RBTREE_NULL)
{
/* swap with smallest from right subtree (or largest from left) */
- rbnode_t *smright = to_delete->right;
+ rbnode_type *smright = to_delete->right;
while(smright->left != RBTREE_NULL)
smright = smright->left;
/* swap the smright and to_delete elements in the tree,
- * but the rbnode_t is first part of user data struct
+ * but the rbnode_type is first part of user data struct
* so cannot just swap the keys and data pointers. Instead
* readjust the pointers left,right,parent */
@@ -400,9 +403,10 @@ rbtree_delete(rbtree_t *rbtree, const void *key)
return to_delete;
}
-static void rbtree_delete_fixup(rbtree_t* rbtree, rbnode_t* child, rbnode_t* child_parent)
+static void rbtree_delete_fixup(rbtree_type* rbtree, rbnode_type* child,
+ rbnode_type* child_parent)
{
- rbnode_t* sibling;
+ rbnode_type* sibling;
int go_up = 1;
/* determine sibling to the node that is one-black short */
@@ -504,10 +508,11 @@ static void rbtree_delete_fixup(rbtree_t* rbtree, rbnode_t* child, rbnode_t* chi
}
int
-rbtree_find_less_equal(rbtree_t *rbtree, const void *key, rbnode_t **result)
+rbtree_find_less_equal(rbtree_type *rbtree, const void *key,
+ rbnode_type **result)
{
int r;
- rbnode_t *node;
+ rbnode_type *node;
log_assert(result);
@@ -540,19 +545,19 @@ rbtree_find_less_equal(rbtree_t *rbtree, const void *key, rbnode_t **result)
* Finds the first element in the red black tree
*
*/
-rbnode_t *
-rbtree_first (rbtree_t *rbtree)
+rbnode_type *
+rbtree_first (rbtree_type *rbtree)
{
- rbnode_t *node;
+ rbnode_type *node;
for (node = rbtree->root; node->left != RBTREE_NULL; node = node->left);
return node;
}
-rbnode_t *
-rbtree_last (rbtree_t *rbtree)
+rbnode_type *
+rbtree_last (rbtree_type *rbtree)
{
- rbnode_t *node;
+ rbnode_type *node;
for (node = rbtree->root; node->right != RBTREE_NULL; node = node->right);
return node;
@@ -562,10 +567,10 @@ rbtree_last (rbtree_t *rbtree)
* Returns the next node...
*
*/
-rbnode_t *
-rbtree_next (rbnode_t *node)
+rbnode_type *
+rbtree_next (rbnode_type *node)
{
- rbnode_t *parent;
+ rbnode_type *parent;
if (node->right != RBTREE_NULL) {
/* One right, then keep on going left... */
@@ -581,10 +586,10 @@ rbtree_next (rbnode_t *node)
return node;
}
-rbnode_t *
-rbtree_previous(rbnode_t *node)
+rbnode_type *
+rbtree_previous(rbnode_type *node)
{
- rbnode_t *parent;
+ rbnode_type *parent;
if (node->left != RBTREE_NULL) {
/* One left, then keep on going right... */
@@ -602,7 +607,7 @@ rbtree_previous(rbnode_t *node)
/** recursive descent traverse */
static void
-traverse_post(void (*func)(rbnode_t*, void*), void* arg, rbnode_t* node)
+traverse_post(void (*func)(rbnode_type*, void*), void* arg, rbnode_type* node)
{
if(!node || node == RBTREE_NULL)
return;
@@ -614,7 +619,8 @@ traverse_post(void (*func)(rbnode_t*, void*), void* arg, rbnode_t* node)
}
void
-traverse_postorder(rbtree_t* tree, void (*func)(rbnode_t*, void*), void* arg)
+traverse_postorder(rbtree_type* tree, void (*func)(rbnode_type*, void*),
+ void* arg)
{
traverse_post(func, arg, tree->root);
}
diff --git a/util/rbtree.h b/util/rbtree.h
index 50c84bbab385..dfcf09ac6a89 100644
--- a/util/rbtree.h
+++ b/util/rbtree.h
@@ -45,40 +45,40 @@
/**
* This structure must be the first member of the data structure in
- * the rbtree. This allows easy casting between an rbnode_t and the
+ * the rbtree. This allows easy casting between an rbnode_type and the
* user data (poor man's inheritance).
*/
-typedef struct rbnode_t rbnode_t;
+typedef struct rbnode_type rbnode_type;
/**
- * The rbnode_t struct definition.
+ * The rbnode_type struct definition.
*/
-struct rbnode_t {
+struct rbnode_type {
/** parent in rbtree, RBTREE_NULL for root */
- rbnode_t *parent;
+ rbnode_type *parent;
/** left node (smaller items) */
- rbnode_t *left;
+ rbnode_type *left;
/** right node (larger items) */
- rbnode_t *right;
+ rbnode_type *right;
/** pointer to sorting key */
- const void *key;
+ const void *key;
/** colour of this node */
- uint8_t color;
+ uint8_t color;
};
/** The nullpointer, points to empty node */
#define RBTREE_NULL &rbtree_null_node
/** the global empty node */
-extern rbnode_t rbtree_null_node;
+extern rbnode_type rbtree_null_node;
/** An entire red black tree */
-typedef struct rbtree_t rbtree_t;
+typedef struct rbtree_type rbtree_type;
/** definition for tree struct */
-struct rbtree_t {
+struct rbtree_type {
/** The root of the red-black tree */
- rbnode_t *root;
+ rbnode_type *root;
/** The number of the nodes in the tree */
- size_t count;
+ size_t count;
/**
* Key compare function. <0,0,>0 like strcmp.
@@ -92,14 +92,14 @@ struct rbtree_t {
* @param cmpf: compare function (like strcmp) takes pointers to two keys.
* @return: new tree, empty.
*/
-rbtree_t *rbtree_create(int (*cmpf)(const void *, const void *));
+rbtree_type *rbtree_create(int (*cmpf)(const void *, const void *));
/**
* Init a new tree (malloced by caller) with given key compare function.
* @param rbtree: uninitialised memory for new tree, returned empty.
* @param cmpf: compare function (like strcmp) takes pointers to two keys.
*/
-void rbtree_init(rbtree_t *rbtree, int (*cmpf)(const void *, const void *));
+void rbtree_init(rbtree_type *rbtree, int (*cmpf)(const void *, const void *));
/**
* Insert data into the tree.
@@ -107,7 +107,7 @@ void rbtree_init(rbtree_t *rbtree, int (*cmpf)(const void *, const void *));
* @param data: element to insert.
* @return: data ptr or NULL if key already present.
*/
-rbnode_t *rbtree_insert(rbtree_t *rbtree, rbnode_t *data);
+rbnode_type *rbtree_insert(rbtree_type *rbtree, rbnode_type *data);
/**
* Delete element from tree.
@@ -116,7 +116,7 @@ rbnode_t *rbtree_insert(rbtree_t *rbtree, rbnode_t *data);
* @return: node that is now unlinked from the tree. User to delete it.
* returns 0 if node not present
*/
-rbnode_t *rbtree_delete(rbtree_t *rbtree, const void *key);
+rbnode_type *rbtree_delete(rbtree_type *rbtree, const void *key);
/**
* Find key in tree. Returns NULL if not found.
@@ -124,7 +124,7 @@ rbnode_t *rbtree_delete(rbtree_t *rbtree, const void *key);
* @param key: key that must match.
* @return: node that fits or NULL.
*/
-rbnode_t *rbtree_search(rbtree_t *rbtree, const void *key);
+rbnode_type *rbtree_search(rbtree_type *rbtree, const void *key);
/**
* Find, but match does not have to be exact.
@@ -135,45 +135,45 @@ rbnode_t *rbtree_search(rbtree_t *rbtree, const void *key);
* @return: true if exact match in result. Else result points to <= element,
* or NULL if key is smaller than the smallest key.
*/
-int rbtree_find_less_equal(rbtree_t *rbtree, const void *key,
- rbnode_t **result);
+int rbtree_find_less_equal(rbtree_type *rbtree, const void *key,
+ rbnode_type **result);
/**
* Returns first (smallest) node in the tree
* @param rbtree: tree
* @return: smallest element or NULL if tree empty.
*/
-rbnode_t *rbtree_first(rbtree_t *rbtree);
+rbnode_type *rbtree_first(rbtree_type *rbtree);
/**
* Returns last (largest) node in the tree
* @param rbtree: tree
* @return: largest element or NULL if tree empty.
*/
-rbnode_t *rbtree_last(rbtree_t *rbtree);
+rbnode_type *rbtree_last(rbtree_type *rbtree);
/**
* Returns next larger node in the tree
* @param rbtree: tree
* @return: next larger element or NULL if no larger in tree.
*/
-rbnode_t *rbtree_next(rbnode_t *rbtree);
+rbnode_type *rbtree_next(rbnode_type *rbtree);
/**
* Returns previous smaller node in the tree
* @param rbtree: tree
* @return: previous smaller element or NULL if no previous in tree.
*/
-rbnode_t *rbtree_previous(rbnode_t *rbtree);
+rbnode_type *rbtree_previous(rbnode_type *rbtree);
/**
- * Call with node=variable of struct* with rbnode_t as first element.
+ * Call with node=variable of struct* with rbnode_type as first element.
* with type is the type of a pointer to that struct.
*/
#define RBTREE_FOR(node, type, rbtree) \
for(node=(type)rbtree_first(rbtree); \
- (rbnode_t*)node != RBTREE_NULL; \
- node = (type)rbtree_next((rbnode_t*)node))
+ (rbnode_type*)node != RBTREE_NULL; \
+ node = (type)rbtree_next((rbnode_type*)node))
/**
* Call function for all elements in the redblack tree, such that
@@ -186,7 +186,7 @@ rbnode_t *rbtree_previous(rbnode_t *rbtree);
* The function must not alter the rbtree.
* @param arg: user argument.
*/
-void traverse_postorder(rbtree_t* tree, void (*func)(rbnode_t*, void*),
+void traverse_postorder(rbtree_type* tree, void (*func)(rbnode_type*, void*),
void* arg);
#endif /* UTIL_RBTREE_H_ */
diff --git a/util/storage/dnstree.c b/util/storage/dnstree.c
index 7664c479d47a..190369d851c8 100644
--- a/util/storage/dnstree.c
+++ b/util/storage/dnstree.c
@@ -71,17 +71,17 @@ int addr_tree_compare(const void* k1, const void* k2)
return 0;
}
-void name_tree_init(rbtree_t* tree)
+void name_tree_init(rbtree_type* tree)
{
rbtree_init(tree, &name_tree_compare);
}
-void addr_tree_init(rbtree_t* tree)
+void addr_tree_init(rbtree_type* tree)
{
rbtree_init(tree, &addr_tree_compare);
}
-int name_tree_insert(rbtree_t* tree, struct name_tree_node* node,
+int name_tree_insert(rbtree_type* tree, struct name_tree_node* node,
uint8_t* name, size_t len, int labs, uint16_t dclass)
{
node->node.key = node;
@@ -93,7 +93,7 @@ int name_tree_insert(rbtree_t* tree, struct name_tree_node* node,
return rbtree_insert(tree, &node->node) != NULL;
}
-int addr_tree_insert(rbtree_t* tree, struct addr_tree_node* node,
+int addr_tree_insert(rbtree_type* tree, struct addr_tree_node* node,
struct sockaddr_storage* addr, socklen_t addrlen, int net)
{
node->node.key = node;
@@ -104,7 +104,7 @@ int addr_tree_insert(rbtree_t* tree, struct addr_tree_node* node,
return rbtree_insert(tree, &node->node) != NULL;
}
-void addr_tree_init_parents(rbtree_t* tree)
+void addr_tree_init_parents(rbtree_type* tree)
{
struct addr_tree_node* node, *prev = NULL, *p;
int m;
@@ -130,7 +130,7 @@ void addr_tree_init_parents(rbtree_t* tree)
}
}
-void name_tree_init_parents(rbtree_t* tree)
+void name_tree_init_parents(rbtree_type* tree)
{
struct name_tree_node* node, *prev = NULL, *p;
int m;
@@ -156,7 +156,7 @@ void name_tree_init_parents(rbtree_t* tree)
}
}
-struct name_tree_node* name_tree_find(rbtree_t* tree, uint8_t* name,
+struct name_tree_node* name_tree_find(rbtree_type* tree, uint8_t* name,
size_t len, int labs, uint16_t dclass)
{
struct name_tree_node key;
@@ -168,10 +168,10 @@ struct name_tree_node* name_tree_find(rbtree_t* tree, uint8_t* name,
return (struct name_tree_node*)rbtree_search(tree, &key);
}
-struct name_tree_node* name_tree_lookup(rbtree_t* tree, uint8_t* name,
+struct name_tree_node* name_tree_lookup(rbtree_type* tree, uint8_t* name,
size_t len, int labs, uint16_t dclass)
{
- rbnode_t* res = NULL;
+ rbnode_type* res = NULL;
struct name_tree_node *result;
struct name_tree_node key;
key.node.key = &key;
@@ -200,10 +200,10 @@ struct name_tree_node* name_tree_lookup(rbtree_t* tree, uint8_t* name,
return result;
}
-struct addr_tree_node* addr_tree_lookup(rbtree_t* tree,
+struct addr_tree_node* addr_tree_lookup(rbtree_type* tree,
struct sockaddr_storage* addr, socklen_t addrlen)
{
- rbnode_t* res = NULL;
+ rbnode_type* res = NULL;
struct addr_tree_node* result;
struct addr_tree_node key;
key.node.key = &key;
@@ -231,10 +231,10 @@ struct addr_tree_node* addr_tree_lookup(rbtree_t* tree,
return result;
}
-struct addr_tree_node* addr_tree_find(rbtree_t* tree,
+struct addr_tree_node* addr_tree_find(rbtree_type* tree,
struct sockaddr_storage* addr, socklen_t addrlen, int net)
{
- rbnode_t* res = NULL;
+ rbnode_type* res = NULL;
struct addr_tree_node key;
key.node.key = &key;
memcpy(&key.addr, addr, addrlen);
@@ -245,10 +245,10 @@ struct addr_tree_node* addr_tree_find(rbtree_t* tree,
}
int
-name_tree_next_root(rbtree_t* tree, uint16_t* dclass)
+name_tree_next_root(rbtree_type* tree, uint16_t* dclass)
{
struct name_tree_node key;
- rbnode_t* n;
+ rbnode_type* n;
struct name_tree_node* p;
if(*dclass == 0) {
/* first root item is first item in tree */
diff --git a/util/storage/dnstree.h b/util/storage/dnstree.h
index b4595e19ee0f..782644b633e9 100644
--- a/util/storage/dnstree.h
+++ b/util/storage/dnstree.h
@@ -49,12 +49,12 @@
* This is not sorted canonically, but fast.
* This can be looked up to obtain a closest encloser parent name.
*
- * The tree itself is a rbtree_t.
+ * The tree itself is a rbtree_type.
* This is the element node put as first entry in the client structure.
*/
struct name_tree_node {
/** rbtree node, key is this struct : dclass and name */
- rbnode_t node;
+ rbnode_type node;
/** parent in tree */
struct name_tree_node* parent;
/** name in uncompressed wireformat */
@@ -71,12 +71,12 @@ struct name_tree_node {
* Tree of IP addresses. Sorted first by protocol, then by bits.
* This can be looked up to obtain the enclosing subnet.
*
- * The tree itself is a rbtree_t.
+ * The tree itself is a rbtree_type.
* This is the element node put as first entry in the client structure.
*/
struct addr_tree_node {
/** rbtree node, key is this struct : proto and subnet */
- rbnode_t node;
+ rbnode_type node;
/** parent in tree */
struct addr_tree_node* parent;
/** address */
@@ -91,7 +91,7 @@ struct addr_tree_node {
* Init a name tree to be empty
* @param tree: to init.
*/
-void name_tree_init(rbtree_t* tree);
+void name_tree_init(rbtree_type* tree);
/**
* insert element into name tree.
@@ -105,7 +105,7 @@ void name_tree_init(rbtree_t* tree);
* @param dclass: class of name
* @return false on error (duplicate element).
*/
-int name_tree_insert(rbtree_t* tree, struct name_tree_node* node,
+int name_tree_insert(rbtree_type* tree, struct name_tree_node* node,
uint8_t* name, size_t len, int labs, uint16_t dclass);
/**
@@ -113,7 +113,7 @@ int name_tree_insert(rbtree_t* tree, struct name_tree_node* node,
* Should be performed after insertions are done, before lookups
* @param tree: name tree
*/
-void name_tree_init_parents(rbtree_t* tree);
+void name_tree_init_parents(rbtree_type* tree);
/**
* Lookup exact match in name tree
@@ -124,7 +124,7 @@ void name_tree_init_parents(rbtree_t* tree);
* @param dclass: class of name
* @return node or NULL if not found.
*/
-struct name_tree_node* name_tree_find(rbtree_t* tree, uint8_t* name,
+struct name_tree_node* name_tree_find(rbtree_type* tree, uint8_t* name,
size_t len, int labs, uint16_t dclass);
/**
@@ -136,7 +136,7 @@ struct name_tree_node* name_tree_find(rbtree_t* tree, uint8_t* name,
* @param dclass: class of name
* @return closest enclosing node (could be equal) or NULL if not found.
*/
-struct name_tree_node* name_tree_lookup(rbtree_t* tree, uint8_t* name,
+struct name_tree_node* name_tree_lookup(rbtree_type* tree, uint8_t* name,
size_t len, int labs, uint16_t dclass);
/**
@@ -145,13 +145,13 @@ struct name_tree_node* name_tree_lookup(rbtree_t* tree, uint8_t* name,
* @param dclass: the class to look for next (or higher).
* @return false if no classes found, true means class put into c.
*/
-int name_tree_next_root(rbtree_t* tree, uint16_t* dclass);
+int name_tree_next_root(rbtree_type* tree, uint16_t* dclass);
/**
* Init addr tree to be empty.
* @param tree: to init.
*/
-void addr_tree_init(rbtree_t* tree);
+void addr_tree_init(rbtree_type* tree);
/**
* insert element into addr tree.
@@ -163,7 +163,7 @@ void addr_tree_init(rbtree_t* tree);
* @param net: size of subnet.
* @return false on error (duplicate element).
*/
-int addr_tree_insert(rbtree_t* tree, struct addr_tree_node* node,
+int addr_tree_insert(rbtree_type* tree, struct addr_tree_node* node,
struct sockaddr_storage* addr, socklen_t addrlen, int net);
/**
@@ -171,7 +171,7 @@ int addr_tree_insert(rbtree_t* tree, struct addr_tree_node* node,
* Should be performed after insertions are done, before lookups
* @param tree: addr tree
*/
-void addr_tree_init_parents(rbtree_t* tree);
+void addr_tree_init_parents(rbtree_type* tree);
/**
* Lookup closest encloser in addr tree.
@@ -180,7 +180,7 @@ void addr_tree_init_parents(rbtree_t* tree);
* @param addrlen: length of addr
* @return closest enclosing node (could be equal) or NULL if not found.
*/
-struct addr_tree_node* addr_tree_lookup(rbtree_t* tree,
+struct addr_tree_node* addr_tree_lookup(rbtree_type* tree,
struct sockaddr_storage* addr, socklen_t addrlen);
/**
@@ -191,7 +191,7 @@ struct addr_tree_node* addr_tree_lookup(rbtree_t* tree,
* @param net: size of subnet
* @return addr tree element, or NULL if not found.
*/
-struct addr_tree_node* addr_tree_find(rbtree_t* tree,
+struct addr_tree_node* addr_tree_find(rbtree_type* tree,
struct sockaddr_storage* addr, socklen_t addrlen, int net);
/** compare name tree nodes */
diff --git a/util/storage/lruhash.c b/util/storage/lruhash.c
index 2c987a2e5634..97e99960562d 100644
--- a/util/storage/lruhash.c
+++ b/util/storage/lruhash.c
@@ -59,9 +59,10 @@ bin_init(struct lruhash_bin* array, size_t size)
}
struct lruhash*
-lruhash_create(size_t start_size, size_t maxmem, lruhash_sizefunc_t sizefunc,
- lruhash_compfunc_t compfunc, lruhash_delkeyfunc_t delkeyfunc,
- lruhash_deldatafunc_t deldatafunc, void* arg)
+lruhash_create(size_t start_size, size_t maxmem,
+ lruhash_sizefunc_type sizefunc, lruhash_compfunc_type compfunc,
+ lruhash_delkeyfunc_type delkeyfunc,
+ lruhash_deldatafunc_type deldatafunc, void* arg)
{
struct lruhash* table = (struct lruhash*)calloc(1,
sizeof(struct lruhash));
@@ -215,7 +216,7 @@ reclaim_space(struct lruhash* table, struct lruhash_entry** list)
struct lruhash_entry*
bin_find_entry(struct lruhash* table,
- struct lruhash_bin* bin, hashvalue_t hash, void* key)
+ struct lruhash_bin* bin, hashvalue_type hash, void* key)
{
struct lruhash_entry* p = bin->overflow_list;
while(p) {
@@ -296,7 +297,7 @@ lru_touch(struct lruhash* table, struct lruhash_entry* entry)
}
void
-lruhash_insert(struct lruhash* table, hashvalue_t hash,
+lruhash_insert(struct lruhash* table, hashvalue_type hash,
struct lruhash_entry* entry, void* data, void* cb_arg)
{
struct lruhash_bin* bin;
@@ -352,7 +353,7 @@ lruhash_insert(struct lruhash* table, hashvalue_t hash,
}
struct lruhash_entry*
-lruhash_lookup(struct lruhash* table, hashvalue_t hash, void* key, int wr)
+lruhash_lookup(struct lruhash* table, hashvalue_type hash, void* key, int wr)
{
struct lruhash_entry* entry;
struct lruhash_bin* bin;
@@ -374,7 +375,7 @@ lruhash_lookup(struct lruhash* table, hashvalue_t hash, void* key, int wr)
}
void
-lruhash_remove(struct lruhash* table, hashvalue_t hash, void* key)
+lruhash_remove(struct lruhash* table, hashvalue_type hash, void* key)
{
struct lruhash_entry* entry;
struct lruhash_bin* bin;
@@ -512,7 +513,7 @@ lruhash_get_mem(struct lruhash* table)
}
void
-lruhash_setmarkdel(struct lruhash* table, lruhash_markdelfunc_t md)
+lruhash_setmarkdel(struct lruhash* table, lruhash_markdelfunc_type md)
{
lock_quick_lock(&table->lock);
table->markdelfunc = md;
diff --git a/util/storage/lruhash.h b/util/storage/lruhash.h
index 30377d8e701e..c39374082328 100644
--- a/util/storage/lruhash.h
+++ b/util/storage/lruhash.h
@@ -116,7 +116,7 @@ struct lruhash_entry;
#define HASH_DEFAULT_MAXMEM 4*1024*1024 /* bytes */
/** the type of a hash value */
-typedef uint32_t hashvalue_t;
+typedef uint32_t hashvalue_type;
/**
* Type of function that calculates the size of an entry.
@@ -124,39 +124,39 @@ typedef uint32_t hashvalue_t;
* Keys that are identical must also calculate to the same size.
* size = func(key, data).
*/
-typedef size_t (*lruhash_sizefunc_t)(void*, void*);
+typedef size_t (*lruhash_sizefunc_type)(void*, void*);
/** type of function that compares two keys. return 0 if equal. */
-typedef int (*lruhash_compfunc_t)(void*, void*);
+typedef int (*lruhash_compfunc_type)(void*, void*);
/** old keys are deleted.
* The RRset type has to revoke its ID number, markdel() is used first.
* This function is called: func(key, userarg) */
-typedef void (*lruhash_delkeyfunc_t)(void*, void*);
+typedef void (*lruhash_delkeyfunc_type)(void*, void*);
/** old data is deleted. This function is called: func(data, userarg). */
-typedef void (*lruhash_deldatafunc_t)(void*, void*);
+typedef void (*lruhash_deldatafunc_type)(void*, void*);
/** mark a key as pending to be deleted (and not to be used by anyone).
* called: func(key) */
-typedef void (*lruhash_markdelfunc_t)(void*);
+typedef void (*lruhash_markdelfunc_type)(void*);
/**
* Hash table that keeps LRU list of entries.
*/
struct lruhash {
/** lock for exclusive access, to the lookup array */
- lock_quick_t lock;
+ lock_quick_type lock;
/** the size function for entries in this table */
- lruhash_sizefunc_t sizefunc;
+ lruhash_sizefunc_type sizefunc;
/** the compare function for entries in this table. */
- lruhash_compfunc_t compfunc;
+ lruhash_compfunc_type compfunc;
/** how to delete keys. */
- lruhash_delkeyfunc_t delkeyfunc;
+ lruhash_delkeyfunc_type delkeyfunc;
/** how to delete data. */
- lruhash_deldatafunc_t deldatafunc;
+ lruhash_deldatafunc_type deldatafunc;
/** how to mark a key pending deletion */
- lruhash_markdelfunc_t markdelfunc;
+ lruhash_markdelfunc_type markdelfunc;
/** user argument for user functions */
void* cb_arg;
@@ -188,7 +188,7 @@ struct lruhash_bin {
* Lock for exclusive access to the linked list
* This lock makes deletion of items safe in this overflow list.
*/
- lock_quick_t lock;
+ lock_quick_type lock;
/** linked list of overflow entries */
struct lruhash_entry* overflow_list;
};
@@ -207,7 +207,7 @@ struct lruhash_entry {
* Even with a writelock, you cannot change hash and key.
* You need to delete it to change hash or key.
*/
- lock_rw_t lock;
+ lock_rw_type lock;
/** next entry in overflow chain. Covered by hashlock and binlock. */
struct lruhash_entry* overflow_next;
/** next entry in lru chain. covered by hashlock. */
@@ -215,7 +215,7 @@ struct lruhash_entry {
/** prev entry in lru chain. covered by hashlock. */
struct lruhash_entry* lru_prev;
/** hash value of the key. It may not change, until entry deleted. */
- hashvalue_t hash;
+ hashvalue_type hash;
/** key */
void* key;
/** data */
@@ -236,9 +236,9 @@ struct lruhash_entry {
* @return: new hash table or NULL on malloc failure.
*/
struct lruhash* lruhash_create(size_t start_size, size_t maxmem,
- lruhash_sizefunc_t sizefunc, lruhash_compfunc_t compfunc,
- lruhash_delkeyfunc_t delkeyfunc, lruhash_deldatafunc_t deldatafunc,
- void* arg);
+ lruhash_sizefunc_type sizefunc, lruhash_compfunc_type compfunc,
+ lruhash_delkeyfunc_type delkeyfunc,
+ lruhash_deldatafunc_type deldatafunc, void* arg);
/**
* Delete hash table. Entries are all deleted.
@@ -269,7 +269,7 @@ void lruhash_clear(struct lruhash* table);
* @param data: the data.
* @param cb_override: if not null overrides the cb_arg for the deletefunc.
*/
-void lruhash_insert(struct lruhash* table, hashvalue_t hash,
+void lruhash_insert(struct lruhash* table, hashvalue_type hash,
struct lruhash_entry* entry, void* data, void* cb_override);
/**
@@ -285,8 +285,8 @@ void lruhash_insert(struct lruhash* table, hashvalue_t hash,
* @return: pointer to the entry or NULL. The entry is locked.
* The user must unlock the entry when done.
*/
-struct lruhash_entry* lruhash_lookup(struct lruhash* table, hashvalue_t hash,
- void* key, int wr);
+struct lruhash_entry* lruhash_lookup(struct lruhash* table,
+ hashvalue_type hash, void* key, int wr);
/**
* Touch entry, so it becomes the most recently used in the LRU list.
@@ -299,7 +299,7 @@ void lru_touch(struct lruhash* table, struct lruhash_entry* entry);
/**
* Set the markdelfunction (or NULL)
*/
-void lruhash_setmarkdel(struct lruhash* table, lruhash_markdelfunc_t md);
+void lruhash_setmarkdel(struct lruhash* table, lruhash_markdelfunc_type md);
/************************* Internal functions ************************/
/*** these are only exposed for unit tests. ***/
@@ -311,7 +311,7 @@ void lruhash_setmarkdel(struct lruhash* table, lruhash_markdelfunc_t md);
* @param hash: hash of key.
* @param key: what to look for.
*/
-void lruhash_remove(struct lruhash* table, hashvalue_t hash, void* key);
+void lruhash_remove(struct lruhash* table, hashvalue_type hash, void* key);
/** init the hash bins for the table */
void bin_init(struct lruhash_bin* array, size_t size);
@@ -328,7 +328,7 @@ void bin_delete(struct lruhash* table, struct lruhash_bin* bin);
* @return: the entry or NULL if not found.
*/
struct lruhash_entry* bin_find_entry(struct lruhash* table,
- struct lruhash_bin* bin, hashvalue_t hash, void* key);
+ struct lruhash_bin* bin, hashvalue_type hash, void* key);
/**
* Remove entry from bin overflow chain.
diff --git a/util/storage/slabhash.c b/util/storage/slabhash.c
index 0618b4c7295c..ae63b97727ee 100644
--- a/util/storage/slabhash.c
+++ b/util/storage/slabhash.c
@@ -46,9 +46,9 @@
#include "util/storage/slabhash.h"
struct slabhash* slabhash_create(size_t numtables, size_t start_size,
- size_t maxmem, lruhash_sizefunc_t sizefunc,
- lruhash_compfunc_t compfunc, lruhash_delkeyfunc_t delkeyfunc,
- lruhash_deldatafunc_t deldatafunc, void* arg)
+ size_t maxmem, lruhash_sizefunc_type sizefunc,
+ lruhash_compfunc_type compfunc, lruhash_delkeyfunc_type delkeyfunc,
+ lruhash_deldatafunc_type deldatafunc, void* arg)
{
size_t i;
struct slabhash* sl = (struct slabhash*)calloc(1,
@@ -108,24 +108,24 @@ void slabhash_clear(struct slabhash* sl)
/** helper routine to calculate the slabhash index */
static unsigned int
-slab_idx(struct slabhash* sl, hashvalue_t hash)
+slab_idx(struct slabhash* sl, hashvalue_type hash)
{
return ((hash & sl->mask) >> sl->shift);
}
-void slabhash_insert(struct slabhash* sl, hashvalue_t hash,
+void slabhash_insert(struct slabhash* sl, hashvalue_type hash,
struct lruhash_entry* entry, void* data, void* arg)
{
lruhash_insert(sl->array[slab_idx(sl, hash)], hash, entry, data, arg);
}
struct lruhash_entry* slabhash_lookup(struct slabhash* sl,
- hashvalue_t hash, void* key, int wr)
+ hashvalue_type hash, void* key, int wr)
{
return lruhash_lookup(sl->array[slab_idx(sl, hash)], hash, key, wr);
}
-void slabhash_remove(struct slabhash* sl, hashvalue_t hash, void* key)
+void slabhash_remove(struct slabhash* sl, hashvalue_type hash, void* key)
{
lruhash_remove(sl->array[slab_idx(sl, hash)], hash, key);
}
@@ -163,7 +163,7 @@ size_t slabhash_get_mem(struct slabhash* sl)
return total;
}
-struct lruhash* slabhash_gettable(struct slabhash* sl, hashvalue_t hash)
+struct lruhash* slabhash_gettable(struct slabhash* sl, hashvalue_type hash)
{
return sl->array[slab_idx(sl, hash)];
}
@@ -202,7 +202,7 @@ void test_slabhash_deldata(void* data, void* ATTR_UNUSED(arg))
deldata((struct slabhash_testdata*)data);
}
-void slabhash_setmarkdel(struct slabhash* sl, lruhash_markdelfunc_t md)
+void slabhash_setmarkdel(struct slabhash* sl, lruhash_markdelfunc_type md)
{
size_t i;
for(i=0; i<sl->size; i++) {
diff --git a/util/storage/slabhash.h b/util/storage/slabhash.h
index 031a9da0fac6..d00983fc1552 100644
--- a/util/storage/slabhash.h
+++ b/util/storage/slabhash.h
@@ -80,9 +80,9 @@ struct slabhash {
* @return: new hash table or NULL on malloc failure.
*/
struct slabhash* slabhash_create(size_t numtables, size_t start_size,
- size_t maxmem, lruhash_sizefunc_t sizefunc,
- lruhash_compfunc_t compfunc, lruhash_delkeyfunc_t delkeyfunc,
- lruhash_deldatafunc_t deldatafunc, void* arg);
+ size_t maxmem, lruhash_sizefunc_type sizefunc,
+ lruhash_compfunc_type compfunc, lruhash_delkeyfunc_type delkeyfunc,
+ lruhash_deldatafunc_type deldatafunc, void* arg);
/**
* Delete hash table. Entries are all deleted.
@@ -109,7 +109,7 @@ void slabhash_clear(struct slabhash* table);
* @param data: the data.
* @param cb_override: if not NULL overrides the cb_arg for deletfunc.
*/
-void slabhash_insert(struct slabhash* table, hashvalue_t hash,
+void slabhash_insert(struct slabhash* table, hashvalue_type hash,
struct lruhash_entry* entry, void* data, void* cb_override);
/**
@@ -126,7 +126,7 @@ void slabhash_insert(struct slabhash* table, hashvalue_t hash,
* The user must unlock the entry when done.
*/
struct lruhash_entry* slabhash_lookup(struct slabhash* table,
- hashvalue_t hash, void* key, int wr);
+ hashvalue_type hash, void* key, int wr);
/**
* Remove entry from hashtable. Does nothing if not found in hashtable.
@@ -135,7 +135,7 @@ struct lruhash_entry* slabhash_lookup(struct slabhash* table,
* @param hash: hash of key.
* @param key: what to look for.
*/
-void slabhash_remove(struct slabhash* table, hashvalue_t hash, void* key);
+void slabhash_remove(struct slabhash* table, hashvalue_type hash, void* key);
/**
* Output debug info to the log as to state of the hash table.
@@ -165,14 +165,14 @@ size_t slabhash_get_mem(struct slabhash* table);
* @param hash: hash value.
* @return the lru hash table.
*/
-struct lruhash* slabhash_gettable(struct slabhash* table, hashvalue_t hash);
+struct lruhash* slabhash_gettable(struct slabhash* table, hashvalue_type hash);
/**
* Set markdel function
* @param table: slabbed hash table.
* @param md: markdel function ptr.
*/
-void slabhash_setmarkdel(struct slabhash* table, lruhash_markdelfunc_t md);
+void slabhash_setmarkdel(struct slabhash* table, lruhash_markdelfunc_type md);
/**
* Traverse a slabhash.
diff --git a/util/tube.c b/util/tube.c
index e525f1ccd8aa..f42d22cb3f20 100644
--- a/util/tube.c
+++ b/util/tube.c
@@ -426,7 +426,7 @@ int tube_read_fd(struct tube* tube)
}
int tube_setup_bg_listen(struct tube* tube, struct comm_base* base,
- tube_callback_t* cb, void* arg)
+ tube_callback_type* cb, void* arg)
{
tube->listen_cb = cb;
tube->listen_arg = arg;
@@ -667,7 +667,7 @@ tube_handle_write(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg),
}
int tube_setup_bg_listen(struct tube* tube, struct comm_base* base,
- tube_callback_t* cb, void* arg)
+ tube_callback_type* cb, void* arg)
{
tube->listen_cb = cb;
tube->listen_arg = arg;
diff --git a/util/tube.h b/util/tube.h
index 7971b776ae1f..5b1fdb8e8f46 100644
--- a/util/tube.h
+++ b/util/tube.h
@@ -55,7 +55,7 @@ struct tube_res_list;
* void mycallback(tube, msg, len, error, user_argument);
* if error is true (NETEVENT_*), msg is probably NULL.
*/
-typedef void tube_callback_t(struct tube*, uint8_t*, size_t, int, void*);
+typedef void tube_callback_type(struct tube*, uint8_t*, size_t, int, void*);
/**
* A pipe
@@ -70,7 +70,7 @@ struct tube {
/** listen commpoint */
struct comm_point* listen_com;
/** listen callback */
- tube_callback_t* listen_cb;
+ tube_callback_type* listen_cb;
/** listen callback user arg */
void* listen_arg;
/** are we currently reading a command, 0 if not, else bytecount */
@@ -92,7 +92,7 @@ struct tube {
#else /* USE_WINSOCK */
/** listen callback */
- tube_callback_t* listen_cb;
+ tube_callback_type* listen_cb;
/** listen callback user arg */
void* listen_arg;
/** the windows sockets event (signaled if items in pipe) */
@@ -101,7 +101,7 @@ struct tube {
struct ub_event* ev_listen;
/** lock on the list of outstanding items */
- lock_basic_t res_lock;
+ lock_basic_type res_lock;
/** list of outstanding results on pipe */
struct tube_res_list* res_list;
/** last in list */
@@ -222,7 +222,7 @@ int tube_read_fd(struct tube* tube);
* @return true if successful, false on error.
*/
int tube_setup_bg_listen(struct tube* tube, struct comm_base* base,
- tube_callback_t* cb, void* arg);
+ tube_callback_type* cb, void* arg);
/**
* Remove bg listen setup from event base.
diff --git a/util/winsock_event.c b/util/winsock_event.c
index 9aad27edc0bc..63d98796d19f 100644
--- a/util/winsock_event.c
+++ b/util/winsock_event.c
@@ -169,7 +169,7 @@ static void handle_timeouts(struct event_base* base, struct timeval* now,
#endif
verbose(VERB_CLIENT, "winsock_event handle_timeouts");
- while((rbnode_t*)(p = (struct event*)rbtree_first(base->times))
+ while((rbnode_type*)(p = (struct event*)rbtree_first(base->times))
!=RBTREE_NULL) {
#ifndef S_SPLINT_S
if(p->ev_timeout.tv_sec > now->tv_sec ||
diff --git a/util/winsock_event.h b/util/winsock_event.h
index d386a699fa52..d6dafac8c5c0 100644
--- a/util/winsock_event.h
+++ b/util/winsock_event.h
@@ -132,7 +132,7 @@
struct event_base
{
/** sorted by timeout (absolute), ptr */
- rbtree_t* times;
+ rbtree_type* times;
/** array (first part in use) of handles to work on */
struct event** items;
/** number of items in use in array */
@@ -169,7 +169,7 @@ struct event_base
*/
struct event {
/** node in timeout rbtree */
- rbnode_t node;
+ rbnode_type node;
/** is event already added */
int added;
diff --git a/validator/autotrust.c b/validator/autotrust.c
index 416f48fa986d..a533733c7a67 100644
--- a/validator/autotrust.c
+++ b/validator/autotrust.c
@@ -1064,7 +1064,7 @@ int autr_read_file(struct val_anchors* anchors, const char* nm)
/** string for a trustanchor state */
static const char*
-trustanchor_state2str(autr_state_t s)
+trustanchor_state2str(autr_state_type s)
{
switch (s) {
case AUTR_STATE_START: return " START ";
@@ -1571,11 +1571,6 @@ key_matches_a_ds(struct module_env* env, struct val_env* ve,
verbose(VERB_ALGO, "DS match attempt failed");
continue;
}
- /* match of hash is sufficient for bootstrap of trust point */
- (void)reason;
- (void)ve;
- return 1;
- /* no need to check RRSIG, DS hash already matched with source
if(dnskey_verify_rrset(env, ve, dnskey_rrset,
dnskey_rrset, key_idx, &reason) == sec_status_secure) {
return 1;
@@ -1583,7 +1578,6 @@ key_matches_a_ds(struct module_env* env, struct val_env* ve,
verbose(VERB_ALGO, "DS match failed because the key "
"does not verify the keyset: %s", reason);
}
- */
}
return 0;
}
@@ -1685,7 +1679,7 @@ reset_holddown(struct module_env* env, struct autr_ta* ta, int* changed)
/** Set the state for this trust anchor */
static void
set_trustanchor_state(struct module_env* env, struct autr_ta* ta, int* changed,
- autr_state_t s)
+ autr_state_type s)
{
verbose_key(ta, VERB_ALGO, "update: %s to %s",
trustanchor_state2str(ta->s), trustanchor_state2str(s));
@@ -1995,7 +1989,7 @@ calc_next_probe(struct module_env* env, time_t wait)
static time_t
wait_probe_time(struct val_anchors* anchors)
{
- rbnode_t* t = rbtree_first(&anchors->autr->probe);
+ rbnode_type* t = rbtree_first(&anchors->autr->probe);
if(t != RBTREE_NULL)
return ((struct trust_anchor*)t->key)->autr->next_probe_time;
return 0;
@@ -2369,7 +2363,7 @@ static struct trust_anchor*
todo_probe(struct module_env* env, time_t* next)
{
struct trust_anchor* tp;
- rbnode_t* el;
+ rbnode_type* el;
/* get first one */
lock_basic_lock(&env->anchors->lock);
if( (el=rbtree_first(&env->anchors->autr->probe)) == RBTREE_NULL) {
diff --git a/validator/autotrust.h b/validator/autotrust.h
index ae61f8a872b4..dbaf5126a0b8 100644
--- a/validator/autotrust.h
+++ b/validator/autotrust.h
@@ -58,7 +58,7 @@ typedef enum {
AUTR_STATE_MISSING = 3,
AUTR_STATE_REVOKED = 4,
AUTR_STATE_REMOVED = 5
-} autr_state_t;
+} autr_state_type;
/**
* Autotrust metadata for one trust anchor key.
@@ -73,7 +73,7 @@ struct autr_ta {
/** last update of key state (new pending count keeps date the same) */
time_t last_change;
/** 5011 state */
- autr_state_t s;
+ autr_state_type s;
/** pending count */
uint8_t pending_count;
/** fresh TA was seen */
@@ -90,7 +90,7 @@ struct autr_point_data {
/** file to store the trust point in. chrootdir already applied. */
char* file;
/** rbtree node for probe sort, key is struct trust_anchor */
- rbnode_t pnode;
+ rbnode_type pnode;
/** the keys */
struct autr_ta* keys;
@@ -126,7 +126,7 @@ struct autr_point_data {
struct autr_global_data {
/** rbtree of autotrust anchors sorted by next probe time.
* When time is equal, sorted by anchor class, name. */
- rbtree_t probe;
+ rbtree_type probe;
};
/**
diff --git a/validator/val_anchor.c b/validator/val_anchor.c
index 4d470b69227d..2a7e0beeb6c5 100644
--- a/validator/val_anchor.c
+++ b/validator/val_anchor.c
@@ -113,7 +113,7 @@ assembled_rrset_delete(struct ub_packed_rrset_key* pkey)
/** destroy locks in tree and delete autotrust anchors */
static void
-anchors_delfunc(rbnode_t* elem, void* ATTR_UNUSED(arg))
+anchors_delfunc(rbnode_type* elem, void* ATTR_UNUSED(arg))
{
struct trust_anchor* ta = (struct trust_anchor*)elem;
if(!ta) return;
@@ -198,7 +198,7 @@ anchor_find(struct val_anchors* anchors, uint8_t* name, int namelabs,
size_t namelen, uint16_t dclass)
{
struct trust_anchor key;
- rbnode_t* n;
+ rbnode_type* n;
if(!name) return NULL;
key.node.key = &key;
key.name = name;
@@ -222,7 +222,7 @@ anchor_new_ta(struct val_anchors* anchors, uint8_t* name, int namelabs,
size_t namelen, uint16_t dclass, int lockit)
{
#ifdef UNBOUND_DEBUG
- rbnode_t* r;
+ rbnode_type* r;
#endif
struct trust_anchor* ta = (struct trust_anchor*)malloc(
sizeof(struct trust_anchor));
@@ -990,7 +990,7 @@ anchors_assemble_rrsets(struct val_anchors* anchors)
size_t nods, nokey;
lock_basic_lock(&anchors->lock);
ta=(struct trust_anchor*)rbtree_first(anchors->tree);
- while((rbnode_t*)ta != RBTREE_NULL) {
+ while((rbnode_type*)ta != RBTREE_NULL) {
next = (struct trust_anchor*)rbtree_next(&ta->node);
lock_basic_lock(&ta->lock);
if(ta->autr || (ta->numDS == 0 && ta->numDNSKEY == 0)) {
@@ -1164,7 +1164,7 @@ anchors_lookup(struct val_anchors* anchors,
{
struct trust_anchor key;
struct trust_anchor* result;
- rbnode_t* res = NULL;
+ rbnode_type* res = NULL;
key.node.key = &key;
key.name = qname;
key.namelabs = dname_count_labels(qname);
diff --git a/validator/val_anchor.h b/validator/val_anchor.h
index 4951b9996cb0..226165514c5a 100644
--- a/validator/val_anchor.h
+++ b/validator/val_anchor.h
@@ -59,14 +59,14 @@ struct sldns_buffer;
*/
struct val_anchors {
/** lock on trees */
- lock_basic_t lock;
+ lock_basic_type lock;
/**
* Anchors are store in this tree. Sort order is chosen, so that
* dnames are in nsec-like order. A lookup on class, name will return
* an exact match of the closest match, with the ancestor needed.
* contents of type trust_anchor.
*/
- rbtree_t* tree;
+ rbtree_type* tree;
/** The DLV trust anchor (if one is configured, else NULL) */
struct trust_anchor* dlv_anchor;
/** Autotrust global data, anchors sorted by next probe time */
@@ -93,9 +93,9 @@ struct ta_key {
*/
struct trust_anchor {
/** rbtree node, key is this structure */
- rbnode_t node;
+ rbnode_type node;
/** lock on the entire anchor and its keys; for autotrust changes */
- lock_basic_t lock;
+ lock_basic_type lock;
/** name of this trust anchor */
uint8_t* name;
/** length of name */
diff --git a/validator/val_neg.c b/validator/val_neg.c
index 272c5e027ac7..fe57ac2c442e 100644
--- a/validator/val_neg.c
+++ b/validator/val_neg.c
@@ -111,7 +111,7 @@ size_t val_neg_get_mem(struct val_neg_cache* neg)
/** clear datas on cache deletion */
static void
-neg_clear_datas(rbnode_t* n, void* ATTR_UNUSED(arg))
+neg_clear_datas(rbnode_type* n, void* ATTR_UNUSED(arg))
{
struct val_neg_data* d = (struct val_neg_data*)n;
free(d->name);
@@ -120,7 +120,7 @@ neg_clear_datas(rbnode_t* n, void* ATTR_UNUSED(arg))
/** clear zones on cache deletion */
static void
-neg_clear_zones(rbnode_t* n, void* ATTR_UNUSED(arg))
+neg_clear_zones(rbnode_type* n, void* ATTR_UNUSED(arg))
{
struct val_neg_zone* z = (struct val_neg_zone*)n;
/* delete all the rrset entries in the tree */
@@ -371,7 +371,7 @@ static struct val_neg_zone* neg_closest_zone_parent(struct val_neg_cache* neg,
{
struct val_neg_zone key;
struct val_neg_zone* result;
- rbnode_t* res = NULL;
+ rbnode_type* res = NULL;
key.node.key = &key;
key.name = nm;
key.len = nm_len;
@@ -411,7 +411,7 @@ static struct val_neg_data* neg_closest_data_parent(
{
struct val_neg_data key;
struct val_neg_data* result;
- rbnode_t* res = NULL;
+ rbnode_type* res = NULL;
key.node.key = &key;
key.name = nm;
key.len = nm_len;
@@ -677,7 +677,7 @@ static void wipeout(struct val_neg_cache* neg, struct val_neg_zone* zone,
uint8_t* end;
size_t end_len;
int end_labs, m;
- rbnode_t* walk, *next;
+ rbnode_type* walk, *next;
struct val_neg_data* cur;
uint8_t buf[257];
/* get endpoint */
@@ -911,7 +911,7 @@ static int neg_closest_data(struct val_neg_zone* zone,
uint8_t* qname, size_t len, int labs, struct val_neg_data** data)
{
struct val_neg_data key;
- rbnode_t* r;
+ rbnode_type* r;
key.node.key = &key;
key.name = qname;
key.len = len;
diff --git a/validator/val_neg.h b/validator/val_neg.h
index bf3a2471c784..6ae71306c378 100644
--- a/validator/val_neg.h
+++ b/validator/val_neg.h
@@ -67,9 +67,9 @@ struct ub_packed_rrset_key;
struct val_neg_cache {
/** the big lock on the negative cache. Because we use a rbtree
* for the data (quick lookup), we need a big lock */
- lock_basic_t lock;
+ lock_basic_type lock;
/** The zone rbtree. contents sorted canonical, type val_neg_zone */
- rbtree_t tree;
+ rbtree_type tree;
/** the first in linked list of LRU of val_neg_data */
struct val_neg_data* first;
/** last in lru (least recently used element) */
@@ -87,7 +87,7 @@ struct val_neg_cache {
*/
struct val_neg_zone {
/** rbtree node element, key is this struct: the name, class */
- rbnode_t node;
+ rbnode_type node;
/** name; the key */
uint8_t* name;
/** length of name */
@@ -114,7 +114,7 @@ struct val_neg_zone {
/** tree of NSEC data for this zone, sorted canonical
* by NSEC owner name */
- rbtree_t tree;
+ rbtree_type tree;
/** class of node; host order */
uint16_t dclass;
@@ -135,7 +135,7 @@ struct val_neg_zone {
*/
struct val_neg_data {
/** rbtree node element, key is this struct: the name */
- rbnode_t node;
+ rbnode_type node;
/** name; the key */
uint8_t* name;
/** length of name */
diff --git a/validator/val_nsec3.c b/validator/val_nsec3.c
index cd850c098248..4d978372aaac 100644
--- a/validator/val_nsec3.c
+++ b/validator/val_nsec3.c
@@ -623,14 +623,14 @@ nsec3_calc_b32(struct regional* region, sldns_buffer* buf,
}
int
-nsec3_hash_name(rbtree_t* table, struct regional* region, sldns_buffer* buf,
+nsec3_hash_name(rbtree_type* table, struct regional* region, sldns_buffer* buf,
struct ub_packed_rrset_key* nsec3, int rr, uint8_t* dname,
size_t dname_len, struct nsec3_cached_hash** hash)
{
struct nsec3_cached_hash* c;
struct nsec3_cached_hash looki;
#ifdef UNBOUND_DEBUG
- rbnode_t* n;
+ rbnode_type* n;
#endif
int r;
looki.node.key = &looki;
@@ -730,7 +730,7 @@ nsec3_hash_matches_owner(struct nsec3_filter* flt,
*/
static int
find_matching_nsec3(struct module_env* env, struct nsec3_filter* flt,
- rbtree_t* ct, uint8_t* nm, size_t nmlen,
+ rbtree_type* ct, uint8_t* nm, size_t nmlen,
struct ub_packed_rrset_key** rrset, int* rr)
{
size_t i_rs;
@@ -823,7 +823,7 @@ nsec3_covers(uint8_t* zone, struct nsec3_cached_hash* hash,
*/
static int
find_covering_nsec3(struct module_env* env, struct nsec3_filter* flt,
- rbtree_t* ct, uint8_t* nm, size_t nmlen,
+ rbtree_type* ct, uint8_t* nm, size_t nmlen,
struct ub_packed_rrset_key** rrset, int* rr)
{
size_t i_rs;
@@ -869,7 +869,7 @@ find_covering_nsec3(struct module_env* env, struct nsec3_filter* flt,
*/
static int
nsec3_find_closest_encloser(struct module_env* env, struct nsec3_filter* flt,
- rbtree_t* ct, struct query_info* qinfo, struct ce_response* ce)
+ rbtree_type* ct, struct query_info* qinfo, struct ce_response* ce)
{
uint8_t* nm = qinfo->qname;
size_t nmlen = qinfo->qname_len;
@@ -936,7 +936,7 @@ next_closer(uint8_t* qname, size_t qnamelen, uint8_t* ce,
*/
static enum sec_status
nsec3_prove_closest_encloser(struct module_env* env, struct nsec3_filter* flt,
- rbtree_t* ct, struct query_info* qinfo, int prove_does_not_exist,
+ rbtree_type* ct, struct query_info* qinfo, int prove_does_not_exist,
struct ce_response* ce)
{
uint8_t* nc;
@@ -1016,7 +1016,7 @@ nsec3_ce_wildcard(struct regional* region, uint8_t* ce, size_t celen,
/** Do the name error proof */
static enum sec_status
nsec3_do_prove_nameerror(struct module_env* env, struct nsec3_filter* flt,
- rbtree_t* ct, struct query_info* qinfo)
+ rbtree_type* ct, struct query_info* qinfo)
{
struct ce_response ce;
uint8_t* wc;
@@ -1062,7 +1062,7 @@ nsec3_prove_nameerror(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key** list, size_t num,
struct query_info* qinfo, struct key_entry_key* kkey)
{
- rbtree_t ct;
+ rbtree_type ct;
struct nsec3_filter flt;
if(!list || num == 0 || !kkey || !key_entry_isgood(kkey))
@@ -1086,7 +1086,7 @@ nsec3_prove_nameerror(struct module_env* env, struct val_env* ve,
/** Do the nodata proof */
static enum sec_status
nsec3_do_prove_nodata(struct module_env* env, struct nsec3_filter* flt,
- rbtree_t* ct, struct query_info* qinfo)
+ rbtree_type* ct, struct query_info* qinfo)
{
struct ce_response ce;
uint8_t* wc;
@@ -1221,7 +1221,7 @@ nsec3_prove_nodata(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key** list, size_t num,
struct query_info* qinfo, struct key_entry_key* kkey)
{
- rbtree_t ct;
+ rbtree_type ct;
struct nsec3_filter flt;
if(!list || num == 0 || !kkey || !key_entry_isgood(kkey))
@@ -1240,7 +1240,7 @@ nsec3_prove_wildcard(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key** list, size_t num,
struct query_info* qinfo, struct key_entry_key* kkey, uint8_t* wc)
{
- rbtree_t ct;
+ rbtree_type ct;
struct nsec3_filter flt;
struct ce_response ce;
uint8_t* nc;
@@ -1314,7 +1314,7 @@ nsec3_prove_nods(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key** list, size_t num,
struct query_info* qinfo, struct key_entry_key* kkey, char** reason)
{
- rbtree_t ct;
+ rbtree_type ct;
struct nsec3_filter flt;
struct ce_response ce;
struct ub_packed_rrset_key* rrset;
@@ -1403,7 +1403,7 @@ nsec3_prove_nxornodata(struct module_env* env, struct val_env* ve,
struct query_info* qinfo, struct key_entry_key* kkey, int* nodata)
{
enum sec_status sec, secnx;
- rbtree_t ct;
+ rbtree_type ct;
struct nsec3_filter flt;
*nodata = 0;
diff --git a/validator/val_nsec3.h b/validator/val_nsec3.h
index 69ba78d8323b..27e9f9eac192 100644
--- a/validator/val_nsec3.h
+++ b/validator/val_nsec3.h
@@ -224,7 +224,7 @@ nsec3_prove_nxornodata(struct module_env* env, struct val_env* ve,
*/
struct nsec3_cached_hash {
/** rbtree node, key is this structure */
- rbnode_t node;
+ rbnode_type node;
/** where are the parameters for conversion, in this rrset data */
struct ub_packed_rrset_key* nsec3;
/** where are the parameters for conversion, this RR number in data */
@@ -271,7 +271,7 @@ int nsec3_hash_cmp(const void* c1, const void* c2);
* 0 on a malloc failure.
* -1 if the NSEC3 rr was badly formatted (i.e. formerr).
*/
-int nsec3_hash_name(rbtree_t* table, struct regional* region,
+int nsec3_hash_name(rbtree_type* table, struct regional* region,
struct sldns_buffer* buf, struct ub_packed_rrset_key* nsec3, int rr,
uint8_t* dname, size_t dname_len, struct nsec3_cached_hash** hash);
diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c
index f117f7f7336a..302820fc2f97 100644
--- a/validator/val_secalgo.c
+++ b/validator/val_secalgo.c
@@ -1387,7 +1387,7 @@ _verify_nettle_dsa(sldns_buffer* buf, unsigned char* sigblock,
unsigned int sigblock_len, unsigned char* key, unsigned int keylen)
{
uint8_t digest[SHA1_DIGEST_SIZE];
- uint8_t key_t;
+ uint8_t key_t_value;
int res = 0;
size_t offset;
struct dsa_public_key pubkey;
@@ -1426,8 +1426,8 @@ _verify_nettle_dsa(sldns_buffer* buf, unsigned char* sigblock,
}
/* Validate T values constraints - RFC 2536 sec. 2 & sec. 3 */
- key_t = key[0];
- if (key_t > 8) {
+ key_t_value = key[0];
+ if (key_t_value > 8) {
return "invalid T value in DSA pubkey";
}
@@ -1438,9 +1438,9 @@ _verify_nettle_dsa(sldns_buffer* buf, unsigned char* sigblock,
expected_len = 1 + /* T */
20 + /* Q */
- (64 + key_t*8) + /* P */
- (64 + key_t*8) + /* G */
- (64 + key_t*8); /* Y */
+ (64 + key_t_value*8) + /* P */
+ (64 + key_t_value*8) + /* G */
+ (64 + key_t_value*8); /* Y */
if (keylen != expected_len ) {
return "invalid DSA pubkey length";
}
@@ -1450,11 +1450,11 @@ _verify_nettle_dsa(sldns_buffer* buf, unsigned char* sigblock,
offset = 1;
nettle_mpz_set_str_256_u(pubkey.q, 20, key+offset);
offset += 20;
- nettle_mpz_set_str_256_u(pubkey.p, (64 + key_t*8), key+offset);
- offset += (64 + key_t*8);
- nettle_mpz_set_str_256_u(pubkey.g, (64 + key_t*8), key+offset);
- offset += (64 + key_t*8);
- nettle_mpz_set_str_256_u(pubkey.y, (64 + key_t*8), key+offset);
+ nettle_mpz_set_str_256_u(pubkey.p, (64 + key_t_value*8), key+offset);
+ offset += (64 + key_t_value*8);
+ nettle_mpz_set_str_256_u(pubkey.g, (64 + key_t_value*8), key+offset);
+ offset += (64 + key_t_value*8);
+ nettle_mpz_set_str_256_u(pubkey.y, (64 + key_t_value*8), key+offset);
/* Digest content of "buf" and verify its DSA signature in "sigblock"*/
res = _digest_nettle(SHA1_DIGEST_SIZE, (unsigned char*)sldns_buffer_begin(buf),
diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c
index c79a73d2a1cc..b0b2e970ff25 100644
--- a/validator/val_sigcrypt.c
+++ b/validator/val_sigcrypt.c
@@ -483,7 +483,7 @@ dnskeyset_verify_rrset(struct module_env* env, struct val_env* ve,
{
enum sec_status sec;
size_t i, num;
- rbtree_t* sortree = NULL;
+ rbtree_type* sortree = NULL;
/* make sure that for all DNSKEY algorithms there are valid sigs */
struct algo_needs needs;
int alg;
@@ -551,7 +551,7 @@ dnskey_verify_rrset(struct module_env* env, struct val_env* ve,
{
enum sec_status sec;
size_t i, num, numchecked = 0;
- rbtree_t* sortree = NULL;
+ rbtree_type* sortree = NULL;
int buf_canon = 0;
uint16_t tag = dnskey_calc_keytag(dnskey, dnskey_idx);
int algo = dnskey_get_algo(dnskey, dnskey_idx);
@@ -585,7 +585,7 @@ enum sec_status
dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve,
time_t now, struct ub_packed_rrset_key* rrset,
struct ub_packed_rrset_key* dnskey, size_t sig_idx,
- struct rbtree_t** sortree, char** reason)
+ struct rbtree_type** sortree, char** reason)
{
/* find matching keys and check them */
enum sec_status sec = sec_status_bogus;
@@ -627,7 +627,7 @@ dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve,
*/
struct canon_rr {
/** rbtree node, key is this structure */
- rbnode_t node;
+ rbnode_type node;
/** rrset the RR is in */
struct ub_packed_rrset_key* rrset;
/** which RR in the rrset */
@@ -885,7 +885,7 @@ canonical_tree_compare(const void* k1, const void* k2)
*/
static void
canonical_sort(struct ub_packed_rrset_key* rrset, struct packed_rrset_data* d,
- rbtree_t* sortree, struct canon_rr* rrs)
+ rbtree_type* sortree, struct canon_rr* rrs)
{
size_t i;
/* insert into rbtree to sort and detect duplicates */
@@ -1043,7 +1043,7 @@ canonicalize_rdata(sldns_buffer* buf, struct ub_packed_rrset_key* rrset,
int rrset_canonical_equal(struct regional* region,
struct ub_packed_rrset_key* k1, struct ub_packed_rrset_key* k2)
{
- struct rbtree_t sortree1, sortree2;
+ struct rbtree_type sortree1, sortree2;
struct canon_rr *rrs1, *rrs2, *p1, *p2;
struct packed_rrset_data* d1=(struct packed_rrset_data*)k1->entry.data;
struct packed_rrset_data* d2=(struct packed_rrset_data*)k2->entry.data;
@@ -1120,7 +1120,7 @@ int rrset_canonical_equal(struct regional* region,
static int
rrset_canonical(struct regional* region, sldns_buffer* buf,
struct ub_packed_rrset_key* k, uint8_t* sig, size_t siglen,
- struct rbtree_t** sortree)
+ struct rbtree_type** sortree)
{
struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data;
uint8_t* can_owner = NULL;
@@ -1129,8 +1129,8 @@ rrset_canonical(struct regional* region, sldns_buffer* buf,
struct canon_rr* rrs;
if(!*sortree) {
- *sortree = (struct rbtree_t*)regional_alloc(region,
- sizeof(rbtree_t));
+ *sortree = (struct rbtree_type*)regional_alloc(region,
+ sizeof(rbtree_type));
if(!*sortree)
return 0;
if(d->count > RR_COUNT_MAX)
@@ -1312,7 +1312,7 @@ dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf,
struct val_env* ve, time_t now,
struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey,
size_t dnskey_idx, size_t sig_idx,
- struct rbtree_t** sortree, int* buf_canon, char** reason)
+ struct rbtree_type** sortree, int* buf_canon, char** reason)
{
enum sec_status sec;
uint8_t* sig; /* RRSIG rdata */
diff --git a/validator/val_sigcrypt.h b/validator/val_sigcrypt.h
index 68aa9a445ae8..5a975acff4da 100644
--- a/validator/val_sigcrypt.h
+++ b/validator/val_sigcrypt.h
@@ -47,7 +47,7 @@
struct val_env;
struct module_env;
struct ub_packed_rrset_key;
-struct rbtree_t;
+struct rbtree_type;
struct regional;
struct sldns_buffer;
@@ -277,7 +277,7 @@ enum sec_status dnskey_verify_rrset(struct module_env* env,
enum sec_status dnskeyset_verify_rrset_sig(struct module_env* env,
struct val_env* ve, time_t now, struct ub_packed_rrset_key* rrset,
struct ub_packed_rrset_key* dnskey, size_t sig_idx,
- struct rbtree_t** sortree, char** reason);
+ struct rbtree_type** sortree, char** reason);
/**
* verify rrset, with specific dnskey(from set), for a specific rrsig
@@ -302,7 +302,7 @@ enum sec_status dnskey_verify_rrset_sig(struct regional* region,
struct sldns_buffer* buf, struct val_env* ve, time_t now,
struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey,
size_t dnskey_idx, size_t sig_idx,
- struct rbtree_t** sortree, int* buf_canon, char** reason);
+ struct rbtree_type** sortree, int* buf_canon, char** reason);
/**
* canonical compare for two tree entries
diff --git a/validator/validator.h b/validator/validator.h
index 20f806adab35..23d3072427a2 100644
--- a/validator/validator.h
+++ b/validator/validator.h
@@ -126,7 +126,7 @@ struct val_env {
size_t* nsec3_maxiter;
/** lock on bogus counter */
- lock_basic_t bogus_lock;
+ lock_basic_type bogus_lock;
/** number of times rrsets marked bogus */
size_t num_rrset_bogus;
};
diff --git a/winrc/setup.nsi b/winrc/setup.nsi
index d70c56b659e3..c5d6b2ceb933 100644
--- a/winrc/setup.nsi
+++ b/winrc/setup.nsi
@@ -148,8 +148,10 @@ section "-hidden.postinstall"
# install service entry
nsExec::ExecToLog '"$INSTDIR\unbound-service-install.exe"'
+ Pop $0 # return value/error/timeout
# start unbound service
nsExec::ExecToLog '"$INSTDIR\unbound-service-install.exe" start'
+ Pop $0 # return value/error/timeout
sectionEnd
# set section descriptions
@@ -171,8 +173,10 @@ LangString DESC_rootkey ${LANG_ENGLISH} "Set up to use the DNSSEC root trust anc
section "un.Unbound"
# stop unbound service
nsExec::ExecToLog '"$INSTDIR\unbound-service-remove.exe" stop'
+ Pop $0 # return value/error/timeout
# uninstall service entry
nsExec::ExecToLog '"$INSTDIR\unbound-service-remove.exe"'
+ Pop $0 # return value/error/timeout
# deregister uninstall
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Unbound"
Delete "$INSTDIR\uninst.exe" # delete self
diff --git a/winrc/win_svc.c b/winrc/win_svc.c
index ac97ef68beae..b755fb543b02 100644
--- a/winrc/win_svc.c
+++ b/winrc/win_svc.c
@@ -70,7 +70,7 @@ static int service_cmdline_verbose = 0;
/** the cron callback */
static struct comm_timer* service_cron = NULL;
/** the cron thread */
-static ub_thread_t cron_thread = NULL;
+static ub_thread_type cron_thread = NULL;
/** if cron has already done its quick check */
static int cron_was_quick = 0;