From 69b49f0a742557035e9a8ed6433a22a1c74fb240 Mon Sep 17 00:00:00 2001 From: "Carlos J. Puga Medina" Date: Sun, 1 Apr 2018 23:55:25 +0000 Subject: [PATCH] MFH: r466166 dns/dnsdist: fix rc.d script, add support for LuaJIT and enable some new features - Really fix the rc.d script to start using daemon(8) and add the --supervised commandline argument (which suppresses opening up the console) - Enable DNS-over-TLS (upstream suggests enabling both GnuTLS and OpenSSL backends so you can switch in case of a serious security issue in .ie OpenSSL) - Add OpenSSL support (enabled by default) - Add GnuTLS support (enabled by default) - Add dnstap support (disabled by default) - Add SNMP support (disabled by default) - Add support for LuaJIT or whatever you set as your default version in make.conf (disabled by default) - Bump PORTREVISION PR: 227175 Submitted by: Ralf van der Enden Approved by: ports-secteam (riggs) --- dns/dnsdist/Makefile | 29 +++++++++++++++++-- dns/dnsdist/files/dnsdist.in | 7 +++-- ...atch-ext_luawrapper_include_LuaContext.hpp | 28 ++++++++++++++++++ 3 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 dns/dnsdist/files/patch-ext_luawrapper_include_LuaContext.hpp diff --git a/dns/dnsdist/Makefile b/dns/dnsdist/Makefile index 86c71f5d8745..0c5daa1f8af0 100644 --- a/dns/dnsdist/Makefile +++ b/dns/dnsdist/Makefile @@ -3,7 +3,7 @@ PORTNAME= dnsdist DISTVERSION= 1.3.0 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= dns net MASTER_SITES= https://downloads.powerdns.com/releases/ \ LOCAL/cpm @@ -22,9 +22,10 @@ LIB_DEPENDS= libboost_serialization.so:devel/boost-libs \ libsodium.so:security/libsodium GNU_CONFIGURE= yes -USES= bison compiler cpe gmake libedit libtool localbase lua:52 \ +USES= bison compiler cpe gmake libedit libtool localbase \ pkgconfig tar:bz2 CONFIGURE_ARGS= --bindir=${PREFIX}/sbin \ + --enable-dns-over-tls \ --enable-dnscrypt \ --enable-libsodium \ --enable-re2 @@ -36,6 +37,30 @@ GROUPS= _dnsdist USE_RC_SUBR= dnsdist +OPTIONS_DEFINE= FSTRM LUAJIT SNMP +OPTIONS_DEFAULT= GNUTLS OPENSSL +OPTIONS_MULTI= TLS +OPTIONS_MULTI_TLS= GNUTLS OPENSSL + +FSTRM_DESC= dnstap support (see dnstap.info) +LUAJIT_DESC= Use LuaJIT instead of Lua + +FSTRM_LIB_DEPENDS= libfstrm.so:devel/fstrm +FSTRM_CONFIGURE_ENABLE= fstrm + +GNUTLS_LIB_DEPENDS= libgnutls.so:security/gnutls +GNUTLS_CONFIGURE_ENABLE=gnutls + +LUAJIT_LIB_DEPENDS= libluajit-5.1.so.2:lang/luajit +LUAJIT_USES_OFF= lua +LUAJIT_CONFIGURE_WITH= luajit + +OPENSSL_USES= ssl +OPENSSL_CONFIGURE_ENABLE=libssl + +SNMP_LIB_DEPENDS= libnetsnmp.so:net-mgmt/net-snmp +SNMP_CONFIGURE_WITH= net-snmp + .include # Fix dnsdist binaries when building on FreeBSD 10.3 diff --git a/dns/dnsdist/files/dnsdist.in b/dns/dnsdist/files/dnsdist.in index 989863518c20..5d5d23a023dc 100644 --- a/dns/dnsdist/files/dnsdist.in +++ b/dns/dnsdist/files/dnsdist.in @@ -22,7 +22,10 @@ load_rc_config ${name} : ${dnsdist_priv_group:=_dnsdist} : ${dnsdist_enable:=NO} -command=/usr/local/sbin/${name} -command_args="-u ${dnsdist_priv_user} -g ${dnsdist_priv_group}" +pidfile=/var/run/${name}.pid + +command=/usr/sbin/daemon +actual_command=/usr/local/sbin/${name} +command_args="-c -f -r -P ${pidfile} ${actual_command} -u ${dnsdist_priv_user} -g ${dnsdist_priv_group} --supervised" run_rc_command "$1" diff --git a/dns/dnsdist/files/patch-ext_luawrapper_include_LuaContext.hpp b/dns/dnsdist/files/patch-ext_luawrapper_include_LuaContext.hpp new file mode 100644 index 000000000000..29a4da5074c6 --- /dev/null +++ b/dns/dnsdist/files/patch-ext_luawrapper_include_LuaContext.hpp @@ -0,0 +1,28 @@ +--- ext/luawrapper/include/LuaContext.hpp.orig 2018-03-29 15:25:58 UTC ++++ ext/luawrapper/include/LuaContext.hpp +@@ -2635,11 +2635,21 @@ struct LuaContext::Reader + static auto read(lua_State* state, int index) + -> boost::optional + { ++ std::string result; ++ ++ // lua_tolstring might convert the variable that would confuse lua_next, so we ++ // make a copy of the variable. ++ lua_pushvalue(state, index); ++ + size_t len; +- const auto val = lua_tolstring(state, index, &len); +- if (val == 0) +- return boost::none; +- return std::string(val, len); ++ const auto val = lua_tolstring(state, -1, &len); ++ ++ if (val != 0) ++ result.assign(val, len); ++ ++ lua_pop(state, 1); ++ ++ return val != 0 ? boost::optional{ std::move(result) } : boost::none; + } + }; +