mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
Linting change.
Remove config parser/lexer code as it's rebuilded every time but can break adding new config options. Also clean up the code base to avoid mixing actual code changes and lint issues. Signed-off-by: Vadim Fedorenko <vadfed@meta.com>
This commit is contained in:
parent
fe46bc47d7
commit
648ad4db6f
23 changed files with 694 additions and 15677 deletions
10
Makefile.in
10
Makefile.in
|
|
@ -198,7 +198,7 @@ CHECKCONF_OBJ=unbound-checkconf.lo worker_cb.lo
|
|||
CHECKCONF_OBJ_LINK=$(CHECKCONF_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \
|
||||
$(COMPAT_OBJ) @WIN_CHECKCONF_OBJ_LINK@
|
||||
CONTROL_SRC=smallapp/unbound-control.c
|
||||
CONTROL_OBJ=unbound-control.lo
|
||||
CONTROL_OBJ=unbound-control.lo
|
||||
CONTROL_OBJ_LINK=$(CONTROL_OBJ) worker_cb.lo $(COMMON_OBJ_ALL_SYMBOLS) \
|
||||
$(SLDNS_OBJ) $(COMPAT_OBJ) @WIN_CONTROL_OBJ_LINK@
|
||||
HOST_SRC=smallapp/unbound-host.c
|
||||
|
|
@ -516,7 +516,7 @@ distclean: clean
|
|||
rm -f doc/example.conf doc/libunbound.3 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound-control.8 doc/unbound.8 doc/unbound.conf.5 doc/unbound-host.1
|
||||
rm -f smallapp/unbound-control-setup.sh dnstap/dnstap_config.h dnscrypt/dnscrypt_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service
|
||||
rm -f $(TEST_BIN)
|
||||
rm -f Makefile
|
||||
rm -f Makefile
|
||||
|
||||
maintainer-clean: distclean
|
||||
rm -f util/configlexer.c util/configparser.c util/configparser.h
|
||||
|
|
@ -649,7 +649,7 @@ uninstall: $(PYTHONMOD_UNINSTALL) $(PYUNBOUND_UNINSTALL) $(UNBOUND_EVENT_UNINSTA
|
|||
|
||||
iana_update:
|
||||
curl -o port-numbers.tmp https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml --compressed
|
||||
if file port-numbers.tmp | grep 'gzip' >/dev/null; then zcat port-numbers.tmp; else cat port-numbers.tmp; fi | awk '/<record>/ {p=0;} /<protocol>udp/ {p=1;} /<protocol>[^u]/ {p=0;} /Decomissioned|Decommissioned|Removed|De-registered|unassigned|Unassigned|Reserved/ {u=1;} /<number>/ { if(u==1) {u=0;} else { if(p==1) { match($$0,/[0-9]+/); print substr($$0, RSTART, RLENGTH) ","}}}' | sort -nu > util/iana_ports.inc
|
||||
if file port-numbers.tmp | grep 'gzip' >/dev/null; then zcat port-numbers.tmp; else cat port-numbers.tmp; fi | awk '/<record>/ {p=0;} /<protocol>udp/ {p=1;} /<protocol>[^u]/ {p=0;} /Decomissioned|Decommissioned|Removed|De-registered|unassigned|Unassigned|Reserved/ {u=1;} /<number>/ { if(u==1) {u=0;} else { if(p==1) { match($$0,/[0-9]+/); print substr($$0, RSTART, RLENGTH) ","}}}' | sort -nu > util/iana_ports.inc
|
||||
rm -f port-numbers.tmp
|
||||
|
||||
# dependency generation
|
||||
|
|
@ -877,7 +877,7 @@ rpz.lo rpz.o: $(srcdir)/services/rpz.c config.h $(srcdir)/services/rpz.h $(srcdi
|
|||
outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \
|
||||
$(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
|
||||
|
||||
|
||||
outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c config.h \
|
||||
$(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \
|
||||
$(srcdir)/dnscrypt/dnscrypt.h \
|
||||
|
|
@ -1186,7 +1186,7 @@ unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h $(srcdir)/sldns/r
|
|||
$(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
|
||||
$(srcdir)/util/random.h $(srcdir)/respip/respip.h \
|
||||
$(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \
|
||||
$(srcdir)/services/outside_network.h
|
||||
$(srcdir)/services/outside_network.h
|
||||
unitmsgparse.lo unitmsgparse.o: $(srcdir)/testcode/unitmsgparse.c config.h $(srcdir)/util/log.h \
|
||||
$(srcdir)/testcode/unitmain.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \
|
||||
$(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \
|
||||
|
|
|
|||
24
config.h.in
24
config.h.in
|
|
@ -1068,39 +1068,39 @@
|
|||
|
||||
#if defined(OMITTED__D_GNU_SOURCE) && !defined(_GNU_SOURCE)
|
||||
#define _GNU_SOURCE 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(OMITTED__D_BSD_SOURCE) && !defined(_BSD_SOURCE)
|
||||
#define _BSD_SOURCE 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(OMITTED__D_DEFAULT_SOURCE) && !defined(_DEFAULT_SOURCE)
|
||||
#define _DEFAULT_SOURCE 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(OMITTED__D__EXTENSIONS__) && !defined(__EXTENSIONS__)
|
||||
#define __EXTENSIONS__ 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(OMITTED__D_POSIX_C_SOURCE_200112) && !defined(_POSIX_C_SOURCE)
|
||||
#define _POSIX_C_SOURCE 200112
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(OMITTED__D_XOPEN_SOURCE_600) && !defined(_XOPEN_SOURCE)
|
||||
#define _XOPEN_SOURCE 600
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(OMITTED__D_XOPEN_SOURCE_EXTENDED_1) && !defined(_XOPEN_SOURCE_EXTENDED)
|
||||
#define _XOPEN_SOURCE_EXTENDED 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(OMITTED__D_ALL_SOURCE) && !defined(_ALL_SOURCE)
|
||||
#define _ALL_SOURCE 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(OMITTED__D_LARGEFILE_SOURCE_1) && !defined(_LARGEFILE_SOURCE)
|
||||
#define _LARGEFILE_SOURCE 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
|
@ -1184,7 +1184,7 @@
|
|||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef HAVE_ATTR_FORMAT
|
||||
# define ATTR_FORMAT(archetype, string_index, first_to_check) \
|
||||
__attribute__ ((format (archetype, string_index, first_to_check)))
|
||||
|
|
@ -1294,7 +1294,7 @@ void* reallocarray(void *ptr, size_t nmemb, size_t size);
|
|||
#ifdef HAVE_WINSOCK2_H
|
||||
#define FD_SET_T (u_int)
|
||||
#else
|
||||
#define FD_SET_T
|
||||
#define FD_SET_T
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -1449,5 +1449,3 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
|
|||
#define UNBOUND_CONTROL_PORT 8953
|
||||
/** the version of unbound-control that this software implements */
|
||||
#define UNBOUND_CONTROL_VERSION 1
|
||||
|
||||
|
||||
|
|
|
|||
1
configure
vendored
1
configure
vendored
|
|
@ -24273,4 +24273,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
|
|||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
|
||||
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
|
||||
fi
|
||||
|
||||
|
|
|
|||
72
configure.ac
72
configure.ac
|
|
@ -157,7 +157,7 @@ esac
|
|||
|
||||
# are we on MinGW?
|
||||
if uname -s 2>&1 | grep MINGW >/dev/null; then on_mingw="yes"
|
||||
else
|
||||
else
|
||||
if echo $host | grep mingw >/dev/null; then on_mingw="yes"
|
||||
else on_mingw="no"; fi
|
||||
fi
|
||||
|
|
@ -186,9 +186,9 @@ ub_conf_dir=`AS_DIRNAME(["$ub_conf_file"])`
|
|||
AC_SUBST(ub_conf_dir)
|
||||
|
||||
# Determine run, chroot directory and pidfile locations
|
||||
AC_ARG_WITH(run-dir,
|
||||
AS_HELP_STRING([--with-run-dir=path],[set default directory to chdir to (by default dir part of cfg file)]),
|
||||
UNBOUND_RUN_DIR="$withval",
|
||||
AC_ARG_WITH(run-dir,
|
||||
AS_HELP_STRING([--with-run-dir=path],[set default directory to chdir to (by default dir part of cfg file)]),
|
||||
UNBOUND_RUN_DIR="$withval",
|
||||
if test $on_mingw = no; then
|
||||
UNBOUND_RUN_DIR=`dirname "$ub_conf_file"`
|
||||
else
|
||||
|
|
@ -199,9 +199,9 @@ AC_SUBST(UNBOUND_RUN_DIR)
|
|||
ACX_ESCAPE_BACKSLASH($UNBOUND_RUN_DIR, hdr_run)
|
||||
AC_DEFINE_UNQUOTED(RUN_DIR, ["$hdr_run"], [Directory to chdir to])
|
||||
|
||||
AC_ARG_WITH(chroot-dir,
|
||||
AS_HELP_STRING([--with-chroot-dir=path],[set default directory to chroot to (by default same as run-dir)]),
|
||||
UNBOUND_CHROOT_DIR="$withval",
|
||||
AC_ARG_WITH(chroot-dir,
|
||||
AS_HELP_STRING([--with-chroot-dir=path],[set default directory to chroot to (by default same as run-dir)]),
|
||||
UNBOUND_CHROOT_DIR="$withval",
|
||||
if test $on_mingw = no; then
|
||||
UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR"
|
||||
else
|
||||
|
|
@ -219,9 +219,9 @@ AC_ARG_WITH(share-dir,
|
|||
AC_SUBST(UNBOUND_SHARE_DIR)
|
||||
AC_DEFINE_UNQUOTED(SHARE_DIR, ["$UNBOUND_SHARE_DIR"], [Shared data])
|
||||
|
||||
AC_ARG_WITH(pidfile,
|
||||
AS_HELP_STRING([--with-pidfile=filename],[set default pathname to unbound pidfile (default run-dir/unbound.pid)]),
|
||||
UNBOUND_PIDFILE="$withval",
|
||||
AC_ARG_WITH(pidfile,
|
||||
AS_HELP_STRING([--with-pidfile=filename],[set default pathname to unbound pidfile (default run-dir/unbound.pid)]),
|
||||
UNBOUND_PIDFILE="$withval",
|
||||
if test $on_mingw = no; then
|
||||
UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid"
|
||||
else
|
||||
|
|
@ -232,9 +232,9 @@ AC_SUBST(UNBOUND_PIDFILE)
|
|||
ACX_ESCAPE_BACKSLASH($UNBOUND_PIDFILE, hdr_pid)
|
||||
AC_DEFINE_UNQUOTED(PIDFILE, ["$hdr_pid"], [default pidfile location])
|
||||
|
||||
AC_ARG_WITH(rootkey-file,
|
||||
AS_HELP_STRING([--with-rootkey-file=filename],[set default pathname to root key file (default run-dir/root.key). This file is read and written.]),
|
||||
UNBOUND_ROOTKEY_FILE="$withval",
|
||||
AC_ARG_WITH(rootkey-file,
|
||||
AS_HELP_STRING([--with-rootkey-file=filename],[set default pathname to root key file (default run-dir/root.key). This file is read and written.]),
|
||||
UNBOUND_ROOTKEY_FILE="$withval",
|
||||
if test $on_mingw = no; then
|
||||
UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key"
|
||||
else
|
||||
|
|
@ -245,9 +245,9 @@ AC_SUBST(UNBOUND_ROOTKEY_FILE)
|
|||
ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTKEY_FILE, hdr_rkey)
|
||||
AC_DEFINE_UNQUOTED(ROOT_ANCHOR_FILE, ["$hdr_rkey"], [default rootkey location])
|
||||
|
||||
AC_ARG_WITH(rootcert-file,
|
||||
AS_HELP_STRING([--with-rootcert-file=filename],[set default pathname to root update certificate file (default run-dir/icannbundle.pem). This file need not exist if you are content with the builtin.]),
|
||||
UNBOUND_ROOTCERT_FILE="$withval",
|
||||
AC_ARG_WITH(rootcert-file,
|
||||
AS_HELP_STRING([--with-rootcert-file=filename],[set default pathname to root update certificate file (default run-dir/icannbundle.pem). This file need not exist if you are content with the builtin.]),
|
||||
UNBOUND_ROOTCERT_FILE="$withval",
|
||||
if test $on_mingw = no; then
|
||||
UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem"
|
||||
else
|
||||
|
|
@ -258,9 +258,9 @@ AC_SUBST(UNBOUND_ROOTCERT_FILE)
|
|||
ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTCERT_FILE, hdr_rpem)
|
||||
AC_DEFINE_UNQUOTED(ROOT_CERT_FILE, ["$hdr_rpem"], [default rootcert location])
|
||||
|
||||
AC_ARG_WITH(username,
|
||||
AS_HELP_STRING([--with-username=user],[set default user that unbound changes to (default user is unbound)]),
|
||||
UNBOUND_USERNAME="$withval",
|
||||
AC_ARG_WITH(username,
|
||||
AS_HELP_STRING([--with-username=user],[set default user that unbound changes to (default user is unbound)]),
|
||||
UNBOUND_USERNAME="$withval",
|
||||
UNBOUND_USERNAME="unbound")
|
||||
AC_SUBST(UNBOUND_USERNAME)
|
||||
AC_DEFINE_UNQUOTED(UB_USERNAME, ["$UNBOUND_USERNAME"], [default username])
|
||||
|
|
@ -286,7 +286,7 @@ ACX_DETERMINE_EXT_FLAGS_UNBOUND
|
|||
# debug mode flags warnings
|
||||
AC_ARG_ENABLE(checking, AS_HELP_STRING([--enable-checking],[Enable warnings, asserts, makefile-dependencies]))
|
||||
AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],[same as enable-checking]))
|
||||
if test "$enable_debug" = "yes"; then debug_enabled="$enable_debug";
|
||||
if test "$enable_debug" = "yes"; then debug_enabled="$enable_debug";
|
||||
else debug_enabled="$enable_checking"; fi
|
||||
AC_SUBST(debug_enabled)
|
||||
case "$debug_enabled" in
|
||||
|
|
@ -454,7 +454,7 @@ AC_CHECK_HEADERS([netioapi.h],,, [AC_INCLUDES_DEFAULT
|
|||
#endif
|
||||
])
|
||||
|
||||
# check for types.
|
||||
# check for types.
|
||||
# Using own tests for int64* because autoconf builtin only give 32bit.
|
||||
AC_CHECK_TYPE(int8_t, signed char)
|
||||
AC_CHECK_TYPE(int16_t, short)
|
||||
|
|
@ -549,11 +549,11 @@ sinclude(systemd.m4)
|
|||
# Include systemd.m4 - end
|
||||
|
||||
# set memory allocation checking if requested
|
||||
AC_ARG_ENABLE(alloc-checks, AS_HELP_STRING([--enable-alloc-checks],[ enable to memory allocation statistics, for debug purposes ]),
|
||||
AC_ARG_ENABLE(alloc-checks, AS_HELP_STRING([--enable-alloc-checks],[ enable to memory allocation statistics, for debug purposes ]),
|
||||
, )
|
||||
AC_ARG_ENABLE(alloc-lite, AS_HELP_STRING([--enable-alloc-lite],[ enable for lightweight alloc assertions, for debug purposes ]),
|
||||
AC_ARG_ENABLE(alloc-lite, AS_HELP_STRING([--enable-alloc-lite],[ enable for lightweight alloc assertions, for debug purposes ]),
|
||||
, )
|
||||
AC_ARG_ENABLE(alloc-nonregional, AS_HELP_STRING([--enable-alloc-nonregional],[ enable nonregional allocs, slow but exposes regional allocations to other memory purifiers, for debug purposes ]),
|
||||
AC_ARG_ENABLE(alloc-nonregional, AS_HELP_STRING([--enable-alloc-nonregional],[ enable nonregional allocs, slow but exposes regional allocations to other memory purifiers, for debug purposes ]),
|
||||
, )
|
||||
if test x_$enable_alloc_nonregional = x_yes; then
|
||||
AC_DEFINE(UNBOUND_ALLOC_NONREGIONAL, 1, [use malloc not regions, for debug use])
|
||||
|
|
@ -586,7 +586,7 @@ if test "$on_mingw" = "yes"; then
|
|||
])],
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_WINDOWS_THREADS, 1, [Using Windows threads])
|
||||
,
|
||||
,
|
||||
AC_MSG_RESULT(no)
|
||||
)
|
||||
|
||||
|
|
@ -597,7 +597,7 @@ else
|
|||
# check this first, so that the pthread lib does not get linked in via
|
||||
# libssl or libpython, and thus distorts the tests, and we end up using
|
||||
# the non-threadsafe C libraries.
|
||||
AC_ARG_WITH(pthreads, AS_HELP_STRING([--with-pthreads],[use pthreads library, or --without-pthreads to disable threading support.]),
|
||||
AC_ARG_WITH(pthreads, AS_HELP_STRING([--with-pthreads],[use pthreads library, or --without-pthreads to disable threading support.]),
|
||||
[ ],[ withval="yes" ])
|
||||
ub_have_pthreads=no
|
||||
if test x_$withval != x_no; then
|
||||
|
|
@ -624,7 +624,7 @@ int main(void) {return 0;}
|
|||
# first compile
|
||||
echo "$CC $CFLAGS -c conftest.c -o conftest.o" >&AS_MESSAGE_LOG_FD
|
||||
$CC $CFLAGS -c conftest.c -o conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
|
||||
if test $? = 0; then
|
||||
if test $? = 0; then
|
||||
# then link
|
||||
echo "$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest contest.o" >&AS_MESSAGE_LOG_FD
|
||||
$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
|
||||
|
|
@ -645,7 +645,7 @@ int main(void) {return 0;}
|
|||
])
|
||||
fi
|
||||
|
||||
# check solaris thread library
|
||||
# check solaris thread library
|
||||
AC_ARG_WITH(solaris-threads, AS_HELP_STRING([--with-solaris-threads],[use solaris native thread library.]), [ ],[ withval="no" ])
|
||||
ub_have_sol_threads=no
|
||||
if test x_$withval != x_no; then
|
||||
|
|
@ -659,8 +659,8 @@ if test x_$withval != x_no; then
|
|||
ACX_CHECK_COMPILER_FLAG(mt, [CFLAGS="$CFLAGS -mt"],
|
||||
[CFLAGS="$CFLAGS -D_REENTRANT"])
|
||||
ub_have_sol_threads=yes
|
||||
] , [
|
||||
AC_MSG_ERROR([no solaris threads found.])
|
||||
] , [
|
||||
AC_MSG_ERROR([no solaris threads found.])
|
||||
])
|
||||
fi
|
||||
fi
|
||||
|
|
@ -1093,7 +1093,7 @@ int load_gost_id(void)
|
|||
EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
|
||||
return gost_id;
|
||||
}
|
||||
int main(void) {
|
||||
int main(void) {
|
||||
EVP_MD_CTX* ctx;
|
||||
const EVP_MD* md;
|
||||
unsigned char digest[64]; /* its a 256-bit digest, so uses 32 bytes */
|
||||
|
|
@ -1537,7 +1537,7 @@ if test x_$enable_fully_static = x_yes; then
|
|||
fi
|
||||
|
||||
# set lock checking if requested
|
||||
AC_ARG_ENABLE(lock_checks, AS_HELP_STRING([--enable-lock-checks],[ enable to check lock and unlock calls, for debug purposes ]),
|
||||
AC_ARG_ENABLE(lock_checks, AS_HELP_STRING([--enable-lock-checks],[ enable to check lock and unlock calls, for debug purposes ]),
|
||||
, )
|
||||
if test x_$enable_lock_checks = x_yes; then
|
||||
AC_DEFINE(ENABLE_LOCK_CHECKS, 1, [Define if you want to use debug lock checking (slow).])
|
||||
|
|
@ -1988,11 +1988,11 @@ AC_ARG_WITH(libunbound-only, AS_HELP_STRING([--with-libunbound-only],[do not bui
|
|||
fi
|
||||
])
|
||||
if test $ALLTARGET = "alltargets"; then
|
||||
if test $USE_NSS = "yes"; then
|
||||
AC_MSG_ERROR([--with-nss can only be used in combination with --with-libunbound-only.])
|
||||
if test $USE_NSS = "yes"; then
|
||||
AC_MSG_ERROR([--with-nss can only be used in combination with --with-libunbound-only.])
|
||||
fi
|
||||
if test $USE_NETTLE = "yes"; then
|
||||
AC_MSG_ERROR([--with-nettle can only be used in combination with --with-libunbound-only.])
|
||||
AC_MSG_ERROR([--with-nettle can only be used in combination with --with-libunbound-only.])
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
@ -2003,7 +2003,7 @@ ACX_STRIP_EXT_FLAGS
|
|||
if test -n "$LATE_LDFLAGS"; then
|
||||
LDFLAGS="$LATE_LDFLAGS $LDFLAGS"
|
||||
fi
|
||||
# remove start spaces
|
||||
# remove start spaces
|
||||
LDFLAGS=`echo "$LDFLAGS"|sed -e 's/^ *//'`
|
||||
LIBS=`echo "$LIBS"|sed -e 's/^ *//'`
|
||||
|
||||
|
|
|
|||
174
daemon/remote.c
174
daemon/remote.c
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2008, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
*
|
||||
* This file contains the remote control functionality for the daemon.
|
||||
* The remote control can be performed using either the commandline
|
||||
* unbound-control tool, or a TLS capable web browser.
|
||||
* unbound-control tool, or a TLS capable web browser.
|
||||
* The channel is secured using TLSv1, and certificates.
|
||||
* Both the server and the client(control tool) have their own keys.
|
||||
*/
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
|
||||
/** subtract timers and the values do not overflow or become negative */
|
||||
static void
|
||||
timeval_subtract(struct timeval* d, const struct timeval* end,
|
||||
timeval_subtract(struct timeval* d, const struct timeval* end,
|
||||
const struct timeval* start)
|
||||
{
|
||||
#ifndef S_SPLINT_S
|
||||
|
|
@ -201,7 +201,7 @@ remote_setup_ctx(struct daemon_remote* rc, struct config_file* cfg)
|
|||
struct daemon_remote*
|
||||
daemon_remote_create(struct config_file* cfg)
|
||||
{
|
||||
struct daemon_remote* rc = (struct daemon_remote*)calloc(1,
|
||||
struct daemon_remote* rc = (struct daemon_remote*)calloc(1,
|
||||
sizeof(*rc));
|
||||
if(!rc) {
|
||||
log_err("out of memory in daemon_remote_create");
|
||||
|
|
@ -410,7 +410,7 @@ accept_open(struct daemon_remote* rc, int fd)
|
|||
n->next = rc->accept_list;
|
||||
rc->accept_list = n;
|
||||
/* open commpt */
|
||||
n->com = comm_point_create_raw(rc->worker->base, fd, 0,
|
||||
n->com = comm_point_create_raw(rc->worker->base, fd, 0,
|
||||
&remote_accept_callback, rc);
|
||||
if(!n->com)
|
||||
return 0;
|
||||
|
|
@ -419,7 +419,7 @@ accept_open(struct daemon_remote* rc, int fd)
|
|||
return 1;
|
||||
}
|
||||
|
||||
int daemon_remote_open_accept(struct daemon_remote* rc,
|
||||
int daemon_remote_open_accept(struct daemon_remote* rc,
|
||||
struct listen_port* ports, struct worker* worker)
|
||||
{
|
||||
struct listen_port* p;
|
||||
|
|
@ -437,7 +437,7 @@ void daemon_remote_stop_accept(struct daemon_remote* rc)
|
|||
{
|
||||
struct listen_list* p;
|
||||
for(p=rc->accept_list; p; p=p->next) {
|
||||
comm_point_stop_listening(p->com);
|
||||
comm_point_stop_listening(p->com);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -445,11 +445,11 @@ void daemon_remote_start_accept(struct daemon_remote* rc)
|
|||
{
|
||||
struct listen_list* p;
|
||||
for(p=rc->accept_list; p; p=p->next) {
|
||||
comm_point_start_listening(p->com, -1, -1);
|
||||
comm_point_start_listening(p->com, -1, -1);
|
||||
}
|
||||
}
|
||||
|
||||
int remote_accept_callback(struct comm_point* c, void* arg, int err,
|
||||
int remote_accept_callback(struct comm_point* c, void* arg, int err,
|
||||
struct comm_reply* ATTR_UNUSED(rep))
|
||||
{
|
||||
struct daemon_remote* rc = (struct daemon_remote*)arg;
|
||||
|
|
@ -481,7 +481,7 @@ int remote_accept_callback(struct comm_point* c, void* arg, int err,
|
|||
}
|
||||
n->fd = newfd;
|
||||
/* start in reading state */
|
||||
n->c = comm_point_create_raw(rc->worker->base, newfd, 0,
|
||||
n->c = comm_point_create_raw(rc->worker->base, newfd, 0,
|
||||
&remote_control_callback, n);
|
||||
if(!n->c) {
|
||||
log_err("out of memory");
|
||||
|
|
@ -521,7 +521,7 @@ int remote_accept_callback(struct comm_point* c, void* arg, int err,
|
|||
rc->busy_list = n;
|
||||
rc->active ++;
|
||||
|
||||
/* perform the first nonblocking read already, for windows,
|
||||
/* perform the first nonblocking read already, for windows,
|
||||
* so it can return wouldblock. could be faster too. */
|
||||
(void)remote_control_callback(n->c, n, NETEVENT_NOERROR, NULL);
|
||||
return 0;
|
||||
|
|
@ -558,7 +558,7 @@ int
|
|||
ssl_print_text(RES* res, const char* text)
|
||||
{
|
||||
int r;
|
||||
if(!res)
|
||||
if(!res)
|
||||
return 0;
|
||||
if(res->ssl) {
|
||||
ERR_clear_error();
|
||||
|
|
@ -660,7 +660,7 @@ static char*
|
|||
skipwhite(char* str)
|
||||
{
|
||||
/* EOS \0 is not a space */
|
||||
while( isspace((unsigned char)*str) )
|
||||
while( isspace((unsigned char)*str) )
|
||||
str++;
|
||||
return str;
|
||||
}
|
||||
|
|
@ -708,20 +708,20 @@ static int
|
|||
print_stats(RES* ssl, const char* nm, struct ub_stats_info* s)
|
||||
{
|
||||
struct timeval sumwait, avg;
|
||||
if(!ssl_printf(ssl, "%s.num.queries"SQ"%lu\n", nm,
|
||||
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
|
||||
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;
|
||||
if(!ssl_printf(ssl, "%s.num.cachemiss"SQ"%lu\n", nm,
|
||||
if(!ssl_printf(ssl, "%s.num.cachemiss"SQ"%lu\n", nm,
|
||||
(unsigned long)s->svr.num_queries_missed_cache)) return 0;
|
||||
if(!ssl_printf(ssl, "%s.num.prefetch"SQ"%lu\n", nm,
|
||||
if(!ssl_printf(ssl, "%s.num.prefetch"SQ"%lu\n", nm,
|
||||
(unsigned long)s->svr.num_queries_prefetch)) return 0;
|
||||
if(!ssl_printf(ssl, "%s.num.expired"SQ"%lu\n", nm,
|
||||
(unsigned long)s->svr.ans_expired)) return 0;
|
||||
if(!ssl_printf(ssl, "%s.num.recursivereplies"SQ"%lu\n", nm,
|
||||
if(!ssl_printf(ssl, "%s.num.recursivereplies"SQ"%lu\n", nm,
|
||||
(unsigned long)s->mesh_replies_sent)) return 0;
|
||||
#ifdef USE_DNSCRYPT
|
||||
if(!ssl_printf(ssl, "%s.num.dnscrypt.crypted"SQ"%lu\n", nm,
|
||||
|
|
@ -755,7 +755,7 @@ print_stats(RES* ssl, const char* nm, struct ub_stats_info* s)
|
|||
timeval_divide(&avg, &sumwait, s->mesh_replies_sent);
|
||||
if(!ssl_printf(ssl, "%s.recursion.time.avg"SQ ARG_LL "d.%6.6d\n", nm,
|
||||
(long long)avg.tv_sec, (int)avg.tv_usec)) return 0;
|
||||
if(!ssl_printf(ssl, "%s.recursion.time.median"SQ"%g\n", nm,
|
||||
if(!ssl_printf(ssl, "%s.recursion.time.median"SQ"%g\n", nm,
|
||||
s->mesh_time_median)) return 0;
|
||||
if(!ssl_printf(ssl, "%s.tcpusage"SQ"%lu\n", nm,
|
||||
(unsigned long)s->svr.tcp_accept_usage)) return 0;
|
||||
|
|
@ -780,7 +780,7 @@ print_longnum(RES* ssl, const char* desc, size_t x)
|
|||
/* more than a Gb */
|
||||
size_t front = x / (size_t)1000000;
|
||||
size_t back = x % (size_t)1000000;
|
||||
return ssl_printf(ssl, "%s%u%6.6u\n", desc,
|
||||
return ssl_printf(ssl, "%s%u%6.6u\n", desc,
|
||||
(unsigned)front, (unsigned)back);
|
||||
} else {
|
||||
return ssl_printf(ssl, "%s%lu\n", desc, (unsigned long)x);
|
||||
|
|
@ -880,11 +880,11 @@ print_uptime(RES* ssl, struct worker* worker, int reset)
|
|||
timeval_subtract(&dt, &now, &worker->daemon->time_last_stat);
|
||||
if(reset)
|
||||
worker->daemon->time_last_stat = now;
|
||||
if(!ssl_printf(ssl, "time.now"SQ ARG_LL "d.%6.6d\n",
|
||||
if(!ssl_printf(ssl, "time.now"SQ ARG_LL "d.%6.6d\n",
|
||||
(long long)now.tv_sec, (unsigned)now.tv_usec)) return 0;
|
||||
if(!ssl_printf(ssl, "time.up"SQ ARG_LL "d.%6.6d\n",
|
||||
if(!ssl_printf(ssl, "time.up"SQ ARG_LL "d.%6.6d\n",
|
||||
(long long)up.tv_sec, (unsigned)up.tv_usec)) return 0;
|
||||
if(!ssl_printf(ssl, "time.elapsed"SQ ARG_LL "d.%6.6d\n",
|
||||
if(!ssl_printf(ssl, "time.elapsed"SQ ARG_LL "d.%6.6d\n",
|
||||
(long long)dt.tv_sec, (unsigned)dt.tv_usec)) return 0;
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -902,7 +902,7 @@ print_hist(RES* ssl, struct ub_stats_info* s)
|
|||
}
|
||||
timehist_import(hist, s->svr.hist, NUM_BUCKETS_HIST);
|
||||
for(i=0; i<hist->num; i++) {
|
||||
if(!ssl_printf(ssl,
|
||||
if(!ssl_printf(ssl,
|
||||
"histogram.%6.6d.%6.6d.to.%6.6d.%6.6d=%lu\n",
|
||||
(int)hist->buckets[i].lower.tv_sec,
|
||||
(int)hist->buckets[i].lower.tv_usec,
|
||||
|
|
@ -945,11 +945,11 @@ print_ext(RES* ssl, struct ub_stats_info* s, int inhibit_zero)
|
|||
} else {
|
||||
snprintf(nm, sizeof(nm), "TYPE%d", i);
|
||||
}
|
||||
if(!ssl_printf(ssl, "num.query.type.%s"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.type.%s"SQ"%lu\n",
|
||||
nm, (unsigned long)s->svr.qtype[i])) return 0;
|
||||
}
|
||||
if(!inhibit_zero || s->svr.qtype_big) {
|
||||
if(!ssl_printf(ssl, "num.query.type.other"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.type.other"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qtype_big)) return 0;
|
||||
}
|
||||
/* CLASS */
|
||||
|
|
@ -962,11 +962,11 @@ print_ext(RES* ssl, struct ub_stats_info* s, int inhibit_zero)
|
|||
} else {
|
||||
snprintf(nm, sizeof(nm), "CLASS%d", i);
|
||||
}
|
||||
if(!ssl_printf(ssl, "num.query.class.%s"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.class.%s"SQ"%lu\n",
|
||||
nm, (unsigned long)s->svr.qclass[i])) return 0;
|
||||
}
|
||||
if(!inhibit_zero || s->svr.qclass_big) {
|
||||
if(!ssl_printf(ssl, "num.query.class.other"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.class.other"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qclass_big)) return 0;
|
||||
}
|
||||
/* OPCODE */
|
||||
|
|
@ -979,44 +979,44 @@ print_ext(RES* ssl, struct ub_stats_info* s, int inhibit_zero)
|
|||
} else {
|
||||
snprintf(nm, sizeof(nm), "OPCODE%d", i);
|
||||
}
|
||||
if(!ssl_printf(ssl, "num.query.opcode.%s"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.opcode.%s"SQ"%lu\n",
|
||||
nm, (unsigned long)s->svr.qopcode[i])) return 0;
|
||||
}
|
||||
/* transport */
|
||||
if(!ssl_printf(ssl, "num.query.tcp"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.tcp"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qtcp)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.tcpout"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.tcpout"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qtcp_outgoing)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.udpout"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qudp_outgoing)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.tls"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.tls"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qtls)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.tls.resume"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.tls.resume"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qtls_resume)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.ipv6"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.ipv6"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qipv6)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.https"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qhttps)) return 0;
|
||||
/* flags */
|
||||
if(!ssl_printf(ssl, "num.query.flags.QR"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.flags.QR"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qbit_QR)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.flags.AA"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.flags.AA"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qbit_AA)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.flags.TC"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.flags.TC"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qbit_TC)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.flags.RD"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.flags.RD"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qbit_RD)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.flags.RA"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.flags.RA"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qbit_RA)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.flags.Z"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.flags.Z"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qbit_Z)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.flags.AD"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.flags.AD"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qbit_AD)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.flags.CD"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.flags.CD"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qbit_CD)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.edns.present"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.edns.present"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qEDNS)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.edns.DO"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.edns.DO"SQ"%lu\n",
|
||||
(unsigned long)s->svr.qEDNS_DO)) return 0;
|
||||
|
||||
/* RCODE */
|
||||
|
|
@ -1030,31 +1030,31 @@ print_ext(RES* ssl, struct ub_stats_info* s, int inhibit_zero)
|
|||
} else {
|
||||
snprintf(nm, sizeof(nm), "RCODE%d", i);
|
||||
}
|
||||
if(!ssl_printf(ssl, "num.answer.rcode.%s"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.answer.rcode.%s"SQ"%lu\n",
|
||||
nm, (unsigned long)s->svr.ans_rcode[i])) return 0;
|
||||
}
|
||||
if(!inhibit_zero || s->svr.ans_rcode_nodata) {
|
||||
if(!ssl_printf(ssl, "num.answer.rcode.nodata"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.answer.rcode.nodata"SQ"%lu\n",
|
||||
(unsigned long)s->svr.ans_rcode_nodata)) return 0;
|
||||
}
|
||||
/* iteration */
|
||||
if(!ssl_printf(ssl, "num.query.ratelimited"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.ratelimited"SQ"%lu\n",
|
||||
(unsigned long)s->svr.queries_ratelimited)) return 0;
|
||||
/* validation */
|
||||
if(!ssl_printf(ssl, "num.answer.secure"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.answer.secure"SQ"%lu\n",
|
||||
(unsigned long)s->svr.ans_secure)) return 0;
|
||||
if(!ssl_printf(ssl, "num.answer.bogus"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.answer.bogus"SQ"%lu\n",
|
||||
(unsigned long)s->svr.ans_bogus)) return 0;
|
||||
if(!ssl_printf(ssl, "num.rrset.bogus"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.rrset.bogus"SQ"%lu\n",
|
||||
(unsigned long)s->svr.rrset_bogus)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.aggressive.NOERROR"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.aggressive.NOERROR"SQ"%lu\n",
|
||||
(unsigned long)s->svr.num_neg_cache_noerror)) return 0;
|
||||
if(!ssl_printf(ssl, "num.query.aggressive.NXDOMAIN"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "num.query.aggressive.NXDOMAIN"SQ"%lu\n",
|
||||
(unsigned long)s->svr.num_neg_cache_nxdomain)) return 0;
|
||||
/* threat detection */
|
||||
if(!ssl_printf(ssl, "unwanted.queries"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "unwanted.queries"SQ"%lu\n",
|
||||
(unsigned long)s->svr.unwanted_queries)) return 0;
|
||||
if(!ssl_printf(ssl, "unwanted.replies"SQ"%lu\n",
|
||||
if(!ssl_printf(ssl, "unwanted.replies"SQ"%lu\n",
|
||||
(unsigned long)s->svr.unwanted_replies)) return 0;
|
||||
/* cache counts */
|
||||
if(!ssl_printf(ssl, "msg.cache.count"SQ"%u\n",
|
||||
|
|
@ -1124,7 +1124,7 @@ do_stats(RES* ssl, struct worker* worker, int reset)
|
|||
}
|
||||
/* print the thread statistics */
|
||||
total.mesh_time_median /= (double)daemon->num;
|
||||
if(!print_stats(ssl, "total", &total))
|
||||
if(!print_stats(ssl, "total", &total))
|
||||
return;
|
||||
if(!print_uptime(ssl, worker, reset))
|
||||
return;
|
||||
|
|
@ -1213,7 +1213,7 @@ perform_zone_add(RES* ssl, struct local_zones* zones, char* arg)
|
|||
return 0;
|
||||
}
|
||||
lock_rw_wrlock(&zones->lock);
|
||||
if((z=local_zones_find(zones, nm, nmlen,
|
||||
if((z=local_zones_find(zones, nm, nmlen,
|
||||
nmlabs, LDNS_RR_CLASS_IN))) {
|
||||
/* already present in tree */
|
||||
lock_rw_wrlock(&z->lock);
|
||||
|
|
@ -1223,7 +1223,7 @@ perform_zone_add(RES* ssl, struct local_zones* zones, char* arg)
|
|||
lock_rw_unlock(&zones->lock);
|
||||
return 1;
|
||||
}
|
||||
if(!local_zones_add_zone(zones, nm, nmlen,
|
||||
if(!local_zones_add_zone(zones, nm, nmlen,
|
||||
nmlabs, LDNS_RR_CLASS_IN, t)) {
|
||||
lock_rw_unlock(&zones->lock);
|
||||
ssl_printf(ssl, "error out of memory\n");
|
||||
|
|
@ -1272,7 +1272,7 @@ perform_zone_remove(RES* ssl, struct local_zones* zones, char* arg)
|
|||
if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs))
|
||||
return 0;
|
||||
lock_rw_wrlock(&zones->lock);
|
||||
if((z=local_zones_find(zones, nm, nmlen,
|
||||
if((z=local_zones_find(zones, nm, nmlen,
|
||||
nmlabs, LDNS_RR_CLASS_IN))) {
|
||||
/* present in tree */
|
||||
local_zones_del_zone(zones, z);
|
||||
|
|
@ -1614,7 +1614,7 @@ do_flush_type(RES* ssl, struct worker* worker, char* arg)
|
|||
return;
|
||||
t = sldns_get_rr_type_by_name(arg2);
|
||||
do_cache_remove(worker, nm, nmlen, t, LDNS_RR_CLASS_IN);
|
||||
|
||||
|
||||
free(nm);
|
||||
send_ok(ssl);
|
||||
}
|
||||
|
|
@ -1724,7 +1724,7 @@ zone_del_rrset(struct lruhash_entry* e, void* arg)
|
|||
struct del_info* inf = (struct del_info*)arg;
|
||||
struct ub_packed_rrset_key* k = (struct ub_packed_rrset_key*)e->key;
|
||||
if(dname_subdomain_c(k->rk.dname, inf->name)) {
|
||||
struct packed_rrset_data* d =
|
||||
struct packed_rrset_data* d =
|
||||
(struct packed_rrset_data*)e->data;
|
||||
if(d->ttl > inf->expired) {
|
||||
d->ttl = inf->expired;
|
||||
|
|
@ -1788,21 +1788,21 @@ do_flush_zone(RES* ssl, struct worker* worker, char* arg)
|
|||
inf.num_rrsets = 0;
|
||||
inf.num_msgs = 0;
|
||||
inf.num_keys = 0;
|
||||
slabhash_traverse(&worker->env.rrset_cache->table, 1,
|
||||
slabhash_traverse(&worker->env.rrset_cache->table, 1,
|
||||
&zone_del_rrset, &inf);
|
||||
|
||||
slabhash_traverse(worker->env.msg_cache, 1, &zone_del_msg, &inf);
|
||||
|
||||
/* and validator cache */
|
||||
if(worker->env.key_cache) {
|
||||
slabhash_traverse(worker->env.key_cache->slab, 1,
|
||||
slabhash_traverse(worker->env.key_cache->slab, 1,
|
||||
&zone_del_kcache, &inf);
|
||||
}
|
||||
|
||||
free(nm);
|
||||
|
||||
(void)ssl_printf(ssl, "ok removed %lu rrsets, %lu messages "
|
||||
"and %lu key entries\n", (unsigned long)inf.num_rrsets,
|
||||
"and %lu key entries\n", (unsigned long)inf.num_rrsets,
|
||||
(unsigned long)inf.num_msgs, (unsigned long)inf.num_keys);
|
||||
}
|
||||
|
||||
|
|
@ -1857,19 +1857,19 @@ do_flush_bogus(RES* ssl, struct worker* worker)
|
|||
inf.num_rrsets = 0;
|
||||
inf.num_msgs = 0;
|
||||
inf.num_keys = 0;
|
||||
slabhash_traverse(&worker->env.rrset_cache->table, 1,
|
||||
slabhash_traverse(&worker->env.rrset_cache->table, 1,
|
||||
&bogus_del_rrset, &inf);
|
||||
|
||||
slabhash_traverse(worker->env.msg_cache, 1, &bogus_del_msg, &inf);
|
||||
|
||||
/* and validator cache */
|
||||
if(worker->env.key_cache) {
|
||||
slabhash_traverse(worker->env.key_cache->slab, 1,
|
||||
slabhash_traverse(worker->env.key_cache->slab, 1,
|
||||
&bogus_del_kcache, &inf);
|
||||
}
|
||||
|
||||
(void)ssl_printf(ssl, "ok removed %lu rrsets, %lu messages "
|
||||
"and %lu key entries\n", (unsigned long)inf.num_rrsets,
|
||||
"and %lu key entries\n", (unsigned long)inf.num_rrsets,
|
||||
(unsigned long)inf.num_msgs, (unsigned long)inf.num_keys);
|
||||
}
|
||||
|
||||
|
|
@ -1932,19 +1932,19 @@ do_flush_negative(RES* ssl, struct worker* worker)
|
|||
inf.num_rrsets = 0;
|
||||
inf.num_msgs = 0;
|
||||
inf.num_keys = 0;
|
||||
slabhash_traverse(&worker->env.rrset_cache->table, 1,
|
||||
slabhash_traverse(&worker->env.rrset_cache->table, 1,
|
||||
&negative_del_rrset, &inf);
|
||||
|
||||
slabhash_traverse(worker->env.msg_cache, 1, &negative_del_msg, &inf);
|
||||
|
||||
/* and validator cache */
|
||||
if(worker->env.key_cache) {
|
||||
slabhash_traverse(worker->env.key_cache->slab, 1,
|
||||
slabhash_traverse(worker->env.key_cache->slab, 1,
|
||||
&negative_del_kcache, &inf);
|
||||
}
|
||||
|
||||
(void)ssl_printf(ssl, "ok removed %lu rrsets, %lu messages "
|
||||
"and %lu key entries\n", (unsigned long)inf.num_rrsets,
|
||||
"and %lu key entries\n", (unsigned long)inf.num_rrsets,
|
||||
(unsigned long)inf.num_msgs, (unsigned long)inf.num_keys);
|
||||
}
|
||||
|
||||
|
|
@ -1969,7 +1969,7 @@ do_flush_name(RES* ssl, struct worker* w, char* arg)
|
|||
do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_NAPTR, LDNS_RR_CLASS_IN);
|
||||
do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_SVCB, LDNS_RR_CLASS_IN);
|
||||
do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_HTTPS, LDNS_RR_CLASS_IN);
|
||||
|
||||
|
||||
free(nm);
|
||||
send_ok(ssl);
|
||||
}
|
||||
|
|
@ -2339,7 +2339,7 @@ do_status(RES* ssl, struct worker* worker)
|
|||
uptime = (time_t)time(NULL) - (time_t)worker->daemon->time_boot.tv_sec;
|
||||
if(!ssl_printf(ssl, "uptime: " ARG_LL "d seconds\n", (long long)uptime))
|
||||
return;
|
||||
if(!ssl_printf(ssl, "options:%s%s%s%s\n" ,
|
||||
if(!ssl_printf(ssl, "options:%s%s%s%s\n" ,
|
||||
(worker->daemon->reuseport?" reuseport":""),
|
||||
(worker->daemon->rc->accept_list?" control":""),
|
||||
(worker->daemon->rc->accept_list && worker->daemon->rc->use_cert?"(ssl)":""),
|
||||
|
|
@ -2353,7 +2353,7 @@ do_status(RES* ssl, struct worker* worker)
|
|||
|
||||
/** get age for the mesh state */
|
||||
static void
|
||||
get_mesh_age(struct mesh_state* m, char* buf, size_t len,
|
||||
get_mesh_age(struct mesh_state* m, char* buf, size_t len,
|
||||
struct module_env* env)
|
||||
{
|
||||
if(m->reply_list) {
|
||||
|
|
@ -2372,7 +2372,7 @@ get_mesh_age(struct mesh_state* m, char* buf, size_t len,
|
|||
|
||||
/** get status of a mesh state */
|
||||
static void
|
||||
get_mesh_status(struct mesh_area* mesh, struct mesh_state* m,
|
||||
get_mesh_status(struct mesh_area* mesh, struct mesh_state* m,
|
||||
char* buf, size_t len)
|
||||
{
|
||||
enum module_ext_state s = m->s.ext_state[m->s.curmod];
|
||||
|
|
@ -2394,7 +2394,7 @@ get_mesh_status(struct mesh_area* mesh, struct mesh_state* m,
|
|||
snprintf(buf, len, " ");
|
||||
l = strlen(buf);
|
||||
buf += l; len -= l;
|
||||
addr_to_str(&e->qsent->addr, e->qsent->addrlen,
|
||||
addr_to_str(&e->qsent->addr, e->qsent->addrlen,
|
||||
buf, len);
|
||||
l = strlen(buf);
|
||||
buf += l; len -= l;
|
||||
|
|
@ -2447,7 +2447,7 @@ do_dump_requestlist(RES* ssl, struct worker* worker)
|
|||
dname_str(m->s.qinfo.qname, buf);
|
||||
get_mesh_age(m, timebuf, sizeof(timebuf), &worker->env);
|
||||
get_mesh_status(mesh, m, statbuf, sizeof(statbuf));
|
||||
if(!ssl_printf(ssl, "%3d %4s %2s %s %s %s\n",
|
||||
if(!ssl_printf(ssl, "%3d %4s %2s %s %s %s\n",
|
||||
num, (t?t:"TYPE??"), (c?c:"CLASS??"), buf, timebuf,
|
||||
statbuf)) {
|
||||
free(t);
|
||||
|
|
@ -2637,7 +2637,7 @@ do_auth_zone_transfer(RES* ssl, struct worker* worker, char* arg)
|
|||
free(nm);
|
||||
send_ok(ssl);
|
||||
}
|
||||
|
||||
|
||||
/** do the set_option command */
|
||||
static void
|
||||
do_set_option(RES* ssl, struct worker* worker, char* arg)
|
||||
|
|
@ -2775,7 +2775,7 @@ do_list_local_zones(RES* ssl, struct local_zones* zones)
|
|||
RBTREE_FOR(z, struct local_zone*, &zones->ztree) {
|
||||
lock_rw_rdlock(&z->lock);
|
||||
dname_str(z->name, buf);
|
||||
if(!ssl_printf(ssl, "%s %s\n", buf,
|
||||
if(!ssl_printf(ssl, "%s %s\n", buf,
|
||||
local_zone_type2str(z->type))) {
|
||||
/* failure to print */
|
||||
lock_rw_unlock(&z->lock);
|
||||
|
|
@ -3004,7 +3004,7 @@ static void
|
|||
distribute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd)
|
||||
{
|
||||
int i;
|
||||
if(!cmd || !ssl)
|
||||
if(!cmd || !ssl)
|
||||
return;
|
||||
/* skip i=0 which is me */
|
||||
for(i=1; i<rc->worker->daemon->num; i++) {
|
||||
|
|
@ -3027,7 +3027,7 @@ cmdcmp(char* p, const char* cmd, size_t len)
|
|||
|
||||
/** execute a remote control command */
|
||||
static void
|
||||
execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
|
||||
execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
|
||||
struct worker* worker)
|
||||
{
|
||||
char* p = skipwhite(cmd);
|
||||
|
|
@ -3211,7 +3211,7 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
daemon_remote_exec(struct worker* worker)
|
||||
{
|
||||
/* read the cmd string */
|
||||
|
|
@ -3320,7 +3320,7 @@ remote_handshake_later(struct daemon_remote* rc, struct rc_state* s,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int remote_control_callback(struct comm_point* c, void* arg, int err,
|
||||
int remote_control_callback(struct comm_point* c, void* arg, int err,
|
||||
struct comm_reply* ATTR_UNUSED(rep))
|
||||
{
|
||||
RES res;
|
||||
|
|
@ -3328,7 +3328,7 @@ int remote_control_callback(struct comm_point* c, void* arg, int err,
|
|||
struct daemon_remote* rc = s->rc;
|
||||
int r;
|
||||
if(err != NETEVENT_NOERROR) {
|
||||
if(err==NETEVENT_TIMEOUT)
|
||||
if(err==NETEVENT_TIMEOUT)
|
||||
log_err("remote control timed out");
|
||||
clean_point(rc, s);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -116,8 +116,8 @@ void server_stats_log(struct ub_server_stats* stats, struct worker* worker,
|
|||
log_info("server stats for thread %d: %u queries, "
|
||||
"%u answers from cache, %u recursions, %u prefetch, %u rejected by "
|
||||
"ip ratelimiting",
|
||||
threadnum, (unsigned)stats->num_queries,
|
||||
(unsigned)(stats->num_queries -
|
||||
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,
|
||||
|
|
@ -279,7 +279,7 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset)
|
|||
s->svr.ans_rcode[i] += (long long)worker->env.mesh->ans_rcode[i];
|
||||
for(i=0; i<UB_STATS_RPZ_ACTION_NUM; i++)
|
||||
s->svr.rpz_action[i] += (long long)worker->env.mesh->rpz_action[i];
|
||||
timehist_export(worker->env.mesh->histogram, s->svr.hist,
|
||||
timehist_export(worker->env.mesh->histogram, s->svr.hist,
|
||||
NUM_BUCKETS_HIST);
|
||||
/* values from outside network */
|
||||
s->svr.unwanted_replies = (long long)worker->back->unwanted_replies;
|
||||
|
|
@ -421,7 +421,7 @@ void server_stats_reply(struct worker* worker, int reset)
|
|||
struct ub_stats_info s;
|
||||
server_stats_compile(worker, &s, reset);
|
||||
verbose(VERB_ALGO, "write stats replymsg");
|
||||
if(!tube_write_msg(worker->daemon->workers[0]->cmd,
|
||||
if(!tube_write_msg(worker->daemon->workers[0]->cmd,
|
||||
(uint8_t*)&s, sizeof(s), 0))
|
||||
fatal_exit("could not write stat values over cmd channel");
|
||||
}
|
||||
|
|
@ -516,7 +516,7 @@ void server_stats_insquery(struct ub_server_stats* stats, struct comm_point* c,
|
|||
if(c->ssl != NULL) {
|
||||
stats->qtls++;
|
||||
#ifdef HAVE_SSL
|
||||
if(SSL_session_reused(c->ssl))
|
||||
if(SSL_session_reused(c->ssl))
|
||||
stats->qtls_resume++;
|
||||
#endif
|
||||
if(c->type == comm_http)
|
||||
|
|
|
|||
156
daemon/worker.c
156
daemon/worker.c
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -112,7 +112,7 @@
|
|||
|
||||
/** Report on memory usage by this thread and global */
|
||||
static void
|
||||
worker_mem_report(struct worker* ATTR_UNUSED(worker),
|
||||
worker_mem_report(struct worker* ATTR_UNUSED(worker),
|
||||
struct serviced_query* ATTR_UNUSED(cur_serv))
|
||||
{
|
||||
#ifdef UNBOUND_ALLOC_STATS
|
||||
|
|
@ -125,7 +125,7 @@ worker_mem_report(struct worker* ATTR_UNUSED(worker),
|
|||
#ifdef CLIENT_SUBNET
|
||||
size_t subnet = 0;
|
||||
#endif /* CLIENT_SUBNET */
|
||||
if(verbosity < VERB_ALGO)
|
||||
if(verbosity < VERB_ALGO)
|
||||
return;
|
||||
front = listen_get_mem(worker->front);
|
||||
back = outnet_get_mem(worker->back);
|
||||
|
|
@ -154,10 +154,10 @@ worker_mem_report(struct worker* ATTR_UNUSED(worker),
|
|||
(&worker->env, i);
|
||||
}
|
||||
me = sizeof(*worker) + sizeof(*worker->base) + sizeof(*worker->comsig)
|
||||
+ comm_point_get_mem(worker->cmd_com)
|
||||
+ sizeof(worker->rndstate)
|
||||
+ regional_get_mem(worker->scratchpad)
|
||||
+ sizeof(*worker->env.scratch_buffer)
|
||||
+ comm_point_get_mem(worker->cmd_com)
|
||||
+ sizeof(worker->rndstate)
|
||||
+ regional_get_mem(worker->scratchpad)
|
||||
+ sizeof(*worker->env.scratch_buffer)
|
||||
+ sldns_buffer_capacity(worker->env.scratch_buffer)
|
||||
+ forwards_get_mem(worker->env.fwds)
|
||||
+ hints_get_mem(worker->env.hints);
|
||||
|
|
@ -172,7 +172,7 @@ worker_mem_report(struct worker* ATTR_UNUSED(worker),
|
|||
log_info("Memory conditions: %u front=%u back=%u mesh=%u msg=%u "
|
||||
"rrset=%u infra=%u iter=%u val=%u subnet=%u anchors=%u "
|
||||
"alloccache=%u globalalloccache=%u me=%u",
|
||||
(unsigned)total, (unsigned)front, (unsigned)back,
|
||||
(unsigned)total, (unsigned)front, (unsigned)back,
|
||||
(unsigned)mesh, (unsigned)msg, (unsigned)rrset, (unsigned)infra,
|
||||
(unsigned)iter, (unsigned)val,
|
||||
(unsigned)subnet, (unsigned)anch, (unsigned)ac,
|
||||
|
|
@ -181,13 +181,13 @@ worker_mem_report(struct worker* ATTR_UNUSED(worker),
|
|||
log_info("Memory conditions: %u front=%u back=%u mesh=%u msg=%u "
|
||||
"rrset=%u infra=%u iter=%u val=%u anchors=%u "
|
||||
"alloccache=%u globalalloccache=%u me=%u",
|
||||
(unsigned)total, (unsigned)front, (unsigned)back,
|
||||
(unsigned)mesh, (unsigned)msg, (unsigned)rrset,
|
||||
(unsigned)total, (unsigned)front, (unsigned)back,
|
||||
(unsigned)mesh, (unsigned)msg, (unsigned)rrset,
|
||||
(unsigned)infra, (unsigned)iter, (unsigned)val, (unsigned)anch,
|
||||
(unsigned)ac, (unsigned)superac, (unsigned)me);
|
||||
#endif /* CLIENT_SUBNET */
|
||||
log_info("Total heap memory estimate: %u total-alloc: %u "
|
||||
"total-free: %u", (unsigned)total,
|
||||
"total-free: %u", (unsigned)total,
|
||||
(unsigned)unbound_mem_alloc, (unsigned)unbound_mem_freed);
|
||||
#else /* no UNBOUND_ALLOC_STATS */
|
||||
size_t val = 0;
|
||||
|
|
@ -227,7 +227,7 @@ worker_mem_report(struct worker* ATTR_UNUSED(worker),
|
|||
#endif /* UNBOUND_ALLOC_STATS */
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
worker_send_cmd(struct worker* worker, enum worker_commands cmd)
|
||||
{
|
||||
uint32_t c = (uint32_t)htonl(cmd);
|
||||
|
|
@ -236,8 +236,8 @@ worker_send_cmd(struct worker* worker, enum worker_commands cmd)
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
worker_handle_service_reply(struct comm_point* c, void* arg, int error,
|
||||
int
|
||||
worker_handle_service_reply(struct comm_point* c, void* arg, int error,
|
||||
struct comm_reply* reply_info)
|
||||
{
|
||||
struct outbound_entry* e = (struct outbound_entry*)arg;
|
||||
|
|
@ -252,13 +252,13 @@ worker_handle_service_reply(struct comm_point* c, void* arg, int error,
|
|||
}
|
||||
/* sanity check. */
|
||||
if(!LDNS_QR_WIRE(sldns_buffer_begin(c->buffer))
|
||||
|| LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) !=
|
||||
|| LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) !=
|
||||
LDNS_PACKET_QUERY
|
||||
|| LDNS_QDCOUNT(sldns_buffer_begin(c->buffer)) > 1) {
|
||||
/* error becomes timeout for the module as if this reply
|
||||
* never arrived. */
|
||||
verbose(VERB_ALGO, "worker: bad reply handled as timeout");
|
||||
mesh_report_reply(worker->env.mesh, e, reply_info,
|
||||
mesh_report_reply(worker->env.mesh, e, reply_info,
|
||||
NETEVENT_TIMEOUT);
|
||||
worker_mem_report(worker, sq);
|
||||
return 0;
|
||||
|
|
@ -293,14 +293,14 @@ worker_err_ratelimit(struct worker* worker, int err)
|
|||
* @param worker: parameters for checking.
|
||||
* @return error code, 0 OK, or -1 discard.
|
||||
*/
|
||||
static int
|
||||
static int
|
||||
worker_check_request(sldns_buffer* pkt, struct worker* worker)
|
||||
{
|
||||
if(sldns_buffer_limit(pkt) < LDNS_HEADER_SIZE) {
|
||||
verbose(VERB_QUERY, "request too short, discarded");
|
||||
return -1;
|
||||
}
|
||||
if(sldns_buffer_limit(pkt) > NORMAL_UDP_SIZE &&
|
||||
if(sldns_buffer_limit(pkt) > NORMAL_UDP_SIZE &&
|
||||
worker->daemon->cfg->harden_large_queries) {
|
||||
verbose(VERB_QUERY, "request too large, discarded");
|
||||
return -1;
|
||||
|
|
@ -316,36 +316,36 @@ worker_check_request(sldns_buffer* pkt, struct worker* worker)
|
|||
}
|
||||
if(LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt)) != LDNS_PACKET_QUERY &&
|
||||
LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt)) != LDNS_PACKET_NOTIFY) {
|
||||
verbose(VERB_QUERY, "request unknown opcode %d",
|
||||
verbose(VERB_QUERY, "request unknown opcode %d",
|
||||
LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt)));
|
||||
return worker_err_ratelimit(worker, LDNS_RCODE_NOTIMPL);
|
||||
}
|
||||
if(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) != 1) {
|
||||
verbose(VERB_QUERY, "request wrong nr qd=%d",
|
||||
verbose(VERB_QUERY, "request wrong nr qd=%d",
|
||||
LDNS_QDCOUNT(sldns_buffer_begin(pkt)));
|
||||
return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR);
|
||||
}
|
||||
if(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) != 0 &&
|
||||
if(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) != 0 &&
|
||||
(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) != 1 ||
|
||||
LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt)) != LDNS_PACKET_NOTIFY)) {
|
||||
verbose(VERB_QUERY, "request wrong nr an=%d",
|
||||
verbose(VERB_QUERY, "request wrong nr an=%d",
|
||||
LDNS_ANCOUNT(sldns_buffer_begin(pkt)));
|
||||
return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR);
|
||||
}
|
||||
if(LDNS_NSCOUNT(sldns_buffer_begin(pkt)) != 0) {
|
||||
verbose(VERB_QUERY, "request wrong nr ns=%d",
|
||||
verbose(VERB_QUERY, "request wrong nr ns=%d",
|
||||
LDNS_NSCOUNT(sldns_buffer_begin(pkt)));
|
||||
return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR);
|
||||
}
|
||||
if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) > 1) {
|
||||
verbose(VERB_QUERY, "request wrong nr ar=%d",
|
||||
verbose(VERB_QUERY, "request wrong nr ar=%d",
|
||||
LDNS_ARCOUNT(sldns_buffer_begin(pkt)));
|
||||
return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* msg,
|
||||
size_t len, int error, void* arg)
|
||||
{
|
||||
|
|
@ -388,7 +388,7 @@ worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* msg,
|
|||
|
||||
/** check if a delegation is secure */
|
||||
static enum sec_status
|
||||
check_delegation_secure(struct reply_info *rep)
|
||||
check_delegation_secure(struct reply_info *rep)
|
||||
{
|
||||
/* return smallest security status */
|
||||
size_t i;
|
||||
|
|
@ -424,10 +424,10 @@ deleg_remove_nonsecure_additional(struct reply_info* rep)
|
|||
s = ((struct packed_rrset_data*)rep->rrsets[i]->entry.data)
|
||||
->security;
|
||||
if(s != sec_status_secure) {
|
||||
memmove(rep->rrsets+i, rep->rrsets+i+1,
|
||||
sizeof(struct ub_packed_rrset_key*)*
|
||||
memmove(rep->rrsets+i, rep->rrsets+i+1,
|
||||
sizeof(struct ub_packed_rrset_key*)*
|
||||
(rep->rrset_count - i - 1));
|
||||
rep->ar_numrrsets--;
|
||||
rep->ar_numrrsets--;
|
||||
rep->rrset_count--;
|
||||
i--;
|
||||
}
|
||||
|
|
@ -437,15 +437,15 @@ deleg_remove_nonsecure_additional(struct reply_info* rep)
|
|||
/** answer nonrecursive query from the cache */
|
||||
static int
|
||||
answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
|
||||
uint16_t id, uint16_t flags, struct comm_reply* repinfo,
|
||||
uint16_t id, uint16_t flags, struct comm_reply* repinfo,
|
||||
struct edns_data* edns)
|
||||
{
|
||||
/* for a nonrecursive query return either:
|
||||
* o an error (servfail; we try to avoid this)
|
||||
* o a delegation (closest we have; this routine tries that)
|
||||
* o the answer (checked by answer_from_cache)
|
||||
* o the answer (checked by answer_from_cache)
|
||||
*
|
||||
* So, grab a delegation from the rrset cache.
|
||||
* So, grab a delegation from the rrset cache.
|
||||
* Then check if it needs validation, if so, this routine fails,
|
||||
* so that iterator can prime and validator can verify rrsets.
|
||||
*/
|
||||
|
|
@ -457,7 +457,7 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
|
|||
struct dns_msg *msg = NULL;
|
||||
struct delegpt *dp;
|
||||
|
||||
dp = dns_cache_find_delegation(&worker->env, qinfo->qname,
|
||||
dp = dns_cache_find_delegation(&worker->env, qinfo->qname,
|
||||
qinfo->qname_len, qinfo->qtype, qinfo->qclass,
|
||||
worker->scratchpad, &msg, timenow, 0, NULL, 0);
|
||||
if(!dp) { /* no delegation, need to reprime */
|
||||
|
|
@ -470,7 +470,7 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
|
|||
if(must_validate) {
|
||||
switch(check_delegation_secure(msg->rep)) {
|
||||
case sec_status_unchecked:
|
||||
/* some rrsets have not been verified yet, go and
|
||||
/* some rrsets have not been verified yet, go and
|
||||
* let validator do that */
|
||||
return 0;
|
||||
case sec_status_bogus:
|
||||
|
|
@ -490,7 +490,7 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
|
|||
EDNS_OPT_LIST_APPEND_EDE(&edns->opt_list_out,
|
||||
worker->scratchpad, LDNS_EDE_DNSSEC_BOGUS, "");
|
||||
}
|
||||
error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
|
||||
error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
|
||||
&msg->qinfo, id, flags, edns);
|
||||
if(worker->stats.extended) {
|
||||
worker->stats.ans_bogus++;
|
||||
|
|
@ -529,7 +529,7 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
|
|||
LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad,
|
||||
worker->env.now_tv))
|
||||
edns->opt_list_inplace_cb_out = NULL;
|
||||
error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
|
||||
error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
|
||||
&msg->qinfo, id, flags, edns);
|
||||
}
|
||||
if(worker->stats.extended) {
|
||||
|
|
@ -763,7 +763,7 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
|
|||
return 1;
|
||||
|
||||
bail_out:
|
||||
rrset_array_unlock_touch(worker->env.rrset_cache,
|
||||
rrset_array_unlock_touch(worker->env.rrset_cache,
|
||||
worker->scratchpad, rep->ref, rep->rrset_count);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -947,12 +947,12 @@ answer_chaos(struct worker* w, struct query_info* qinfo,
|
|||
struct config_file* cfg = w->env.cfg;
|
||||
if(qinfo->qtype != LDNS_RR_TYPE_ANY && qinfo->qtype != LDNS_RR_TYPE_TXT)
|
||||
return 0;
|
||||
if(query_dname_compare(qinfo->qname,
|
||||
if(query_dname_compare(qinfo->qname,
|
||||
(uint8_t*)"\002id\006server") == 0 ||
|
||||
query_dname_compare(qinfo->qname,
|
||||
query_dname_compare(qinfo->qname,
|
||||
(uint8_t*)"\010hostname\004bind") == 0)
|
||||
{
|
||||
if(cfg->hide_identity)
|
||||
if(cfg->hide_identity)
|
||||
return 0;
|
||||
if(cfg->identity==NULL || cfg->identity[0]==0) {
|
||||
char buf[MAXHOSTNAMELEN+1];
|
||||
|
|
@ -967,12 +967,12 @@ answer_chaos(struct worker* w, struct query_info* qinfo,
|
|||
else chaos_replyonestr(pkt, cfg->identity, edns, w, repinfo);
|
||||
return 1;
|
||||
}
|
||||
if(query_dname_compare(qinfo->qname,
|
||||
if(query_dname_compare(qinfo->qname,
|
||||
(uint8_t*)"\007version\006server") == 0 ||
|
||||
query_dname_compare(qinfo->qname,
|
||||
query_dname_compare(qinfo->qname,
|
||||
(uint8_t*)"\007version\004bind") == 0)
|
||||
{
|
||||
if(cfg->hide_version)
|
||||
if(cfg->hide_version)
|
||||
return 0;
|
||||
if(cfg->version==NULL || cfg->version[0]==0)
|
||||
chaos_replyonestr(pkt, PACKAGE_STRING, edns, w, repinfo);
|
||||
|
|
@ -1131,7 +1131,7 @@ deny_refuse(struct comm_point* c, enum acl_access acl,
|
|||
return 1;
|
||||
}
|
||||
LDNS_QR_SET(sldns_buffer_begin(c->buffer));
|
||||
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
|
||||
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
|
||||
LDNS_RCODE_REFUSED);
|
||||
|
||||
sldns_buffer_skip(c->buffer, (ssize_t)sizeof(uint16_t)); /* skip qtype */
|
||||
|
|
@ -1146,7 +1146,7 @@ deny_refuse(struct comm_point* c, enum acl_access acl,
|
|||
/* Skip through the RR records */
|
||||
if(LDNS_ANCOUNT(sldns_buffer_begin(c->buffer)) != 0 ||
|
||||
LDNS_NSCOUNT(sldns_buffer_begin(c->buffer)) != 0) {
|
||||
if(!skip_pkt_rrs(c->buffer,
|
||||
if(!skip_pkt_rrs(c->buffer,
|
||||
((int)LDNS_ANCOUNT(sldns_buffer_begin(c->buffer)))+
|
||||
((int)LDNS_NSCOUNT(sldns_buffer_begin(c->buffer))))) {
|
||||
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
|
||||
|
|
@ -1416,7 +1416,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
|
|||
}
|
||||
sldns_buffer_rewind(c->buffer);
|
||||
LDNS_QR_SET(sldns_buffer_begin(c->buffer));
|
||||
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
|
||||
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
|
||||
LDNS_RCODE_FORMERR);
|
||||
goto send_reply;
|
||||
}
|
||||
|
|
@ -1425,21 +1425,21 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
|
|||
addr_to_str(&repinfo->client_addr, repinfo->client_addrlen, ip, sizeof(ip));
|
||||
log_query_in(ip, qinfo.qname, qinfo.qtype, qinfo.qclass);
|
||||
}
|
||||
if(qinfo.qtype == LDNS_RR_TYPE_AXFR ||
|
||||
if(qinfo.qtype == LDNS_RR_TYPE_AXFR ||
|
||||
qinfo.qtype == LDNS_RR_TYPE_IXFR) {
|
||||
verbose(VERB_ALGO, "worker request: refused zone transfer.");
|
||||
log_addr(VERB_CLIENT, "from", &repinfo->client_addr,
|
||||
repinfo->client_addrlen);
|
||||
sldns_buffer_rewind(c->buffer);
|
||||
LDNS_QR_SET(sldns_buffer_begin(c->buffer));
|
||||
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
|
||||
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
|
||||
LDNS_RCODE_REFUSED);
|
||||
if(worker->stats.extended) {
|
||||
worker->stats.qtype[qinfo.qtype]++;
|
||||
}
|
||||
goto send_reply;
|
||||
}
|
||||
if(qinfo.qtype == LDNS_RR_TYPE_OPT ||
|
||||
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 ||
|
||||
|
|
@ -1454,7 +1454,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
|
|||
}
|
||||
sldns_buffer_rewind(c->buffer);
|
||||
LDNS_QR_SET(sldns_buffer_begin(c->buffer));
|
||||
LDNS_RCODE_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]++;
|
||||
|
|
@ -1523,10 +1523,10 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
|
|||
repinfo->client_addrlen);
|
||||
LDNS_QR_SET(sldns_buffer_begin(c->buffer));
|
||||
LDNS_TC_SET(sldns_buffer_begin(c->buffer));
|
||||
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
|
||||
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
|
||||
LDNS_RCODE_SERVFAIL);
|
||||
sldns_buffer_set_position(c->buffer, LDNS_HEADER_SIZE);
|
||||
sldns_buffer_write_at(c->buffer, 4,
|
||||
sldns_buffer_write_at(c->buffer, 4,
|
||||
(uint8_t*)"\0\0\0\0\0\0\0\0", 8);
|
||||
sldns_buffer_flip(c->buffer);
|
||||
regional_free_all(worker->scratchpad);
|
||||
|
|
@ -1745,8 +1745,8 @@ lookup_cache:
|
|||
|
||||
if(!LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) {
|
||||
if(answer_norec_from_cache(worker, &qinfo,
|
||||
*(uint16_t*)(void *)sldns_buffer_begin(c->buffer),
|
||||
sldns_buffer_read_u16_at(c->buffer, 2), repinfo,
|
||||
*(uint16_t*)(void *)sldns_buffer_begin(c->buffer),
|
||||
sldns_buffer_read_u16_at(c->buffer, 2), repinfo,
|
||||
&edns)) {
|
||||
regional_free_all(worker->scratchpad);
|
||||
goto send_reply;
|
||||
|
|
@ -1825,10 +1825,10 @@ send_reply_rc:
|
|||
return rc;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
worker_sighandler(int sig, void* arg)
|
||||
{
|
||||
/* note that log, print, syscalls here give race conditions.
|
||||
/* note that log, print, syscalls here give race conditions.
|
||||
* And cause hangups if the log-lock is held by the application. */
|
||||
struct worker* worker = (struct worker*)arg;
|
||||
switch(sig) {
|
||||
|
|
@ -1903,13 +1903,13 @@ void worker_probe_timer_cb(void* arg)
|
|||
comm_timer_set(worker->env.probe_timer, &tv);
|
||||
}
|
||||
|
||||
struct worker*
|
||||
struct worker*
|
||||
worker_create(struct daemon* daemon, int id, int* ports, int n)
|
||||
{
|
||||
unsigned int seed;
|
||||
struct worker* worker = (struct worker*)calloc(1,
|
||||
struct worker* worker = (struct worker*)calloc(1,
|
||||
sizeof(struct worker));
|
||||
if(!worker)
|
||||
if(!worker)
|
||||
return NULL;
|
||||
worker->numports = n;
|
||||
worker->ports = (int*)memdup(ports, sizeof(int)*n);
|
||||
|
|
@ -1937,7 +1937,7 @@ worker_create(struct daemon* daemon, int id, int* ports, int n)
|
|||
}
|
||||
|
||||
int
|
||||
worker_init(struct worker* worker, struct config_file *cfg,
|
||||
worker_init(struct worker* worker, struct config_file *cfg,
|
||||
struct listen_port* ports, int do_sigs)
|
||||
{
|
||||
#ifdef USE_DNSTAP
|
||||
|
|
@ -1970,9 +1970,9 @@ worker_init(struct worker* worker, struct config_file *cfg,
|
|||
#endif
|
||||
ub_thread_sig_unblock(SIGTERM);
|
||||
#ifndef LIBEVENT_SIGNAL_PROBLEM
|
||||
worker->comsig = comm_signal_create(worker->base,
|
||||
worker->comsig = comm_signal_create(worker->base,
|
||||
worker_sighandler, worker);
|
||||
if(!worker->comsig
|
||||
if(!worker->comsig
|
||||
#ifdef SIGHUP
|
||||
|| !comm_signal_bind(worker->comsig, SIGHUP)
|
||||
#endif
|
||||
|
|
@ -1989,7 +1989,7 @@ worker_init(struct worker* worker, struct config_file *cfg,
|
|||
return 0;
|
||||
}
|
||||
#endif /* LIBEVENT_SIGNAL_PROBLEM */
|
||||
if(!daemon_remote_open_accept(worker->daemon->rc,
|
||||
if(!daemon_remote_open_accept(worker->daemon->rc,
|
||||
worker->daemon->rc_ports, worker)) {
|
||||
worker_delete(worker);
|
||||
return 0;
|
||||
|
|
@ -2023,8 +2023,8 @@ worker_init(struct worker* worker, struct config_file *cfg,
|
|||
return 0;
|
||||
}
|
||||
worker->back = outside_network_create(worker->base,
|
||||
cfg->msg_buffer_size, (size_t)cfg->outgoing_num_ports,
|
||||
cfg->out_ifs, cfg->num_out_ifs, cfg->do_ip4, cfg->do_ip6,
|
||||
cfg->msg_buffer_size, (size_t)cfg->outgoing_num_ports,
|
||||
cfg->out_ifs, cfg->num_out_ifs, cfg->do_ip4, cfg->do_ip6,
|
||||
cfg->do_tcp?cfg->outgoing_num_tcp:0, cfg->ip_dscp,
|
||||
worker->daemon->env->infra_cache, worker->rndstate,
|
||||
cfg->use_caps_bits_for_id, worker->ports, worker->numports,
|
||||
|
|
@ -2049,13 +2049,13 @@ worker_init(struct worker* worker, struct config_file *cfg,
|
|||
worker_delete(worker);
|
||||
return 0;
|
||||
}
|
||||
worker->stat_timer = comm_timer_create(worker->base,
|
||||
worker->stat_timer = comm_timer_create(worker->base,
|
||||
worker_stat_timer_cb, worker);
|
||||
if(!worker->stat_timer) {
|
||||
log_err("could not create statistics timer");
|
||||
}
|
||||
|
||||
/* we use the msg_buffer_size as a good estimate for what the
|
||||
/* we use the msg_buffer_size as a good estimate for what the
|
||||
* user wants for memory usage sizes */
|
||||
worker->scratchpad = regional_create_custom(cfg->msg_buffer_size);
|
||||
if(!worker->scratchpad) {
|
||||
|
|
@ -2164,23 +2164,23 @@ worker_init(struct worker* worker, struct config_file *cfg,
|
|||
worker_mem_report(worker, NULL);
|
||||
/* if statistics enabled start timer */
|
||||
if(worker->env.cfg->stat_interval > 0) {
|
||||
verbose(VERB_ALGO, "set statistics interval %d secs",
|
||||
verbose(VERB_ALGO, "set statistics interval %d secs",
|
||||
worker->env.cfg->stat_interval);
|
||||
worker_restart_timer(worker);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
worker_work(struct worker* worker)
|
||||
{
|
||||
comm_base_dispatch(worker->base);
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
worker_delete(struct worker* worker)
|
||||
{
|
||||
if(!worker)
|
||||
if(!worker)
|
||||
return;
|
||||
if(worker->env.mesh && verbosity >= VERB_OPS) {
|
||||
server_stats_log(&worker->stats, worker, worker->thread_num);
|
||||
|
|
@ -2232,7 +2232,7 @@ worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec,
|
|||
struct worker* worker = q->env->worker;
|
||||
struct outbound_entry* e = (struct outbound_entry*)regional_alloc(
|
||||
q->region, sizeof(*e));
|
||||
if(!e)
|
||||
if(!e)
|
||||
return NULL;
|
||||
e->qstate = q;
|
||||
e->qsent = outnet_serviced_query(worker->back, qinfo, flags, dnssec,
|
||||
|
|
@ -2246,7 +2246,7 @@ worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec,
|
|||
return e;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
worker_alloc_cleanup(void* arg)
|
||||
{
|
||||
struct worker* worker = (struct worker*)arg;
|
||||
|
|
@ -2294,7 +2294,7 @@ struct outbound_entry* libworker_send_query(
|
|||
return 0;
|
||||
}
|
||||
|
||||
int libworker_handle_service_reply(struct comm_point* ATTR_UNUSED(c),
|
||||
int libworker_handle_service_reply(struct comm_point* ATTR_UNUSED(c),
|
||||
void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
|
||||
struct comm_reply* ATTR_UNUSED(reply_info))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
/**
|
||||
* \file
|
||||
*
|
||||
* This file contains functions to resolve DNS queries and
|
||||
* This file contains functions to resolve DNS queries and
|
||||
* validate the answers. Synchronously and asynchronously.
|
||||
*
|
||||
* Several ways to use this interface from an application wishing
|
||||
|
|
@ -65,7 +65,7 @@
|
|||
* ... or process() calls my_callback() with results.
|
||||
*
|
||||
* ... if the application has nothing more to do, wait for answer
|
||||
* ub_wait(ctx);
|
||||
* ub_wait(ctx);
|
||||
*
|
||||
* Application threaded. Blocking.
|
||||
* Blocking, same as above. The current thread does the work.
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
* CRYPTO_set_id_callback and CRYPTO_set_locking_callback.
|
||||
*
|
||||
* If no threading is compiled in, the above async example uses fork(2) to
|
||||
* create a process to perform the work. The forked process exits when the
|
||||
* create a process to perform the work. The forked process exits when the
|
||||
* calling process exits, or ctx_delete() is called.
|
||||
* Otherwise, for asynchronous with threading, a worker thread is created.
|
||||
*
|
||||
|
|
@ -128,10 +128,10 @@ struct ub_result {
|
|||
/** the class asked for */
|
||||
int qclass;
|
||||
|
||||
/**
|
||||
* a list of network order DNS rdata items, terminated with a
|
||||
/**
|
||||
* a list of network order DNS rdata items, terminated with a
|
||||
* NULL pointer, so that data[0] is the first result entry,
|
||||
* data[1] the second, and the last entry is NULL.
|
||||
* data[1] the second, and the last entry is NULL.
|
||||
* If there was no data, data[0] is NULL.
|
||||
*/
|
||||
char** data;
|
||||
|
|
@ -139,8 +139,8 @@ struct ub_result {
|
|||
/** the length in bytes of the data items, len[i] for data[i] */
|
||||
int* len;
|
||||
|
||||
/**
|
||||
* canonical name for the result (the final cname).
|
||||
/**
|
||||
* canonical name for the result (the final cname).
|
||||
* zero terminated string.
|
||||
* May be NULL if no canonical name exists.
|
||||
*/
|
||||
|
|
@ -165,9 +165,9 @@ struct ub_result {
|
|||
*/
|
||||
int havedata;
|
||||
|
||||
/**
|
||||
/**
|
||||
* If there was no data, and the domain did not exist, this is true.
|
||||
* If it is false, and there was no data, then the domain name
|
||||
* If it is false, and there was no data, then the domain name
|
||||
* is purported to exist, but the requested data type is not available.
|
||||
*/
|
||||
int nxdomain;
|
||||
|
|
@ -182,19 +182,19 @@ struct ub_result {
|
|||
*/
|
||||
int secure;
|
||||
|
||||
/**
|
||||
* If the result was not secure (secure==0), and this result is due
|
||||
/**
|
||||
* If the result was not secure (secure==0), and this result is due
|
||||
* to a security failure, bogus is true.
|
||||
* This means the data has been actively tampered with, signatures
|
||||
* failed, expected signatures were not present, timestamps on
|
||||
* failed, expected signatures were not present, timestamps on
|
||||
* signatures were out of date and so on.
|
||||
*
|
||||
* If !secure and !bogus, this can happen if the data is not secure
|
||||
* because security is disabled for that domain name.
|
||||
* If !secure and !bogus, this can happen if the data is not secure
|
||||
* because security is disabled for that domain name.
|
||||
* This means the data is from a domain where data is not signed.
|
||||
*/
|
||||
int bogus;
|
||||
|
||||
|
||||
/**
|
||||
* If the result is bogus this contains a string (zero terminated)
|
||||
* that describes the failure. There may be other errors as well
|
||||
|
|
@ -222,7 +222,7 @@ struct ub_result {
|
|||
* The readable function definition looks like:
|
||||
* void my_callback(void* my_arg, int err, struct ub_result* result);
|
||||
* It is called with
|
||||
* void* my_arg: your pointer to a (struct of) data of your choice,
|
||||
* void* my_arg: your pointer to a (struct of) data of your choice,
|
||||
* or NULL.
|
||||
* int err: if 0 all is OK, otherwise an error occurred and no results
|
||||
* are forthcoming.
|
||||
|
|
@ -301,8 +301,8 @@ int ub_ctx_set_option(struct ub_ctx* ctx, const char* opt, const char* val);
|
|||
* This is a power-users interface that lets you specify all sorts
|
||||
* of options.
|
||||
* @param str: the string is malloced and returned here. NULL on error.
|
||||
* The caller must free() the string. In cases with multiple
|
||||
* entries (auto-trust-anchor-file), a newline delimited list is
|
||||
* The caller must free() the string. In cases with multiple
|
||||
* entries (auto-trust-anchor-file), a newline delimited list is
|
||||
* returned in the string.
|
||||
* @return 0 if OK else an error code (malloc failure, syntax error).
|
||||
*/
|
||||
|
|
@ -321,10 +321,10 @@ int ub_ctx_get_option(struct ub_ctx* ctx, const char* opt, char** str);
|
|||
int ub_ctx_config(struct ub_ctx* ctx, const char* fname);
|
||||
|
||||
/**
|
||||
* Set machine to forward DNS queries to, the caching resolver to use.
|
||||
* IP4 or IP6 address. Forwards all DNS requests to that machine, which
|
||||
* is expected to run a recursive resolver. If the proxy is not
|
||||
* DNSSEC-capable, validation may fail. Can be called several times, in
|
||||
* Set machine to forward DNS queries to, the caching resolver to use.
|
||||
* IP4 or IP6 address. Forwards all DNS requests to that machine, which
|
||||
* is expected to run a recursive resolver. If the proxy is not
|
||||
* DNSSEC-capable, validation may fail. Can be called several times, in
|
||||
* that case the addresses are used as backup servers.
|
||||
*
|
||||
* To read the list of nameservers from /etc/resolv.conf (from DHCP or so),
|
||||
|
|
@ -389,7 +389,7 @@ int ub_ctx_resolvconf(struct ub_ctx* ctx, const char* fname);
|
|||
|
||||
/**
|
||||
* Read list of hosts from the filename given.
|
||||
* Usually "/etc/hosts".
|
||||
* Usually "/etc/hosts".
|
||||
* These addresses are not flagged as DNSSEC secure when queried for.
|
||||
*
|
||||
* @param ctx: context.
|
||||
|
|
@ -403,7 +403,7 @@ int ub_ctx_hosts(struct ub_ctx* ctx, const char* fname);
|
|||
/**
|
||||
* Add a trust anchor to the given context.
|
||||
* The trust anchor is a string, on one line, that holds a valid DNSKEY or
|
||||
* DS RR.
|
||||
* DS RR.
|
||||
* @param ctx: context.
|
||||
* At this time it is only possible to add trusted keys before the
|
||||
* first resolve is done.
|
||||
|
|
@ -465,7 +465,7 @@ int ub_ctx_debugout(struct ub_ctx* ctx, void* out);
|
|||
* Set debug verbosity for the context
|
||||
* Output is directed to stderr.
|
||||
* @param ctx: context.
|
||||
* @param d: debug level, 0 is off, 1 is very minimal, 2 is detailed,
|
||||
* @param d: debug level, 0 is off, 1 is very minimal, 2 is detailed,
|
||||
* and 3 is lots.
|
||||
* @return 0 if OK, else error.
|
||||
*/
|
||||
|
|
@ -474,10 +474,10 @@ int ub_ctx_debuglevel(struct ub_ctx* ctx, int d);
|
|||
/**
|
||||
* Set a context behaviour for asynchronous action.
|
||||
* @param ctx: context.
|
||||
* @param dothread: if true, enables threading and a call to resolve_async()
|
||||
* @param dothread: if true, enables threading and a call to resolve_async()
|
||||
* creates a thread to handle work in the background.
|
||||
* If false, a process is forked to handle work in the background.
|
||||
* Changes to this setting after async() calls have been made have
|
||||
* Changes to this setting after async() calls have been made have
|
||||
* no effect (delete and re-create the context to change).
|
||||
* @return 0 if OK, else error.
|
||||
*/
|
||||
|
|
@ -495,7 +495,7 @@ int ub_poll(struct ub_ctx* ctx);
|
|||
|
||||
/**
|
||||
* Wait for a context to finish with results. Calls ub_process() after
|
||||
* the wait for you. After the wait, there are no more outstanding
|
||||
* the wait for you. After the wait, there are no more outstanding
|
||||
* asynchronous queries.
|
||||
* @param ctx: context.
|
||||
* @return: 0 if OK, else error.
|
||||
|
|
@ -530,11 +530,11 @@ int ub_process(struct ub_ctx* ctx);
|
|||
* @param rrtype: type of RR in host order, 1 is A (address).
|
||||
* @param rrclass: class of RR in host order, 1 is IN (for internet).
|
||||
* @param result: the result data is returned in a newly allocated result
|
||||
* structure. May be NULL on return, return value is set to an error
|
||||
* structure. May be NULL on return, return value is set to an error
|
||||
* in that case (out of memory).
|
||||
* @return 0 if OK, else error.
|
||||
*/
|
||||
int ub_resolve(struct ub_ctx* ctx, const char* name, int rrtype,
|
||||
int ub_resolve(struct ub_ctx* ctx, const char* name, int rrtype,
|
||||
int rrclass, struct ub_result** result);
|
||||
|
||||
/**
|
||||
|
|
@ -561,11 +561,11 @@ int ub_resolve(struct ub_ctx* ctx, const char* name, int rrtype,
|
|||
* If an error happens during processing, your callback will be called
|
||||
* with error set to a nonzero value (and result==NULL).
|
||||
* @param async_id: if you pass a non-NULL value, an identifier number is
|
||||
* returned for the query as it is in progress. It can be used to
|
||||
* returned for the query as it is in progress. It can be used to
|
||||
* cancel the query.
|
||||
* @return 0 if OK, else error.
|
||||
*/
|
||||
int ub_resolve_async(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_type callback, int* async_id);
|
||||
|
||||
/**
|
||||
|
|
@ -589,7 +589,7 @@ int ub_cancel(struct ub_ctx* ctx, int async_id);
|
|||
*/
|
||||
void ub_resolve_free(struct ub_result* result);
|
||||
|
||||
/**
|
||||
/**
|
||||
* Convert error value to a human readable string.
|
||||
* @param err: error code from one of the libunbound functions.
|
||||
* The error codes are from the type enum ub_ctx_err.
|
||||
|
|
@ -605,7 +605,7 @@ const char* ub_strerror(int err);
|
|||
int ub_ctx_print_local_zones(struct ub_ctx* ctx);
|
||||
|
||||
/**
|
||||
* Add a new zone with the zonetype to the local authority info of the
|
||||
* Add a new zone with the zonetype to the local authority info of the
|
||||
* library.
|
||||
* @param ctx: context. Is finalized by the routine.
|
||||
* @param zone_name: name of the zone in text, "example.com"
|
||||
|
|
@ -613,7 +613,7 @@ int ub_ctx_print_local_zones(struct ub_ctx* ctx);
|
|||
* @param zone_type: type of the zone (like for unbound.conf) in text.
|
||||
* @return 0 if OK, else error.
|
||||
*/
|
||||
int ub_ctx_zone_add(struct ub_ctx* ctx, const char *zone_name,
|
||||
int ub_ctx_zone_add(struct ub_ctx* ctx, const char *zone_name,
|
||||
const char *zone_type);
|
||||
|
||||
/**
|
||||
|
|
@ -649,7 +649,7 @@ int ub_ctx_data_remove(struct ub_ctx* ctx, const char *data);
|
|||
*/
|
||||
const char* ub_version(void);
|
||||
|
||||
/**
|
||||
/**
|
||||
* Some global statistics that are not in struct stats_info,
|
||||
* this struct is shared on a shm segment (shm-key in unbound.conf)
|
||||
*/
|
||||
|
|
@ -701,7 +701,7 @@ struct ub_server_stats {
|
|||
long long num_queries_prefetch;
|
||||
|
||||
/**
|
||||
* Sum of the querylistsize of the worker for
|
||||
* Sum of the querylistsize of the worker for
|
||||
* every query that missed cache. To calculate average.
|
||||
*/
|
||||
long long sum_query_list_size;
|
||||
|
|
@ -773,12 +773,12 @@ struct ub_server_stats {
|
|||
long long tcp_accept_usage;
|
||||
/** expired answers served from cache */
|
||||
long long ans_expired;
|
||||
/** histogram data exported to array
|
||||
/** histogram data exported to array
|
||||
* if the array is the same size, no data is lost, and
|
||||
* if all histograms are same size (is so by default) then
|
||||
* adding up works well. */
|
||||
long long hist[UB_STATS_BUCKET_NUM];
|
||||
|
||||
|
||||
/** number of message cache entries */
|
||||
long long msg_cache_count;
|
||||
/** number of rrset cache entries */
|
||||
|
|
@ -836,7 +836,7 @@ struct ub_server_stats {
|
|||
long long rpz_action[UB_STATS_RPZ_ACTION_NUM];
|
||||
};
|
||||
|
||||
/**
|
||||
/**
|
||||
* Statistics to send over the control pipe when asked
|
||||
* This struct is made to be memcopied, sent in binary.
|
||||
* shm mapped with (number+1) at num_threads+1, with first as total
|
||||
|
|
|
|||
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
#endif
|
||||
|
||||
/** number of queued TCP connections for listen() */
|
||||
#define TCP_BACKLOG 256
|
||||
#define TCP_BACKLOG 256
|
||||
|
||||
#ifndef THREADS_DISABLED
|
||||
/** lock on the counter of stream buffer memory */
|
||||
|
|
@ -187,7 +187,7 @@ systemd_get_activated(int family, int socktype, int listen,
|
|||
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;
|
||||
|
|
@ -253,7 +253,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
return -1;
|
||||
}
|
||||
#else
|
||||
if(WSAGetLastError() == WSAEAFNOSUPPORT ||
|
||||
if(WSAGetLastError() == WSAEAFNOSUPPORT ||
|
||||
WSAGetLastError() == WSAEPROTONOSUPPORT) {
|
||||
*noproto = 1;
|
||||
return -1;
|
||||
|
|
@ -270,7 +270,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
#endif
|
||||
if(listen) {
|
||||
#ifdef SO_REUSEADDR
|
||||
if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on,
|
||||
if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on,
|
||||
(socklen_t)sizeof(on)) < 0) {
|
||||
log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s",
|
||||
sock_strerror(errno));
|
||||
|
|
@ -368,9 +368,9 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
socklen_t slen = (socklen_t)sizeof(got);
|
||||
# ifdef SO_RCVBUFFORCE
|
||||
/* Linux specific: try to use root permission to override
|
||||
* system limits on rcvbuf. The limit is stored in
|
||||
* system limits on rcvbuf. The limit is stored in
|
||||
* /proc/sys/net/core/rmem_max or sysctl net.core.rmem_max */
|
||||
if(setsockopt(s, SOL_SOCKET, SO_RCVBUFFORCE, (void*)&rcv,
|
||||
if(setsockopt(s, SOL_SOCKET, SO_RCVBUFFORCE, (void*)&rcv,
|
||||
(socklen_t)sizeof(rcv)) < 0) {
|
||||
if(errno != EPERM) {
|
||||
log_err("setsockopt(..., SO_RCVBUFFORCE, "
|
||||
|
|
@ -381,7 +381,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
return -1;
|
||||
}
|
||||
# endif /* SO_RCVBUFFORCE */
|
||||
if(setsockopt(s, SOL_SOCKET, SO_RCVBUF, (void*)&rcv,
|
||||
if(setsockopt(s, SOL_SOCKET, SO_RCVBUF, (void*)&rcv,
|
||||
(socklen_t)sizeof(rcv)) < 0) {
|
||||
log_err("setsockopt(..., SO_RCVBUF, "
|
||||
"...) failed: %s", sock_strerror(errno));
|
||||
|
|
@ -392,7 +392,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
}
|
||||
/* check if we got the right thing or if system
|
||||
* reduced to some system max. Warn if so */
|
||||
if(getsockopt(s, SOL_SOCKET, SO_RCVBUF, (void*)&got,
|
||||
if(getsockopt(s, SOL_SOCKET, SO_RCVBUF, (void*)&got,
|
||||
&slen) >= 0 && got < rcv/2) {
|
||||
log_warn("so-rcvbuf %u was not granted. "
|
||||
"Got %u. To fix: start with "
|
||||
|
|
@ -413,9 +413,9 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
socklen_t slen = (socklen_t)sizeof(got);
|
||||
# ifdef SO_SNDBUFFORCE
|
||||
/* Linux specific: try to use root permission to override
|
||||
* system limits on sndbuf. The limit is stored in
|
||||
* system limits on sndbuf. The limit is stored in
|
||||
* /proc/sys/net/core/wmem_max or sysctl net.core.wmem_max */
|
||||
if(setsockopt(s, SOL_SOCKET, SO_SNDBUFFORCE, (void*)&snd,
|
||||
if(setsockopt(s, SOL_SOCKET, SO_SNDBUFFORCE, (void*)&snd,
|
||||
(socklen_t)sizeof(snd)) < 0) {
|
||||
if(errno != EPERM) {
|
||||
log_err("setsockopt(..., SO_SNDBUFFORCE, "
|
||||
|
|
@ -426,7 +426,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
return -1;
|
||||
}
|
||||
# endif /* SO_SNDBUFFORCE */
|
||||
if(setsockopt(s, SOL_SOCKET, SO_SNDBUF, (void*)&snd,
|
||||
if(setsockopt(s, SOL_SOCKET, SO_SNDBUF, (void*)&snd,
|
||||
(socklen_t)sizeof(snd)) < 0) {
|
||||
log_err("setsockopt(..., SO_SNDBUF, "
|
||||
"...) failed: %s", sock_strerror(errno));
|
||||
|
|
@ -437,7 +437,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
}
|
||||
/* check if we got the right thing or if system
|
||||
* reduced to some system max. Warn if so */
|
||||
if(getsockopt(s, SOL_SOCKET, SO_SNDBUF, (void*)&got,
|
||||
if(getsockopt(s, SOL_SOCKET, SO_SNDBUF, (void*)&got,
|
||||
&slen) >= 0 && got < snd/2) {
|
||||
log_warn("so-sndbuf %u was not granted. "
|
||||
"Got %u. To fix: start with "
|
||||
|
|
@ -469,7 +469,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
# endif
|
||||
) {
|
||||
int val=(v6only==2)?0:1;
|
||||
if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
|
||||
if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
|
||||
(void*)&val, (socklen_t)sizeof(val)) < 0) {
|
||||
log_err("setsockopt(..., IPV6_V6ONLY"
|
||||
", ...) failed: %s", sock_strerror(errno));
|
||||
|
|
@ -576,7 +576,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
int action;
|
||||
# if defined(IP_PMTUDISC_OMIT)
|
||||
action = IP_PMTUDISC_OMIT;
|
||||
if (setsockopt(s, IPPROTO_IP, IP_MTU_DISCOVER,
|
||||
if (setsockopt(s, IPPROTO_IP, IP_MTU_DISCOVER,
|
||||
&action, (socklen_t)sizeof(action)) < 0) {
|
||||
|
||||
if (errno != EINVAL) {
|
||||
|
|
@ -609,7 +609,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
/* the IP_DONTFRAG option if defined in the 11.0 OSX headers,
|
||||
* but does not work on that version, so we exclude it */
|
||||
int off = 0;
|
||||
if (setsockopt(s, IPPROTO_IP, IP_DONTFRAG,
|
||||
if (setsockopt(s, IPPROTO_IP, IP_DONTFRAG,
|
||||
&off, (socklen_t)sizeof(off)) < 0) {
|
||||
log_err("setsockopt(..., IP_DONTFRAG, ...) failed: %s",
|
||||
strerror(errno));
|
||||
|
|
@ -647,7 +647,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
|
|||
if(WSAGetLastError() != WSAEADDRINUSE &&
|
||||
WSAGetLastError() != WSAEADDRNOTAVAIL &&
|
||||
!(WSAGetLastError() == WSAEACCES && verbosity < 4 && !listen)) {
|
||||
log_err_addr("can't bind socket",
|
||||
log_err_addr("can't bind socket",
|
||||
wsa_strerror(WSAGetLastError()),
|
||||
(struct sockaddr_storage*)addr, addrlen);
|
||||
}
|
||||
|
|
@ -749,7 +749,7 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
|
|||
}
|
||||
#endif
|
||||
#ifdef SO_REUSEADDR
|
||||
if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on,
|
||||
if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on,
|
||||
(socklen_t)sizeof(on)) < 0) {
|
||||
log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s",
|
||||
sock_strerror(errno));
|
||||
|
|
@ -793,7 +793,7 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
|
|||
&& !got_fd_from_systemd
|
||||
# endif
|
||||
) {
|
||||
if(setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
|
||||
if(setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
|
||||
(void*)&on, (socklen_t)sizeof(on)) < 0) {
|
||||
log_err("setsockopt(..., IPV6_V6ONLY, ...) failed: %s",
|
||||
sock_strerror(errno));
|
||||
|
|
@ -845,7 +845,7 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
|
|||
addr->ai_addrlen);
|
||||
}
|
||||
#else
|
||||
log_err_addr("can't bind socket",
|
||||
log_err_addr("can't bind socket",
|
||||
wsa_strerror(WSAGetLastError()),
|
||||
(struct sockaddr_storage*)addr->ai_addr,
|
||||
addr->ai_addrlen);
|
||||
|
|
@ -873,7 +873,7 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
|
|||
/* 5 is recommended on linux */
|
||||
qlen = 5;
|
||||
#endif
|
||||
if ((setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN, &qlen,
|
||||
if ((setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN, &qlen,
|
||||
sizeof(qlen))) == -1 ) {
|
||||
#ifdef ENOPROTOOPT
|
||||
/* squelch ENOPROTOOPT: freebsd server mode with kernel support
|
||||
|
|
@ -999,7 +999,7 @@ err:
|
|||
* Create socket from getaddrinfo results
|
||||
*/
|
||||
static int
|
||||
make_sock(int stype, const char* ifname, const char* port,
|
||||
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 nodelay, int freebind,
|
||||
int use_systemd, int dscp, struct unbound_socket* ub_sock)
|
||||
|
|
@ -1015,7 +1015,7 @@ make_sock(int stype, const char* ifname, const char* port,
|
|||
return -1;
|
||||
}
|
||||
#endif
|
||||
log_err("node %s:%s getaddrinfo: %s %s",
|
||||
log_err("node %s:%s getaddrinfo: %s %s",
|
||||
ifname?ifname:"default", port, gai_strerror(r),
|
||||
#ifdef EAI_SYSTEM
|
||||
(r==EAI_SYSTEM?(char*)strerror(errno):"")
|
||||
|
|
@ -1055,7 +1055,7 @@ make_sock(int stype, const char* ifname, const char* port,
|
|||
|
||||
/** make socket and first see if ifname contains port override info */
|
||||
static int
|
||||
make_sock_port(int stype, const char* ifname, const char* port,
|
||||
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 nodelay, int freebind,
|
||||
int use_systemd, int dscp, struct unbound_socket* ub_sock)
|
||||
|
|
@ -1116,7 +1116,7 @@ port_insert(struct listen_port** list, int s, enum listen_type ftype,
|
|||
|
||||
/** set fd to receive source address packet info */
|
||||
static int
|
||||
set_recvpktinfo(int s, int family)
|
||||
set_recvpktinfo(int s, int family)
|
||||
{
|
||||
#if defined(IPV6_RECVPKTINFO) || defined(IPV6_PKTINFO) || (defined(IP_RECVDSTADDR) && defined(IP_SENDSRCADDR)) || defined(IP_PKTINFO)
|
||||
int on = 1;
|
||||
|
|
@ -1345,7 +1345,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
|
|||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Add items to commpoint list in front.
|
||||
* @param c: commpoint to add.
|
||||
* @param front: listen struct.
|
||||
|
|
@ -1396,7 +1396,7 @@ void listen_desetup_locks(void)
|
|||
}
|
||||
}
|
||||
|
||||
struct listen_dnsport*
|
||||
struct listen_dnsport*
|
||||
listen_create(struct comm_base* base, struct listen_port* ports,
|
||||
size_t bufsize, int tcp_accept_count, int tcp_idle_timeout,
|
||||
int harden_large_queries, uint32_t http_max_streams,
|
||||
|
|
@ -1532,10 +1532,10 @@ listen_list_delete(struct listen_list* list)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
listen_delete(struct listen_dnsport* front)
|
||||
{
|
||||
if(!front)
|
||||
if(!front)
|
||||
return;
|
||||
listen_list_delete(front->cps);
|
||||
#ifdef USE_DNSCRYPT
|
||||
|
|
@ -1927,8 +1927,8 @@ void listening_ports_free(struct listen_port* list)
|
|||
size_t listen_get_mem(struct listen_dnsport* listen)
|
||||
{
|
||||
struct listen_list* p;
|
||||
size_t s = sizeof(*listen) + sizeof(*listen->base) +
|
||||
sizeof(*listen->udp_buff) +
|
||||
size_t s = sizeof(*listen) + sizeof(*listen->base) +
|
||||
sizeof(*listen->udp_buff) +
|
||||
sldns_buffer_capacity(listen->udp_buff);
|
||||
#ifdef USE_DNSCRYPT
|
||||
s += sizeof(*listen->dnscrypt_udp_buff);
|
||||
|
|
@ -2009,7 +2009,7 @@ void tcp_req_info_clear(struct tcp_req_info* req)
|
|||
}
|
||||
req->open_req_list = NULL;
|
||||
req->num_open_req = 0;
|
||||
|
||||
|
||||
/* free pending writable result packets */
|
||||
item = req->done_req_list;
|
||||
while(item) {
|
||||
|
|
@ -2068,7 +2068,7 @@ tcp_req_info_setup_listen(struct tcp_req_info* req)
|
|||
wr = 1;
|
||||
if(!req->read_is_closed)
|
||||
rd = 1;
|
||||
|
||||
|
||||
if(wr) {
|
||||
req->cp->tcp_is_reading = 0;
|
||||
comm_point_stop_listening(req->cp);
|
||||
|
|
@ -2204,7 +2204,7 @@ tcp_req_info_handle_readdone(struct tcp_req_info* req)
|
|||
}
|
||||
req->in_worker_handle = 0;
|
||||
/* it should be waiting in the mesh for recursion.
|
||||
* If mesh failed to add a new entry and called commpoint_drop_reply.
|
||||
* If mesh failed to add a new entry and called commpoint_drop_reply.
|
||||
* Then the mesh state has been cleared. */
|
||||
if(req->is_drop) {
|
||||
/* the reply has been dropped, stream has been closed. */
|
||||
|
|
@ -2264,7 +2264,7 @@ tcp_req_info_add_result(struct tcp_req_info* req, uint8_t* buf, size_t len)
|
|||
last = req->done_req_list;
|
||||
while(last && last->next)
|
||||
last = last->next;
|
||||
|
||||
|
||||
/* create new element */
|
||||
item = (struct tcp_req_done_item*)malloc(sizeof(*item));
|
||||
if(!item) {
|
||||
|
|
@ -2623,7 +2623,7 @@ static int http2_query_read_done(struct http2_session* h2_session,
|
|||
"buffer already assigned to stream");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/* the c->buffer might be used by mesh_send_reply and no be cleard
|
||||
* need to be cleared before use */
|
||||
sldns_buffer_clear(h2_session->c->buffer);
|
||||
|
|
|
|||
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -249,7 +249,7 @@ mesh_state_ref_compare(const void* ap, const void* bp)
|
|||
return mesh_state_compare(a->s, b->s);
|
||||
}
|
||||
|
||||
struct mesh_area*
|
||||
struct mesh_area*
|
||||
mesh_create(struct module_stack* stack, struct module_env* env)
|
||||
{
|
||||
struct mesh_area* mesh = calloc(1, sizeof(struct mesh_area));
|
||||
|
|
@ -298,7 +298,7 @@ mesh_delete_helper(rbnode_type* n)
|
|||
* traversal and rbtree rebalancing do not work together */
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
mesh_delete(struct mesh_area* mesh)
|
||||
{
|
||||
if(!mesh)
|
||||
|
|
@ -341,7 +341,7 @@ int mesh_make_new_space(struct mesh_area* mesh, sldns_buffer* qbuf)
|
|||
if(m && m->reply_list && m->list_select == mesh_jostle_list) {
|
||||
/* how old is it? */
|
||||
struct timeval age;
|
||||
timeval_subtract(&age, mesh->env->now_tv,
|
||||
timeval_subtract(&age, mesh->env->now_tv,
|
||||
&m->reply_list->start_time);
|
||||
if(timeval_smaller(&mesh->jostle_max, &age)) {
|
||||
/* its a goner */
|
||||
|
|
@ -585,11 +585,11 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
|
|||
/* move to either the forever or the jostle_list */
|
||||
if(mesh->num_forever_states < mesh->max_forever_states) {
|
||||
mesh->num_forever_states ++;
|
||||
mesh_list_insert(s, &mesh->forever_first,
|
||||
mesh_list_insert(s, &mesh->forever_first,
|
||||
&mesh->forever_last);
|
||||
s->list_select = mesh_forever_list;
|
||||
} else {
|
||||
mesh_list_insert(s, &mesh->jostle_first,
|
||||
mesh_list_insert(s, &mesh->jostle_first,
|
||||
&mesh->jostle_last);
|
||||
s->list_select = mesh_jostle_list;
|
||||
}
|
||||
|
|
@ -610,9 +610,9 @@ servfail_mem:
|
|||
return;
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
|
||||
uint16_t qflags, struct edns_data* edns, sldns_buffer* buf,
|
||||
uint16_t qflags, struct edns_data* edns, sldns_buffer* buf,
|
||||
uint16_t qid, mesh_cb_func_type cb, void* cb_arg, int rpz_passthru)
|
||||
{
|
||||
struct mesh_state* s = NULL;
|
||||
|
|
@ -890,7 +890,7 @@ mesh_state_create(struct module_env* env, struct query_info* qinfo,
|
|||
int i;
|
||||
if(!region)
|
||||
return NULL;
|
||||
mstate = (struct mesh_state*)regional_alloc(region,
|
||||
mstate = (struct mesh_state*)regional_alloc(region,
|
||||
sizeof(struct mesh_state));
|
||||
if(!mstate) {
|
||||
alloc_reg_release(env->alloc, region);
|
||||
|
|
@ -972,7 +972,7 @@ mesh_state_make_unique(struct mesh_state* mstate)
|
|||
mstate->unique = mstate;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
mesh_state_cleanup(struct mesh_state* mstate)
|
||||
{
|
||||
struct mesh_area* mesh;
|
||||
|
|
@ -1018,7 +1018,7 @@ mesh_state_cleanup(struct mesh_state* mstate)
|
|||
alloc_reg_release(mstate->s.env->alloc, mstate->s.region);
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
mesh_state_delete(struct module_qstate* qstate)
|
||||
{
|
||||
struct mesh_area* mesh;
|
||||
|
|
@ -1031,10 +1031,10 @@ mesh_state_delete(struct module_qstate* qstate)
|
|||
mesh_detach_subs(&mstate->s);
|
||||
if(mstate->list_select == mesh_forever_list) {
|
||||
mesh->num_forever_states --;
|
||||
mesh_list_remove(mstate, &mesh->forever_first,
|
||||
mesh_list_remove(mstate, &mesh->forever_first,
|
||||
&mesh->forever_last);
|
||||
} else if(mstate->list_select == mesh_jostle_list) {
|
||||
mesh_list_remove(mstate, &mesh->jostle_first,
|
||||
mesh_list_remove(mstate, &mesh->jostle_first,
|
||||
&mesh->jostle_last);
|
||||
}
|
||||
if(!mstate->reply_list && !mstate->cb_list
|
||||
|
|
@ -1106,7 +1106,7 @@ void mesh_detach_subs(struct module_qstate* qstate)
|
|||
if(!ref->s->reply_list && !ref->s->cb_list
|
||||
&& ref->s->super_set.count == 0) {
|
||||
mesh->num_detached_states++;
|
||||
log_assert(mesh->num_detached_states +
|
||||
log_assert(mesh->num_detached_states +
|
||||
mesh->num_reply_states <= mesh->all.count);
|
||||
}
|
||||
}
|
||||
|
|
@ -1171,7 +1171,7 @@ int mesh_attach_sub(struct module_qstate* qstate, struct query_info* qinfo,
|
|||
if(!mesh_state_attachment(qstate->mesh_info, sub))
|
||||
return 0;
|
||||
/* if it was a duplicate attachment, the count was not zero before */
|
||||
if(!sub->reply_list && !sub->cb_list && was_detached &&
|
||||
if(!sub->reply_list && !sub->cb_list && was_detached &&
|
||||
sub->super_set.count == 1) {
|
||||
/* it used to be detached, before this one got added */
|
||||
log_assert(mesh->num_detached_states > 0);
|
||||
|
|
@ -1270,10 +1270,10 @@ mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep,
|
|||
|
||||
if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep,
|
||||
LDNS_RCODE_NOERROR, &r->edns, NULL, m->s.region, start_time) ||
|
||||
!reply_info_answer_encode(&m->s.qinfo, rep, r->qid,
|
||||
r->qflags, r->buf, 0, 1,
|
||||
m->s.env->scratch, udp_size, &r->edns,
|
||||
(int)(r->edns.bits & EDNS_DO), secure))
|
||||
!reply_info_answer_encode(&m->s.qinfo, rep, r->qid,
|
||||
r->qflags, r->buf, 0, 1,
|
||||
m->s.env->scratch, udp_size, &r->edns,
|
||||
(int)(r->edns.bits & EDNS_DO), secure))
|
||||
{
|
||||
fptr_ok(fptr_whitelist_mesh_cb(r->cb));
|
||||
(*r->cb)(r->cb_arg, LDNS_RCODE_SERVFAIL, r->buf,
|
||||
|
|
@ -1336,7 +1336,7 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
|
|||
|
||||
/* examine security status */
|
||||
if(m->s.env->need_to_validate && (!(r->qflags&BIT_CD) ||
|
||||
m->s.env->cfg->ignore_cd) && rep &&
|
||||
m->s.env->cfg->ignore_cd) && rep &&
|
||||
(rep->security <= sec_status_bogus ||
|
||||
rep->security == sec_status_secure_sentinel_fail)) {
|
||||
rcode = LDNS_RCODE_SERVFAIL;
|
||||
|
|
@ -1391,7 +1391,7 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
|
|||
if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s,
|
||||
rep, rcode, &r->edns, &r->query_reply, m->s.region, &r->start_time))
|
||||
r->edns.opt_list_inplace_cb_out = NULL;
|
||||
} else {
|
||||
} else {
|
||||
if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode,
|
||||
&r->edns, &r->query_reply, m->s.region, &r->start_time))
|
||||
r->edns.opt_list_inplace_cb_out = NULL;
|
||||
|
|
@ -1441,10 +1441,10 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
|
|||
m->s.qinfo.local_alias = r->local_alias;
|
||||
if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep,
|
||||
LDNS_RCODE_NOERROR, &r->edns, &r->query_reply, m->s.region, &r->start_time) ||
|
||||
!reply_info_answer_encode(&m->s.qinfo, rep, r->qid,
|
||||
!reply_info_answer_encode(&m->s.qinfo, rep, r->qid,
|
||||
r->qflags, r_buffer, 0, 1, m->s.env->scratch,
|
||||
udp_size, &r->edns, (int)(r->edns.bits & EDNS_DO),
|
||||
secure))
|
||||
secure))
|
||||
{
|
||||
if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s,
|
||||
rep, LDNS_RCODE_SERVFAIL, &r->edns, &r->query_reply, m->s.region, &r->start_time))
|
||||
|
|
@ -1601,7 +1601,7 @@ void mesh_walk_supers(struct mesh_area* mesh, struct mesh_state* mstate)
|
|||
/* callback the function to inform super of result */
|
||||
fptr_ok(fptr_whitelist_mod_inform_super(
|
||||
mesh->mods.mod[ref->s->s.curmod]->inform_super));
|
||||
(*mesh->mods.mod[ref->s->s.curmod]->inform_super)(&mstate->s,
|
||||
(*mesh->mods.mod[ref->s->s.curmod]->inform_super)(&mstate->s,
|
||||
ref->s->s.curmod, &ref->s->s);
|
||||
/* copy state that is always relevant to super */
|
||||
copy_state_to_super(&mstate->s, ref->s->s.curmod, &ref->s->s);
|
||||
|
|
@ -1625,7 +1625,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
|
|||
* desire aggregation).*/
|
||||
key.unique = NULL;
|
||||
key.s.client_info = cinfo;
|
||||
|
||||
|
||||
result = (struct mesh_state*)rbtree_search(&mesh->all, &key);
|
||||
return result;
|
||||
}
|
||||
|
|
@ -1634,7 +1634,7 @@ int mesh_state_add_cb(struct mesh_state* s, struct edns_data* edns,
|
|||
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,
|
||||
struct mesh_cb* r = regional_alloc(s->s.region,
|
||||
sizeof(struct mesh_cb));
|
||||
if(!r)
|
||||
return 0;
|
||||
|
|
@ -1766,7 +1766,7 @@ mesh_copy_qinfo(struct mesh_state* mstate, struct query_info** qinfop,
|
|||
* Handles module finished.
|
||||
* @param mesh: the mesh area.
|
||||
* @param mstate: currently active mesh state.
|
||||
* Deleted if finished, calls _done and _supers to
|
||||
* Deleted if finished, calls _done and _supers to
|
||||
* send replies to clients and inform other mesh states.
|
||||
* This in turn may create additional runnable mesh states.
|
||||
* @param s: state at which the current module exited.
|
||||
|
|
@ -1800,7 +1800,7 @@ mesh_continue(struct mesh_area* mesh, struct mesh_state* mstate,
|
|||
}
|
||||
if(s == module_restart_next) {
|
||||
int curmod = mstate->s.curmod;
|
||||
for(; mstate->s.curmod < mesh->mods.num;
|
||||
for(; mstate->s.curmod < mesh->mods.num;
|
||||
mstate->s.curmod++) {
|
||||
fptr_ok(fptr_whitelist_mod_clear(
|
||||
mesh->mods.mod[mstate->s.curmod]->clear));
|
||||
|
|
@ -1878,7 +1878,7 @@ void mesh_run(struct mesh_area* mesh, struct mesh_state* mstate,
|
|||
mstate->s.reply = NULL;
|
||||
regional_free_all(mstate->s.env->scratch);
|
||||
s = mstate->s.ext_state[mstate->s.curmod];
|
||||
verbose(VERB_ALGO, "mesh_run: %s module exit state is %s",
|
||||
verbose(VERB_ALGO, "mesh_run: %s module exit state is %s",
|
||||
mesh->mods.mod[mstate->s.curmod]->name, strextstate(s));
|
||||
e = NULL;
|
||||
if(mesh_continue(mesh, mstate, s, &ev))
|
||||
|
|
@ -1898,14 +1898,14 @@ void mesh_run(struct mesh_area* mesh, struct mesh_state* mstate,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
mesh_log_list(struct mesh_area* mesh)
|
||||
{
|
||||
char buf[30];
|
||||
struct mesh_state* m;
|
||||
int num = 0;
|
||||
RBTREE_FOR(m, struct mesh_state*, &mesh->all) {
|
||||
snprintf(buf, sizeof(buf), "%d%s%s%s%s%s%s mod%d %s%s",
|
||||
snprintf(buf, sizeof(buf), "%d%s%s%s%s%s%s mod%d %s%s",
|
||||
num++, (m->s.is_priming)?"p":"", /* prime */
|
||||
(m->s.is_valrec)?"v":"", /* prime */
|
||||
(m->s.query_flags&BIT_RD)?"RD":"",
|
||||
|
|
@ -1914,18 +1914,18 @@ mesh_log_list(struct mesh_area* mesh)
|
|||
(m->sub_set.count!=0)?"c":"", /* children */
|
||||
m->s.curmod, (m->reply_list)?"rep":"", /*hasreply*/
|
||||
(m->cb_list)?"cb":"" /* callbacks */
|
||||
);
|
||||
);
|
||||
log_query_info(VERB_ALGO, buf, &m->s.qinfo);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
mesh_stats(struct mesh_area* mesh, const char* str)
|
||||
{
|
||||
verbose(VERB_DETAIL, "%s %u recursion states (%u with reply, "
|
||||
"%u detached), %u waiting replies, %u recursion replies "
|
||||
"sent, %d replies dropped, %d states jostled out",
|
||||
str, (unsigned)mesh->all.count,
|
||||
"sent, %d replies dropped, %d states jostled out",
|
||||
str, (unsigned)mesh->all.count,
|
||||
(unsigned)mesh->num_reply_states,
|
||||
(unsigned)mesh->num_detached_states,
|
||||
(unsigned)mesh->num_reply_addrs,
|
||||
|
|
@ -1934,7 +1934,7 @@ mesh_stats(struct mesh_area* mesh, const char* str)
|
|||
(unsigned)mesh->stats_jostled);
|
||||
if(mesh->replies_sent > 0) {
|
||||
struct timeval avg;
|
||||
timeval_divide(&avg, &mesh->replies_sum_wait,
|
||||
timeval_divide(&avg, &mesh->replies_sum_wait,
|
||||
mesh->replies_sent);
|
||||
log_info("average recursion processing time "
|
||||
ARG_LL "d.%6.6d sec",
|
||||
|
|
@ -1944,7 +1944,7 @@ mesh_stats(struct mesh_area* mesh, const char* str)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
mesh_stats_clear(struct mesh_area* mesh)
|
||||
{
|
||||
if(!mesh)
|
||||
|
|
@ -1963,7 +1963,7 @@ mesh_stats_clear(struct mesh_area* mesh)
|
|||
mesh->ans_nodata = 0;
|
||||
}
|
||||
|
||||
size_t
|
||||
size_t
|
||||
mesh_get_mem(struct mesh_area* mesh)
|
||||
{
|
||||
struct mesh_state* m;
|
||||
|
|
@ -1977,7 +1977,7 @@ mesh_get_mem(struct mesh_area* mesh)
|
|||
return s;
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
mesh_detect_cycle(struct module_qstate* qstate, struct query_info* qinfo,
|
||||
uint16_t flags, int prime, int valrec)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2008, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -226,7 +226,7 @@ static void pr_stats(const char* nm, struct ub_stats_info* s)
|
|||
{
|
||||
struct timeval sumwait, avg;
|
||||
PR_UL_NM("num.queries", s->svr.num_queries);
|
||||
PR_UL_NM("num.queries_ip_ratelimited",
|
||||
PR_UL_NM("num.queries_ip_ratelimited",
|
||||
s->svr.num_queries_ip_ratelimited);
|
||||
PR_UL_NM("num.cachehits",
|
||||
s->svr.num_queries - s->svr.num_queries_missed_cache);
|
||||
|
|
@ -992,7 +992,7 @@ int main(int argc, char* argv[])
|
|||
fatal_exit("could not exec unbound: %s",
|
||||
strerror(ENOSYS));
|
||||
#else
|
||||
if(execlp("unbound", "unbound", "-c", cfgfile,
|
||||
if(execlp("unbound", "unbound", "-c", cfgfile,
|
||||
(char*)NULL) < 0) {
|
||||
fatal_exit("could not exec unbound: %s",
|
||||
strerror(errno));
|
||||
|
|
|
|||
|
|
@ -2,24 +2,24 @@
|
|||
* testcode/fake_event.c - fake event handling that replays existing scenario.
|
||||
*
|
||||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -109,7 +109,7 @@ timeval_add(struct timeval* d, const struct timeval* add)
|
|||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
fake_temp_file(const char* adj, const char* id, char* buf, size_t len)
|
||||
{
|
||||
#ifdef USE_WINSOCK
|
||||
|
|
@ -121,13 +121,13 @@ fake_temp_file(const char* adj, const char* id, char* buf, size_t len)
|
|||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
fake_event_init(struct replay_scenario* scen)
|
||||
{
|
||||
saved_scenario = scen;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
fake_event_cleanup(void)
|
||||
{
|
||||
replay_scenario_delete(saved_scenario);
|
||||
|
|
@ -172,7 +172,7 @@ repevt_string(enum replay_event_type t)
|
|||
}
|
||||
|
||||
/** delete a fake pending */
|
||||
static void
|
||||
static void
|
||||
delete_fake_pending(struct fake_pending* pend)
|
||||
{
|
||||
if(!pend)
|
||||
|
|
@ -200,8 +200,8 @@ delete_replay_answer(struct replay_answer* a)
|
|||
/**
|
||||
* return: true if pending query matches the now event.
|
||||
*/
|
||||
static int
|
||||
pending_matches_current(struct replay_runtime* runtime,
|
||||
static int
|
||||
pending_matches_current(struct replay_runtime* runtime,
|
||||
struct entry** entry, struct fake_pending **pend)
|
||||
{
|
||||
struct fake_pending* p;
|
||||
|
|
@ -233,7 +233,7 @@ pending_matches_current(struct replay_runtime* runtime,
|
|||
* @return: true if a match is found.
|
||||
*/
|
||||
static int
|
||||
pending_find_match(struct replay_runtime* runtime, struct entry** entry,
|
||||
pending_find_match(struct replay_runtime* runtime, struct entry** entry,
|
||||
struct fake_pending* pend)
|
||||
{
|
||||
int timenow = runtime->now->time_step;
|
||||
|
|
@ -245,7 +245,7 @@ pending_find_match(struct replay_runtime* runtime, struct entry** entry,
|
|||
(*entry = find_match(p->match, pend->pkt, pend->pkt_len,
|
||||
pend->transport))) {
|
||||
log_info("matched query time %d in range [%d, %d] "
|
||||
"with entry line %d", timenow,
|
||||
"with entry line %d", timenow,
|
||||
p->start_step, p->end_step, (*entry)->lineno);
|
||||
if(p->addrlen != 0)
|
||||
log_addr(0, "matched ip", &p->addr, p->addrlen);
|
||||
|
|
@ -266,8 +266,8 @@ pending_find_match(struct replay_runtime* runtime, struct entry** entry,
|
|||
* @param pend: if true, the outgoing message that matches is returned.
|
||||
* @return: true if pending query matches the now event.
|
||||
*/
|
||||
static int
|
||||
pending_matches_range(struct replay_runtime* runtime,
|
||||
static int
|
||||
pending_matches_range(struct replay_runtime* runtime,
|
||||
struct entry** entry, struct fake_pending** pend)
|
||||
{
|
||||
struct fake_pending* p = runtime->pending_list;
|
||||
|
|
@ -405,9 +405,9 @@ answer_callback_from_entry(struct replay_runtime* runtime,
|
|||
static void
|
||||
answer_check_it(struct replay_runtime* runtime)
|
||||
{
|
||||
struct replay_answer* ans = runtime->answer_list,
|
||||
struct replay_answer* ans = runtime->answer_list,
|
||||
*prev = NULL;
|
||||
log_assert(runtime && runtime->now &&
|
||||
log_assert(runtime && runtime->now &&
|
||||
runtime->now->evt_type == repevt_front_reply);
|
||||
while(ans) {
|
||||
enum transport_type tr = transport_tcp;
|
||||
|
|
@ -420,7 +420,7 @@ answer_check_it(struct replay_runtime* runtime)
|
|||
ans->pkt_len, tr)) {
|
||||
log_info("testbound matched event entry from line %d",
|
||||
runtime->now->match->lineno);
|
||||
log_info("testbound: do STEP %d %s",
|
||||
log_info("testbound: do STEP %d %s",
|
||||
runtime->now->time_step,
|
||||
repevt_string(runtime->now->evt_type));
|
||||
if(prev)
|
||||
|
|
@ -474,7 +474,7 @@ fake_front_query(struct replay_runtime* runtime, struct replay_moment *todo)
|
|||
log_pkt("query pkt", todo->match->reply_list->reply_pkt,
|
||||
todo->match->reply_list->reply_len);
|
||||
/* call the callback for incoming queries */
|
||||
if((*runtime->callback_query)(repinfo.c, runtime->cb_arg,
|
||||
if((*runtime->callback_query)(repinfo.c, runtime->cb_arg,
|
||||
NETEVENT_NOERROR, &repinfo)) {
|
||||
/* send immediate reply */
|
||||
comm_point_send_reply(&repinfo);
|
||||
|
|
@ -487,7 +487,7 @@ fake_front_query(struct replay_runtime* runtime, struct replay_moment *todo)
|
|||
* Perform callback for fake pending message.
|
||||
*/
|
||||
static void
|
||||
fake_pending_callback(struct replay_runtime* runtime,
|
||||
fake_pending_callback(struct replay_runtime* runtime,
|
||||
struct replay_moment* todo, int error)
|
||||
{
|
||||
struct fake_pending* p = runtime->pending_list;
|
||||
|
|
@ -566,7 +566,7 @@ time_passes(struct replay_runtime* runtime, struct replay_moment* mom)
|
|||
timeval_add(&runtime->now_tv, &tv);
|
||||
runtime->now_secs = (time_t)runtime->now_tv.tv_sec;
|
||||
#ifndef S_SPLINT_S
|
||||
log_info("elapsed %d.%6.6d now %d.%6.6d",
|
||||
log_info("elapsed %d.%6.6d now %d.%6.6d",
|
||||
(int)tv.tv_sec, (int)tv.tv_usec,
|
||||
(int)runtime->now_tv.tv_sec, (int)runtime->now_tv.tv_usec);
|
||||
#endif
|
||||
|
|
@ -603,7 +603,7 @@ autotrust_check(struct replay_runtime* runtime, struct replay_moment* mom)
|
|||
}
|
||||
strip_end_white(line);
|
||||
expanded = macro_process(runtime->vars, runtime, p->str);
|
||||
if(!expanded)
|
||||
if(!expanded)
|
||||
fatal_exit("could not expand macro line %d", lineno);
|
||||
if(verbosity >= 7 && strcmp(p->str, expanded) != 0)
|
||||
log_info("expanded '%s' to '%s'", p->str, expanded);
|
||||
|
|
@ -656,7 +656,7 @@ tempfile_check(struct replay_runtime* runtime, struct replay_moment* mom)
|
|||
}
|
||||
strip_end_white(line);
|
||||
expanded = macro_process(runtime->vars, runtime, p->str);
|
||||
if(!expanded)
|
||||
if(!expanded)
|
||||
fatal_exit("could not expand macro line %d", lineno);
|
||||
if(verbosity >= 7 && strcmp(p->str, expanded) != 0)
|
||||
log_info("expanded '%s' to '%s'", p->str, expanded);
|
||||
|
|
@ -746,7 +746,7 @@ do_moment_and_advance(struct replay_runtime* runtime)
|
|||
advance_moment(runtime);
|
||||
return;
|
||||
}
|
||||
log_info("testbound: do STEP %d %s", runtime->now->time_step,
|
||||
log_info("testbound: do STEP %d %s", runtime->now->time_step,
|
||||
repevt_string(runtime->now->evt_type));
|
||||
switch(runtime->now->evt_type) {
|
||||
case repevt_nothing:
|
||||
|
|
@ -761,7 +761,7 @@ do_moment_and_advance(struct replay_runtime* runtime)
|
|||
fake_front_query(runtime, mom);
|
||||
break;
|
||||
case repevt_front_reply:
|
||||
if(runtime->answer_list)
|
||||
if(runtime->answer_list)
|
||||
log_err("testbound: There are unmatched answers.");
|
||||
fatal_exit("testbound: query answer not matched");
|
||||
break;
|
||||
|
|
@ -810,7 +810,7 @@ do_moment_and_advance(struct replay_runtime* runtime)
|
|||
advance_moment(runtime);
|
||||
break;
|
||||
default:
|
||||
fatal_exit("testbound: unknown event type %d",
|
||||
fatal_exit("testbound: unknown event type %d",
|
||||
runtime->now->evt_type);
|
||||
}
|
||||
}
|
||||
|
|
@ -831,15 +831,15 @@ run_scenario(struct replay_runtime* runtime)
|
|||
/* else if precoded_range matches pending, do it */
|
||||
/* else do the current moment */
|
||||
if(pending_matches_current(runtime, &entry, &pending)) {
|
||||
log_info("testbound: do STEP %d CHECK_OUT_QUERY",
|
||||
log_info("testbound: do STEP %d CHECK_OUT_QUERY",
|
||||
runtime->now->time_step);
|
||||
advance_moment(runtime);
|
||||
if(entry->copy_id)
|
||||
answer_callback_from_entry(runtime, entry,
|
||||
answer_callback_from_entry(runtime, entry,
|
||||
pending);
|
||||
} else if(runtime->answer_list && runtime->now &&
|
||||
} else if(runtime->answer_list && runtime->now &&
|
||||
runtime->now->evt_type == repevt_front_reply) {
|
||||
answer_check_it(runtime);
|
||||
answer_check_it(runtime);
|
||||
advance_moment(runtime);
|
||||
} else if(pending_matches_range(runtime, &entry, &pending)) {
|
||||
answer_callback_from_entry(runtime, entry, pending);
|
||||
|
|
@ -870,7 +870,7 @@ run_scenario(struct replay_runtime* runtime)
|
|||
|
||||
/*********** Dummy routines ***********/
|
||||
|
||||
struct listen_dnsport*
|
||||
struct listen_dnsport*
|
||||
listen_create(struct comm_base* base, struct listen_port* ATTR_UNUSED(ports),
|
||||
size_t bufsize, int ATTR_UNUSED(tcp_accept_count),
|
||||
int ATTR_UNUSED(tcp_idle_timeout),
|
||||
|
|
@ -898,7 +898,7 @@ listen_create(struct comm_base* base, struct listen_port* ATTR_UNUSED(ports),
|
|||
return l;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
listen_delete(struct listen_dnsport* listen)
|
||||
{
|
||||
if(!listen)
|
||||
|
|
@ -907,7 +907,7 @@ listen_delete(struct listen_dnsport* listen)
|
|||
free(listen);
|
||||
}
|
||||
|
||||
struct comm_base*
|
||||
struct comm_base*
|
||||
comm_base_create(int ATTR_UNUSED(sigs))
|
||||
{
|
||||
/* we return the runtime structure instead. */
|
||||
|
|
@ -921,7 +921,7 @@ comm_base_create(int ATTR_UNUSED(sigs))
|
|||
return (struct comm_base*)runtime;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_base_delete(struct comm_base* b)
|
||||
{
|
||||
struct replay_runtime* runtime = (struct replay_runtime*)b;
|
||||
|
|
@ -961,7 +961,7 @@ comm_base_timept(struct comm_base* b, time_t** tt, struct timeval** tv)
|
|||
*tv = &runtime->now_tv;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_base_dispatch(struct comm_base* b)
|
||||
{
|
||||
struct replay_runtime* runtime = (struct replay_runtime*)b;
|
||||
|
|
@ -971,7 +971,7 @@ comm_base_dispatch(struct comm_base* b)
|
|||
else exit(0); /* OK exit when LIBEVENT_SIGNAL_PROBLEM exists */
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_base_exit(struct comm_base* b)
|
||||
{
|
||||
struct replay_runtime* runtime = (struct replay_runtime*)b;
|
||||
|
|
@ -981,7 +981,7 @@ comm_base_exit(struct comm_base* b)
|
|||
}
|
||||
}
|
||||
|
||||
struct comm_signal*
|
||||
struct comm_signal*
|
||||
comm_signal_create(struct comm_base* base,
|
||||
void (*callback)(int, void*), void* cb_arg)
|
||||
{
|
||||
|
|
@ -991,20 +991,20 @@ comm_signal_create(struct comm_base* base,
|
|||
return calloc(1, sizeof(struct comm_signal));
|
||||
}
|
||||
|
||||
int
|
||||
comm_signal_bind(struct comm_signal* ATTR_UNUSED(comsig), int
|
||||
int
|
||||
comm_signal_bind(struct comm_signal* ATTR_UNUSED(comsig), int
|
||||
ATTR_UNUSED(sig))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_signal_delete(struct comm_signal* comsig)
|
||||
{
|
||||
free(comsig);
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_send_reply(struct comm_reply* repinfo)
|
||||
{
|
||||
struct replay_answer* ans = (struct replay_answer*)calloc(1,
|
||||
|
|
@ -1028,7 +1028,7 @@ comm_point_send_reply(struct comm_reply* repinfo)
|
|||
log_pkt("reply pkt: ", ans->pkt, ans->pkt_len);
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_drop_reply(struct comm_reply* repinfo)
|
||||
{
|
||||
log_info("comm_point_drop_reply fake");
|
||||
|
|
@ -1038,14 +1038,14 @@ comm_point_drop_reply(struct comm_reply* repinfo)
|
|||
}
|
||||
}
|
||||
|
||||
struct outside_network*
|
||||
outside_network_create(struct comm_base* base, size_t bufsize,
|
||||
size_t ATTR_UNUSED(num_ports), char** ATTR_UNUSED(ifs),
|
||||
int ATTR_UNUSED(num_ifs), int ATTR_UNUSED(do_ip4),
|
||||
int ATTR_UNUSED(do_ip6), size_t ATTR_UNUSED(num_tcp),
|
||||
struct outside_network*
|
||||
outside_network_create(struct comm_base* base, size_t bufsize,
|
||||
size_t ATTR_UNUSED(num_ports), char** ATTR_UNUSED(ifs),
|
||||
int ATTR_UNUSED(num_ifs), int ATTR_UNUSED(do_ip4),
|
||||
int ATTR_UNUSED(do_ip6), size_t ATTR_UNUSED(num_tcp),
|
||||
int ATTR_UNUSED(dscp),
|
||||
struct infra_cache* infra,
|
||||
struct ub_randstate* ATTR_UNUSED(rnd),
|
||||
struct ub_randstate* ATTR_UNUSED(rnd),
|
||||
int ATTR_UNUSED(use_caps_for_id), int* ATTR_UNUSED(availports),
|
||||
int ATTR_UNUSED(numavailports), size_t ATTR_UNUSED(unwanted_threshold),
|
||||
int ATTR_UNUSED(outgoing_tcp_mss),
|
||||
|
|
@ -1057,7 +1057,7 @@ outside_network_create(struct comm_base* base, size_t bufsize,
|
|||
int ATTR_UNUSED(tcp_auth_query_timeout))
|
||||
{
|
||||
struct replay_runtime* runtime = (struct replay_runtime*)base;
|
||||
struct outside_network* outnet = calloc(1,
|
||||
struct outside_network* outnet = calloc(1,
|
||||
sizeof(struct outside_network));
|
||||
(void)unwanted_action;
|
||||
if(!outnet)
|
||||
|
|
@ -1072,7 +1072,7 @@ outside_network_create(struct comm_base* base, size_t bufsize,
|
|||
return outnet;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
outside_network_delete(struct outside_network* outnet)
|
||||
{
|
||||
if(!outnet)
|
||||
|
|
@ -1081,12 +1081,12 @@ outside_network_delete(struct outside_network* outnet)
|
|||
free(outnet);
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
outside_network_quit_prepare(struct outside_network* ATTR_UNUSED(outnet))
|
||||
{
|
||||
}
|
||||
|
||||
struct pending*
|
||||
struct pending*
|
||||
pending_udp_query(struct serviced_query* sq, sldns_buffer* packet,
|
||||
int timeout, comm_point_callback_type* callback, void* callback_arg)
|
||||
{
|
||||
|
|
@ -1128,7 +1128,7 @@ pending_udp_query(struct serviced_query* sq, sldns_buffer* packet,
|
|||
repevt_string(runtime->now->evt_type));
|
||||
advance_moment(runtime);
|
||||
/* still create the pending, because we need it to callback */
|
||||
}
|
||||
}
|
||||
log_info("testbound: created fake pending");
|
||||
/* add to list */
|
||||
pend->next = runtime->pending_list;
|
||||
|
|
@ -1178,7 +1178,7 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet,
|
|||
repevt_string(runtime->now->evt_type));
|
||||
advance_moment(runtime);
|
||||
/* still create the pending, because we need it to callback */
|
||||
}
|
||||
}
|
||||
log_info("testbound: created fake pending");
|
||||
/* add to list */
|
||||
pend->next = runtime->pending_list;
|
||||
|
|
@ -1202,10 +1202,10 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet,
|
|||
sizeof(struct fake_pending));
|
||||
char z[256];
|
||||
log_assert(pend);
|
||||
log_nametypeclass(VERB_OPS, "pending serviced query",
|
||||
log_nametypeclass(VERB_OPS, "pending serviced query",
|
||||
qinfo->qname, qinfo->qtype, qinfo->qclass);
|
||||
dname_str(zone, z);
|
||||
verbose(VERB_OPS, "pending serviced query zone %s flags%s%s%s%s",
|
||||
verbose(VERB_OPS, "pending serviced query zone %s flags%s%s%s%s",
|
||||
z, (flags&BIT_RD)?" RD":"", (flags&BIT_CD)?" CD":"",
|
||||
(flags&~(BIT_RD|BIT_CD))?" MORE":"", (dnssec)?" DO":"");
|
||||
|
||||
|
|
@ -1301,7 +1301,7 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet,
|
|||
repevt_string(runtime->now->evt_type));
|
||||
advance_moment(runtime);
|
||||
/* still create the pending, because we need it to callback */
|
||||
}
|
||||
}
|
||||
log_info("testbound: created fake pending");
|
||||
/* add to list */
|
||||
pend->next = runtime->pending_list;
|
||||
|
|
@ -1356,7 +1356,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_type* ATTR_UNUSED(callback),
|
||||
comm_point_callback_type* ATTR_UNUSED(callback),
|
||||
void* ATTR_UNUSED(callback_arg))
|
||||
{
|
||||
struct fake_commpoint* fc = (struct fake_commpoint*)calloc(1,
|
||||
|
|
@ -1368,7 +1368,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_type* ATTR_UNUSED(callback),
|
||||
comm_point_callback_type* ATTR_UNUSED(callback),
|
||||
void* ATTR_UNUSED(callback_arg))
|
||||
{
|
||||
/* no pipe comm possible */
|
||||
|
|
@ -1379,7 +1379,7 @@ struct comm_point* comm_point_create_raw(struct comm_base* ATTR_UNUSED(base),
|
|||
return (struct comm_point*)fc;
|
||||
}
|
||||
|
||||
void comm_point_start_listening(struct comm_point* ATTR_UNUSED(c),
|
||||
void comm_point_start_listening(struct comm_point* ATTR_UNUSED(c),
|
||||
int ATTR_UNUSED(newfd), int ATTR_UNUSED(sec))
|
||||
{
|
||||
/* no bg write pipe comm possible */
|
||||
|
|
@ -1424,7 +1424,7 @@ size_t serviced_get_mem(struct serviced_query* ATTR_UNUSED(c))
|
|||
}
|
||||
|
||||
/* fake for fptr wlist */
|
||||
int outnet_udp_cb(struct comm_point* ATTR_UNUSED(c),
|
||||
int outnet_udp_cb(struct comm_point* ATTR_UNUSED(c),
|
||||
void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
|
||||
struct comm_reply *ATTR_UNUSED(reply_info))
|
||||
{
|
||||
|
|
@ -1432,7 +1432,7 @@ int outnet_udp_cb(struct comm_point* ATTR_UNUSED(c),
|
|||
return 0;
|
||||
}
|
||||
|
||||
int outnet_tcp_cb(struct comm_point* ATTR_UNUSED(c),
|
||||
int outnet_tcp_cb(struct comm_point* ATTR_UNUSED(c),
|
||||
void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
|
||||
struct comm_reply *ATTR_UNUSED(reply_info))
|
||||
{
|
||||
|
|
@ -1460,67 +1460,67 @@ void outnet_tcptimer(void* ATTR_UNUSED(arg))
|
|||
log_assert(0);
|
||||
}
|
||||
|
||||
void comm_point_udp_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event),
|
||||
void comm_point_udp_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event),
|
||||
void* ATTR_UNUSED(arg))
|
||||
{
|
||||
log_assert(0);
|
||||
}
|
||||
|
||||
void comm_point_udp_ancil_callback(int ATTR_UNUSED(fd),
|
||||
void comm_point_udp_ancil_callback(int ATTR_UNUSED(fd),
|
||||
short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
|
||||
{
|
||||
log_assert(0);
|
||||
}
|
||||
|
||||
void comm_point_tcp_accept_callback(int ATTR_UNUSED(fd),
|
||||
void comm_point_tcp_accept_callback(int ATTR_UNUSED(fd),
|
||||
short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
|
||||
{
|
||||
log_assert(0);
|
||||
}
|
||||
|
||||
void comm_point_tcp_handle_callback(int ATTR_UNUSED(fd),
|
||||
void comm_point_tcp_handle_callback(int ATTR_UNUSED(fd),
|
||||
short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
|
||||
{
|
||||
log_assert(0);
|
||||
}
|
||||
|
||||
void comm_timer_callback(int ATTR_UNUSED(fd),
|
||||
void comm_timer_callback(int ATTR_UNUSED(fd),
|
||||
short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
|
||||
{
|
||||
log_assert(0);
|
||||
}
|
||||
|
||||
void comm_signal_callback(int ATTR_UNUSED(fd),
|
||||
void comm_signal_callback(int ATTR_UNUSED(fd),
|
||||
short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
|
||||
{
|
||||
log_assert(0);
|
||||
}
|
||||
|
||||
void comm_point_http_handle_callback(int ATTR_UNUSED(fd),
|
||||
void comm_point_http_handle_callback(int ATTR_UNUSED(fd),
|
||||
short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
|
||||
{
|
||||
log_assert(0);
|
||||
}
|
||||
|
||||
void comm_point_local_handle_callback(int ATTR_UNUSED(fd),
|
||||
void comm_point_local_handle_callback(int ATTR_UNUSED(fd),
|
||||
short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
|
||||
{
|
||||
log_assert(0);
|
||||
}
|
||||
|
||||
void comm_point_raw_handle_callback(int ATTR_UNUSED(fd),
|
||||
void comm_point_raw_handle_callback(int ATTR_UNUSED(fd),
|
||||
short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
|
||||
{
|
||||
log_assert(0);
|
||||
}
|
||||
|
||||
void comm_base_handle_slow_accept(int ATTR_UNUSED(fd),
|
||||
void comm_base_handle_slow_accept(int ATTR_UNUSED(fd),
|
||||
short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
|
||||
{
|
||||
log_assert(0);
|
||||
}
|
||||
|
||||
int serviced_udp_callback(struct comm_point* ATTR_UNUSED(c),
|
||||
int serviced_udp_callback(struct comm_point* ATTR_UNUSED(c),
|
||||
void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
|
||||
struct comm_reply* ATTR_UNUSED(reply_info))
|
||||
{
|
||||
|
|
@ -1528,7 +1528,7 @@ int serviced_udp_callback(struct comm_point* ATTR_UNUSED(c),
|
|||
return 0;
|
||||
}
|
||||
|
||||
int serviced_tcp_callback(struct comm_point* ATTR_UNUSED(c),
|
||||
int serviced_tcp_callback(struct comm_point* ATTR_UNUSED(c),
|
||||
void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
|
||||
struct comm_reply* ATTR_UNUSED(reply_info))
|
||||
{
|
||||
|
|
@ -1561,7 +1561,7 @@ int reuse_id_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b))
|
|||
}
|
||||
|
||||
/* timers in testbound for autotrust. statistics tested in tdir. */
|
||||
struct comm_timer* comm_timer_create(struct comm_base* base,
|
||||
struct comm_timer* comm_timer_create(struct comm_base* base,
|
||||
void (*cb)(void*), void* cb_arg)
|
||||
{
|
||||
struct replay_runtime* runtime = (struct replay_runtime*)base;
|
||||
|
|
@ -1589,7 +1589,7 @@ void comm_timer_set(struct comm_timer* timer, struct timeval* tv)
|
|||
struct fake_timer* t = (struct fake_timer*)timer;
|
||||
t->enabled = 1;
|
||||
t->tv = *tv;
|
||||
log_info("fake timer set %d.%6.6d",
|
||||
log_info("fake timer set %d.%6.6d",
|
||||
(int)t->tv.tv_sec, (int)t->tv.tv_usec);
|
||||
timeval_add(&t->tv, &t->runtime->now_tv);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,24 +2,24 @@
|
|||
* testcode/replay.c - store and use a replay of events for the DNS resolver.
|
||||
*
|
||||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -59,11 +59,11 @@
|
|||
* Expand a macro
|
||||
* @param store: value storage
|
||||
* @param runtime: replay runtime for other stuff.
|
||||
* @param text: the macro text, after the ${, Updated to after the } when
|
||||
* @param text: the macro text, after the ${, Updated to after the } when
|
||||
* done (successfully).
|
||||
* @return expanded text, malloced. NULL on failure.
|
||||
*/
|
||||
static char* macro_expand(rbtree_type* store,
|
||||
static char* macro_expand(rbtree_type* store,
|
||||
struct replay_runtime* runtime, char** text);
|
||||
|
||||
/** compare of time values */
|
||||
|
|
@ -82,12 +82,12 @@ timeval_smaller(const struct timeval* x, const struct timeval* y)
|
|||
#endif
|
||||
}
|
||||
|
||||
/** parse keyword in string.
|
||||
/** parse keyword in string.
|
||||
* @param line: if found, the line is advanced to after the keyword.
|
||||
* @param keyword: string.
|
||||
* @return: true if found, false if not.
|
||||
* @return: true if found, false if not.
|
||||
*/
|
||||
static int
|
||||
static int
|
||||
parse_keyword(char** line, const char* keyword)
|
||||
{
|
||||
size_t len = (size_t)strlen(keyword);
|
||||
|
|
@ -135,8 +135,8 @@ strip_end_white(char* p)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a range from file.
|
||||
/**
|
||||
* Read a range from file.
|
||||
* @param remain: Rest of line (after RANGE keyword).
|
||||
* @param in: file to read from.
|
||||
* @param name: name to print in errors.
|
||||
|
|
@ -181,7 +181,7 @@ replay_range_read(char* remain, FILE* in, const char* name,
|
|||
strip_end_white(parse);
|
||||
if(!extstrtoaddr(parse, &rng->addr, &rng->addrlen,
|
||||
UNBOUND_DNS_PORT)) {
|
||||
log_err("Line %d: could not read ADDRESS: %s",
|
||||
log_err("Line %d: could not read ADDRESS: %s",
|
||||
pstate->lineno, parse);
|
||||
free(rng);
|
||||
return NULL;
|
||||
|
|
@ -255,8 +255,8 @@ read_assign_step(char* remain, struct replay_moment* mom)
|
|||
fatal_exit("out of memory");
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a replay moment 'STEP' from file.
|
||||
/**
|
||||
* Read a replay moment 'STEP' from file.
|
||||
* @param remain: Rest of line (after STEP keyword).
|
||||
* @param in: file to read from.
|
||||
* @param name: name to print in errors.
|
||||
|
|
@ -376,18 +376,18 @@ replay_moment_read(char* remain, FILE* in, const char* name,
|
|||
strip_end_white(remain);
|
||||
if(!extstrtoaddr(remain, &mom->addr, &mom->addrlen,
|
||||
UNBOUND_DNS_PORT)) {
|
||||
log_err("line %d: could not parse ADDRESS: %s",
|
||||
log_err("line %d: could not parse ADDRESS: %s",
|
||||
pstate->lineno, remain);
|
||||
free(mom);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(parse_keyword(&remain, "ELAPSE")) {
|
||||
double sec;
|
||||
errno = 0;
|
||||
sec = strtod(remain, &remain);
|
||||
if(sec == 0. && errno != 0) {
|
||||
log_err("line %d: could not parse ELAPSE: %s (%s)",
|
||||
log_err("line %d: could not parse ELAPSE: %s (%s)",
|
||||
pstate->lineno, remain, strerror(errno));
|
||||
free(mom);
|
||||
return NULL;
|
||||
|
|
@ -397,7 +397,7 @@ replay_moment_read(char* remain, FILE* in, const char* name,
|
|||
mom->elapse.tv_usec = (int)((sec - (double)mom->elapse.tv_sec)
|
||||
*1000000. + 0.5);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if(readentry) {
|
||||
mom->match = read_entry(in, name, pstate, 1);
|
||||
|
|
@ -433,7 +433,7 @@ make_scenario(char* line)
|
|||
return scen;
|
||||
}
|
||||
|
||||
struct replay_scenario*
|
||||
struct replay_scenario*
|
||||
replay_scenario_read(FILE* in, const char* name, int* lineno)
|
||||
{
|
||||
char line[MAX_LINE_LEN];
|
||||
|
|
@ -451,7 +451,7 @@ replay_scenario_read(FILE* in, const char* name, int* lineno)
|
|||
(*lineno)++;
|
||||
while(isspace((unsigned char)*parse))
|
||||
parse++;
|
||||
if(!*parse)
|
||||
if(!*parse)
|
||||
continue; /* empty line */
|
||||
if(parse_keyword(&parse, ";"))
|
||||
continue; /* comment */
|
||||
|
|
@ -462,11 +462,11 @@ replay_scenario_read(FILE* in, const char* name, int* lineno)
|
|||
if(!scen)
|
||||
fatal_exit("%d: could not make scen", *lineno);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(!scen)
|
||||
fatal_exit("%d: expected SCENARIO", *lineno);
|
||||
if(parse_keyword(&parse, "RANGE_BEGIN")) {
|
||||
struct replay_range* newr = replay_range_read(parse,
|
||||
struct replay_range* newr = replay_range_read(parse,
|
||||
in, name, &pstate, line);
|
||||
if(!newr)
|
||||
fatal_exit("%d: bad range", pstate.lineno);
|
||||
|
|
@ -474,12 +474,12 @@ replay_scenario_read(FILE* in, const char* name, int* lineno)
|
|||
newr->next_range = scen->range_list;
|
||||
scen->range_list = newr;
|
||||
} else if(parse_keyword(&parse, "STEP")) {
|
||||
struct replay_moment* mom = replay_moment_read(parse,
|
||||
struct replay_moment* mom = replay_moment_read(parse,
|
||||
in, name, &pstate);
|
||||
if(!mom)
|
||||
fatal_exit("%d: bad moment", pstate.lineno);
|
||||
*lineno = pstate.lineno;
|
||||
if(scen->mom_last &&
|
||||
if(scen->mom_last &&
|
||||
scen->mom_last->time_step >= mom->time_step)
|
||||
fatal_exit("%d: time goes backwards", *lineno);
|
||||
if(scen->mom_last)
|
||||
|
|
@ -502,7 +502,7 @@ replay_scenario_read(FILE* in, const char* name, int* lineno)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
replay_scenario_delete(struct replay_scenario* scen)
|
||||
{
|
||||
struct replay_moment* mom, *momn;
|
||||
|
|
@ -630,7 +630,7 @@ do_macro_recursion(rbtree_type* store, struct replay_runtime* runtime,
|
|||
{
|
||||
char* after = at+2;
|
||||
char* expand = macro_expand(store, runtime, &after);
|
||||
if(!expand)
|
||||
if(!expand)
|
||||
return NULL; /* expansion failed */
|
||||
if(!do_buf_insert(at, remain, after, expand)) {
|
||||
free(expand);
|
||||
|
|
@ -665,7 +665,7 @@ do_macro_variable(rbtree_type* store, char* buf, size_t remain)
|
|||
}
|
||||
/* terminator, we are working in macro_expand() buffer */
|
||||
sv = *at;
|
||||
*at = 0;
|
||||
*at = 0;
|
||||
v = macro_getvar(store, name);
|
||||
*at = sv;
|
||||
|
||||
|
|
@ -816,7 +816,7 @@ macro_expand(rbtree_type* store, struct replay_runtime* runtime, char** text)
|
|||
time_t res = 0;
|
||||
if(runtime) {
|
||||
struct fake_timer* t = first_timer(runtime);
|
||||
if(t && (time_t)t->tv.tv_sec >= runtime->now_secs)
|
||||
if(t && (time_t)t->tv.tv_sec >= runtime->now_secs)
|
||||
res = (time_t)t->tv.tv_sec - runtime->now_secs;
|
||||
}
|
||||
snprintf(buf, sizeof(buf), ARG_LL "d", (long long)res);
|
||||
|
|
@ -855,9 +855,9 @@ macro_expand(rbtree_type* store, struct replay_runtime* runtime, char** text)
|
|||
if(dofunc) {
|
||||
/* post process functions, buf has the argument(s) */
|
||||
if(strncmp(buf, "ctime", 5) == 0) {
|
||||
return do_macro_ctime(buf+6);
|
||||
return do_macro_ctime(buf+6);
|
||||
} else if(strncmp(buf, "range", 5) == 0) {
|
||||
return do_macro_range(buf+6);
|
||||
return do_macro_range(buf+6);
|
||||
}
|
||||
}
|
||||
return strdup(buf);
|
||||
|
|
@ -891,7 +891,7 @@ macro_process(rbtree_type* store, struct replay_runtime* runtime, char* text)
|
|||
return strdup(buf);
|
||||
}
|
||||
|
||||
char*
|
||||
char*
|
||||
macro_lookup(rbtree_type* store, char* name)
|
||||
{
|
||||
struct replay_var* x = macro_getvar(store, name);
|
||||
|
|
@ -907,7 +907,7 @@ void macro_print_debug(rbtree_type* store)
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
macro_assign(rbtree_type* store, char* name, char* value)
|
||||
{
|
||||
struct replay_var* x = macro_getvar(store, name);
|
||||
|
|
|
|||
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -87,7 +87,7 @@ struct config_parser_state* cfg_parser = 0;
|
|||
/** init ports possible for use */
|
||||
static void init_outgoing_availports(int* array, int num);
|
||||
|
||||
struct config_file*
|
||||
struct config_file*
|
||||
config_create(void)
|
||||
{
|
||||
struct config_file* cfg;
|
||||
|
|
@ -153,7 +153,7 @@ config_create(void)
|
|||
cfg->outgoing_num_ports = 48; /* windows is limited in num fds */
|
||||
cfg->num_queries_per_thread = 24;
|
||||
cfg->outgoing_num_tcp = 2; /* leaves 64-52=12 for: 4if,1stop,thread4 */
|
||||
cfg->incoming_num_tcp = 2;
|
||||
cfg->incoming_num_tcp = 2;
|
||||
#endif
|
||||
cfg->stream_wait_size = 4 * 1024 * 1024;
|
||||
cfg->edns_buffer_size = 1232; /* from DNS flagday recommendation */
|
||||
|
|
@ -302,13 +302,13 @@ config_create(void)
|
|||
cfg->rrset_roundrobin = 1;
|
||||
cfg->unknown_server_time_limit = 376;
|
||||
cfg->max_udp_size = 1232; /* value taken from edns_buffer_size */
|
||||
if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key")))
|
||||
if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key")))
|
||||
goto error_exit;
|
||||
if(!(cfg->server_cert_file = strdup(RUN_DIR"/unbound_server.pem")))
|
||||
if(!(cfg->server_cert_file = strdup(RUN_DIR"/unbound_server.pem")))
|
||||
goto error_exit;
|
||||
if(!(cfg->control_key_file = strdup(RUN_DIR"/unbound_control.key")))
|
||||
if(!(cfg->control_key_file = strdup(RUN_DIR"/unbound_control.key")))
|
||||
goto error_exit;
|
||||
if(!(cfg->control_cert_file = strdup(RUN_DIR"/unbound_control.pem")))
|
||||
if(!(cfg->control_cert_file = strdup(RUN_DIR"/unbound_control.pem")))
|
||||
goto error_exit;
|
||||
|
||||
#ifdef CLIENT_SUBNET
|
||||
|
|
@ -316,7 +316,7 @@ config_create(void)
|
|||
#else
|
||||
if(!(cfg->module_conf = strdup("validator iterator"))) goto error_exit;
|
||||
#endif
|
||||
if(!(cfg->val_nsec3_key_iterations =
|
||||
if(!(cfg->val_nsec3_key_iterations =
|
||||
strdup("1024 150 2048 150 4096 150"))) goto error_exit;
|
||||
#if defined(DNSTAP_SOCKET_PATH)
|
||||
if(!(cfg->dnstap_socket_path = strdup(DNSTAP_SOCKET_PATH)))
|
||||
|
|
@ -490,10 +490,10 @@ int config_set_option(struct config_file* cfg, const char* opt,
|
|||
/* not supported, library must have 1 thread in bgworker */
|
||||
return 0;
|
||||
} else if(strcmp(opt, "outgoing-port-permit:") == 0) {
|
||||
return cfg_mark_ports(val, 1,
|
||||
return cfg_mark_ports(val, 1,
|
||||
cfg->outgoing_avail_ports, 65536);
|
||||
} else if(strcmp(opt, "outgoing-port-avoid:") == 0) {
|
||||
return cfg_mark_ports(val, 0,
|
||||
return cfg_mark_ports(val, 0,
|
||||
cfg->outgoing_avail_ports, 65536);
|
||||
} else if(strcmp(opt, "local-zone:") == 0) {
|
||||
return cfg_parse_local_zone(cfg, val);
|
||||
|
|
@ -507,7 +507,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
|
|||
if(atoi(val) == 0) return 0;
|
||||
cfg->val_date_override = (uint32_t)atoi(val);
|
||||
}
|
||||
} else if(strcmp(opt, "local-data-ptr:") == 0) {
|
||||
} else if(strcmp(opt, "local-data-ptr:") == 0) {
|
||||
char* ptr = cfg_ptr_reverse((char*)opt);
|
||||
return cfg_strlist_insert(&cfg->local_data, ptr);
|
||||
} else if(strcmp(opt, "logfile:") == 0) {
|
||||
|
|
@ -688,7 +688,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
|
|||
else if(strcmp(opt, "serve-expired-reply-ttl:") == 0)
|
||||
{ IS_NUMBER_OR_ZERO; cfg->serve_expired_reply_ttl = atoi(val); SERVE_EXPIRED_REPLY_TTL=(time_t)cfg->serve_expired_reply_ttl;}
|
||||
else S_NUMBER_OR_ZERO("serve-expired-client-timeout:", serve_expired_client_timeout)
|
||||
else S_YNO("ede:", ede)
|
||||
else S_YNO("ede:", ede)
|
||||
else S_YNO("ede-serve-expired:", ede_serve_expired)
|
||||
else S_YNO("serve-original-ttl:", serve_original_ttl)
|
||||
else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations)
|
||||
|
|
@ -816,7 +816,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
|
|||
{ IS_NUMBER_OR_ZERO; cfg->val_max_restart = (int32_t)atoi(val); }
|
||||
else if (strcmp(opt, "outgoing-interface:") == 0) {
|
||||
char* d = strdup(val);
|
||||
char** oi =
|
||||
char** oi =
|
||||
(char**)reallocarray(NULL, (size_t)cfg->num_out_ifs+1, sizeof(char*));
|
||||
if(!d || !oi) { free(d); free(oi); return -1; }
|
||||
if(cfg->out_ifs && cfg->num_out_ifs) {
|
||||
|
|
@ -911,7 +911,7 @@ config_collate_cat(struct config_strlist* list)
|
|||
for(s=list; s; s=s->next)
|
||||
total += strlen(s->str) + 1; /* len + newline */
|
||||
left = total+1; /* one extra for nul at end */
|
||||
r = malloc(left);
|
||||
r = malloc(left);
|
||||
if(!r)
|
||||
return NULL;
|
||||
w = r;
|
||||
|
|
@ -990,7 +990,7 @@ config_collate_cat(struct config_strlist* list)
|
|||
}
|
||||
|
||||
int
|
||||
config_get_option(struct config_file* cfg, const char* opt,
|
||||
config_get_option(struct config_file* cfg, const char* opt,
|
||||
void (*func)(char*,void*), void* arg)
|
||||
{
|
||||
char buf[1024], nopt[64];
|
||||
|
|
@ -1329,7 +1329,7 @@ create_cfg_parser(struct config_file* cfg, char* filename, const char* chroot)
|
|||
init_cfg_parse();
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
config_read(struct config_file* cfg, const char* filename, const char* chroot)
|
||||
{
|
||||
FILE *in;
|
||||
|
|
@ -1369,7 +1369,7 @@ config_read(struct config_file* cfg, const char* filename, const char* chroot)
|
|||
if(r == GLOB_NOMATCH) {
|
||||
verbose(VERB_QUERY, "include: "
|
||||
"no matches for %s", fname);
|
||||
return 1;
|
||||
return 1;
|
||||
} else if(r == GLOB_NOSPACE) {
|
||||
log_err("include: %s: "
|
||||
"fnametern out of memory", fname);
|
||||
|
|
@ -1568,7 +1568,7 @@ config_del_strbytelist(struct config_strbytelist* p)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
config_delete(struct config_file* cfg)
|
||||
{
|
||||
if(!cfg) return;
|
||||
|
|
@ -1681,7 +1681,7 @@ config_delete(struct config_file* cfg)
|
|||
free(cfg);
|
||||
}
|
||||
|
||||
static void
|
||||
static void
|
||||
init_outgoing_availports(int* a, int num)
|
||||
{
|
||||
/* generated with make iana_update */
|
||||
|
|
@ -1694,7 +1694,7 @@ init_outgoing_availports(int* a, int num)
|
|||
for(i=1024; i<num; i++) {
|
||||
a[i] = i;
|
||||
}
|
||||
/* create empty spot at 49152 to keep ephemeral ports available
|
||||
/* create empty spot at 49152 to keep ephemeral ports available
|
||||
* to other programs */
|
||||
for(i=49152; i<49152+256; i++)
|
||||
a[i] = 0;
|
||||
|
|
@ -1705,7 +1705,7 @@ init_outgoing_availports(int* a, int num)
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
cfg_mark_ports(const char* str, int allow, int* avail, int num)
|
||||
{
|
||||
char* mid = strchr(str, '-');
|
||||
|
|
@ -1750,7 +1750,7 @@ cfg_mark_ports(const char* str, int allow, int* avail, int num)
|
|||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
cfg_scan_ports(int* avail, int num)
|
||||
{
|
||||
int i;
|
||||
|
|
@ -1867,7 +1867,7 @@ int cfg_strlist_append(struct config_strlist_head* list, char* item)
|
|||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
cfg_region_strlist_insert(struct regional* region,
|
||||
struct config_strlist** head, char* item)
|
||||
{
|
||||
|
|
@ -1900,7 +1900,7 @@ cfg_strlist_find(struct config_strlist* head, const char *item)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
cfg_strlist_insert(struct config_strlist** head, char* item)
|
||||
{
|
||||
struct config_strlist *s;
|
||||
|
|
@ -1930,7 +1930,7 @@ cfg_strlist_append_ex(struct config_strlist** head, char* item)
|
|||
return 0;
|
||||
s->str = item;
|
||||
s->next = NULL;
|
||||
|
||||
|
||||
if (*head==NULL) {
|
||||
*head = s;
|
||||
} else {
|
||||
|
|
@ -1940,11 +1940,11 @@ cfg_strlist_append_ex(struct config_strlist** head, char* item)
|
|||
}
|
||||
last->next = s;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
cfg_str2list_insert(struct config_str2list** head, char* item, char* i2)
|
||||
{
|
||||
struct config_str2list *s;
|
||||
|
|
@ -1966,7 +1966,7 @@ cfg_str2list_insert(struct config_str2list** head, char* item, char* i2)
|
|||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
cfg_str3list_insert(struct config_str3list** head, char* item, char* i2,
|
||||
char* i3)
|
||||
{
|
||||
|
|
@ -2002,7 +2002,7 @@ cfg_strbytelist_insert(struct config_strbytelist** head, char* item,
|
|||
return 1;
|
||||
}
|
||||
|
||||
time_t
|
||||
time_t
|
||||
cfg_convert_timeval(const char* str)
|
||||
{
|
||||
time_t t;
|
||||
|
|
@ -2010,7 +2010,7 @@ cfg_convert_timeval(const char* str)
|
|||
memset(&tm, 0, sizeof(tm));
|
||||
if(strlen(str) < 14)
|
||||
return 0;
|
||||
if(sscanf(str, "%4d%2d%2d%2d%2d%2d", &tm.tm_year, &tm.tm_mon,
|
||||
if(sscanf(str, "%4d%2d%2d%2d%2d%2d", &tm.tm_year, &tm.tm_mon,
|
||||
&tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6)
|
||||
return 0;
|
||||
tm.tm_year -= 1900;
|
||||
|
|
@ -2027,7 +2027,7 @@ cfg_convert_timeval(const char* str)
|
|||
return t;
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
cfg_count_numbers(const char* s)
|
||||
{
|
||||
/* format ::= (sp num)+ sp */
|
||||
|
|
@ -2062,7 +2062,7 @@ static int isalldigit(const char* str, size_t l)
|
|||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
cfg_parse_memsize(const char* str, size_t* res)
|
||||
{
|
||||
size_t len;
|
||||
|
|
@ -2078,11 +2078,11 @@ cfg_parse_memsize(const char* str, size_t* res)
|
|||
/* check appended num */
|
||||
while(len>0 && str[len-1]==' ')
|
||||
len--;
|
||||
if(len > 1 && str[len-1] == 'b')
|
||||
if(len > 1 && str[len-1] == 'b')
|
||||
len--;
|
||||
else if(len > 1 && str[len-1] == 'B')
|
||||
else if(len > 1 && str[len-1] == 'B')
|
||||
len--;
|
||||
|
||||
|
||||
if(len > 1 && tolower((unsigned char)str[len-1]) == 'g')
|
||||
mult = 1024*1024*1024;
|
||||
else if(len > 1 && tolower((unsigned char)str[len-1]) == 'm')
|
||||
|
|
@ -2169,7 +2169,7 @@ uint8_t* config_parse_taglist(struct config_file* cfg, char* str,
|
|||
log_err("out of memory");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* parse */
|
||||
s = str;
|
||||
while((p=strsep(&s, " \t\n")) != NULL) {
|
||||
|
|
@ -2255,7 +2255,7 @@ int taglist_intersect(uint8_t* list1, size_t list1len, const uint8_t* list2,
|
|||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
config_apply(struct config_file* config)
|
||||
{
|
||||
MAX_TTL = (time_t)config->max_ttl;
|
||||
|
|
@ -2297,7 +2297,7 @@ void config_lookup_uid(struct config_file* cfg)
|
|||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Calculate string length of full pathname in original filesys
|
||||
* @param fname: the path name to convert.
|
||||
* Must not be null or empty.
|
||||
|
|
@ -2311,7 +2311,7 @@ strlen_after_chroot(const char* fname, struct config_file* cfg, int use_chdir)
|
|||
{
|
||||
size_t len = 0;
|
||||
int slashit = 0;
|
||||
if(cfg->chrootdir && cfg->chrootdir[0] &&
|
||||
if(cfg->chrootdir && cfg->chrootdir[0] &&
|
||||
strncmp(cfg->chrootdir, fname, strlen(cfg->chrootdir)) == 0) {
|
||||
/* already full pathname, return it */
|
||||
return strlen(fname);
|
||||
|
|
@ -2334,8 +2334,8 @@ strlen_after_chroot(const char* fname, struct config_file* cfg, int use_chdir)
|
|||
/* prepend chdir */
|
||||
if(slashit && cfg->directory[0] != '/')
|
||||
len++;
|
||||
if(cfg->chrootdir && cfg->chrootdir[0] &&
|
||||
strncmp(cfg->chrootdir, cfg->directory,
|
||||
if(cfg->chrootdir && cfg->chrootdir[0] &&
|
||||
strncmp(cfg->chrootdir, cfg->directory,
|
||||
strlen(cfg->chrootdir)) == 0)
|
||||
len += strlen(cfg->directory)-strlen(cfg->chrootdir);
|
||||
else len += strlen(cfg->directory);
|
||||
|
|
@ -2358,7 +2358,7 @@ fname_after_chroot(const char* fname, struct config_file* cfg, int use_chdir)
|
|||
return NULL;
|
||||
buf[0] = 0;
|
||||
/* is fname already in chroot ? */
|
||||
if(cfg->chrootdir && cfg->chrootdir[0] &&
|
||||
if(cfg->chrootdir && cfg->chrootdir[0] &&
|
||||
strncmp(cfg->chrootdir, fname, strlen(cfg->chrootdir)) == 0) {
|
||||
/* already full pathname, return it */
|
||||
(void)strlcpy(buf, fname, len);
|
||||
|
|
@ -2384,10 +2384,10 @@ fname_after_chroot(const char* fname, struct config_file* cfg, int use_chdir)
|
|||
if(slashit && cfg->directory[0] != '/')
|
||||
(void)strlcat(buf, "/", len);
|
||||
/* is the directory already in the chroot? */
|
||||
if(cfg->chrootdir && cfg->chrootdir[0] &&
|
||||
strncmp(cfg->chrootdir, cfg->directory,
|
||||
if(cfg->chrootdir && cfg->chrootdir[0] &&
|
||||
strncmp(cfg->chrootdir, cfg->directory,
|
||||
strlen(cfg->chrootdir)) == 0)
|
||||
(void)strlcat(buf, cfg->directory+strlen(cfg->chrootdir),
|
||||
(void)strlcat(buf, cfg->directory+strlen(cfg->chrootdir),
|
||||
len);
|
||||
else (void)strlcat(buf, cfg->directory, len);
|
||||
slashit = 1;
|
||||
|
|
@ -2424,7 +2424,7 @@ static char* last_space_pos(const char* str)
|
|||
return (sp>tab)?sp:tab;
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
cfg_parse_local_zone(struct config_file* cfg, const char* val)
|
||||
{
|
||||
const char *type, *name_end, *name;
|
||||
|
|
@ -2459,11 +2459,11 @@ cfg_parse_local_zone(struct config_file* cfg, const char* val)
|
|||
}
|
||||
|
||||
if(strcmp(type, "nodefault")==0) {
|
||||
return cfg_strlist_insert(&cfg->local_zones_nodefault,
|
||||
return cfg_strlist_insert(&cfg->local_zones_nodefault,
|
||||
strdup(name));
|
||||
#ifdef USE_IPSET
|
||||
} else if(strcmp(type, "ipset")==0) {
|
||||
return cfg_strlist_insert(&cfg->local_zones_ipset,
|
||||
return cfg_strlist_insert(&cfg->local_zones_ipset,
|
||||
strdup(name));
|
||||
#endif
|
||||
} else {
|
||||
|
|
@ -2518,7 +2518,7 @@ char* cfg_ptr_reverse(char* str)
|
|||
const char* hex = "0123456789abcdef";
|
||||
char *p = buf;
|
||||
int i;
|
||||
memmove(ad, &((struct sockaddr_in6*)&addr)->sin6_addr,
|
||||
memmove(ad, &((struct sockaddr_in6*)&addr)->sin6_addr,
|
||||
sizeof(ad));
|
||||
for(i=15; i>=0; i--) {
|
||||
uint8_t b = ad[i];
|
||||
|
|
@ -2530,7 +2530,7 @@ char* cfg_ptr_reverse(char* str)
|
|||
snprintf(buf+16*4, sizeof(buf)-16*4, "ip6.arpa. ");
|
||||
} else {
|
||||
uint8_t ad[4];
|
||||
memmove(ad, &((struct sockaddr_in*)&addr)->sin_addr,
|
||||
memmove(ad, &((struct sockaddr_in*)&addr)->sin_addr,
|
||||
sizeof(ad));
|
||||
snprintf(buf, sizeof(buf), "%u.%u.%u.%u.in-addr.arpa. ",
|
||||
(unsigned)ad[3], (unsigned)ad[2],
|
||||
|
|
|
|||
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -232,7 +232,7 @@ struct config_file {
|
|||
/** interface description strings (IP addresses) */
|
||||
char **ifs;
|
||||
|
||||
/** number of outgoing interfaces to open.
|
||||
/** number of outgoing interfaces to open.
|
||||
* If 0 default all interfaces. */
|
||||
int num_out_ifs;
|
||||
/** outgoing interface description strings (IP addresses) */
|
||||
|
|
@ -251,7 +251,7 @@ struct config_file {
|
|||
/** list of donotquery addresses, linked list */
|
||||
struct config_strlist* donotqueryaddrs;
|
||||
#ifdef CLIENT_SUBNET
|
||||
/** list of servers we send edns-client-subnet option to and
|
||||
/** list of servers we send edns-client-subnet option to and
|
||||
* accept option from, linked list */
|
||||
struct config_strlist* client_subnet;
|
||||
/** list of zones we send edns-client-subnet option for */
|
||||
|
|
@ -367,7 +367,7 @@ struct config_file {
|
|||
|
||||
/** the module configuration string */
|
||||
char* module_conf;
|
||||
|
||||
|
||||
/** files with trusted DS and DNSKEYs in zonefile format, list */
|
||||
struct config_strlist* trust_anchor_file_list;
|
||||
/** list of trustanchor keys, linked list */
|
||||
|
|
@ -392,7 +392,7 @@ struct config_file {
|
|||
/** max number of query restarts, number of IPs to probe */
|
||||
int32_t val_max_restart;
|
||||
/** this value sets the number of seconds before revalidating bogus */
|
||||
int bogus_ttl;
|
||||
int bogus_ttl;
|
||||
/** should validator clean additional section for secure msgs */
|
||||
int val_clean_additional;
|
||||
/** log bogus messages by the validator */
|
||||
|
|
@ -816,7 +816,7 @@ struct config_view {
|
|||
struct config_strlist* local_zones_ipset;
|
||||
#endif
|
||||
/** Fallback to global local_zones when there is no match in the view
|
||||
* view specific tree. 1 for yes, 0 for no */
|
||||
* view specific tree. 1 for yes, 0 for no */
|
||||
int isfirst;
|
||||
/** predefined actions for particular IP address responses */
|
||||
struct config_str2list* respip_actions;
|
||||
|
|
@ -891,7 +891,7 @@ struct config_file* config_create_forlib(void);
|
|||
* @param config: where options are stored into, must be freshly created.
|
||||
* @param filename: name of configfile. If NULL nothing is done.
|
||||
* @param chroot: if not NULL, the chroot dir currently in use (for include).
|
||||
* @return: false on error. In that case errno is set, ENOENT means
|
||||
* @return: false on error. In that case errno is set, ENOENT means
|
||||
* file not found.
|
||||
*/
|
||||
int config_read(struct config_file* config, const char* filename,
|
||||
|
|
@ -926,16 +926,16 @@ void config_lookup_uid(struct config_file* config);
|
|||
int config_set_option(struct config_file* config, const char* option,
|
||||
const char* value);
|
||||
|
||||
/**
|
||||
/**
|
||||
* Call print routine for the given option.
|
||||
* @param cfg: config.
|
||||
* @param opt: option name without trailing :.
|
||||
* @param opt: option name without trailing :.
|
||||
* This is different from config_set_option.
|
||||
* @param func: print func, called as (str, arg) for every data element.
|
||||
* @param arg: user argument for print func.
|
||||
* @return false if the option name is not supported (syntax error).
|
||||
*/
|
||||
int config_get_option(struct config_file* cfg, const char* opt,
|
||||
int config_get_option(struct config_file* cfg, const char* opt,
|
||||
void (*func)(char*,void*), void* arg);
|
||||
|
||||
/**
|
||||
|
|
@ -955,7 +955,7 @@ int config_get_option_list(struct config_file* cfg, const char* opt,
|
|||
* @param str: string. malloced, caller must free it.
|
||||
* @return 0=OK, 1=syntax error, 2=malloc failed.
|
||||
*/
|
||||
int config_get_option_collate(struct config_file* cfg, const char* opt,
|
||||
int config_get_option_collate(struct config_file* cfg, const char* opt,
|
||||
char** str);
|
||||
|
||||
/**
|
||||
|
|
@ -1150,7 +1150,7 @@ int cfg_count_numbers(const char* str);
|
|||
* k=1024, m=1024*1024, g=1024*1024*1024.
|
||||
* @param str: string
|
||||
* @param res: result is stored here, size in bytes.
|
||||
* @return: true if parsed correctly, or 0 on a parse error (and an error
|
||||
* @return: true if parsed correctly, or 0 on a parse error (and an error
|
||||
* is logged).
|
||||
*/
|
||||
int cfg_parse_memsize(const char* str, size_t* res);
|
||||
|
|
@ -1184,7 +1184,7 @@ int find_tag_id(struct config_file* cfg, const char* tag);
|
|||
/**
|
||||
* parse taglist from string into bytestring with bitlist.
|
||||
* @param cfg: the config structure (with tagnames)
|
||||
* @param str: the string to parse. Parse puts 0 bytes in string.
|
||||
* @param str: the string to parse. Parse puts 0 bytes in string.
|
||||
* @param listlen: returns length of in bytes.
|
||||
* @return malloced bytes with a bitlist of the tags. or NULL on parse error
|
||||
* or malloc failure.
|
||||
|
|
@ -1227,7 +1227,7 @@ int cfg_parse_local_zone(struct config_file* cfg, const char* val);
|
|||
* @param allow: give true if this range is permitted.
|
||||
* @param avail: the array from cfg.
|
||||
* @param num: size of the array (65536).
|
||||
* @return: true if parsed correctly, or 0 on a parse error (and an error
|
||||
* @return: true if parsed correctly, or 0 on a parse error (and an error
|
||||
* is logged).
|
||||
*/
|
||||
int cfg_mark_ports(const char* str, int allow, int* avail, int num);
|
||||
|
|
@ -1255,7 +1255,7 @@ void cfg_apply_local_port_policy(struct config_file* cfg, int num);
|
|||
*/
|
||||
int cfg_scan_ports(int* avail, int num);
|
||||
|
||||
/**
|
||||
/**
|
||||
* Convert a filename to full pathname in original filesys
|
||||
* @param fname: the path name to convert.
|
||||
* Must not be null or empty.
|
||||
|
|
@ -1264,7 +1264,7 @@ int cfg_scan_ports(int* avail, int num);
|
|||
* @return pointer to malloced buffer which is: [chroot][chdir]fname
|
||||
* or NULL on malloc failure.
|
||||
*/
|
||||
char* fname_after_chroot(const char* fname, struct config_file* cfg,
|
||||
char* fname_after_chroot(const char* fname, struct config_file* cfg,
|
||||
int use_chdir);
|
||||
|
||||
/**
|
||||
|
|
@ -1349,4 +1349,3 @@ int if_is_dnscrypt(const char* ifname, const char* port, int dnscrypt_port);
|
|||
#endif
|
||||
|
||||
#endif /* UTIL_CONFIG_FILE_H */
|
||||
|
||||
|
|
|
|||
6737
util/configlexer.c
6737
util/configlexer.c
File diff suppressed because it is too large
Load diff
|
|
@ -209,9 +209,9 @@ SQANY [^\'\n\r\\]|\\.
|
|||
%x quotedstring singlequotedstr include include_quoted val include_toplevel include_toplevel_quoted
|
||||
|
||||
%%
|
||||
<INITIAL,val>{SPACE}* {
|
||||
<INITIAL,val>{SPACE}* {
|
||||
LEXOUT(("SP ")); /* ignore */ }
|
||||
<INITIAL,val>{SPACE}*{COMMENT}.* {
|
||||
<INITIAL,val>{SPACE}*{COMMENT}.* {
|
||||
/* note that flex makes the longest match and '.' is any but not nl */
|
||||
LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
|
||||
server{COLON} { YDVAR(0, VAR_SERVER) }
|
||||
|
|
@ -414,7 +414,7 @@ val-log-level{COLON} { YDVAR(1, VAR_VAL_LOG_LEVEL) }
|
|||
key-cache-size{COLON} { YDVAR(1, VAR_KEY_CACHE_SIZE) }
|
||||
key-cache-slabs{COLON} { YDVAR(1, VAR_KEY_CACHE_SLABS) }
|
||||
neg-cache-size{COLON} { YDVAR(1, VAR_NEG_CACHE_SIZE) }
|
||||
val-nsec3-keysize-iterations{COLON} {
|
||||
val-nsec3-keysize-iterations{COLON} {
|
||||
YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
|
||||
zonemd-permissive-mode{COLON} { YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) }
|
||||
zonemd-check{COLON} { YDVAR(1, VAR_ZONEMD_CHECK) }
|
||||
|
|
@ -579,7 +579,7 @@ proxy-protocol-port{COLON} { YDVAR(1, VAR_PROXY_PROTOCOL_PORT) }
|
|||
else { BEGIN(val); }
|
||||
}
|
||||
<quotedstring>{DQANY}* { LEXOUT(("STR(%s) ", yytext)); yymore(); }
|
||||
<quotedstring>{NEWLINE} { yyerror("newline inside quoted string, no end \"");
|
||||
<quotedstring>{NEWLINE} { yyerror("newline inside quoted string, no end \"");
|
||||
cfg_parser->line++; BEGIN(INITIAL); }
|
||||
<quotedstring>\" {
|
||||
LEXOUT(("QE "));
|
||||
|
|
@ -600,7 +600,7 @@ proxy-protocol-port{COLON} { YDVAR(1, VAR_PROXY_PROTOCOL_PORT) }
|
|||
else { BEGIN(val); }
|
||||
}
|
||||
<singlequotedstr>{SQANY}* { LEXOUT(("STR(%s) ", yytext)); yymore(); }
|
||||
<singlequotedstr>{NEWLINE} { yyerror("newline inside quoted string, no end '");
|
||||
<singlequotedstr>{NEWLINE} { yyerror("newline inside quoted string, no end '");
|
||||
cfg_parser->line++; BEGIN(INITIAL); }
|
||||
<singlequotedstr>\' {
|
||||
LEXOUT(("SQE "));
|
||||
|
|
@ -614,7 +614,7 @@ proxy-protocol-port{COLON} { YDVAR(1, VAR_PROXY_PROTOCOL_PORT) }
|
|||
}
|
||||
|
||||
/* include: directive */
|
||||
<INITIAL,val>include{COLON} {
|
||||
<INITIAL,val>include{COLON} {
|
||||
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
|
||||
<include><<EOF>> {
|
||||
yyerror("EOF inside include directive");
|
||||
|
|
@ -633,7 +633,7 @@ proxy-protocol-port{COLON} { YDVAR(1, VAR_PROXY_PROTOCOL_PORT) }
|
|||
BEGIN(inc_prev);
|
||||
}
|
||||
<include_quoted>{DQANY}* { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
|
||||
<include_quoted>{NEWLINE} { yyerror("newline before \" in include name");
|
||||
<include_quoted>{NEWLINE} { yyerror("newline before \" in include name");
|
||||
cfg_parser->line++; BEGIN(inc_prev); }
|
||||
<include_quoted>\" {
|
||||
LEXOUT(("IQE "));
|
||||
|
|
@ -688,7 +688,7 @@ proxy-protocol-port{COLON} { YDVAR(1, VAR_PROXY_PROTOCOL_PORT) }
|
|||
return (VAR_FORCE_TOPLEVEL);
|
||||
}
|
||||
|
||||
<val>{UNQUOTEDLETTER}* { LEXOUT(("unquotedstr(%s) ", yytext));
|
||||
<val>{UNQUOTEDLETTER}* { LEXOUT(("unquotedstr(%s) ", yytext));
|
||||
if(--num_args == 0) { BEGIN(INITIAL); }
|
||||
yylval.str = strdup(yytext); return STRING_ARG; }
|
||||
|
||||
|
|
|
|||
7479
util/configparser.c
7479
util/configparser.c
File diff suppressed because it is too large
Load diff
|
|
@ -1,763 +0,0 @@
|
|||
/* A Bison parser, made by GNU Bison 3.8.2. */
|
||||
|
||||
/* Bison interface for Yacc-like parsers in C
|
||||
|
||||
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
|
||||
Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
/* As a special exception, you may create a larger work that contains
|
||||
part or all of the Bison parser skeleton and distribute that work
|
||||
under terms of your choice, so long as that work isn't itself a
|
||||
parser generator using the skeleton or a modified version thereof
|
||||
as a parser skeleton. Alternatively, if you modify or redistribute
|
||||
the parser skeleton itself, you may (at your option) remove this
|
||||
special exception, which will cause the skeleton and the resulting
|
||||
Bison output files to be licensed under the GNU General Public
|
||||
License without this special exception.
|
||||
|
||||
This special exception was added by the Free Software Foundation in
|
||||
version 2.2 of Bison. */
|
||||
|
||||
/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
|
||||
especially those whose name start with YY_ or yy_. They are
|
||||
private implementation details that can be changed or removed. */
|
||||
|
||||
#ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
|
||||
# define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
|
||||
/* Debug traces. */
|
||||
#ifndef YYDEBUG
|
||||
# define YYDEBUG 0
|
||||
#endif
|
||||
#if YYDEBUG
|
||||
extern int yydebug;
|
||||
#endif
|
||||
|
||||
/* Token kinds. */
|
||||
#ifndef YYTOKENTYPE
|
||||
# define YYTOKENTYPE
|
||||
enum yytokentype
|
||||
{
|
||||
YYEMPTY = -2,
|
||||
YYEOF = 0, /* "end of file" */
|
||||
YYerror = 256, /* error */
|
||||
YYUNDEF = 257, /* "invalid token" */
|
||||
SPACE = 258, /* SPACE */
|
||||
LETTER = 259, /* LETTER */
|
||||
NEWLINE = 260, /* NEWLINE */
|
||||
COMMENT = 261, /* COMMENT */
|
||||
COLON = 262, /* COLON */
|
||||
ANY = 263, /* ANY */
|
||||
ZONESTR = 264, /* ZONESTR */
|
||||
STRING_ARG = 265, /* STRING_ARG */
|
||||
VAR_FORCE_TOPLEVEL = 266, /* VAR_FORCE_TOPLEVEL */
|
||||
VAR_SERVER = 267, /* VAR_SERVER */
|
||||
VAR_VERBOSITY = 268, /* VAR_VERBOSITY */
|
||||
VAR_NUM_THREADS = 269, /* VAR_NUM_THREADS */
|
||||
VAR_PORT = 270, /* VAR_PORT */
|
||||
VAR_OUTGOING_RANGE = 271, /* VAR_OUTGOING_RANGE */
|
||||
VAR_INTERFACE = 272, /* VAR_INTERFACE */
|
||||
VAR_PREFER_IP4 = 273, /* VAR_PREFER_IP4 */
|
||||
VAR_DO_IP4 = 274, /* VAR_DO_IP4 */
|
||||
VAR_DO_IP6 = 275, /* VAR_DO_IP6 */
|
||||
VAR_PREFER_IP6 = 276, /* VAR_PREFER_IP6 */
|
||||
VAR_DO_UDP = 277, /* VAR_DO_UDP */
|
||||
VAR_DO_TCP = 278, /* VAR_DO_TCP */
|
||||
VAR_TCP_MSS = 279, /* VAR_TCP_MSS */
|
||||
VAR_OUTGOING_TCP_MSS = 280, /* VAR_OUTGOING_TCP_MSS */
|
||||
VAR_TCP_IDLE_TIMEOUT = 281, /* VAR_TCP_IDLE_TIMEOUT */
|
||||
VAR_EDNS_TCP_KEEPALIVE = 282, /* VAR_EDNS_TCP_KEEPALIVE */
|
||||
VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */
|
||||
VAR_CHROOT = 284, /* VAR_CHROOT */
|
||||
VAR_USERNAME = 285, /* VAR_USERNAME */
|
||||
VAR_DIRECTORY = 286, /* VAR_DIRECTORY */
|
||||
VAR_LOGFILE = 287, /* VAR_LOGFILE */
|
||||
VAR_PIDFILE = 288, /* VAR_PIDFILE */
|
||||
VAR_MSG_CACHE_SIZE = 289, /* VAR_MSG_CACHE_SIZE */
|
||||
VAR_MSG_CACHE_SLABS = 290, /* VAR_MSG_CACHE_SLABS */
|
||||
VAR_NUM_QUERIES_PER_THREAD = 291, /* VAR_NUM_QUERIES_PER_THREAD */
|
||||
VAR_RRSET_CACHE_SIZE = 292, /* VAR_RRSET_CACHE_SIZE */
|
||||
VAR_RRSET_CACHE_SLABS = 293, /* VAR_RRSET_CACHE_SLABS */
|
||||
VAR_OUTGOING_NUM_TCP = 294, /* VAR_OUTGOING_NUM_TCP */
|
||||
VAR_INFRA_HOST_TTL = 295, /* VAR_INFRA_HOST_TTL */
|
||||
VAR_INFRA_LAME_TTL = 296, /* VAR_INFRA_LAME_TTL */
|
||||
VAR_INFRA_CACHE_SLABS = 297, /* VAR_INFRA_CACHE_SLABS */
|
||||
VAR_INFRA_CACHE_NUMHOSTS = 298, /* VAR_INFRA_CACHE_NUMHOSTS */
|
||||
VAR_INFRA_CACHE_LAME_SIZE = 299, /* VAR_INFRA_CACHE_LAME_SIZE */
|
||||
VAR_NAME = 300, /* VAR_NAME */
|
||||
VAR_STUB_ZONE = 301, /* VAR_STUB_ZONE */
|
||||
VAR_STUB_HOST = 302, /* VAR_STUB_HOST */
|
||||
VAR_STUB_ADDR = 303, /* VAR_STUB_ADDR */
|
||||
VAR_TARGET_FETCH_POLICY = 304, /* VAR_TARGET_FETCH_POLICY */
|
||||
VAR_HARDEN_SHORT_BUFSIZE = 305, /* VAR_HARDEN_SHORT_BUFSIZE */
|
||||
VAR_HARDEN_LARGE_QUERIES = 306, /* VAR_HARDEN_LARGE_QUERIES */
|
||||
VAR_FORWARD_ZONE = 307, /* VAR_FORWARD_ZONE */
|
||||
VAR_FORWARD_HOST = 308, /* VAR_FORWARD_HOST */
|
||||
VAR_FORWARD_ADDR = 309, /* VAR_FORWARD_ADDR */
|
||||
VAR_DO_NOT_QUERY_ADDRESS = 310, /* VAR_DO_NOT_QUERY_ADDRESS */
|
||||
VAR_HIDE_IDENTITY = 311, /* VAR_HIDE_IDENTITY */
|
||||
VAR_HIDE_VERSION = 312, /* VAR_HIDE_VERSION */
|
||||
VAR_IDENTITY = 313, /* VAR_IDENTITY */
|
||||
VAR_VERSION = 314, /* VAR_VERSION */
|
||||
VAR_HARDEN_GLUE = 315, /* VAR_HARDEN_GLUE */
|
||||
VAR_MODULE_CONF = 316, /* VAR_MODULE_CONF */
|
||||
VAR_TRUST_ANCHOR_FILE = 317, /* VAR_TRUST_ANCHOR_FILE */
|
||||
VAR_TRUST_ANCHOR = 318, /* VAR_TRUST_ANCHOR */
|
||||
VAR_VAL_OVERRIDE_DATE = 319, /* VAR_VAL_OVERRIDE_DATE */
|
||||
VAR_BOGUS_TTL = 320, /* VAR_BOGUS_TTL */
|
||||
VAR_VAL_CLEAN_ADDITIONAL = 321, /* VAR_VAL_CLEAN_ADDITIONAL */
|
||||
VAR_VAL_PERMISSIVE_MODE = 322, /* VAR_VAL_PERMISSIVE_MODE */
|
||||
VAR_INCOMING_NUM_TCP = 323, /* VAR_INCOMING_NUM_TCP */
|
||||
VAR_MSG_BUFFER_SIZE = 324, /* VAR_MSG_BUFFER_SIZE */
|
||||
VAR_KEY_CACHE_SIZE = 325, /* VAR_KEY_CACHE_SIZE */
|
||||
VAR_KEY_CACHE_SLABS = 326, /* VAR_KEY_CACHE_SLABS */
|
||||
VAR_TRUSTED_KEYS_FILE = 327, /* VAR_TRUSTED_KEYS_FILE */
|
||||
VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */
|
||||
VAR_USE_SYSLOG = 329, /* VAR_USE_SYSLOG */
|
||||
VAR_OUTGOING_INTERFACE = 330, /* VAR_OUTGOING_INTERFACE */
|
||||
VAR_ROOT_HINTS = 331, /* VAR_ROOT_HINTS */
|
||||
VAR_DO_NOT_QUERY_LOCALHOST = 332, /* VAR_DO_NOT_QUERY_LOCALHOST */
|
||||
VAR_CACHE_MAX_TTL = 333, /* VAR_CACHE_MAX_TTL */
|
||||
VAR_HARDEN_DNSSEC_STRIPPED = 334, /* VAR_HARDEN_DNSSEC_STRIPPED */
|
||||
VAR_ACCESS_CONTROL = 335, /* VAR_ACCESS_CONTROL */
|
||||
VAR_LOCAL_ZONE = 336, /* VAR_LOCAL_ZONE */
|
||||
VAR_LOCAL_DATA = 337, /* VAR_LOCAL_DATA */
|
||||
VAR_INTERFACE_AUTOMATIC = 338, /* VAR_INTERFACE_AUTOMATIC */
|
||||
VAR_STATISTICS_INTERVAL = 339, /* VAR_STATISTICS_INTERVAL */
|
||||
VAR_DO_DAEMONIZE = 340, /* VAR_DO_DAEMONIZE */
|
||||
VAR_USE_CAPS_FOR_ID = 341, /* VAR_USE_CAPS_FOR_ID */
|
||||
VAR_STATISTICS_CUMULATIVE = 342, /* VAR_STATISTICS_CUMULATIVE */
|
||||
VAR_OUTGOING_PORT_PERMIT = 343, /* VAR_OUTGOING_PORT_PERMIT */
|
||||
VAR_OUTGOING_PORT_AVOID = 344, /* VAR_OUTGOING_PORT_AVOID */
|
||||
VAR_DLV_ANCHOR_FILE = 345, /* VAR_DLV_ANCHOR_FILE */
|
||||
VAR_DLV_ANCHOR = 346, /* VAR_DLV_ANCHOR */
|
||||
VAR_NEG_CACHE_SIZE = 347, /* VAR_NEG_CACHE_SIZE */
|
||||
VAR_HARDEN_REFERRAL_PATH = 348, /* VAR_HARDEN_REFERRAL_PATH */
|
||||
VAR_PRIVATE_ADDRESS = 349, /* VAR_PRIVATE_ADDRESS */
|
||||
VAR_PRIVATE_DOMAIN = 350, /* VAR_PRIVATE_DOMAIN */
|
||||
VAR_REMOTE_CONTROL = 351, /* VAR_REMOTE_CONTROL */
|
||||
VAR_CONTROL_ENABLE = 352, /* VAR_CONTROL_ENABLE */
|
||||
VAR_CONTROL_INTERFACE = 353, /* VAR_CONTROL_INTERFACE */
|
||||
VAR_CONTROL_PORT = 354, /* VAR_CONTROL_PORT */
|
||||
VAR_SERVER_KEY_FILE = 355, /* VAR_SERVER_KEY_FILE */
|
||||
VAR_SERVER_CERT_FILE = 356, /* VAR_SERVER_CERT_FILE */
|
||||
VAR_CONTROL_KEY_FILE = 357, /* VAR_CONTROL_KEY_FILE */
|
||||
VAR_CONTROL_CERT_FILE = 358, /* VAR_CONTROL_CERT_FILE */
|
||||
VAR_CONTROL_USE_CERT = 359, /* VAR_CONTROL_USE_CERT */
|
||||
VAR_TCP_REUSE_TIMEOUT = 360, /* VAR_TCP_REUSE_TIMEOUT */
|
||||
VAR_MAX_REUSE_TCP_QUERIES = 361, /* VAR_MAX_REUSE_TCP_QUERIES */
|
||||
VAR_EXTENDED_STATISTICS = 362, /* VAR_EXTENDED_STATISTICS */
|
||||
VAR_LOCAL_DATA_PTR = 363, /* VAR_LOCAL_DATA_PTR */
|
||||
VAR_JOSTLE_TIMEOUT = 364, /* VAR_JOSTLE_TIMEOUT */
|
||||
VAR_STUB_PRIME = 365, /* VAR_STUB_PRIME */
|
||||
VAR_UNWANTED_REPLY_THRESHOLD = 366, /* VAR_UNWANTED_REPLY_THRESHOLD */
|
||||
VAR_LOG_TIME_ASCII = 367, /* VAR_LOG_TIME_ASCII */
|
||||
VAR_DOMAIN_INSECURE = 368, /* VAR_DOMAIN_INSECURE */
|
||||
VAR_PYTHON = 369, /* VAR_PYTHON */
|
||||
VAR_PYTHON_SCRIPT = 370, /* VAR_PYTHON_SCRIPT */
|
||||
VAR_VAL_SIG_SKEW_MIN = 371, /* VAR_VAL_SIG_SKEW_MIN */
|
||||
VAR_VAL_SIG_SKEW_MAX = 372, /* VAR_VAL_SIG_SKEW_MAX */
|
||||
VAR_VAL_MAX_RESTART = 373, /* VAR_VAL_MAX_RESTART */
|
||||
VAR_CACHE_MIN_TTL = 374, /* VAR_CACHE_MIN_TTL */
|
||||
VAR_VAL_LOG_LEVEL = 375, /* VAR_VAL_LOG_LEVEL */
|
||||
VAR_AUTO_TRUST_ANCHOR_FILE = 376, /* VAR_AUTO_TRUST_ANCHOR_FILE */
|
||||
VAR_KEEP_MISSING = 377, /* VAR_KEEP_MISSING */
|
||||
VAR_ADD_HOLDDOWN = 378, /* VAR_ADD_HOLDDOWN */
|
||||
VAR_DEL_HOLDDOWN = 379, /* VAR_DEL_HOLDDOWN */
|
||||
VAR_SO_RCVBUF = 380, /* VAR_SO_RCVBUF */
|
||||
VAR_EDNS_BUFFER_SIZE = 381, /* VAR_EDNS_BUFFER_SIZE */
|
||||
VAR_PREFETCH = 382, /* VAR_PREFETCH */
|
||||
VAR_PREFETCH_KEY = 383, /* VAR_PREFETCH_KEY */
|
||||
VAR_SO_SNDBUF = 384, /* VAR_SO_SNDBUF */
|
||||
VAR_SO_REUSEPORT = 385, /* VAR_SO_REUSEPORT */
|
||||
VAR_HARDEN_BELOW_NXDOMAIN = 386, /* VAR_HARDEN_BELOW_NXDOMAIN */
|
||||
VAR_IGNORE_CD_FLAG = 387, /* VAR_IGNORE_CD_FLAG */
|
||||
VAR_LOG_QUERIES = 388, /* VAR_LOG_QUERIES */
|
||||
VAR_LOG_REPLIES = 389, /* VAR_LOG_REPLIES */
|
||||
VAR_LOG_LOCAL_ACTIONS = 390, /* VAR_LOG_LOCAL_ACTIONS */
|
||||
VAR_TCP_UPSTREAM = 391, /* VAR_TCP_UPSTREAM */
|
||||
VAR_SSL_UPSTREAM = 392, /* VAR_SSL_UPSTREAM */
|
||||
VAR_TCP_AUTH_QUERY_TIMEOUT = 393, /* VAR_TCP_AUTH_QUERY_TIMEOUT */
|
||||
VAR_SSL_SERVICE_KEY = 394, /* VAR_SSL_SERVICE_KEY */
|
||||
VAR_SSL_SERVICE_PEM = 395, /* VAR_SSL_SERVICE_PEM */
|
||||
VAR_SSL_PORT = 396, /* VAR_SSL_PORT */
|
||||
VAR_FORWARD_FIRST = 397, /* VAR_FORWARD_FIRST */
|
||||
VAR_STUB_SSL_UPSTREAM = 398, /* VAR_STUB_SSL_UPSTREAM */
|
||||
VAR_FORWARD_SSL_UPSTREAM = 399, /* VAR_FORWARD_SSL_UPSTREAM */
|
||||
VAR_TLS_CERT_BUNDLE = 400, /* VAR_TLS_CERT_BUNDLE */
|
||||
VAR_STUB_TCP_UPSTREAM = 401, /* VAR_STUB_TCP_UPSTREAM */
|
||||
VAR_FORWARD_TCP_UPSTREAM = 402, /* VAR_FORWARD_TCP_UPSTREAM */
|
||||
VAR_HTTPS_PORT = 403, /* VAR_HTTPS_PORT */
|
||||
VAR_HTTP_ENDPOINT = 404, /* VAR_HTTP_ENDPOINT */
|
||||
VAR_HTTP_MAX_STREAMS = 405, /* VAR_HTTP_MAX_STREAMS */
|
||||
VAR_HTTP_QUERY_BUFFER_SIZE = 406, /* VAR_HTTP_QUERY_BUFFER_SIZE */
|
||||
VAR_HTTP_RESPONSE_BUFFER_SIZE = 407, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */
|
||||
VAR_HTTP_NODELAY = 408, /* VAR_HTTP_NODELAY */
|
||||
VAR_HTTP_NOTLS_DOWNSTREAM = 409, /* VAR_HTTP_NOTLS_DOWNSTREAM */
|
||||
VAR_STUB_FIRST = 410, /* VAR_STUB_FIRST */
|
||||
VAR_MINIMAL_RESPONSES = 411, /* VAR_MINIMAL_RESPONSES */
|
||||
VAR_RRSET_ROUNDROBIN = 412, /* VAR_RRSET_ROUNDROBIN */
|
||||
VAR_MAX_UDP_SIZE = 413, /* VAR_MAX_UDP_SIZE */
|
||||
VAR_DELAY_CLOSE = 414, /* VAR_DELAY_CLOSE */
|
||||
VAR_UDP_CONNECT = 415, /* VAR_UDP_CONNECT */
|
||||
VAR_UNBLOCK_LAN_ZONES = 416, /* VAR_UNBLOCK_LAN_ZONES */
|
||||
VAR_INSECURE_LAN_ZONES = 417, /* VAR_INSECURE_LAN_ZONES */
|
||||
VAR_INFRA_CACHE_MIN_RTT = 418, /* VAR_INFRA_CACHE_MIN_RTT */
|
||||
VAR_INFRA_CACHE_MAX_RTT = 419, /* VAR_INFRA_CACHE_MAX_RTT */
|
||||
VAR_INFRA_KEEP_PROBING = 420, /* VAR_INFRA_KEEP_PROBING */
|
||||
VAR_DNS64_PREFIX = 421, /* VAR_DNS64_PREFIX */
|
||||
VAR_DNS64_SYNTHALL = 422, /* VAR_DNS64_SYNTHALL */
|
||||
VAR_DNS64_IGNORE_AAAA = 423, /* VAR_DNS64_IGNORE_AAAA */
|
||||
VAR_DNSTAP = 424, /* VAR_DNSTAP */
|
||||
VAR_DNSTAP_ENABLE = 425, /* VAR_DNSTAP_ENABLE */
|
||||
VAR_DNSTAP_SOCKET_PATH = 426, /* VAR_DNSTAP_SOCKET_PATH */
|
||||
VAR_DNSTAP_IP = 427, /* VAR_DNSTAP_IP */
|
||||
VAR_DNSTAP_TLS = 428, /* VAR_DNSTAP_TLS */
|
||||
VAR_DNSTAP_TLS_SERVER_NAME = 429, /* VAR_DNSTAP_TLS_SERVER_NAME */
|
||||
VAR_DNSTAP_TLS_CERT_BUNDLE = 430, /* VAR_DNSTAP_TLS_CERT_BUNDLE */
|
||||
VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 431, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */
|
||||
VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 432, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */
|
||||
VAR_DNSTAP_SEND_IDENTITY = 433, /* VAR_DNSTAP_SEND_IDENTITY */
|
||||
VAR_DNSTAP_SEND_VERSION = 434, /* VAR_DNSTAP_SEND_VERSION */
|
||||
VAR_DNSTAP_BIDIRECTIONAL = 435, /* VAR_DNSTAP_BIDIRECTIONAL */
|
||||
VAR_DNSTAP_IDENTITY = 436, /* VAR_DNSTAP_IDENTITY */
|
||||
VAR_DNSTAP_VERSION = 437, /* VAR_DNSTAP_VERSION */
|
||||
VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 438, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */
|
||||
VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 439, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */
|
||||
VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 440, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */
|
||||
VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 441, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
|
||||
VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 442, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
|
||||
VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 443, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
|
||||
VAR_RESPONSE_IP_TAG = 444, /* VAR_RESPONSE_IP_TAG */
|
||||
VAR_RESPONSE_IP = 445, /* VAR_RESPONSE_IP */
|
||||
VAR_RESPONSE_IP_DATA = 446, /* VAR_RESPONSE_IP_DATA */
|
||||
VAR_HARDEN_ALGO_DOWNGRADE = 447, /* VAR_HARDEN_ALGO_DOWNGRADE */
|
||||
VAR_IP_TRANSPARENT = 448, /* VAR_IP_TRANSPARENT */
|
||||
VAR_IP_DSCP = 449, /* VAR_IP_DSCP */
|
||||
VAR_DISABLE_DNSSEC_LAME_CHECK = 450, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
|
||||
VAR_IP_RATELIMIT = 451, /* VAR_IP_RATELIMIT */
|
||||
VAR_IP_RATELIMIT_SLABS = 452, /* VAR_IP_RATELIMIT_SLABS */
|
||||
VAR_IP_RATELIMIT_SIZE = 453, /* VAR_IP_RATELIMIT_SIZE */
|
||||
VAR_RATELIMIT = 454, /* VAR_RATELIMIT */
|
||||
VAR_RATELIMIT_SLABS = 455, /* VAR_RATELIMIT_SLABS */
|
||||
VAR_RATELIMIT_SIZE = 456, /* VAR_RATELIMIT_SIZE */
|
||||
VAR_OUTBOUND_MSG_RETRY = 457, /* VAR_OUTBOUND_MSG_RETRY */
|
||||
VAR_MAX_SENT_COUNT = 458, /* VAR_MAX_SENT_COUNT */
|
||||
VAR_MAX_QUERY_RESTARTS = 459, /* VAR_MAX_QUERY_RESTARTS */
|
||||
VAR_RATELIMIT_FOR_DOMAIN = 460, /* VAR_RATELIMIT_FOR_DOMAIN */
|
||||
VAR_RATELIMIT_BELOW_DOMAIN = 461, /* VAR_RATELIMIT_BELOW_DOMAIN */
|
||||
VAR_IP_RATELIMIT_FACTOR = 462, /* VAR_IP_RATELIMIT_FACTOR */
|
||||
VAR_RATELIMIT_FACTOR = 463, /* VAR_RATELIMIT_FACTOR */
|
||||
VAR_IP_RATELIMIT_BACKOFF = 464, /* VAR_IP_RATELIMIT_BACKOFF */
|
||||
VAR_RATELIMIT_BACKOFF = 465, /* VAR_RATELIMIT_BACKOFF */
|
||||
VAR_SEND_CLIENT_SUBNET = 466, /* VAR_SEND_CLIENT_SUBNET */
|
||||
VAR_CLIENT_SUBNET_ZONE = 467, /* VAR_CLIENT_SUBNET_ZONE */
|
||||
VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 468, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
|
||||
VAR_CLIENT_SUBNET_OPCODE = 469, /* VAR_CLIENT_SUBNET_OPCODE */
|
||||
VAR_MAX_CLIENT_SUBNET_IPV4 = 470, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
|
||||
VAR_MAX_CLIENT_SUBNET_IPV6 = 471, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
|
||||
VAR_MIN_CLIENT_SUBNET_IPV4 = 472, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
|
||||
VAR_MIN_CLIENT_SUBNET_IPV6 = 473, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
|
||||
VAR_MAX_ECS_TREE_SIZE_IPV4 = 474, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
|
||||
VAR_MAX_ECS_TREE_SIZE_IPV6 = 475, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
|
||||
VAR_CAPS_WHITELIST = 476, /* VAR_CAPS_WHITELIST */
|
||||
VAR_CACHE_MAX_NEGATIVE_TTL = 477, /* VAR_CACHE_MAX_NEGATIVE_TTL */
|
||||
VAR_PERMIT_SMALL_HOLDDOWN = 478, /* VAR_PERMIT_SMALL_HOLDDOWN */
|
||||
VAR_QNAME_MINIMISATION = 479, /* VAR_QNAME_MINIMISATION */
|
||||
VAR_QNAME_MINIMISATION_STRICT = 480, /* VAR_QNAME_MINIMISATION_STRICT */
|
||||
VAR_IP_FREEBIND = 481, /* VAR_IP_FREEBIND */
|
||||
VAR_DEFINE_TAG = 482, /* VAR_DEFINE_TAG */
|
||||
VAR_LOCAL_ZONE_TAG = 483, /* VAR_LOCAL_ZONE_TAG */
|
||||
VAR_ACCESS_CONTROL_TAG = 484, /* VAR_ACCESS_CONTROL_TAG */
|
||||
VAR_LOCAL_ZONE_OVERRIDE = 485, /* VAR_LOCAL_ZONE_OVERRIDE */
|
||||
VAR_ACCESS_CONTROL_TAG_ACTION = 486, /* VAR_ACCESS_CONTROL_TAG_ACTION */
|
||||
VAR_ACCESS_CONTROL_TAG_DATA = 487, /* VAR_ACCESS_CONTROL_TAG_DATA */
|
||||
VAR_VIEW = 488, /* VAR_VIEW */
|
||||
VAR_ACCESS_CONTROL_VIEW = 489, /* VAR_ACCESS_CONTROL_VIEW */
|
||||
VAR_VIEW_FIRST = 490, /* VAR_VIEW_FIRST */
|
||||
VAR_SERVE_EXPIRED = 491, /* VAR_SERVE_EXPIRED */
|
||||
VAR_SERVE_EXPIRED_TTL = 492, /* VAR_SERVE_EXPIRED_TTL */
|
||||
VAR_SERVE_EXPIRED_TTL_RESET = 493, /* VAR_SERVE_EXPIRED_TTL_RESET */
|
||||
VAR_SERVE_EXPIRED_REPLY_TTL = 494, /* VAR_SERVE_EXPIRED_REPLY_TTL */
|
||||
VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 495, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
|
||||
VAR_EDE_SERVE_EXPIRED = 496, /* VAR_EDE_SERVE_EXPIRED */
|
||||
VAR_SERVE_ORIGINAL_TTL = 497, /* VAR_SERVE_ORIGINAL_TTL */
|
||||
VAR_FAKE_DSA = 498, /* VAR_FAKE_DSA */
|
||||
VAR_FAKE_SHA1 = 499, /* VAR_FAKE_SHA1 */
|
||||
VAR_LOG_IDENTITY = 500, /* VAR_LOG_IDENTITY */
|
||||
VAR_HIDE_TRUSTANCHOR = 501, /* VAR_HIDE_TRUSTANCHOR */
|
||||
VAR_HIDE_HTTP_USER_AGENT = 502, /* VAR_HIDE_HTTP_USER_AGENT */
|
||||
VAR_HTTP_USER_AGENT = 503, /* VAR_HTTP_USER_AGENT */
|
||||
VAR_TRUST_ANCHOR_SIGNALING = 504, /* VAR_TRUST_ANCHOR_SIGNALING */
|
||||
VAR_AGGRESSIVE_NSEC = 505, /* VAR_AGGRESSIVE_NSEC */
|
||||
VAR_USE_SYSTEMD = 506, /* VAR_USE_SYSTEMD */
|
||||
VAR_SHM_ENABLE = 507, /* VAR_SHM_ENABLE */
|
||||
VAR_SHM_KEY = 508, /* VAR_SHM_KEY */
|
||||
VAR_ROOT_KEY_SENTINEL = 509, /* VAR_ROOT_KEY_SENTINEL */
|
||||
VAR_DNSCRYPT = 510, /* VAR_DNSCRYPT */
|
||||
VAR_DNSCRYPT_ENABLE = 511, /* VAR_DNSCRYPT_ENABLE */
|
||||
VAR_DNSCRYPT_PORT = 512, /* VAR_DNSCRYPT_PORT */
|
||||
VAR_DNSCRYPT_PROVIDER = 513, /* VAR_DNSCRYPT_PROVIDER */
|
||||
VAR_DNSCRYPT_SECRET_KEY = 514, /* VAR_DNSCRYPT_SECRET_KEY */
|
||||
VAR_DNSCRYPT_PROVIDER_CERT = 515, /* VAR_DNSCRYPT_PROVIDER_CERT */
|
||||
VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 516, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
|
||||
VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 517, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
|
||||
VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 518, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
|
||||
VAR_DNSCRYPT_NONCE_CACHE_SIZE = 519, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
|
||||
VAR_DNSCRYPT_NONCE_CACHE_SLABS = 520, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
|
||||
VAR_PAD_RESPONSES = 521, /* VAR_PAD_RESPONSES */
|
||||
VAR_PAD_RESPONSES_BLOCK_SIZE = 522, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
|
||||
VAR_PAD_QUERIES = 523, /* VAR_PAD_QUERIES */
|
||||
VAR_PAD_QUERIES_BLOCK_SIZE = 524, /* VAR_PAD_QUERIES_BLOCK_SIZE */
|
||||
VAR_IPSECMOD_ENABLED = 525, /* VAR_IPSECMOD_ENABLED */
|
||||
VAR_IPSECMOD_HOOK = 526, /* VAR_IPSECMOD_HOOK */
|
||||
VAR_IPSECMOD_IGNORE_BOGUS = 527, /* VAR_IPSECMOD_IGNORE_BOGUS */
|
||||
VAR_IPSECMOD_MAX_TTL = 528, /* VAR_IPSECMOD_MAX_TTL */
|
||||
VAR_IPSECMOD_WHITELIST = 529, /* VAR_IPSECMOD_WHITELIST */
|
||||
VAR_IPSECMOD_STRICT = 530, /* VAR_IPSECMOD_STRICT */
|
||||
VAR_CACHEDB = 531, /* VAR_CACHEDB */
|
||||
VAR_CACHEDB_BACKEND = 532, /* VAR_CACHEDB_BACKEND */
|
||||
VAR_CACHEDB_SECRETSEED = 533, /* VAR_CACHEDB_SECRETSEED */
|
||||
VAR_CACHEDB_REDISHOST = 534, /* VAR_CACHEDB_REDISHOST */
|
||||
VAR_CACHEDB_REDISPORT = 535, /* VAR_CACHEDB_REDISPORT */
|
||||
VAR_CACHEDB_REDISTIMEOUT = 536, /* VAR_CACHEDB_REDISTIMEOUT */
|
||||
VAR_CACHEDB_REDISEXPIRERECORDS = 537, /* VAR_CACHEDB_REDISEXPIRERECORDS */
|
||||
VAR_CACHEDB_REDISPATH = 538, /* VAR_CACHEDB_REDISPATH */
|
||||
VAR_CACHEDB_REDISPASSWORD = 539, /* VAR_CACHEDB_REDISPASSWORD */
|
||||
VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 540, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
|
||||
VAR_FOR_UPSTREAM = 541, /* VAR_FOR_UPSTREAM */
|
||||
VAR_AUTH_ZONE = 542, /* VAR_AUTH_ZONE */
|
||||
VAR_ZONEFILE = 543, /* VAR_ZONEFILE */
|
||||
VAR_MASTER = 544, /* VAR_MASTER */
|
||||
VAR_URL = 545, /* VAR_URL */
|
||||
VAR_FOR_DOWNSTREAM = 546, /* VAR_FOR_DOWNSTREAM */
|
||||
VAR_FALLBACK_ENABLED = 547, /* VAR_FALLBACK_ENABLED */
|
||||
VAR_TLS_ADDITIONAL_PORT = 548, /* VAR_TLS_ADDITIONAL_PORT */
|
||||
VAR_LOW_RTT = 549, /* VAR_LOW_RTT */
|
||||
VAR_LOW_RTT_PERMIL = 550, /* VAR_LOW_RTT_PERMIL */
|
||||
VAR_FAST_SERVER_PERMIL = 551, /* VAR_FAST_SERVER_PERMIL */
|
||||
VAR_FAST_SERVER_NUM = 552, /* VAR_FAST_SERVER_NUM */
|
||||
VAR_ALLOW_NOTIFY = 553, /* VAR_ALLOW_NOTIFY */
|
||||
VAR_TLS_WIN_CERT = 554, /* VAR_TLS_WIN_CERT */
|
||||
VAR_TCP_CONNECTION_LIMIT = 555, /* VAR_TCP_CONNECTION_LIMIT */
|
||||
VAR_FORWARD_NO_CACHE = 556, /* VAR_FORWARD_NO_CACHE */
|
||||
VAR_STUB_NO_CACHE = 557, /* VAR_STUB_NO_CACHE */
|
||||
VAR_LOG_SERVFAIL = 558, /* VAR_LOG_SERVFAIL */
|
||||
VAR_DENY_ANY = 559, /* VAR_DENY_ANY */
|
||||
VAR_UNKNOWN_SERVER_TIME_LIMIT = 560, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
|
||||
VAR_LOG_TAG_QUERYREPLY = 561, /* VAR_LOG_TAG_QUERYREPLY */
|
||||
VAR_STREAM_WAIT_SIZE = 562, /* VAR_STREAM_WAIT_SIZE */
|
||||
VAR_TLS_CIPHERS = 563, /* VAR_TLS_CIPHERS */
|
||||
VAR_TLS_CIPHERSUITES = 564, /* VAR_TLS_CIPHERSUITES */
|
||||
VAR_TLS_USE_SNI = 565, /* VAR_TLS_USE_SNI */
|
||||
VAR_IPSET = 566, /* VAR_IPSET */
|
||||
VAR_IPSET_NAME_V4 = 567, /* VAR_IPSET_NAME_V4 */
|
||||
VAR_IPSET_NAME_V6 = 568, /* VAR_IPSET_NAME_V6 */
|
||||
VAR_TLS_SESSION_TICKET_KEYS = 569, /* VAR_TLS_SESSION_TICKET_KEYS */
|
||||
VAR_RPZ = 570, /* VAR_RPZ */
|
||||
VAR_TAGS = 571, /* VAR_TAGS */
|
||||
VAR_RPZ_ACTION_OVERRIDE = 572, /* VAR_RPZ_ACTION_OVERRIDE */
|
||||
VAR_RPZ_CNAME_OVERRIDE = 573, /* VAR_RPZ_CNAME_OVERRIDE */
|
||||
VAR_RPZ_LOG = 574, /* VAR_RPZ_LOG */
|
||||
VAR_RPZ_LOG_NAME = 575, /* VAR_RPZ_LOG_NAME */
|
||||
VAR_DYNLIB = 576, /* VAR_DYNLIB */
|
||||
VAR_DYNLIB_FILE = 577, /* VAR_DYNLIB_FILE */
|
||||
VAR_EDNS_CLIENT_STRING = 578, /* VAR_EDNS_CLIENT_STRING */
|
||||
VAR_EDNS_CLIENT_STRING_OPCODE = 579, /* VAR_EDNS_CLIENT_STRING_OPCODE */
|
||||
VAR_NSID = 580, /* VAR_NSID */
|
||||
VAR_ZONEMD_PERMISSIVE_MODE = 581, /* VAR_ZONEMD_PERMISSIVE_MODE */
|
||||
VAR_ZONEMD_CHECK = 582, /* VAR_ZONEMD_CHECK */
|
||||
VAR_ZONEMD_REJECT_ABSENCE = 583, /* VAR_ZONEMD_REJECT_ABSENCE */
|
||||
VAR_RPZ_SIGNAL_NXDOMAIN_RA = 584, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
|
||||
VAR_INTERFACE_AUTOMATIC_PORTS = 585, /* VAR_INTERFACE_AUTOMATIC_PORTS */
|
||||
VAR_EDE = 586, /* VAR_EDE */
|
||||
VAR_INTERFACE_ACTION = 587, /* VAR_INTERFACE_ACTION */
|
||||
VAR_INTERFACE_VIEW = 588, /* VAR_INTERFACE_VIEW */
|
||||
VAR_INTERFACE_TAG = 589, /* VAR_INTERFACE_TAG */
|
||||
VAR_INTERFACE_TAG_ACTION = 590, /* VAR_INTERFACE_TAG_ACTION */
|
||||
VAR_INTERFACE_TAG_DATA = 591, /* VAR_INTERFACE_TAG_DATA */
|
||||
VAR_PROXY_PROTOCOL_PORT = 592, /* VAR_PROXY_PROTOCOL_PORT */
|
||||
VAR_STATISTICS_INHIBIT_ZERO = 593, /* VAR_STATISTICS_INHIBIT_ZERO */
|
||||
VAR_HARDEN_UNKNOWN_ADDITIONAL = 594 /* VAR_HARDEN_UNKNOWN_ADDITIONAL */
|
||||
};
|
||||
typedef enum yytokentype yytoken_kind_t;
|
||||
#endif
|
||||
/* Token kinds. */
|
||||
#define YYEMPTY -2
|
||||
#define YYEOF 0
|
||||
#define YYerror 256
|
||||
#define YYUNDEF 257
|
||||
#define SPACE 258
|
||||
#define LETTER 259
|
||||
#define NEWLINE 260
|
||||
#define COMMENT 261
|
||||
#define COLON 262
|
||||
#define ANY 263
|
||||
#define ZONESTR 264
|
||||
#define STRING_ARG 265
|
||||
#define VAR_FORCE_TOPLEVEL 266
|
||||
#define VAR_SERVER 267
|
||||
#define VAR_VERBOSITY 268
|
||||
#define VAR_NUM_THREADS 269
|
||||
#define VAR_PORT 270
|
||||
#define VAR_OUTGOING_RANGE 271
|
||||
#define VAR_INTERFACE 272
|
||||
#define VAR_PREFER_IP4 273
|
||||
#define VAR_DO_IP4 274
|
||||
#define VAR_DO_IP6 275
|
||||
#define VAR_PREFER_IP6 276
|
||||
#define VAR_DO_UDP 277
|
||||
#define VAR_DO_TCP 278
|
||||
#define VAR_TCP_MSS 279
|
||||
#define VAR_OUTGOING_TCP_MSS 280
|
||||
#define VAR_TCP_IDLE_TIMEOUT 281
|
||||
#define VAR_EDNS_TCP_KEEPALIVE 282
|
||||
#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 283
|
||||
#define VAR_CHROOT 284
|
||||
#define VAR_USERNAME 285
|
||||
#define VAR_DIRECTORY 286
|
||||
#define VAR_LOGFILE 287
|
||||
#define VAR_PIDFILE 288
|
||||
#define VAR_MSG_CACHE_SIZE 289
|
||||
#define VAR_MSG_CACHE_SLABS 290
|
||||
#define VAR_NUM_QUERIES_PER_THREAD 291
|
||||
#define VAR_RRSET_CACHE_SIZE 292
|
||||
#define VAR_RRSET_CACHE_SLABS 293
|
||||
#define VAR_OUTGOING_NUM_TCP 294
|
||||
#define VAR_INFRA_HOST_TTL 295
|
||||
#define VAR_INFRA_LAME_TTL 296
|
||||
#define VAR_INFRA_CACHE_SLABS 297
|
||||
#define VAR_INFRA_CACHE_NUMHOSTS 298
|
||||
#define VAR_INFRA_CACHE_LAME_SIZE 299
|
||||
#define VAR_NAME 300
|
||||
#define VAR_STUB_ZONE 301
|
||||
#define VAR_STUB_HOST 302
|
||||
#define VAR_STUB_ADDR 303
|
||||
#define VAR_TARGET_FETCH_POLICY 304
|
||||
#define VAR_HARDEN_SHORT_BUFSIZE 305
|
||||
#define VAR_HARDEN_LARGE_QUERIES 306
|
||||
#define VAR_FORWARD_ZONE 307
|
||||
#define VAR_FORWARD_HOST 308
|
||||
#define VAR_FORWARD_ADDR 309
|
||||
#define VAR_DO_NOT_QUERY_ADDRESS 310
|
||||
#define VAR_HIDE_IDENTITY 311
|
||||
#define VAR_HIDE_VERSION 312
|
||||
#define VAR_IDENTITY 313
|
||||
#define VAR_VERSION 314
|
||||
#define VAR_HARDEN_GLUE 315
|
||||
#define VAR_MODULE_CONF 316
|
||||
#define VAR_TRUST_ANCHOR_FILE 317
|
||||
#define VAR_TRUST_ANCHOR 318
|
||||
#define VAR_VAL_OVERRIDE_DATE 319
|
||||
#define VAR_BOGUS_TTL 320
|
||||
#define VAR_VAL_CLEAN_ADDITIONAL 321
|
||||
#define VAR_VAL_PERMISSIVE_MODE 322
|
||||
#define VAR_INCOMING_NUM_TCP 323
|
||||
#define VAR_MSG_BUFFER_SIZE 324
|
||||
#define VAR_KEY_CACHE_SIZE 325
|
||||
#define VAR_KEY_CACHE_SLABS 326
|
||||
#define VAR_TRUSTED_KEYS_FILE 327
|
||||
#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 328
|
||||
#define VAR_USE_SYSLOG 329
|
||||
#define VAR_OUTGOING_INTERFACE 330
|
||||
#define VAR_ROOT_HINTS 331
|
||||
#define VAR_DO_NOT_QUERY_LOCALHOST 332
|
||||
#define VAR_CACHE_MAX_TTL 333
|
||||
#define VAR_HARDEN_DNSSEC_STRIPPED 334
|
||||
#define VAR_ACCESS_CONTROL 335
|
||||
#define VAR_LOCAL_ZONE 336
|
||||
#define VAR_LOCAL_DATA 337
|
||||
#define VAR_INTERFACE_AUTOMATIC 338
|
||||
#define VAR_STATISTICS_INTERVAL 339
|
||||
#define VAR_DO_DAEMONIZE 340
|
||||
#define VAR_USE_CAPS_FOR_ID 341
|
||||
#define VAR_STATISTICS_CUMULATIVE 342
|
||||
#define VAR_OUTGOING_PORT_PERMIT 343
|
||||
#define VAR_OUTGOING_PORT_AVOID 344
|
||||
#define VAR_DLV_ANCHOR_FILE 345
|
||||
#define VAR_DLV_ANCHOR 346
|
||||
#define VAR_NEG_CACHE_SIZE 347
|
||||
#define VAR_HARDEN_REFERRAL_PATH 348
|
||||
#define VAR_PRIVATE_ADDRESS 349
|
||||
#define VAR_PRIVATE_DOMAIN 350
|
||||
#define VAR_REMOTE_CONTROL 351
|
||||
#define VAR_CONTROL_ENABLE 352
|
||||
#define VAR_CONTROL_INTERFACE 353
|
||||
#define VAR_CONTROL_PORT 354
|
||||
#define VAR_SERVER_KEY_FILE 355
|
||||
#define VAR_SERVER_CERT_FILE 356
|
||||
#define VAR_CONTROL_KEY_FILE 357
|
||||
#define VAR_CONTROL_CERT_FILE 358
|
||||
#define VAR_CONTROL_USE_CERT 359
|
||||
#define VAR_TCP_REUSE_TIMEOUT 360
|
||||
#define VAR_MAX_REUSE_TCP_QUERIES 361
|
||||
#define VAR_EXTENDED_STATISTICS 362
|
||||
#define VAR_LOCAL_DATA_PTR 363
|
||||
#define VAR_JOSTLE_TIMEOUT 364
|
||||
#define VAR_STUB_PRIME 365
|
||||
#define VAR_UNWANTED_REPLY_THRESHOLD 366
|
||||
#define VAR_LOG_TIME_ASCII 367
|
||||
#define VAR_DOMAIN_INSECURE 368
|
||||
#define VAR_PYTHON 369
|
||||
#define VAR_PYTHON_SCRIPT 370
|
||||
#define VAR_VAL_SIG_SKEW_MIN 371
|
||||
#define VAR_VAL_SIG_SKEW_MAX 372
|
||||
#define VAR_VAL_MAX_RESTART 373
|
||||
#define VAR_CACHE_MIN_TTL 374
|
||||
#define VAR_VAL_LOG_LEVEL 375
|
||||
#define VAR_AUTO_TRUST_ANCHOR_FILE 376
|
||||
#define VAR_KEEP_MISSING 377
|
||||
#define VAR_ADD_HOLDDOWN 378
|
||||
#define VAR_DEL_HOLDDOWN 379
|
||||
#define VAR_SO_RCVBUF 380
|
||||
#define VAR_EDNS_BUFFER_SIZE 381
|
||||
#define VAR_PREFETCH 382
|
||||
#define VAR_PREFETCH_KEY 383
|
||||
#define VAR_SO_SNDBUF 384
|
||||
#define VAR_SO_REUSEPORT 385
|
||||
#define VAR_HARDEN_BELOW_NXDOMAIN 386
|
||||
#define VAR_IGNORE_CD_FLAG 387
|
||||
#define VAR_LOG_QUERIES 388
|
||||
#define VAR_LOG_REPLIES 389
|
||||
#define VAR_LOG_LOCAL_ACTIONS 390
|
||||
#define VAR_TCP_UPSTREAM 391
|
||||
#define VAR_SSL_UPSTREAM 392
|
||||
#define VAR_TCP_AUTH_QUERY_TIMEOUT 393
|
||||
#define VAR_SSL_SERVICE_KEY 394
|
||||
#define VAR_SSL_SERVICE_PEM 395
|
||||
#define VAR_SSL_PORT 396
|
||||
#define VAR_FORWARD_FIRST 397
|
||||
#define VAR_STUB_SSL_UPSTREAM 398
|
||||
#define VAR_FORWARD_SSL_UPSTREAM 399
|
||||
#define VAR_TLS_CERT_BUNDLE 400
|
||||
#define VAR_STUB_TCP_UPSTREAM 401
|
||||
#define VAR_FORWARD_TCP_UPSTREAM 402
|
||||
#define VAR_HTTPS_PORT 403
|
||||
#define VAR_HTTP_ENDPOINT 404
|
||||
#define VAR_HTTP_MAX_STREAMS 405
|
||||
#define VAR_HTTP_QUERY_BUFFER_SIZE 406
|
||||
#define VAR_HTTP_RESPONSE_BUFFER_SIZE 407
|
||||
#define VAR_HTTP_NODELAY 408
|
||||
#define VAR_HTTP_NOTLS_DOWNSTREAM 409
|
||||
#define VAR_STUB_FIRST 410
|
||||
#define VAR_MINIMAL_RESPONSES 411
|
||||
#define VAR_RRSET_ROUNDROBIN 412
|
||||
#define VAR_MAX_UDP_SIZE 413
|
||||
#define VAR_DELAY_CLOSE 414
|
||||
#define VAR_UDP_CONNECT 415
|
||||
#define VAR_UNBLOCK_LAN_ZONES 416
|
||||
#define VAR_INSECURE_LAN_ZONES 417
|
||||
#define VAR_INFRA_CACHE_MIN_RTT 418
|
||||
#define VAR_INFRA_CACHE_MAX_RTT 419
|
||||
#define VAR_INFRA_KEEP_PROBING 420
|
||||
#define VAR_DNS64_PREFIX 421
|
||||
#define VAR_DNS64_SYNTHALL 422
|
||||
#define VAR_DNS64_IGNORE_AAAA 423
|
||||
#define VAR_DNSTAP 424
|
||||
#define VAR_DNSTAP_ENABLE 425
|
||||
#define VAR_DNSTAP_SOCKET_PATH 426
|
||||
#define VAR_DNSTAP_IP 427
|
||||
#define VAR_DNSTAP_TLS 428
|
||||
#define VAR_DNSTAP_TLS_SERVER_NAME 429
|
||||
#define VAR_DNSTAP_TLS_CERT_BUNDLE 430
|
||||
#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 431
|
||||
#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 432
|
||||
#define VAR_DNSTAP_SEND_IDENTITY 433
|
||||
#define VAR_DNSTAP_SEND_VERSION 434
|
||||
#define VAR_DNSTAP_BIDIRECTIONAL 435
|
||||
#define VAR_DNSTAP_IDENTITY 436
|
||||
#define VAR_DNSTAP_VERSION 437
|
||||
#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 438
|
||||
#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 439
|
||||
#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 440
|
||||
#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 441
|
||||
#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 442
|
||||
#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 443
|
||||
#define VAR_RESPONSE_IP_TAG 444
|
||||
#define VAR_RESPONSE_IP 445
|
||||
#define VAR_RESPONSE_IP_DATA 446
|
||||
#define VAR_HARDEN_ALGO_DOWNGRADE 447
|
||||
#define VAR_IP_TRANSPARENT 448
|
||||
#define VAR_IP_DSCP 449
|
||||
#define VAR_DISABLE_DNSSEC_LAME_CHECK 450
|
||||
#define VAR_IP_RATELIMIT 451
|
||||
#define VAR_IP_RATELIMIT_SLABS 452
|
||||
#define VAR_IP_RATELIMIT_SIZE 453
|
||||
#define VAR_RATELIMIT 454
|
||||
#define VAR_RATELIMIT_SLABS 455
|
||||
#define VAR_RATELIMIT_SIZE 456
|
||||
#define VAR_OUTBOUND_MSG_RETRY 457
|
||||
#define VAR_MAX_SENT_COUNT 458
|
||||
#define VAR_MAX_QUERY_RESTARTS 459
|
||||
#define VAR_RATELIMIT_FOR_DOMAIN 460
|
||||
#define VAR_RATELIMIT_BELOW_DOMAIN 461
|
||||
#define VAR_IP_RATELIMIT_FACTOR 462
|
||||
#define VAR_RATELIMIT_FACTOR 463
|
||||
#define VAR_IP_RATELIMIT_BACKOFF 464
|
||||
#define VAR_RATELIMIT_BACKOFF 465
|
||||
#define VAR_SEND_CLIENT_SUBNET 466
|
||||
#define VAR_CLIENT_SUBNET_ZONE 467
|
||||
#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 468
|
||||
#define VAR_CLIENT_SUBNET_OPCODE 469
|
||||
#define VAR_MAX_CLIENT_SUBNET_IPV4 470
|
||||
#define VAR_MAX_CLIENT_SUBNET_IPV6 471
|
||||
#define VAR_MIN_CLIENT_SUBNET_IPV4 472
|
||||
#define VAR_MIN_CLIENT_SUBNET_IPV6 473
|
||||
#define VAR_MAX_ECS_TREE_SIZE_IPV4 474
|
||||
#define VAR_MAX_ECS_TREE_SIZE_IPV6 475
|
||||
#define VAR_CAPS_WHITELIST 476
|
||||
#define VAR_CACHE_MAX_NEGATIVE_TTL 477
|
||||
#define VAR_PERMIT_SMALL_HOLDDOWN 478
|
||||
#define VAR_QNAME_MINIMISATION 479
|
||||
#define VAR_QNAME_MINIMISATION_STRICT 480
|
||||
#define VAR_IP_FREEBIND 481
|
||||
#define VAR_DEFINE_TAG 482
|
||||
#define VAR_LOCAL_ZONE_TAG 483
|
||||
#define VAR_ACCESS_CONTROL_TAG 484
|
||||
#define VAR_LOCAL_ZONE_OVERRIDE 485
|
||||
#define VAR_ACCESS_CONTROL_TAG_ACTION 486
|
||||
#define VAR_ACCESS_CONTROL_TAG_DATA 487
|
||||
#define VAR_VIEW 488
|
||||
#define VAR_ACCESS_CONTROL_VIEW 489
|
||||
#define VAR_VIEW_FIRST 490
|
||||
#define VAR_SERVE_EXPIRED 491
|
||||
#define VAR_SERVE_EXPIRED_TTL 492
|
||||
#define VAR_SERVE_EXPIRED_TTL_RESET 493
|
||||
#define VAR_SERVE_EXPIRED_REPLY_TTL 494
|
||||
#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 495
|
||||
#define VAR_EDE_SERVE_EXPIRED 496
|
||||
#define VAR_SERVE_ORIGINAL_TTL 497
|
||||
#define VAR_FAKE_DSA 498
|
||||
#define VAR_FAKE_SHA1 499
|
||||
#define VAR_LOG_IDENTITY 500
|
||||
#define VAR_HIDE_TRUSTANCHOR 501
|
||||
#define VAR_HIDE_HTTP_USER_AGENT 502
|
||||
#define VAR_HTTP_USER_AGENT 503
|
||||
#define VAR_TRUST_ANCHOR_SIGNALING 504
|
||||
#define VAR_AGGRESSIVE_NSEC 505
|
||||
#define VAR_USE_SYSTEMD 506
|
||||
#define VAR_SHM_ENABLE 507
|
||||
#define VAR_SHM_KEY 508
|
||||
#define VAR_ROOT_KEY_SENTINEL 509
|
||||
#define VAR_DNSCRYPT 510
|
||||
#define VAR_DNSCRYPT_ENABLE 511
|
||||
#define VAR_DNSCRYPT_PORT 512
|
||||
#define VAR_DNSCRYPT_PROVIDER 513
|
||||
#define VAR_DNSCRYPT_SECRET_KEY 514
|
||||
#define VAR_DNSCRYPT_PROVIDER_CERT 515
|
||||
#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 516
|
||||
#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 517
|
||||
#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 518
|
||||
#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 519
|
||||
#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 520
|
||||
#define VAR_PAD_RESPONSES 521
|
||||
#define VAR_PAD_RESPONSES_BLOCK_SIZE 522
|
||||
#define VAR_PAD_QUERIES 523
|
||||
#define VAR_PAD_QUERIES_BLOCK_SIZE 524
|
||||
#define VAR_IPSECMOD_ENABLED 525
|
||||
#define VAR_IPSECMOD_HOOK 526
|
||||
#define VAR_IPSECMOD_IGNORE_BOGUS 527
|
||||
#define VAR_IPSECMOD_MAX_TTL 528
|
||||
#define VAR_IPSECMOD_WHITELIST 529
|
||||
#define VAR_IPSECMOD_STRICT 530
|
||||
#define VAR_CACHEDB 531
|
||||
#define VAR_CACHEDB_BACKEND 532
|
||||
#define VAR_CACHEDB_SECRETSEED 533
|
||||
#define VAR_CACHEDB_REDISHOST 534
|
||||
#define VAR_CACHEDB_REDISPORT 535
|
||||
#define VAR_CACHEDB_REDISTIMEOUT 536
|
||||
#define VAR_CACHEDB_REDISEXPIRERECORDS 537
|
||||
#define VAR_CACHEDB_REDISPATH 538
|
||||
#define VAR_CACHEDB_REDISPASSWORD 539
|
||||
#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 540
|
||||
#define VAR_FOR_UPSTREAM 541
|
||||
#define VAR_AUTH_ZONE 542
|
||||
#define VAR_ZONEFILE 543
|
||||
#define VAR_MASTER 544
|
||||
#define VAR_URL 545
|
||||
#define VAR_FOR_DOWNSTREAM 546
|
||||
#define VAR_FALLBACK_ENABLED 547
|
||||
#define VAR_TLS_ADDITIONAL_PORT 548
|
||||
#define VAR_LOW_RTT 549
|
||||
#define VAR_LOW_RTT_PERMIL 550
|
||||
#define VAR_FAST_SERVER_PERMIL 551
|
||||
#define VAR_FAST_SERVER_NUM 552
|
||||
#define VAR_ALLOW_NOTIFY 553
|
||||
#define VAR_TLS_WIN_CERT 554
|
||||
#define VAR_TCP_CONNECTION_LIMIT 555
|
||||
#define VAR_FORWARD_NO_CACHE 556
|
||||
#define VAR_STUB_NO_CACHE 557
|
||||
#define VAR_LOG_SERVFAIL 558
|
||||
#define VAR_DENY_ANY 559
|
||||
#define VAR_UNKNOWN_SERVER_TIME_LIMIT 560
|
||||
#define VAR_LOG_TAG_QUERYREPLY 561
|
||||
#define VAR_STREAM_WAIT_SIZE 562
|
||||
#define VAR_TLS_CIPHERS 563
|
||||
#define VAR_TLS_CIPHERSUITES 564
|
||||
#define VAR_TLS_USE_SNI 565
|
||||
#define VAR_IPSET 566
|
||||
#define VAR_IPSET_NAME_V4 567
|
||||
#define VAR_IPSET_NAME_V6 568
|
||||
#define VAR_TLS_SESSION_TICKET_KEYS 569
|
||||
#define VAR_RPZ 570
|
||||
#define VAR_TAGS 571
|
||||
#define VAR_RPZ_ACTION_OVERRIDE 572
|
||||
#define VAR_RPZ_CNAME_OVERRIDE 573
|
||||
#define VAR_RPZ_LOG 574
|
||||
#define VAR_RPZ_LOG_NAME 575
|
||||
#define VAR_DYNLIB 576
|
||||
#define VAR_DYNLIB_FILE 577
|
||||
#define VAR_EDNS_CLIENT_STRING 578
|
||||
#define VAR_EDNS_CLIENT_STRING_OPCODE 579
|
||||
#define VAR_NSID 580
|
||||
#define VAR_ZONEMD_PERMISSIVE_MODE 581
|
||||
#define VAR_ZONEMD_CHECK 582
|
||||
#define VAR_ZONEMD_REJECT_ABSENCE 583
|
||||
#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 584
|
||||
#define VAR_INTERFACE_AUTOMATIC_PORTS 585
|
||||
#define VAR_EDE 586
|
||||
#define VAR_INTERFACE_ACTION 587
|
||||
#define VAR_INTERFACE_VIEW 588
|
||||
#define VAR_INTERFACE_TAG 589
|
||||
#define VAR_INTERFACE_TAG_ACTION 590
|
||||
#define VAR_INTERFACE_TAG_DATA 591
|
||||
#define VAR_PROXY_PROTOCOL_PORT 592
|
||||
#define VAR_STATISTICS_INHIBIT_ZERO 593
|
||||
#define VAR_HARDEN_UNKNOWN_ADDITIONAL 594
|
||||
|
||||
/* Value type. */
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
union YYSTYPE
|
||||
{
|
||||
#line 67 "./util/configparser.y"
|
||||
|
||||
char* str;
|
||||
|
||||
#line 749 "util/configparser.h"
|
||||
|
||||
};
|
||||
typedef union YYSTYPE YYSTYPE;
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
# define YYSTYPE_IS_DECLARED 1
|
||||
#endif
|
||||
|
||||
|
||||
extern YYSTYPE yylval;
|
||||
|
||||
|
||||
int yyparse (void);
|
||||
|
||||
|
||||
#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */
|
||||
|
|
@ -303,7 +303,7 @@ content_server: server_num_threads | server_verbosity | server_port |
|
|||
server_serve_expired |
|
||||
server_serve_expired_ttl | server_serve_expired_ttl_reset |
|
||||
server_serve_expired_reply_ttl | server_serve_expired_client_timeout |
|
||||
server_ede_serve_expired | server_serve_original_ttl | server_fake_dsa |
|
||||
server_ede_serve_expired | server_serve_original_ttl | server_fake_dsa |
|
||||
server_log_identity | server_use_systemd |
|
||||
server_response_ip_tag | server_response_ip | server_response_ip_data |
|
||||
server_shm_enable | server_shm_key | server_fake_sha1 |
|
||||
|
|
@ -488,7 +488,7 @@ rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG
|
|||
rpzstart: VAR_RPZ
|
||||
{
|
||||
struct config_auth* s;
|
||||
OUTYY(("\nP(rpz:)\n"));
|
||||
OUTYY(("\nP(rpz:)\n"));
|
||||
cfg_parser->started_toplevel = 1;
|
||||
s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
|
||||
if(s) {
|
||||
|
|
@ -504,7 +504,7 @@ rpzstart: VAR_RPZ
|
|||
}
|
||||
}
|
||||
;
|
||||
contents_rpz: contents_rpz content_rpz
|
||||
contents_rpz: contents_rpz content_rpz
|
||||
| ;
|
||||
content_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url |
|
||||
auth_allow_notify | rpz_action_override | rpz_cname_override |
|
||||
|
|
@ -2726,7 +2726,7 @@ server_pad_responses: VAR_PAD_RESPONSES STRING_ARG
|
|||
OUTYY(("P(server_pad_responses:%s)\n", $2));
|
||||
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
|
||||
yyerror("expected yes or no.");
|
||||
else cfg_parser->cfg->pad_responses =
|
||||
else cfg_parser->cfg->pad_responses =
|
||||
(strcmp($2, "yes")==0);
|
||||
free($2);
|
||||
}
|
||||
|
|
@ -2745,7 +2745,7 @@ server_pad_queries: VAR_PAD_QUERIES STRING_ARG
|
|||
OUTYY(("P(server_pad_queries:%s)\n", $2));
|
||||
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
|
||||
yyerror("expected yes or no.");
|
||||
else cfg_parser->cfg->pad_queries =
|
||||
else cfg_parser->cfg->pad_queries =
|
||||
(strcmp($2, "yes")==0);
|
||||
free($2);
|
||||
}
|
||||
|
|
@ -3485,8 +3485,8 @@ py_script: VAR_PYTHON_SCRIPT STRING_ARG
|
|||
yyerror("out of memory");
|
||||
}
|
||||
dynlibstart: VAR_DYNLIB
|
||||
{
|
||||
OUTYY(("\nP(dynlib:)\n"));
|
||||
{
|
||||
OUTYY(("\nP(dynlib:)\n"));
|
||||
cfg_parser->started_toplevel = 1;
|
||||
}
|
||||
;
|
||||
|
|
|
|||
168
util/netevent.c
168
util/netevent.c
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -177,7 +177,7 @@ static struct comm_point* comm_point_create_tcp_handler(
|
|||
|
||||
/* -------- End of local definitions -------- */
|
||||
|
||||
struct comm_base*
|
||||
struct comm_base*
|
||||
comm_base_create(int sigs)
|
||||
{
|
||||
struct comm_base* b = (struct comm_base*)calloc(1,
|
||||
|
|
@ -220,7 +220,7 @@ comm_base_create_event(struct ub_event_base* base)
|
|||
return b;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_base_delete(struct comm_base* b)
|
||||
{
|
||||
if(!b)
|
||||
|
|
@ -237,7 +237,7 @@ comm_base_delete(struct comm_base* b)
|
|||
free(b);
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_base_delete_no_base(struct comm_base* b)
|
||||
{
|
||||
if(!b)
|
||||
|
|
@ -253,14 +253,14 @@ comm_base_delete_no_base(struct comm_base* b)
|
|||
free(b);
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_base_timept(struct comm_base* b, time_t** tt, struct timeval** tv)
|
||||
{
|
||||
*tt = &b->eb->secs;
|
||||
*tv = &b->eb->now;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_base_dispatch(struct comm_base* b)
|
||||
{
|
||||
int retval;
|
||||
|
|
@ -470,7 +470,7 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet,
|
|||
(struct sockaddr_storage*)addr, addrlen);
|
||||
return 0;
|
||||
} else if((size_t)sent != sldns_buffer_remaining(packet)) {
|
||||
log_err("sent %d in place of %d bytes",
|
||||
log_err("sent %d in place of %d bytes",
|
||||
(int)sent, (int)sldns_buffer_remaining(packet));
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -489,7 +489,7 @@ static void p_ancil(const char* str, struct comm_reply* r)
|
|||
if(r->srctype == 6) {
|
||||
#ifdef IPV6_PKTINFO
|
||||
char buf[1024];
|
||||
if(inet_ntop(AF_INET6, &r->pktinfo.v6info.ipi6_addr,
|
||||
if(inet_ntop(AF_INET6, &r->pktinfo.v6info.ipi6_addr,
|
||||
buf, (socklen_t)sizeof(buf)) == 0) {
|
||||
(void)strlcpy(buf, "(inet_ntop error)", sizeof(buf));
|
||||
}
|
||||
|
|
@ -499,13 +499,13 @@ static void p_ancil(const char* str, struct comm_reply* r)
|
|||
} else if(r->srctype == 4) {
|
||||
#ifdef IP_PKTINFO
|
||||
char buf1[1024], buf2[1024];
|
||||
if(inet_ntop(AF_INET, &r->pktinfo.v4info.ipi_addr,
|
||||
if(inet_ntop(AF_INET, &r->pktinfo.v4info.ipi_addr,
|
||||
buf1, (socklen_t)sizeof(buf1)) == 0) {
|
||||
(void)strlcpy(buf1, "(inet_ntop error)", sizeof(buf1));
|
||||
}
|
||||
buf1[sizeof(buf1)-1]=0;
|
||||
#ifdef HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST
|
||||
if(inet_ntop(AF_INET, &r->pktinfo.v4info.ipi_spec_dst,
|
||||
if(inet_ntop(AF_INET, &r->pktinfo.v4info.ipi_spec_dst,
|
||||
buf2, (socklen_t)sizeof(buf2)) == 0) {
|
||||
(void)strlcpy(buf2, "(inet_ntop error)", sizeof(buf2));
|
||||
}
|
||||
|
|
@ -517,7 +517,7 @@ static void p_ancil(const char* str, struct comm_reply* r)
|
|||
buf1, buf2);
|
||||
#elif defined(IP_RECVDSTADDR)
|
||||
char buf1[1024];
|
||||
if(inet_ntop(AF_INET, &r->pktinfo.v4addr,
|
||||
if(inet_ntop(AF_INET, &r->pktinfo.v4addr,
|
||||
buf1, (socklen_t)sizeof(buf1)) == 0) {
|
||||
(void)strlcpy(buf1, "(inet_ntop error)", sizeof(buf1));
|
||||
}
|
||||
|
|
@ -531,7 +531,7 @@ static void p_ancil(const char* str, struct comm_reply* r)
|
|||
/** send a UDP reply over specified interface*/
|
||||
static int
|
||||
comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet,
|
||||
struct sockaddr* addr, socklen_t addrlen, struct comm_reply* r)
|
||||
struct sockaddr* addr, socklen_t addrlen, struct comm_reply* r)
|
||||
{
|
||||
#if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_SENDMSG)
|
||||
ssize_t sent;
|
||||
|
|
@ -695,7 +695,7 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet,
|
|||
if(!udp_send_errno_needs_log(addr, addrlen))
|
||||
return 0;
|
||||
verbose(VERB_OPS, "sendmsg failed: %s", strerror(errno));
|
||||
log_addr(VERB_OPS, "remote address is",
|
||||
log_addr(VERB_OPS, "remote address is",
|
||||
(struct sockaddr_storage*)addr, addrlen);
|
||||
#ifdef __NetBSD__
|
||||
/* netbsd 7 has IP_PKTINFO for recv but not send */
|
||||
|
|
@ -705,7 +705,7 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet,
|
|||
#endif
|
||||
return 0;
|
||||
} else if((size_t)sent != sldns_buffer_remaining(packet)) {
|
||||
log_err("sent %d in place of %d bytes",
|
||||
log_err("sent %d in place of %d bytes",
|
||||
(int)sent, (int)sldns_buffer_remaining(packet));
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -817,7 +817,7 @@ done:
|
|||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_udp_ancil_callback(int fd, short event, void* arg)
|
||||
{
|
||||
#if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_RECVMSG)
|
||||
|
|
@ -930,7 +930,7 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg)
|
|||
#endif /* AF_INET6 && IPV6_PKTINFO && HAVE_RECVMSG */
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_udp_callback(int fd, short event, void* arg)
|
||||
{
|
||||
struct comm_reply rep;
|
||||
|
|
@ -950,14 +950,14 @@ comm_point_udp_callback(int fd, short event, void* arg)
|
|||
rep.remote_addrlen = (socklen_t)sizeof(rep.remote_addr);
|
||||
log_assert(fd != -1);
|
||||
log_assert(sldns_buffer_remaining(rep.c->buffer) > 0);
|
||||
rcv = recvfrom(fd, (void*)sldns_buffer_begin(rep.c->buffer),
|
||||
rcv = recvfrom(fd, (void*)sldns_buffer_begin(rep.c->buffer),
|
||||
sldns_buffer_remaining(rep.c->buffer), MSG_DONTWAIT,
|
||||
(struct sockaddr*)&rep.remote_addr, &rep.remote_addrlen);
|
||||
if(rcv == -1) {
|
||||
#ifndef USE_WINSOCK
|
||||
if(errno != EAGAIN && errno != EINTR
|
||||
&& udp_recv_needs_log(errno))
|
||||
log_err("recvfrom %d failed: %s",
|
||||
log_err("recvfrom %d failed: %s",
|
||||
fd, strerror(errno));
|
||||
#else
|
||||
if(WSAGetLastError() != WSAEINPROGRESS &&
|
||||
|
|
@ -1012,7 +1012,7 @@ int adjusted_tcp_timeout(struct comm_point* c)
|
|||
|
||||
/** Use a new tcp handler for new query fd, set to read query */
|
||||
static void
|
||||
setup_tcp_handler(struct comm_point* c, int fd, int cur, int max)
|
||||
setup_tcp_handler(struct comm_point* c, int fd, int cur, int max)
|
||||
{
|
||||
int handler_usage;
|
||||
log_assert(c->type == comm_tcp || c->type == comm_http);
|
||||
|
|
@ -1076,10 +1076,10 @@ int comm_point_perform_accept(struct comm_point* c,
|
|||
/* EINTR is signal interrupt. others are closed connection. */
|
||||
if( errno == EINTR || errno == EAGAIN
|
||||
#ifdef EWOULDBLOCK
|
||||
|| errno == EWOULDBLOCK
|
||||
|| errno == EWOULDBLOCK
|
||||
#endif
|
||||
#ifdef ECONNABORTED
|
||||
|| errno == ECONNABORTED
|
||||
|| errno == ECONNABORTED
|
||||
#endif
|
||||
#ifdef EPROTO
|
||||
|| errno == EPROTO
|
||||
|
|
@ -1253,7 +1253,7 @@ static int http2_submit_settings(struct http2_session* h2_session)
|
|||
#endif /* HAVE_NGHTTP2 */
|
||||
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_tcp_accept_callback(int fd, short event, void* arg)
|
||||
{
|
||||
struct comm_point* c = (struct comm_point*)arg, *c_hdl;
|
||||
|
|
@ -2161,7 +2161,7 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok)
|
|||
log_err("in comm_point_tcp_handle_read buffer_remaining is "
|
||||
"not > 0 as expected, continuing with (harmless) 0 "
|
||||
"length recv");
|
||||
r = recv(fd, (void*)sldns_buffer_current(c->buffer),
|
||||
r = recv(fd, (void*)sldns_buffer_current(c->buffer),
|
||||
sldns_buffer_remaining(c->buffer), MSG_DONTWAIT);
|
||||
if(r == 0) {
|
||||
if(c->tcp_req_info)
|
||||
|
|
@ -2252,8 +2252,8 @@ recv_error:
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle tcp writing callback.
|
||||
/**
|
||||
* Handle tcp writing callback.
|
||||
* @param fd: file descriptor of socket.
|
||||
* @param c: comm point to write buffer out of.
|
||||
* @return: 0 on error
|
||||
|
|
@ -2277,7 +2277,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
|
|||
/* from Stevens, unix network programming, vol1, 3rd ed, p450*/
|
||||
int error = 0;
|
||||
socklen_t len = (socklen_t)sizeof(error);
|
||||
if(getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&error,
|
||||
if(getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&error,
|
||||
&len) < 0){
|
||||
#ifndef USE_WINSOCK
|
||||
error = errno; /* on solaris errno is error */
|
||||
|
|
@ -2318,7 +2318,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
|
|||
return ssl_handle_it(c, 1);
|
||||
|
||||
#ifdef USE_MSG_FASTOPEN
|
||||
/* Only try this on first use of a connection that uses tfo,
|
||||
/* Only try this on first use of a connection that uses tfo,
|
||||
otherwise fall through to normal write */
|
||||
/* Also, TFO support on WINDOWS not implemented at the moment */
|
||||
if(c->tcp_do_fastopen == 1) {
|
||||
|
|
@ -2473,7 +2473,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
|
|||
if(WSAGetLastError() == WSAEWOULDBLOCK) {
|
||||
ub_winsock_tcp_wouldblock(c->ev->ev,
|
||||
UB_EV_WRITE);
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
if(WSAGetLastError() == WSAECONNRESET && verbosity < 2)
|
||||
return 0; /* silence reset by peer */
|
||||
|
|
@ -2522,7 +2522,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
|
|||
return 1;
|
||||
if(WSAGetLastError() == WSAEWOULDBLOCK) {
|
||||
ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE);
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
if(WSAGetLastError() == WSAECONNRESET && verbosity < 2)
|
||||
return 0; /* silence reset by peer */
|
||||
|
|
@ -2541,7 +2541,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
|
|||
if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) {
|
||||
tcp_callback_writer(c);
|
||||
}
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -2561,7 +2561,7 @@ tcp_req_info_read_again(int fd, struct comm_point* c)
|
|||
if(!c->tcp_do_close) {
|
||||
fptr_ok(fptr_whitelist_comm_point(
|
||||
c->callback));
|
||||
(void)(*c->callback)(c, c->cb_arg,
|
||||
(void)(*c->callback)(c, c->cb_arg,
|
||||
NETEVENT_CLOSED, NULL);
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -2618,7 +2618,7 @@ tcp_more_write_again(int fd, struct comm_point* c)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_tcp_handle_callback(int fd, short event, void* arg)
|
||||
{
|
||||
struct comm_point* c = (struct comm_point*)arg;
|
||||
|
|
@ -2783,7 +2783,7 @@ http_read_more(int fd, struct comm_point* c)
|
|||
{
|
||||
ssize_t r;
|
||||
log_assert(sldns_buffer_remaining(c->buffer) > 0);
|
||||
r = recv(fd, (void*)sldns_buffer_current(c->buffer),
|
||||
r = recv(fd, (void*)sldns_buffer_current(c->buffer),
|
||||
sldns_buffer_remaining(c->buffer), MSG_DONTWAIT);
|
||||
if(r == 0) {
|
||||
return 0;
|
||||
|
|
@ -3052,7 +3052,7 @@ http_chunked_segment(struct comm_point* c)
|
|||
/* return and wait to read more */
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* callback of http reader for a new part of the data */
|
||||
c->http_stored = 0;
|
||||
sldns_buffer_set_position(c->buffer, 0);
|
||||
|
|
@ -3402,7 +3402,7 @@ http_check_connect(int fd, struct comm_point* c)
|
|||
/* from Stevens, unix network programming, vol1, 3rd ed, p450*/
|
||||
int error = 0;
|
||||
socklen_t len = (socklen_t)sizeof(error);
|
||||
if(getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&error,
|
||||
if(getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&error,
|
||||
&len) < 0){
|
||||
#ifndef USE_WINSOCK
|
||||
error = errno; /* on solaris errno is error */
|
||||
|
|
@ -3487,7 +3487,7 @@ http_write_more(int fd, struct comm_point* c)
|
|||
{
|
||||
ssize_t r;
|
||||
log_assert(sldns_buffer_remaining(c->buffer) > 0);
|
||||
r = send(fd, (void*)sldns_buffer_current(c->buffer),
|
||||
r = send(fd, (void*)sldns_buffer_current(c->buffer),
|
||||
sldns_buffer_remaining(c->buffer), 0);
|
||||
if(r == -1) {
|
||||
#ifndef USE_WINSOCK
|
||||
|
|
@ -3498,7 +3498,7 @@ http_write_more(int fd, struct comm_point* c)
|
|||
return 1;
|
||||
if(WSAGetLastError() == WSAEWOULDBLOCK) {
|
||||
ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE);
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
log_err_addr("http send r", sock_strerror(errno),
|
||||
|
|
@ -3619,8 +3619,8 @@ comm_point_http2_handle_write(int ATTR_UNUSED(fd), struct comm_point* c)
|
|||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle http writing callback.
|
||||
/**
|
||||
* Handle http writing callback.
|
||||
* @param fd: file descriptor of socket.
|
||||
* @param c: comm point to write buffer out of.
|
||||
* @return: 0 on error
|
||||
|
|
@ -3686,7 +3686,7 @@ comm_point_http_handle_write(int fd, struct comm_point* c)
|
|||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_http_handle_callback(int fd, short event, void* arg)
|
||||
{
|
||||
struct comm_point* c = (struct comm_point*)arg;
|
||||
|
|
@ -3739,7 +3739,7 @@ void comm_point_local_handle_callback(int fd, short event, void* arg)
|
|||
if(event&UB_EV_READ) {
|
||||
if(!comm_point_tcp_handle_read(fd, c, 1)) {
|
||||
fptr_ok(fptr_whitelist_comm_point(c->callback));
|
||||
(void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED,
|
||||
(void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED,
|
||||
NULL);
|
||||
}
|
||||
return;
|
||||
|
|
@ -3747,21 +3747,21 @@ void comm_point_local_handle_callback(int fd, short event, void* arg)
|
|||
log_err("Ignored event %d for localhdl.", event);
|
||||
}
|
||||
|
||||
void comm_point_raw_handle_callback(int ATTR_UNUSED(fd),
|
||||
void comm_point_raw_handle_callback(int ATTR_UNUSED(fd),
|
||||
short event, void* arg)
|
||||
{
|
||||
struct comm_point* c = (struct comm_point*)arg;
|
||||
int err = NETEVENT_NOERROR;
|
||||
log_assert(c->type == comm_raw);
|
||||
ub_comm_base_now(c->ev->base);
|
||||
|
||||
|
||||
if(event&UB_EV_TIMEOUT)
|
||||
err = NETEVENT_TIMEOUT;
|
||||
fptr_ok(fptr_whitelist_comm_point_raw(c->callback));
|
||||
(void)(*c->callback)(c, c->cb_arg, err, NULL);
|
||||
}
|
||||
|
||||
struct comm_point*
|
||||
struct comm_point*
|
||||
comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer,
|
||||
int pp2_enabled, comm_point_callback_type* callback,
|
||||
void* callback_arg, struct unbound_socket* socket)
|
||||
|
|
@ -3824,7 +3824,7 @@ comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer,
|
|||
return c;
|
||||
}
|
||||
|
||||
struct comm_point*
|
||||
struct comm_point*
|
||||
comm_point_create_udp_ancil(struct comm_base *base, int fd,
|
||||
sldns_buffer* buffer, int pp2_enabled,
|
||||
comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket)
|
||||
|
|
@ -3887,8 +3887,8 @@ comm_point_create_udp_ancil(struct comm_base *base, int fd,
|
|||
return c;
|
||||
}
|
||||
|
||||
static struct comm_point*
|
||||
comm_point_create_tcp_handler(struct comm_base *base,
|
||||
static struct comm_point*
|
||||
comm_point_create_tcp_handler(struct comm_base *base,
|
||||
struct comm_point* parent, size_t bufsize,
|
||||
struct sldns_buffer* spoolbuf, comm_point_callback_type* callback,
|
||||
void* callback_arg, struct unbound_socket* socket)
|
||||
|
|
@ -3985,8 +3985,8 @@ comm_point_create_tcp_handler(struct comm_base *base,
|
|||
return c;
|
||||
}
|
||||
|
||||
static struct comm_point*
|
||||
comm_point_create_http_handler(struct comm_base *base,
|
||||
static struct comm_point*
|
||||
comm_point_create_http_handler(struct comm_base *base,
|
||||
struct comm_point* parent, size_t bufsize, int harden_large_queries,
|
||||
uint32_t http_max_streams, char* http_endpoint,
|
||||
comm_point_callback_type* callback, void* callback_arg,
|
||||
|
|
@ -4083,7 +4083,7 @@ comm_point_create_http_handler(struct comm_base *base,
|
|||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* add to parent free list */
|
||||
c->tcp_free = parent->tcp_free;
|
||||
parent->tcp_free = c;
|
||||
|
|
@ -4105,7 +4105,7 @@ comm_point_create_http_handler(struct comm_base *base,
|
|||
return c;
|
||||
}
|
||||
|
||||
struct comm_point*
|
||||
struct comm_point*
|
||||
comm_point_create_tcp(struct comm_base *base, int fd, int num,
|
||||
int idle_timeout, int harden_large_queries,
|
||||
uint32_t http_max_streams, char* http_endpoint,
|
||||
|
|
@ -4203,11 +4203,11 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num,
|
|||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
struct comm_point*
|
||||
struct comm_point*
|
||||
comm_point_create_tcp_out(struct comm_base *base, size_t bufsize,
|
||||
comm_point_callback_type* callback, void* callback_arg)
|
||||
{
|
||||
|
|
@ -4274,7 +4274,7 @@ comm_point_create_tcp_out(struct comm_base *base, size_t bufsize,
|
|||
return c;
|
||||
}
|
||||
|
||||
struct comm_point*
|
||||
struct comm_point*
|
||||
comm_point_create_http_out(struct comm_base *base, size_t bufsize,
|
||||
comm_point_callback_type* callback, void* callback_arg,
|
||||
sldns_buffer* temp)
|
||||
|
|
@ -4345,7 +4345,7 @@ comm_point_create_http_out(struct comm_base *base, size_t bufsize,
|
|||
return c;
|
||||
}
|
||||
|
||||
struct comm_point*
|
||||
struct comm_point*
|
||||
comm_point_create_local(struct comm_base *base, int fd, size_t bufsize,
|
||||
comm_point_callback_type* callback, void* callback_arg)
|
||||
{
|
||||
|
|
@ -4413,8 +4413,8 @@ comm_point_create_local(struct comm_base *base, int fd, size_t bufsize,
|
|||
return c;
|
||||
}
|
||||
|
||||
struct comm_point*
|
||||
comm_point_create_raw(struct comm_base* base, int fd, int writing,
|
||||
struct comm_point*
|
||||
comm_point_create_raw(struct comm_base* base, int fd, int writing,
|
||||
comm_point_callback_type* callback, void* callback_arg)
|
||||
{
|
||||
struct comm_point* c = (struct comm_point*)calloc(1,
|
||||
|
|
@ -4478,7 +4478,7 @@ comm_point_create_raw(struct comm_base* base, int fd, int writing,
|
|||
return c;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_close(struct comm_point* c)
|
||||
{
|
||||
if(!c)
|
||||
|
|
@ -4518,10 +4518,10 @@ comm_point_close(struct comm_point* c)
|
|||
c->fd = -1;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_delete(struct comm_point* c)
|
||||
{
|
||||
if(!c)
|
||||
if(!c)
|
||||
return;
|
||||
if((c->type == comm_tcp || c->type == comm_http) && c->ssl) {
|
||||
#ifdef HAVE_SSL
|
||||
|
|
@ -4560,7 +4560,7 @@ comm_point_delete(struct comm_point* c)
|
|||
free(c);
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_send_reply(struct comm_reply *repinfo)
|
||||
{
|
||||
struct sldns_buffer* buffer;
|
||||
|
|
@ -4624,7 +4624,7 @@ comm_point_send_reply(struct comm_reply *repinfo)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_drop_reply(struct comm_reply* repinfo)
|
||||
{
|
||||
if(!repinfo)
|
||||
|
|
@ -4648,7 +4648,7 @@ comm_point_drop_reply(struct comm_reply* repinfo)
|
|||
reclaim_tcp_handler(repinfo->c);
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_stop_listening(struct comm_point* c)
|
||||
{
|
||||
verbose(VERB_ALGO, "comm point stop listening %d", c->fd);
|
||||
|
|
@ -4660,10 +4660,10 @@ comm_point_stop_listening(struct comm_point* c)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_point_start_listening(struct comm_point* c, int newfd, int msec)
|
||||
{
|
||||
verbose(VERB_ALGO, "comm point start listening %d (%d msec)",
|
||||
verbose(VERB_ALGO, "comm point start listening %d (%d msec)",
|
||||
c->fd==-1?newfd:c->fd, msec);
|
||||
if(c->type == comm_tcp_accept && !c->tcp_free) {
|
||||
/* no use to start listening no free slots. */
|
||||
|
|
@ -4747,10 +4747,10 @@ void comm_point_listen_for_rw(struct comm_point* c, int rd, int wr)
|
|||
size_t comm_point_get_mem(struct comm_point* c)
|
||||
{
|
||||
size_t s;
|
||||
if(!c)
|
||||
if(!c)
|
||||
return 0;
|
||||
s = sizeof(*c) + sizeof(*c->ev);
|
||||
if(c->timeout)
|
||||
if(c->timeout)
|
||||
s += sizeof(*c->timeout);
|
||||
if(c->type == comm_tcp || c->type == comm_local) {
|
||||
s += sizeof(*c->buffer) + sldns_buffer_capacity(c->buffer);
|
||||
|
|
@ -4769,7 +4769,7 @@ size_t comm_point_get_mem(struct comm_point* c)
|
|||
return s;
|
||||
}
|
||||
|
||||
struct comm_timer*
|
||||
struct comm_timer*
|
||||
comm_timer_create(struct comm_base* base, void (*cb)(void*), void* cb_arg)
|
||||
{
|
||||
struct internal_timer *tm = (struct internal_timer*)calloc(1,
|
||||
|
|
@ -4782,7 +4782,7 @@ comm_timer_create(struct comm_base* base, void (*cb)(void*), void* cb_arg)
|
|||
tm->base = base;
|
||||
tm->super.callback = cb;
|
||||
tm->super.cb_arg = cb_arg;
|
||||
tm->ev = ub_event_new(base->eb->base, -1, UB_EV_TIMEOUT,
|
||||
tm->ev = ub_event_new(base->eb->base, -1, UB_EV_TIMEOUT,
|
||||
comm_timer_callback, &tm->super);
|
||||
if(tm->ev == NULL) {
|
||||
log_err("timer_create: event_base_set failed.");
|
||||
|
|
@ -4792,7 +4792,7 @@ comm_timer_create(struct comm_base* base, void (*cb)(void*), void* cb_arg)
|
|||
return &tm->super;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_timer_disable(struct comm_timer* timer)
|
||||
{
|
||||
if(!timer)
|
||||
|
|
@ -4801,7 +4801,7 @@ comm_timer_disable(struct comm_timer* timer)
|
|||
timer->ev_timer->enabled = 0;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_timer_set(struct comm_timer* timer, struct timeval* tv)
|
||||
{
|
||||
log_assert(tv);
|
||||
|
|
@ -4813,7 +4813,7 @@ comm_timer_set(struct comm_timer* timer, struct timeval* tv)
|
|||
timer->ev_timer->enabled = 1;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_timer_delete(struct comm_timer* timer)
|
||||
{
|
||||
if(!timer)
|
||||
|
|
@ -4826,7 +4826,7 @@ comm_timer_delete(struct comm_timer* timer)
|
|||
free(timer->ev_timer);
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg)
|
||||
{
|
||||
struct comm_timer* tm = (struct comm_timer*)arg;
|
||||
|
|
@ -4838,19 +4838,19 @@ comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg)
|
|||
(*tm->callback)(tm->cb_arg);
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
comm_timer_is_set(struct comm_timer* timer)
|
||||
{
|
||||
return (int)timer->ev_timer->enabled;
|
||||
}
|
||||
|
||||
size_t
|
||||
size_t
|
||||
comm_timer_get_mem(struct comm_timer* ATTR_UNUSED(timer))
|
||||
{
|
||||
return sizeof(struct internal_timer);
|
||||
}
|
||||
|
||||
struct comm_signal*
|
||||
struct comm_signal*
|
||||
comm_signal_create(struct comm_base* base,
|
||||
void (*callback)(int, void*), void* cb_arg)
|
||||
{
|
||||
|
|
@ -4867,7 +4867,7 @@ comm_signal_create(struct comm_base* base,
|
|||
return com;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_signal_callback(int sig, short event, void* arg)
|
||||
{
|
||||
struct comm_signal* comsig = (struct comm_signal*)arg;
|
||||
|
|
@ -4878,10 +4878,10 @@ comm_signal_callback(int sig, short event, void* arg)
|
|||
(*comsig->callback)(sig, comsig->cb_arg);
|
||||
}
|
||||
|
||||
int
|
||||
int
|
||||
comm_signal_bind(struct comm_signal* comsig, int sig)
|
||||
{
|
||||
struct internal_signal* entry = (struct internal_signal*)calloc(1,
|
||||
struct internal_signal* entry = (struct internal_signal*)calloc(1,
|
||||
sizeof(struct internal_signal));
|
||||
if(!entry) {
|
||||
log_err("malloc failed");
|
||||
|
|
@ -4908,7 +4908,7 @@ comm_signal_bind(struct comm_signal* comsig, int sig)
|
|||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
comm_signal_delete(struct comm_signal* comsig)
|
||||
{
|
||||
struct internal_signal* p, *np;
|
||||
|
|
|
|||
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -83,7 +83,7 @@ struct internal_timer; /* A sub struct of the comm_timer super struct */
|
|||
enum listen_type;
|
||||
|
||||
/** callback from communication point function type */
|
||||
typedef int comm_point_callback_type(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 */
|
||||
|
|
@ -91,7 +91,7 @@ typedef int comm_point_callback_type(struct comm_point*, void*, int,
|
|||
/** to pass closed connection to callback function */
|
||||
#define NETEVENT_CLOSED -1
|
||||
/** to pass timeout happened to callback function */
|
||||
#define NETEVENT_TIMEOUT -2
|
||||
#define NETEVENT_TIMEOUT -2
|
||||
/** to pass fallback from capsforID to callback function; 0x20 failed */
|
||||
#define NETEVENT_CAPSFAIL -3
|
||||
/** to pass done transfer to callback function; http file is complete */
|
||||
|
|
@ -165,8 +165,8 @@ struct comm_reply {
|
|||
socklen_t client_addrlen;
|
||||
};
|
||||
|
||||
/**
|
||||
* Communication point to the network
|
||||
/**
|
||||
* Communication point to the network
|
||||
* These behaviours can be accomplished by setting the flags
|
||||
* and passing return values from the callback.
|
||||
* udp frontside: called after readdone. sendafter.
|
||||
|
|
@ -206,7 +206,7 @@ struct comm_point {
|
|||
int max_tcp_count;
|
||||
/** current number of tcp handler in-use for this accept socket */
|
||||
int cur_tcp_count;
|
||||
/** malloced array of tcp handlers for a tcp-accept,
|
||||
/** malloced array of tcp handlers for a tcp-accept,
|
||||
of size max_tcp_count. */
|
||||
struct comm_point** tcp_handlers;
|
||||
/** linked list of free tcp_handlers to use for new queries.
|
||||
|
|
@ -271,9 +271,9 @@ struct comm_point {
|
|||
/** is this a UDP, TCP-accept or TCP socket. */
|
||||
enum comm_point_type {
|
||||
/** UDP socket - handle datagrams. */
|
||||
comm_udp,
|
||||
comm_udp,
|
||||
/** TCP accept socket - only creates handlers if readable. */
|
||||
comm_tcp_accept,
|
||||
comm_tcp_accept,
|
||||
/** TCP handler socket - handle byteperbyte readwrite. */
|
||||
comm_tcp,
|
||||
/** HTTP handler socket */
|
||||
|
|
@ -282,7 +282,7 @@ struct comm_point {
|
|||
comm_local,
|
||||
/** raw - not DNS format - for pipe readers and writers */
|
||||
comm_raw
|
||||
}
|
||||
}
|
||||
/** variable with type of socket, UDP,TCP-accept,TCP,pipe */
|
||||
type;
|
||||
|
||||
|
|
@ -303,7 +303,7 @@ struct comm_point {
|
|||
/** if set the connection is NOT closed on delete. */
|
||||
int do_not_close;
|
||||
|
||||
/** if set, the connection is closed on error, on timeout,
|
||||
/** if set, the connection is closed on error, on timeout,
|
||||
and after read/write completes. No callback is done. */
|
||||
int tcp_do_close;
|
||||
|
||||
|
|
@ -387,11 +387,11 @@ struct comm_point {
|
|||
/** callback when done.
|
||||
tcp_accept does not get called back, is NULL then.
|
||||
If a timeout happens, callback with timeout=1 is called.
|
||||
If an error happens, callback is called with error set
|
||||
If an error happens, callback is called with error set
|
||||
nonzero. If not NETEVENT_NOERROR, it is an errno value.
|
||||
If the connection is closed (by remote end) then the
|
||||
callback is called with error set to NETEVENT_CLOSED=-1.
|
||||
If a timeout happens on the connection, the error is set to
|
||||
If a timeout happens on the connection, the error is set to
|
||||
NETEVENT_TIMEOUT=-2.
|
||||
The reply_info can be copied if the reply needs to happen at a
|
||||
later time. It consists of a struct with commpoint and address.
|
||||
|
|
@ -399,7 +399,7 @@ struct comm_point {
|
|||
Note the reply information is temporary and must be copied.
|
||||
NULL is passed for_reply info, in cases where error happened.
|
||||
|
||||
declare as:
|
||||
declare as:
|
||||
int my_callback(struct comm_point* c, void* my_arg, int error,
|
||||
struct comm_reply *reply_info);
|
||||
|
||||
|
|
@ -446,14 +446,14 @@ struct comm_signal {
|
|||
|
||||
/**
|
||||
* Create a new comm base.
|
||||
* @param sigs: if true it attempts to create a default loop for
|
||||
* @param sigs: if true it attempts to create a default loop for
|
||||
* signal handling.
|
||||
* @return: the new comm base. NULL on error.
|
||||
*/
|
||||
struct comm_base* comm_base_create(int sigs);
|
||||
|
||||
/**
|
||||
* Create comm base that uses the given ub_event_base (underlying pluggable
|
||||
* Create comm base that uses the given ub_event_base (underlying pluggable
|
||||
* event mechanism pointer).
|
||||
* @param base: underlying pluggable event base.
|
||||
* @return: the new comm base. NULL on error.
|
||||
|
|
@ -619,7 +619,7 @@ struct comm_point* comm_point_create_http_out(struct comm_base* base,
|
|||
* @return: the commpoint or NULL on error.
|
||||
*/
|
||||
struct comm_point* comm_point_create_local(struct comm_base* base,
|
||||
int fd, size_t bufsize,
|
||||
int fd, size_t bufsize,
|
||||
comm_point_callback_type* callback, void* callback_arg);
|
||||
|
||||
/**
|
||||
|
|
@ -632,7 +632,7 @@ struct comm_point* comm_point_create_local(struct comm_base* base,
|
|||
* @return: the commpoint or NULL on error.
|
||||
*/
|
||||
struct comm_point* comm_point_create_raw(struct comm_base* base,
|
||||
int fd, int writing,
|
||||
int fd, int writing,
|
||||
comm_point_callback_type* callback, void* callback_arg);
|
||||
|
||||
/**
|
||||
|
|
@ -722,7 +722,7 @@ size_t comm_point_get_mem(struct comm_point* c);
|
|||
* @param cb_arg: user callback argument.
|
||||
* @return: the new timer or NULL on error.
|
||||
*/
|
||||
struct comm_timer* comm_timer_create(struct comm_base* base,
|
||||
struct comm_timer* comm_timer_create(struct comm_base* base,
|
||||
void (*cb)(void*), void* cb_arg);
|
||||
|
||||
/**
|
||||
|
|
@ -792,7 +792,7 @@ void comm_signal_delete(struct comm_signal* comsig);
|
|||
* if -1, error message has been printed if necessary, simply drop
|
||||
* out of the reading handler.
|
||||
*/
|
||||
int comm_point_perform_accept(struct comm_point* c,
|
||||
int comm_point_perform_accept(struct comm_point* c,
|
||||
struct sockaddr_storage* addr, socklen_t* addrlen);
|
||||
|
||||
/**** internal routines ****/
|
||||
|
|
@ -801,7 +801,7 @@ int comm_point_perform_accept(struct comm_point* c,
|
|||
* This routine is published for checks and tests, and is only used internally.
|
||||
* handle libevent callback for udp comm point.
|
||||
* @param fd: file descriptor.
|
||||
* @param event: event bits from libevent:
|
||||
* @param event: event bits from libevent:
|
||||
* EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
|
||||
* @param arg: the comm_point structure.
|
||||
*/
|
||||
|
|
@ -811,7 +811,7 @@ void comm_point_udp_callback(int fd, short event, void* arg);
|
|||
* This routine is published for checks and tests, and is only used internally.
|
||||
* handle libevent callback for udp ancillary data comm point.
|
||||
* @param fd: file descriptor.
|
||||
* @param event: event bits from libevent:
|
||||
* @param event: event bits from libevent:
|
||||
* EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
|
||||
* @param arg: the comm_point structure.
|
||||
*/
|
||||
|
|
@ -821,7 +821,7 @@ void comm_point_udp_ancil_callback(int fd, short event, void* arg);
|
|||
* This routine is published for checks and tests, and is only used internally.
|
||||
* handle libevent callback for tcp accept comm point
|
||||
* @param fd: file descriptor.
|
||||
* @param event: event bits from libevent:
|
||||
* @param event: event bits from libevent:
|
||||
* EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
|
||||
* @param arg: the comm_point structure.
|
||||
*/
|
||||
|
|
@ -831,7 +831,7 @@ void comm_point_tcp_accept_callback(int fd, short event, void* arg);
|
|||
* This routine is published for checks and tests, and is only used internally.
|
||||
* handle libevent callback for tcp data comm point
|
||||
* @param fd: file descriptor.
|
||||
* @param event: event bits from libevent:
|
||||
* @param event: event bits from libevent:
|
||||
* EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
|
||||
* @param arg: the comm_point structure.
|
||||
*/
|
||||
|
|
@ -841,7 +841,7 @@ void comm_point_tcp_handle_callback(int fd, short event, void* arg);
|
|||
* This routine is published for checks and tests, and is only used internally.
|
||||
* handle libevent callback for tcp data comm point
|
||||
* @param fd: file descriptor.
|
||||
* @param event: event bits from libevent:
|
||||
* @param event: event bits from libevent:
|
||||
* EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
|
||||
* @param arg: the comm_point structure.
|
||||
*/
|
||||
|
|
@ -955,7 +955,7 @@ void http2_stream_add_meshstate(struct http2_stream* h2_stream,
|
|||
* This routine is published for checks and tests, and is only used internally.
|
||||
* handle libevent callback for timer comm.
|
||||
* @param fd: file descriptor (always -1).
|
||||
* @param event: event bits from libevent:
|
||||
* @param event: event bits from libevent:
|
||||
* EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
|
||||
* @param arg: the comm_timer structure.
|
||||
*/
|
||||
|
|
@ -965,7 +965,7 @@ void comm_timer_callback(int fd, short event, void* arg);
|
|||
* This routine is published for checks and tests, and is only used internally.
|
||||
* handle libevent callback for signal comm.
|
||||
* @param fd: file descriptor (used for the signal number).
|
||||
* @param event: event bits from libevent:
|
||||
* @param event: event bits from libevent:
|
||||
* EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
|
||||
* @param arg: the internal commsignal structure.
|
||||
*/
|
||||
|
|
@ -975,7 +975,7 @@ void comm_signal_callback(int fd, short event, void* arg);
|
|||
* This routine is published for checks and tests, and is only used internally.
|
||||
* libevent callback for AF_UNIX fds
|
||||
* @param fd: file descriptor.
|
||||
* @param event: event bits from libevent:
|
||||
* @param event: event bits from libevent:
|
||||
* EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
|
||||
* @param arg: the comm_point structure.
|
||||
*/
|
||||
|
|
@ -985,7 +985,7 @@ void comm_point_local_handle_callback(int fd, short event, void* arg);
|
|||
* This routine is published for checks and tests, and is only used internally.
|
||||
* libevent callback for raw fd access.
|
||||
* @param fd: file descriptor.
|
||||
* @param event: event bits from libevent:
|
||||
* @param event: event bits from libevent:
|
||||
* EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
|
||||
* @param arg: the comm_point structure.
|
||||
*/
|
||||
|
|
@ -995,7 +995,7 @@ void comm_point_raw_handle_callback(int fd, short event, void* arg);
|
|||
* This routine is published for checks and tests, and is only used internally.
|
||||
* libevent callback for timeout on slow accept.
|
||||
* @param fd: file descriptor.
|
||||
* @param event: event bits from libevent:
|
||||
* @param event: event bits from libevent:
|
||||
* EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
|
||||
* @param arg: the comm_point structure.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -4,22 +4,22 @@
|
|||
* Copyright (c) 2007, NLnet Labs. All rights reserved.
|
||||
*
|
||||
* This software is open source.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
|
@ -83,12 +83,12 @@ dosetup(struct timehist* hist)
|
|||
|
||||
struct timehist* timehist_setup(void)
|
||||
{
|
||||
struct timehist* hist = (struct timehist*)calloc(1,
|
||||
struct timehist* hist = (struct timehist*)calloc(1,
|
||||
sizeof(struct timehist));
|
||||
if(!hist)
|
||||
return NULL;
|
||||
hist->num = NUM_BUCKETS_HIST;
|
||||
hist->buckets = (struct th_buck*)calloc(hist->num,
|
||||
hist->buckets = (struct th_buck*)calloc(hist->num,
|
||||
sizeof(struct th_buck));
|
||||
if(!hist->buckets) {
|
||||
free(hist);
|
||||
|
|
@ -194,7 +194,7 @@ timehist_count(struct timehist* hist)
|
|||
return res;
|
||||
}
|
||||
|
||||
double
|
||||
double
|
||||
timehist_quartile(struct timehist* hist, double q)
|
||||
{
|
||||
double lookfor, passed, res;
|
||||
|
|
@ -209,22 +209,22 @@ timehist_quartile(struct timehist* hist, double q)
|
|||
lookfor *= q;
|
||||
passed = 0;
|
||||
i = 0;
|
||||
while(i+1 < hist->num &&
|
||||
while(i+1 < hist->num &&
|
||||
passed+(double)hist->buckets[i].count < lookfor) {
|
||||
passed += (double)hist->buckets[i++].count;
|
||||
}
|
||||
/* got the right bucket */
|
||||
#ifndef S_SPLINT_S
|
||||
low = (double)hist->buckets[i].lower.tv_sec +
|
||||
low = (double)hist->buckets[i].lower.tv_sec +
|
||||
(double)hist->buckets[i].lower.tv_usec/1000000.;
|
||||
up = (double)hist->buckets[i].upper.tv_sec +
|
||||
up = (double)hist->buckets[i].upper.tv_sec +
|
||||
(double)hist->buckets[i].upper.tv_usec/1000000.;
|
||||
#endif
|
||||
res = (lookfor - passed)*(up-low)/((double)hist->buckets[i].count);
|
||||
return low+res;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
timehist_export(struct timehist* hist, long long* array, size_t sz)
|
||||
{
|
||||
size_t i;
|
||||
|
|
@ -235,7 +235,7 @@ timehist_export(struct timehist* hist, long long* array, size_t sz)
|
|||
array[i] = (long long)hist->buckets[i].count;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
timehist_import(struct timehist* hist, long long* array, size_t sz)
|
||||
{
|
||||
size_t i;
|
||||
|
|
|
|||
Loading…
Reference in a new issue