# enable BUILD_LOG
sed -i '1s/^/config BUILD_LOG\n\tbool\n\tdefault y\n\n/' Config-build.in
- ./scripts/feeds update -a
- ./scripts/feeds install -a
- make defconfig
+ ./scripts/feeds update -a > /dev/null
+ ./scripts/feeds install -a > /dev/null
+ make defconfig > /dev/null
echo_blue "=== Setting up SDK done"
RET=0
echo_blue "=== $pkg_name: begin compile logs"
for f in $(find logs/package/feeds/packages/$pkg_name/ -type f); do
- echo_blue "Printing $f"
- cat "$f"
+ echo_blue "Printing last 200 lines of $f"
+ tail -n200 "$f"
done
echo_blue "=== $pkg_name: end compile logs"
include $(TOPDIR)/rules.mk
PKG_NAME:=netdata
-PKG_VERSION:=1.7.0
+PKG_VERSION:=1.8.0
PKG_RELEASE:=1
PKG_MAINTAINER:=Daniel Engberg <daniel.engberg.lists@pyret.net>
PKG_LICENSE:=GPL-3.0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/firehol/netdata/releases/download/v$(PKG_VERSION)
-PKG_HASH:=7fa23ceaccf6548fba165cd4839ce694784b2fcf7f90de0a0162b9c529805fc0
+PKG_HASH:=1624a3b02f07dc8881b8edd5899049d4d3d53e485424ffb2fb65a322e2ff82c3
PKG_INSTALL:=1
PKG_FIXUP:=autoreconf
monitoring for Linux systems, applications and SNMP devices over the web.
endef
+TARGET_CFLAGS += -ffunction-sections -fdata-sections
+TARGET_LDFLAGS += -Wl,--gc-sections
+
CONFIGURE_ARGS += --with-zlib --with-math --disable-x86-sse --disable-lto
define Package/netdata/conffiles
mkdir -p $(1)/usr/lib/netdata
$(CP) $(PKG_INSTALL_DIR)/usr/lib/netdata $(1)/usr/lib
rm $(1)/usr/lib/netdata/python.d/python-modules-installer.sh
- rm -rf $(1)/usr/lib/netdata/python.d/python_modules/pyyaml2
- rm -rf $(1)/usr/lib/netdata/python.d/python_modules/pyyaml3
chmod 4755 $(1)/usr/lib/netdata/plugins.d/apps.plugin
mkdir -p $(1)/etc/init.d
$(INSTALL_BIN) ./files/netdata.init $(1)/etc/init.d/netdata
PKG_NPM_NAME:=arduino-firmata
PKG_NAME:=node-$(PKG_NPM_NAME)
PKG_VERSION:=0.3.3
-PKG_RELEASE:=6
+PKG_RELEASE:=7
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/shokai/node-arduino-firmata.git
PKG_MIRROR_HASH:=b7a498ccf70e466503e72d38ae5b474e91416b6c9842fd167dff249357b0dc37
PKG_BUILD_DEPENDS:=node/host
-PKG_NODE_VERSION:=4.4.5
+PKG_NODE_VERSION:=6.11.2
PKG_MAINTAINER:=John Crispin <blogic@openwrt.org>
PKG_LICENSE:=MIT
include $(INCLUDE_DIR)/package.mk
define Package/node-arduino-firmata
- DEPENDS:=+node +node-npm
SUBMENU:=Node.js
SECTION:=lang
CATEGORY:=Languages
- DEPENDS:=+node +node-serialport
TITLE:=Node.js package to access serial ports for reading and writing
URL:=https://www.npmjs.org/package/serialport
+ DEPENDS:=+node +node-npm +node-serialport
endef
define Package/node-arduino-firmata/description
PKG_NPM_NAME:=cylon
PKG_NAME:=node-$(PKG_NPM_NAME)
PKG_VERSION:=0.22.0
-PKG_RELEASE:=6
+PKG_RELEASE:=7
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/hybridgroup/cylon-firmata.git
PKG_MIRROR_HASH:=e531d3c92965518c60d52bc497bfa9be563ee68c3cf65c77fa55d5e9c2627367
PKG_BUILD_DEPENDS:=node/host
-PKG_NODE_VERSION:=4.4.5
+PKG_NODE_VERSION:=6.11.2
PKG_MAINTAINER:=John Crispin <blogic@openwrt.org>
PKG_LICENSE:=Apache-2.0
include $(INCLUDE_DIR)/package.mk
define Package/node-cylon/default
- DEPENDS:=+node +node-npm $(2)
SUBMENU:=Node.js
SECTION:=lang
CATEGORY:=Languages
TITLE:=CylonJS - $(1)
URL:=https://www.npmjs.org/package/cylon
+ DEPENDS:=+node +node-npm $(2)
endef
define Package/node-cylon
PKG_NPM_NAME:=hid
PKG_NAME:=node-$(PKG_NPM_NAME)
PKG_VERSION:=0.5.1
-PKG_RELEASE:=6
+PKG_RELEASE:=7
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/node-hid/node-hid.git
PKG_MIRROR_HASH:=125f752d491ac10d32bab0f0d660f6f150c6a9a168b2b56bfddc2cb1d65166fc
PKG_BUILD_DEPENDS:=node/host
-PKG_NODE_VERSION:=4.4.5
+PKG_NODE_VERSION:=6.11.2
PKG_MAINTAINER:=John Crispin <blogic@openwrt.org>
PKG_LICENSE:=Custom
include $(INCLUDE_DIR)/package.mk
define Package/node-hid
- DEPENDS:=+node +node-npm
SUBMENU:=Node.js
SECTION:=lang
CATEGORY:=Languages
- DEPENDS:=+libusb-1.0 +hidapi +libstdcpp
TITLE:=Node.js package to access HID devices
URL:=https://github.com/node-hid/node-hid
+ DEPENDS:=+node +node-npm +libusb-1.0 +hidapi +libstdcpp
endef
define Package/node-hid/description
PKG_NPM_NAME:=serialport
PKG_NAME:=node-$(PKG_NPM_NAME)
PKG_VERSION:=3.0.0
-PKG_RELEASE:=4
+PKG_RELEASE:=5
PKG_SOURCE:=$(PKG_NPM_NAME)-$(PKG_VERSION).tgz
PKG_SOURCE_URL:=http://registry.npmjs.org/$(PKG_NPM_NAME)/-/
PKG_HASH:=3bc75b4c2742f0efe8495feb28c5da1a4774df75d94836e43409ed352addfec7
PKG_BUILD_DEPENDS:=node/host
-PKG_NODE_VERSION:=4.4.5
+PKG_NODE_VERSION:=6.11.2
PKG_MAINTAINER:=John Crispin <blogic@openwrt.org>
PKG_LICENSE:=Custom
include $(INCLUDE_DIR)/package.mk
define Package/node-serialport
- DEPENDS:=+node +node-npm
SUBMENU:=Node.js
SECTION:=lang
CATEGORY:=Languages
TITLE:=Node.js package to access serial ports for reading and writing
URL:=https://www.npmjs.org/package/serialport
+ DEPENDS:=+node +node-npm
endef
define Package/node-serialport/description
include $(TOPDIR)/rules.mk
PKG_NAME:=php
-PKG_VERSION:=7.1.9
+PKG_VERSION:=7.1.10
PKG_RELEASE:=1
PKG_MAINTAINER:=Michael Heimpold <mhei@heimpold.de>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.php.net/distributions/
-PKG_HASH:=ec9ca348dd51f19a84dc5d33acfff1fba1f977300604bdac08ed46ae2c281e8c
+PKG_HASH:=2b8efa771a2ead0bb3ae67b530ca505b5b286adc873cca9ce97a6e1d6815c50b
PKG_FIXUP:=libtool autoreconf
PKG_BUILD_PARALLEL:=1
define Package/php7-fpm
$(call Package/php7/Default)
- DEPENDS+= +php7-cgi
+ DEPENDS+= +PACKAGE_php7-mod-intl:libstdcpp
TITLE+= (FPM)
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=python-cffi
-PKG_VERSION:=1.10.0
+PKG_VERSION:=1.11.0
PKG_RELEASE:=1
PKG_SOURCE:=cffi-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/5b/b9/790f8eafcdab455bcd3bd908161f802c9ce5adbf702a83aa7712fcc345b7
-PKG_HASH:=b3b02911eb1f6ada203b0763ba924234629b51586f72a21faacc638269f4ced5
+PKG_SOURCE_URL:=https://pypi.python.org/packages/4e/32/4070bdf32812c89eb635c80880a5caa2e0189aa7999994c265577e5154f3
+PKG_HASH:=5f4ff33371c6969b39b293d9771ee91e81d26f9129be093ca1b7be357fcefd15
PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-cffi-$(PKG_VERSION)
include $(TOPDIR)/rules.mk
PKG_NAME:=python-idna
-PKG_VERSION:=2.5
+PKG_VERSION:=2.6
PKG_RELEASE:=1
PKG_SOURCE:=idna-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/d8/82/28a51052215014efc07feac7330ed758702fc0581347098a81699b5281cb
-PKG_HASH:=3cb5ce08046c4e3a560fc02f138d0ac63e00f8ce5901a56b32ec8b7994082aab
+PKG_SOURCE_URL:=https://pypi.python.org/packages/f4/bd/0467d62790828c23c47fc1dfa1b1f052b24efdf5290f071c7a91d0d82fd3
+PKG_HASH:=2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE.rst
include $(TOPDIR)/rules.mk
PKG_NAME:=python-lxml
-PKG_VERSION:=3.7.2
+PKG_VERSION:=4.0.0
PKG_RELEASE:=1
PKG_SOURCE:=lxml-$(PKG_VERSION).tgz
PKG_SOURCE_URL:=http://lxml.de/files/
-PKG_HASH:=59d9176360dbc3919e9d4bfca85c1ca64ab4f4ee00e6f119d7150ba887e3410a
+PKG_HASH:=f7bc9f702500e205b1560d620f14015fec76dcd6f9e889a946a2ddcc3c344fd0
PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-lxml-$(PKG_VERSION)
PKG_UNPACK=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
include $(TOPDIR)/rules.mk
PKG_NAME:=python-pyasn1-modules
-PKG_VERSION:=0.0.11
+PKG_VERSION:=0.1.4
PKG_RELEASE:=1
PKG_SOURCE:=pyasn1-modules-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/de/5f/0c6a1a096bfc2831ee8e2e951f79e6ec23c853c17ab5ba655322bfcde20a
-PKG_HASH:=60d5c80bfee9b79b492d5d8a934b3ecfc523f2f83aaab4ffafa2bbb651d3c67a
+PKG_SOURCE_URL:=https://pypi.python.org/packages/66/6b/f5582cbf3b920896ce1b97bde3894599b3dec31301ef79ae7ea0022f5577
+PKG_HASH:=b07c17bdb34d6f64aafea6269f2e8fb306a57473f0f38d9a6ca389d6ab30ac4a
PKG_LICENSE:=BSD-2-Clause
PKG_LICENSE_FILES:=LICENSE.txt
include $(TOPDIR)/rules.mk
PKG_NAME:=python-pyasn1
-PKG_VERSION:=0.3.2
+PKG_VERSION:=0.3.5
PKG_RELEASE:=1
PKG_SOURCE:=pyasn1-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/17/a2/266818077dbd002d53ebe5aaaa05a04786256cea8dba1899ac0b832ef028
-PKG_HASH:=90bd82e0db59d4319eaf01c2549b34c817d645275fce9ad41bac7429aa380690
+PKG_SOURCE_URL:=https://pypi.python.org/packages/bc/85/029f5f4d4fa8a487538ce597932cf3601bba3392c85d74eae148fe6ac5d3
+PKG_HASH:=c7a1186416bcdaf19b56f5b2506200306d7d4cf222d3d7c2d4cb600ccacdaf1b
PKG_LICENSE:=BSD-2-Clause
PKG_LICENSE_FILES:=LICENSE.txt
include $(TOPDIR)/rules.mk
PKG_NAME:=pyOpenSSL
-PKG_VERSION:=17.2.0
+PKG_VERSION:=17.3.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/b0/9e/7088f6165c40c46416aff434eb806c1d64ad6ec6dbc201f5ad4d0484704e
-PKG_HASH:=5d617ce36b07c51f330aa63b83bf7f25c40a0e95958876d54d1982f8c91b4834
+PKG_SOURCE_URL:=https://pypi.python.org/packages/ee/6a/cd78737dd990297205943cc4dcad3d3c502807fd2c5b18c5f33dc90ca214
+PKG_HASH:=29630b9064a82e04d8242ea01d7c93d70ec320f5e3ed48e95fcabc6b1d0f6c76
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE
include $(TOPDIR)/rules.mk
PKG_NAME:=python-six
-PKG_VERSION:=1.10.0
-PKG_RELEASE:=4
+PKG_VERSION:=1.11.0
+PKG_RELEASE:=1
PKG_SOURCE:=six-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/source/s/six
-PKG_HASH:=105f8d68616f8248e24bf0e9372ef04d3cc10104f1980f54d57b2ce73a5ad56a
+PKG_SOURCE_URL:=https://pypi.python.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe
+PKG_HASH:=70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9
HOST_BUILD_DEPENDS:=python/host
PKG_NAME:=python
PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO)
-PKG_RELEASE:=7
+# XXX: reset PKG_RELEASE to 1 only if Python's pip & setuptools versions have also bumped;
+# otherwise, keep bumping PKG_RELEASE
+PKG_RELEASE:=2
PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://www.python.org/ftp/python/$(PKG_VERSION)
-PKG_HASH:=35d543986882f78261f97787fd3e06274bfa6df29fac9b4a94f73930ff98f731
+PKG_HASH:=71ffb26e09e78650e424929b2b457b9c912ac216576e6bd9e7d204ed03296a66
PKG_LICENSE:=PSF
PKG_LICENSE_FILES:=LICENSE Modules/_ctypes/libffi_msvc/LICENSE Modules/_ctypes/darwin/LICENSE Modules/_ctypes/libffi/LICENSE Modules/_ctypes/libffi_osx/LICENSE Tools/pybench/LICENSE
--with-ensurepip=install \
CONFIG_SITE=
+define Host/Compile
+ $(call Host/Compile/Default,python Parser/pgen sharedmods)
+endef
+
define Host/Install
$(call Build/InstallMkFiles)
$(MAKE) -C $(HOST_BUILD_DIR) install
}
# delete egg-info directories
-find "$dst_dir" -name "*.egg-info" | xargs rm -rf
+[ "$PYTHON_KEEP_EGGINFO" == "1" ] || \
+ find "$dst_dir" -name "*.egg-info" | xargs rm -rf
if [ "$mode" == "sources" ] ; then
# Copy only python source files
TARGET_CFLAGS += -mno-mips16 -mno-interlink-mips16
endif
+PYTHON_KEEP_EGGINFO ?= 0
+
define PyPackage
define Package/$(1)-src
$(call PyPackage/$(1)/install,$$(1))
find $(PKG_INSTALL_DIR) -name "*\.exe" | xargs rm -f
if [ -e files/python-package-install.sh ] ; then \
+ PYTHON_KEEP_EGGINFO="$(PYTHON_KEEP_EGGINFO)" \
$(SHELL) files/python-package-install.sh \
"$(PKG_INSTALL_DIR)" "$$(1)" \
"$(HOST_PYTHON_BIN)" "$$(2)" \
"$$$$$$$$$$(call shvar,PyPackage/$(1)/filespec)" ; \
elif [ -e $(STAGING_DIR)/mk/python-package-install.sh ] ; then \
+ PYTHON_KEEP_EGGINFO="$(PYTHON_KEEP_EGGINFO)" \
$(SHELL) $(STAGING_DIR)/mk/python-package-install.sh \
"$(PKG_INSTALL_DIR)" "$$(1)" \
"$(HOST_PYTHON_BIN)" "$$(2)" \
#
PYTHON_VERSION:=2.7
-PYTHON_VERSION_MICRO:=13
+PYTHON_VERSION_MICRO:=14
PYTHON_SETUPTOOLS_VERSION:=28.8.0
PYTHON_PIP_VERSION:=9.0.1
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
-@@ -1116,6 +1116,7 @@ libinstall: build_all $(srcdir)/Lib/$(PL
+@@ -1110,6 +1110,7 @@ libinstall: build_all $(srcdir)/Lib/$(PL
done; \
done
$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
if test -d $(DESTDIR)$(LIBDEST)/distutils/tests; then \
$(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \
$(DESTDIR)$(LIBDEST)/distutils/tests ; \
-@@ -1142,6 +1143,7 @@ libinstall: build_all $(srcdir)/Lib/$(PL
+@@ -1136,6 +1137,7 @@ libinstall: build_all $(srcdir)/Lib/$(PL
$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt
PKG_NAME:=python3
# XXX: reset PKG_RELEASE to 1 only if Python's pip & setuptools versions have also bumped;
# otherwise, keep bumping PKG_RELEASE
-PKG_RELEASE:=6
+PKG_RELEASE:=7
PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO)
PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
}
# delete egg-info directories
-find "$dst_dir" -name "*.egg-info" | xargs rm -rf
+[ "$PYTHON3_KEEP_EGGINFO" == "1" ] || \
+ find "$dst_dir" -name "*.egg-info" | xargs rm -rf
if [ "$mode" == "sources" ] ; then
# Copy only python source files
TARGET_CFLAGS += -mno-mips16 -mno-interlink-mips16
endif
+PYTHON3_KEEP_EGGINFO ?= 0
+
define Py3Package
define Package/$(1)-src
$(call Py3Package/$(1)/install,$$(1))
find $(PKG_INSTALL_DIR) -name "*\.exe" | xargs rm -f
if [ -e files/python3-package-install.sh ] ; then \
+ PYTHON3_KEEP_EGGINFO="$(PYTHON3_KEEP_EGGINFO)" \
$(SHELL) files/python3-package-install.sh \
"$(PKG_INSTALL_DIR)" "$$(1)" \
"$(HOST_PYTHON3_BIN)" "$$(2)" \
"$$$$$$$$$$(call shvar,Py3Package/$(1)/filespec)" ; \
elif [ -e $(STAGING_DIR)/mk/python3-package-install.sh ] ; then \
+ PYTHON3_KEEP_EGGINFO="$(PYTHON3_KEEP_EGGINFO)" \
$(SHELL) $(STAGING_DIR)/mk/python3-package-install.sh \
"$(PKG_INSTALL_DIR)" "$$(1)" \
"$(HOST_PYTHON3_BIN)" "$$(2)" \
include $(TOPDIR)/rules.mk
PKG_NAME:=ruby
-PKG_VERSION:=2.4.1
+PKG_VERSION:=2.4.2
PKG_RELEASE:=1
# First two numbes
PKG_ABI_VERSION:=$(subst $(space),.,$(wordlist 1, 2, $(subst .,$(space),$(PKG_VERSION))))
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=http://cache.ruby-lang.org/pub/ruby/$(PKG_ABI_VERSION)/
-PKG_HASH:=4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654
+PKG_SOURCE_URL:=https://cache.ruby-lang.org/pub/ruby/$(PKG_ABI_VERSION)/
+PKG_HASH:=748a8980d30141bd1a4124e11745bb105b436fb1890826e0d2b9ea31af27f735
PKG_MAINTAINER:=Luiz Angelo Daros de Luca <luizluca@gmail.com>
PKG_LICENSE:=BSD-2-Clause
PKG_LICENSE_FILES:=COPYING
--- /dev/null
+diff -pU3 a/configure b/configure
+--- a/configure 2017-09-14 21:52:19.000000000 +0900
++++ b/configure 2017-09-15 07:03:12.000000000 +0900
+@@ -10614,6 +10614,7 @@ fi
+ ac_res=$ac_cv_search___gmpz_init
+ if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
++ $as_echo "#define HAVE_LIBGMP 1" >>confdefs.h
+
+ fi
+
+@@ -10683,6 +10684,7 @@ fi
+ ac_res=$ac_cv_search_malloc_conf
+ if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
++ $as_echo "#define HAVE_LIBJEMALLOC 1" >>confdefs.h
+
+ else
+ with_jemalloc=no
+diff -pU3 a/configure.in b/configure.in
+--- a/configure.in 2017-08-04 23:39:29.000000000 +0900
++++ b/configure.in 2017-09-15 07:20:40.000000000 +0900
+@@ -1403,13 +1403,15 @@ AC_ARG_WITH([gmp],
+ AS_IF([test "x$with_gmp" != xno],
+ [AC_CHECK_HEADERS(gmp.h)
+ AS_IF([test "x$ac_cv_header_gmp_h" != xno],
+- AC_SEARCH_LIBS([__gmpz_init], [gmp]))])
++ AC_SEARCH_LIBS([__gmpz_init], [gmp],
++ [AC_DEFINE(HAVE_LIBGMP, 1)]))])
+
+ AC_ARG_WITH([jemalloc],
+ [AS_HELP_STRING([--with-jemalloc],[use jemalloc allocator])],
+ [with_jemalloc=$withval], [with_jemalloc=no])
+ AS_IF([test "x$with_jemalloc" = xyes],[
+- AC_SEARCH_LIBS([malloc_conf], [jemalloc], [], [with_jemalloc=no])
++ AC_SEARCH_LIBS([malloc_conf], [jemalloc],
++ [AC_DEFINE(HAVE_LIBJEMALLOC, 1)], [with_jemalloc=no])
+ AC_CHECK_HEADER(jemalloc/jemalloc.h, [
+ AC_DEFINE(RUBY_ALTERNATIVE_MALLOC_HEADER, [<jemalloc/jemalloc.h>])
+ ])
include $(INCLUDE_DIR)/target.mk
PKG_NAME:=boost
-PKG_VERSION:=1.65.0
-PKG_SOURCE_VERSION:=1_65_0
+PKG_VERSION:=1.65.1
+PKG_SOURCE_VERSION:=1_65_1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)_$(PKG_SOURCE_VERSION).tar.bz2
PKG_SOURCE_URL:=https://sourceforge.net/projects/boost/files/boost/$(PKG_VERSION)
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)_$(PKG_SOURCE_VERSION)
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)_$(PKG_SOURCE_VERSION)
-PKG_HASH:=ea26712742e2fb079c2a566a31f3266973b76e38222b9f88b387e3c8b2f9902c
+PKG_HASH:=9807a5d16566c57fd74fb522764e0b134a8bbe6b6e8967b83afefd30dcd3be81
PKG_LICENSE:=Boost Software License <http://www.boost.org/users/license.html>
PKG_MAINTAINER:=Carlos M. Ferreira <carlosmf.pt@gmail.com>
endef
define Package/boost/description
-This package provides the Boost v1.65 libraries.
+This package provides the Boost v1.65.1 libraries.
Boost is a set of free, peer-reviewed, portable C++ source libraries.
-----------------------------------------------------------------------------
- wave
There are many more header-only libraries supported by Boost.
-See more at http://www.boost.org/doc/libs/1_65_0/
+See more at http://www.boost.org/doc/libs/1_65_1/
endef
PKG_BUILD_DEPENDS:=boost/host PACKAGE_python:python PACKAGE_python3:python3
+++ /dev/null
-Index: boost_1_65_0/boost/context/continuation_fcontext.hpp
-===================================================================
---- boost_1_65_0.orig/boost/context/continuation_fcontext.hpp
-+++ boost_1_65_0/boost/context/continuation_fcontext.hpp
-@@ -95,7 +95,7 @@ transfer_t context_ontop( transfer_t t)
- t.data = nullptr;
- Ctx c{ t.fctx };
- // execute function, pass continuation via reference
-- fn( std::move( c) );
-+ c = fn( std::move( c) );
- #if defined(BOOST_NO_CXX14_STD_EXCHANGE)
- return { exchange( c.fctx_, nullptr), nullptr };
- #else
-Index: boost_1_65_0/boost/context/continuation_ucontext.hpp
-===================================================================
---- boost_1_65_0.orig/boost/context/continuation_ucontext.hpp
-+++ boost_1_65_0/boost/context/continuation_ucontext.hpp
-@@ -84,18 +84,18 @@ static void entry_func( void * data) noe
- struct BOOST_CONTEXT_DECL activation_record {
- thread_local static activation_record * current_rec;
-
-- ucontext_t uctx{};
-- stack_context sctx{};
-- bool main_ctx{ true };
-- activation_record * from{ nullptr };
-- std::function< void(activation_record*&) > ontop{};
-- bool terminated{ false };
-- bool force_unwind{ false };
-+ ucontext_t uctx{};
-+ stack_context sctx{};
-+ bool main_ctx{ true };
-+ activation_record * from{ nullptr };
-+ std::function< activation_record*(activation_record*&) > ontop{};
-+ bool terminated{ false };
-+ bool force_unwind{ false };
- #if defined(BOOST_USE_ASAN)
-- void * fake_stack{ nullptr };
-- void * stack_bottom{ nullptr };
-- std::size_t stack_size{ 0 };
-- bool started{ false };
-+ void * fake_stack{ nullptr };
-+ void * stack_bottom{ nullptr };
-+ std::size_t stack_size{ 0 };
-+ bool started{ false };
- #endif
-
- static activation_record *& current() noexcept;
-@@ -168,20 +168,30 @@ struct BOOST_CONTEXT_DECL activation_rec
- current()->ontop = std::bind(
- [](typename std::decay< Fn >::type & fn, activation_record *& ptr){
- Ctx c{ ptr };
-- fn( std::move( c) );
-+ c = fn( std::move( c) );
- if ( ! c) {
- ptr = nullptr;
- }
-+#if defined(BOOST_NO_CXX14_STD_EXCHANGE)
-+ return exchange( c.ptr_, nullptr);
-+#else
-+ return std::exchange( c.ptr_, nullptr);
-+#endif
- },
- std::forward< Fn >( fn),
- std::placeholders::_1);
- #else
- current()->ontop = [fn=std::forward<Fn>(fn)](activation_record *& ptr){
- Ctx c{ ptr };
-- fn( std::move( c) );
-+ c = fn( std::move( c) );
- if ( ! c) {
- ptr = nullptr;
- }
-+#if defined(BOOST_NO_CXX14_STD_EXCHANGE)
-+ return exchange( c.ptr_, nullptr);
-+#else
-+ return std::exchange( c.ptr_, nullptr);
-+#endif
- };
- #endif
- #if defined(BOOST_USE_SEGMENTED_STACKS)
-@@ -408,7 +418,7 @@ public:
- if ( BOOST_UNLIKELY( detail::activation_record::current()->force_unwind) ) {
- throw detail::forced_unwind{ ptr};
- } else if ( BOOST_UNLIKELY( nullptr != detail::activation_record::current()->ontop) ) {
-- detail::activation_record::current()->ontop( ptr);
-+ ptr = detail::activation_record::current()->ontop( ptr);
- detail::activation_record::current()->ontop = nullptr;
- }
- return continuation{ ptr };
-@@ -426,7 +436,7 @@ public:
- if ( BOOST_UNLIKELY( detail::activation_record::current()->force_unwind) ) {
- throw detail::forced_unwind{ ptr};
- } else if ( BOOST_UNLIKELY( nullptr != detail::activation_record::current()->ontop) ) {
-- detail::activation_record::current()->ontop( ptr);
-+ ptr = detail::activation_record::current()->ontop( ptr);
- detail::activation_record::current()->ontop = nullptr;
- }
- return continuation{ ptr };
-Index: boost_1_65_0/boost/context/continuation_winfib.hpp
-===================================================================
---- boost_1_65_0.orig/boost/context/continuation_winfib.hpp
-+++ boost_1_65_0/boost/context/continuation_winfib.hpp
-@@ -65,13 +65,13 @@ static VOID WINAPI entry_func( LPVOID da
- struct BOOST_CONTEXT_DECL activation_record {
- thread_local static activation_record * current_rec;
-
-- LPVOID fiber{ nullptr };
-- stack_context sctx{};
-- bool main_ctx{ true };
-- activation_record * from{ nullptr };
-- std::function< void(activation_record*&) > ontop{};
-- bool terminated{ false };
-- bool force_unwind{ false };
-+ LPVOID fiber{ nullptr };
-+ stack_context sctx{};
-+ bool main_ctx{ true };
-+ activation_record * from{ nullptr };
-+ std::function< activation_record*(activation_record*&) > ontop{};
-+ bool terminated{ false };
-+ bool force_unwind{ false };
-
- static activation_record *& current() noexcept;
-
-@@ -142,20 +142,30 @@ struct BOOST_CONTEXT_DECL activation_rec
- current()->ontop = std::bind(
- [](typename std::decay< Fn >::type & fn, activation_record *& ptr){
- Ctx c{ ptr };
-- fn( std::move( c) );
-+ c = fn( std::move( c) );
- if ( ! c) {
- ptr = nullptr;
- }
-+#if defined(BOOST_NO_CXX14_STD_EXCHANGE)
-+ return exchange( c.ptr_, nullptr);
-+#else
-+ return std::exchange( c.ptr_, nullptr);
-+#endif
- },
- std::forward< Fn >( fn),
- std::placeholders::_1);
- #else
- current()->ontop = [fn=std::forward<Fn>(fn)](activation_record *& ptr){
- Ctx c{ ptr };
-- fn( std::move( c) );
-+ c = fn( std::move( c) );
- if ( ! c) {
- ptr = nullptr;
- }
-+#if defined(BOOST_NO_CXX14_STD_EXCHANGE)
-+ return exchange( c.ptr_, nullptr);
-+#else
-+ return std::exchange( c.ptr_, nullptr);
-+#endif
- };
- #endif
- // context switch
-@@ -336,7 +346,7 @@ public:
- if ( BOOST_UNLIKELY( detail::activation_record::current()->force_unwind) ) {
- throw detail::forced_unwind{ ptr};
- } else if ( BOOST_UNLIKELY( nullptr != detail::activation_record::current()->ontop) ) {
-- detail::activation_record::current()->ontop( ptr);
-+ ptr = detail::activation_record::current()->ontop( ptr);
- detail::activation_record::current()->ontop = nullptr;
- }
- return continuation{ ptr };
-@@ -354,7 +364,7 @@ public:
- if ( BOOST_UNLIKELY( detail::activation_record::current()->force_unwind) ) {
- throw detail::forced_unwind{ ptr};
- } else if ( BOOST_UNLIKELY( nullptr != detail::activation_record::current()->ontop) ) {
-- detail::activation_record::current()->ontop( ptr);
-+ ptr = detail::activation_record::current()->ontop( ptr);
- detail::activation_record::current()->ontop = nullptr;
- }
- return continuation{ ptr };
-Index: boost_1_65_0/boost/thread/win32/condition_variable.hpp
-===================================================================
---- boost_1_65_0.orig/boost/thread/win32/condition_variable.hpp
-+++ boost_1_65_0/boost/thread/win32/condition_variable.hpp
-@@ -211,7 +211,7 @@ namespace boost
- {}
- #endif
-
-- void remove_waiter()
-+ void remove_waiter_and_reset()
- {
- if (entry) {
- boost::lock_guard<boost::mutex> internal_lock(internal_mutex);
-@@ -221,7 +221,7 @@ namespace boost
- }
- ~entry_manager() BOOST_NOEXCEPT_IF(false)
- {
-- remove_waiter();
-+ remove_waiter_and_reset();
- }
-
- list_entry* operator->()
-@@ -250,7 +250,7 @@ namespace boost
- woken=entry->woken();
- }
- // do it here to avoid throwing on the destructor
-- entry->remove_waiter();
-+ entry.remove_waiter_and_reset();
- locker.lock();
- return woken;
- }
-Index: boost_1_65_0/libs/context/doc/callcc.qbk
-===================================================================
---- boost_1_65_0.orig/libs/context/doc/callcc.qbk
-+++ boost_1_65_0/libs/context/doc/callcc.qbk
-@@ -176,6 +176,7 @@ return `void`.
- c=c.resume_with([&data](ctx::continuation && c){
- std::cout << "f2: entered: " << data << std::endl;
- data=-1;
-+ return std::move( c);
- });
- std::cout << "f1: returned third time" << std::endl;
-
-@@ -221,6 +222,7 @@ an exception.
- c = c.resume_with(
- [](ctx::continuation && c){
- throw my_exception(std::move(c),"abc");
-+ return std::move( c);
- });
-
- output:
-@@ -527,11 +529,11 @@ e.g. ['continuation::operator bool()] re
-
- [variablelist
- [[Effects:] [Captures current continuation and resumes `*this`.
--The function `resume_with`, is used to execute function `fn` in continuation
-+The function `resume_with`, is used to execute function `fn` in the execution context of
- `*this` (e.g. the stack frame of `fn` is allocated on stack of `*this`).]]
- [[Returns:] [The continuation representing the continuation that has been
- suspended.]]
--[[Note:] [Function `fn` needs to return void.]]
-+[[Note:] [Function `fn` needs to return `continuation`.]]
- [[Note:] [The returned continuation indicates if the suspended continuation has
- terminated (return from context-function) via `bool operator()`.]]
- ]
-Index: boost_1_65_0/libs/context/example/ontop.cpp
-===================================================================
---- boost_1_65_0.orig/libs/context/example/ontop.cpp
-+++ boost_1_65_0/libs/context/example/ontop.cpp
-@@ -32,6 +32,7 @@ int main() {
- c = c.resume_with( [&data](ctx::continuation && c){
- std::cout << "f2: entered: " << data << std::endl;
- data = -1;
-+ return std::move( c);
- });
- std::cout << "f1: returned third time" << std::endl;
- std::cout << "main: done" << std::endl;
-Index: boost_1_65_0/libs/context/example/ontop_void.cpp
-===================================================================
---- boost_1_65_0.orig/libs/context/example/ontop_void.cpp
-+++ boost_1_65_0/libs/context/example/ontop_void.cpp
-@@ -21,8 +21,9 @@ ctx::continuation f1( ctx::continuation
- return std::move( c);
- }
-
--void f2( ctx::continuation && c) {
-+ctx::continuation f2( ctx::continuation && c) {
- std::cout << "f2: entered" << std::endl;
-+ return std::move( c);
- }
-
- int main() {
-Index: boost_1_65_0/libs/context/example/throw.cpp
-===================================================================
---- boost_1_65_0.orig/libs/context/example/throw.cpp
-+++ boost_1_65_0/libs/context/example/throw.cpp
-@@ -38,6 +38,7 @@ int main() {
- c = c.resume_with(
- [](ctx::continuation && c){
- throw my_exception(std::move( c), "abc");
-+ return std::move( c);
- });
-
- std::cout << "main: done" << std::endl;
-Index: boost_1_65_0/libs/context/test/test_callcc.cpp
-===================================================================
---- boost_1_65_0.orig/libs/context/test/test_callcc.cpp
-+++ boost_1_65_0/libs/context/test/test_callcc.cpp
-@@ -252,6 +252,7 @@ void test_ontop() {
- c = c.resume_with(
- [&i](ctx::continuation && c){
- i -= 10;
-+ return std::move( c);
- });
- BOOST_CHECK( c);
- BOOST_CHECK_EQUAL( i, 200);
-@@ -266,6 +267,7 @@ void test_ontop() {
- c = c.resume_with(
- [&c1](ctx::continuation && c){
- c1 = std::move( c);
-+ return std::move( c);
- });
- }
- }
-@@ -290,7 +292,8 @@ void test_ontop_exception() {
- const char * what = "hello world";
- c.resume_with(
- [what](ctx::continuation && c){
-- throw my_exception( std::move( c), what);
-+ throw my_exception( std::move( c), what);
-+ return std::move( c);
- });
- BOOST_CHECK_EQUAL( 3, value1);
- BOOST_CHECK_EQUAL( std::string( what), value2);
-Index: boost_1_65_0/libs/fiber/src/context.cpp
-===================================================================
---- boost_1_65_0.orig/libs/fiber/src/context.cpp
-+++ boost_1_65_0/libs/fiber/src/context.cpp
-@@ -145,6 +145,7 @@ context::resume() noexcept {
- // pass pointer to the context that resumes `this`
- c_.resume_with([prev](boost::context::continuation && c){
- prev->c_ = std::move( c);
-+ return boost::context::continuation{};
- });
- }
-
-@@ -158,6 +159,7 @@ context::resume( detail::spinlock_lock &
- c_.resume_with([prev,&lk](boost::context::continuation && c){
- prev->c_ = std::move( c);
- lk.unlock();
-+ return boost::context::continuation{};
- });
- }
-
-@@ -171,6 +173,7 @@ context::resume( context * ready_ctx) no
- c_.resume_with([prev,ready_ctx](boost::context::continuation && c){
- prev->c_ = std::move( c);
- context::active()->schedule( ready_ctx);
-+ return boost::context::continuation{};
- });
- }
-
-@@ -218,6 +221,7 @@ context::suspend_with_cc() noexcept {
- // pass pointer to the context that resumes `this`
- return c_.resume_with([prev](boost::context::continuation && c){
- prev->c_ = std::move( c);
-+ return boost::context::continuation{};
- });
- }
-
--- /dev/null
+Index: boost_1_65_1/libs/fiber/src/numa/linux/pin_thread.cpp
+===================================================================
+--- boost_1_65_1.orig/libs/fiber/src/numa/linux/pin_thread.cpp
++++ boost_1_65_1/libs/fiber/src/numa/linux/pin_thread.cpp
+@@ -9,6 +9,7 @@
+ extern "C" {
+ #include <pthread.h>
+ #include <sched.h>
++#include <string.h>
+ }
+
+ #include <system_error>
+++ /dev/null
-Index: boost_1_65_0/libs/fiber/src/numa/linux/pin_thread.cpp
-===================================================================
---- boost_1_65_0.orig/libs/fiber/src/numa/linux/pin_thread.cpp
-+++ boost_1_65_0/libs/fiber/src/numa/linux/pin_thread.cpp
-@@ -9,6 +9,7 @@
- extern "C" {
- #include <pthread.h>
- #include <sched.h>
-+#include <string.h>
- }
-
- #include <system_error>
PKG_NAME:=file
PKG_VERSION:=5.25
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=ftp://ftp.astron.com/pub/file/
+PKG_SOURCE_URL:=https://sources.lede-project.org/ \
+ http://pkgs.fedoraproject.org/lookaside/pkgs/file/ \
+ http://download.openpkg.org/components/cache/file/ \
+ ftp://ftp.astron.com/pub/file/
PKG_HASH:=3735381563f69fb4239470b8c51b876a80425348b8285a7cded8b61d6b890eca
PKG_LICENSE:=BSD-2c
define Package/file/Default
TITLE:=File type determination
URL:=ftp://ftp.astron.com/pub/file/
- MAINTAINER:=Luka Perkov <luka@openwrt.org>
+ MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
endef
define Package/file
define Package/libmagic/install
$(INSTALL_DIR) $(1)/usr/lib
- $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libmagic.so.* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libmagic.so.* $(1)/usr/lib/
endef
$(eval $(call BuildPackage,file))
include $(TOPDIR)/rules.mk
PKG_NAME:=glib2
-PKG_VERSION:=2.53.7
+PKG_VERSION:=2.54.1
PKG_RELEASE:=1
PKG_SOURCE:=glib-$(PKG_VERSION).tar.xz
PKG_BUILD_DIR:=$(BUILD_DIR)/glib-$(PKG_VERSION)
-PKG_SOURCE_URL:=@GNOME/glib/2.53
-PKG_HASH:=028efbf6df4d88d7725314456524b923169f4d4f8503347194b2baf2222f3e33
+PKG_SOURCE_URL:=@GNOME/glib/2.54
+PKG_HASH:=50c01b1419324f10fbf9b9709ec2164b18586968bdce7540583bf32302cf47a3
PKG_BUILD_PARALLEL:=1
HOST_BUILD_PARALLEL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=libcoap
-PKG_RELEASE:=3
+PKG_VERSION:=v4.1.2
+PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/obgm/libcoap
PKG_SOURCE_SUBDIR:=$(PKG_NAME)
-PKG_SOURCE_VERSION:=2da31de732c0e51a9bc9e1d4aea21e25da89cf87
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.bz2
-PKG_MIRROR_HASH:=b61fe3245a329dfcf198187149d2072509b18ca6e348d0b423c0f44d11e930e4
+PKG_SOURCE_VERSION:=fa5248603049ddf95cc84608aad569120763bf2b
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_MIRROR_HASH:=0ab4bc9569a78904743cc3074fd1c0fc9c78c85fd510fef5145dd872523619e6
PKG_MAINTAINER:=Anton Glukhov <anton.a.glukhov@gmail.com>
PKG_LICENSE:=GPL-2.0+ BSD-2-Clause
Constrained Application Protocol (RFC 7252) library
endef
+define Package/coap-client
+ SECTION:=utils
+ CATEGORY:=Utilities
+ DEPENDS:=+libcoap
+ TITLE:=CoAP (RFC 7252) client tool
+endef
+
+define Package/coap-client/description
+ Constrained Application Protocol (RFC7252) client tool
+endef
+
+define Package/coap-server
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+libcoap
+ TITLE:=CoAP (RFC 7252) server programs
+endef
+
+define Package/coap-server/description
+ Constrained Application Protocol (RFC 7252) server and resource directory server
+endef
+
TARGET_CFLAGS += $(FPIC)
CONFIGURE_ARGS += \
- --disable-examples \
+ --enable-examples \
--disable-documentation
ifeq ($(CONFIG_BIG_ENDIAN),y)
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcoap-1.so* $(1)/usr/lib/
endef
+define Package/coap-client/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/coap-client $(1)/usr/bin/
+endef
+
+define Package/coap-server/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/coap-server $(1)/usr/bin/
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/coap-rd $(1)/usr/bin/
+endef
+
$(eval $(call BuildPackage,libcoap))
+$(eval $(call BuildPackage,coap-client))
+$(eval $(call BuildPackage,coap-server))
+++ /dev/null
-#
-# Copyright (C) 2006-2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=libevent
-PKG_VERSION:=1.4.15
-PKG_RELEASE:=1
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-release-$(PKG_VERSION)-stable
-PKG_SOURCE:=release-$(PKG_VERSION)-stable.tar.gz
-PKG_SOURCE_URL:=https://github.com/libevent/libevent/archive/
-PKG_HASH:=e9a32238a98954081d7ed9918d8f799eb4c743fd570749c0721585140dd5de21
-PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>
-
-PKG_FIXUP:=autoreconf
-PKG_INSTALL:=1
-PKG_BUILD_PARALLEL:=1
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/libevent
- SECTION:=libs
- CATEGORY:=Libraries
- TITLE:=Event notification library (legacy)
- DEPENDS:=+librt
- URL:=http://www.libevent.org
-endef
-
-define Package/libevent/description
- The libevent API provides a mechanism to execute a callback function
- when a specific event occurs on a file descriptor or after a timeout
- has been reached. Furthermore, libevent also support callbacks due
- to signals or regular timeouts.
-
- libevent is meant to replace the event loop found in event driven
- network servers. An application just needs to call event_dispatch()
- and then add or remove events dynamically without having to change
- the event loop.
-endef
-
-TARGET_CFLAGS += $(FPIC)
-
-CONFIGURE_ARGS += \
- --enable-shared \
- --enable-static \
-
-MAKE_FLAGS += \
- CFLAGS="$(TARGET_CFLAGS)" \
-
-define Build/InstallDev
- $(INSTALL_DIR) $(1)/usr/include/libevent
- $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/libevent/
- $(INSTALL_DIR) $(1)/usr/lib/libevent
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.{a,so} $(1)/usr/lib/libevent/
-endef
-
-define Package/libevent/install
- $(INSTALL_DIR) $(1)/usr/lib
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so.* $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,libevent))
--- /dev/null
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=glog
+PKG_RELEASE:=1
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/google/glog.git
+PKG_SOURCE_VERSION:=v0.3.5
+PKG_MIRROR_HASH:=4677fba927e2d9cdcbc518c34c88465260d506d88072ea16217a8171310b9a1c
+
+PKG_FIXUP:=autoreconf
+PKG_INSTALL:=1
+
+PKG_LICENSE_FILE:=COPYING
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/glog
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=C++ implementation of the Google logging module
+ DEPENDS:= +libstdcpp +libpthread
+ URL:=https://github.com/google/glog
+ MAINTAINER:=Amir Sabbaghi <amir@pichak.co>
+endef
+
+define Package/glog/description
+ This repository contains a C++ implementation of the Google logging
+ module. Documentation for the implementation is in doc/.
+endef
+
+TARGET_CXXFLAGS+=-std=c++11
+TARGET_LDFLAGS+=-lpthread
+
+define Build/Configure
+ $(call Build/Configure/Default,)
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/include/glog
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/glog/*.h $(1)/usr/include/glog
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libglog.{a,so*} $(1)/usr/lib
+ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libglog.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/glog/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libglog.so.* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,glog))
include $(TOPDIR)/rules.mk
PKG_NAME:=libndpi
-PKG_VERSION:=1.8
+PKG_VERSION:=2.0
PKG_RELEASE:=1
PKG_MAINTAINER:=Banglang Huang <banglang.huang@foxmail.com>
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/ntop/nDPI.git
-PKG_SOURCE_VERSION:=6450ae256cfd7a6006d39df4a29de32f2f6fb7eb
+PKG_SOURCE_VERSION:=6607c33cb8d0d942e97fe28b1a3a51da06b7426a
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_MIRROR_HASH:=4e8fe352bd739c76c980f52904a4a2eefbc17ad68e55603c6c19598d7ccfba3c
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_MIRROR_HASH:=800554afbb7c742786c554ca553c4d866bc4dcf61154858ce6b40511e7d7be39
PKG_LICENSE:=LGPLv3
PKG_INSTALL:=1
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include/
$(CP) \
- $(PKG_INSTALL_DIR)/usr/include/libndpi-1.8.0/libndpi \
+ $(PKG_INSTALL_DIR)/usr/include/libndpi-$(PKG_VERSION).0/libndpi \
$(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib
PKG_LICENSE:=BSD-3-Clause
PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
-PKG_VERSION:=0.8.56
+PKG_VERSION:=0.9.15
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=4d13eca938085298edbad6a731d77dfd55c8d514
-PKG_MIRROR_HASH:=88d1ab14a945c8c8c9fadfb248568294ac5f62dea3b8d99e60dbb8262f7107bc
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.bz2
+PKG_SOURCE_VERSION:=cea46db1edb72231c9e009d7e6d6799256676eb8
+PKG_MIRROR_HASH:=a686754cef2ef29a511b8ea06d121f0ce562b570d6cea6c6a7562ff47b91d2a2
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/cesnet/libnetconf2/
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
PKG_BUILD_ROOT:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
PKG_BUILD_DIR:=$(PKG_BUILD_ROOT)
--- /dev/null
+#
+# Copyright (C) 2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libredblack
+PKG_VERSION:=0.2.3
+PKG_RELEASE=$(PKG_SOURCE_VERSION)
+
+PKG_LICENSE:=GPL-2.0+
+PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_VERSION:=a399310d99b61eec4d3c0677573ab5dddcf9395d
+PKG_MIRROR_HASH:=71b05e70988b97865f734c698dd5564e349680556ccb8634a5bddf344012f22a
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
+PKG_SOURCE_URL:=https://github.com/sysrepo/libredblack.git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
+
+PKG_BUILD_ROOT:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
+PKG_BUILD_DIR:=$(PKG_BUILD_ROOT)
+
+PKG_FIXUP:=autoreconf
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+
+define Package/libredblack
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=RedBlack tree library
+ URL:=$(PKG_SOURCE_URL)
+endef
+
+define Package/libredblack/description
+ RedBlack Balanced Tree Searching and Sorting Library.
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libredblack.{so*,a,la} $(1)/usr/lib/
+
+ $(INSTALL_DIR) $(1)/usr/include
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/redblack.h $(1)/usr/include/
+endef
+
+define Package/libredblack/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libredblack.{so*,a,la} $(1)/usr/lib/
+
+ $(INSTALL_DIR) $(1)/usr/include
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/include/redblack.h $(1)/usr/include
+endef
+
+$(eval $(call BuildPackage,libredblack))
include $(TOPDIR)/rules.mk
PKG_NAME:=libxml2
-PKG_VERSION:=2.9.5
+PKG_VERSION:=2.9.6
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://gd.tuwien.ac.at/languages/libxml/ \
http://xmlsoft.org/sources/ \
ftp://fr.rpmfind.net/pub/libxml/
-PKG_HASH:=4031c1ecee9ce7ba4f313e91ef6284164885cdb69937a123f6a83bb6a72dcd38
+PKG_HASH:=8b9038cca7240e881d462ea391882092dfdc6d4f483f72683e817be08df5ebbc
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=libyang
-PKG_VERSION:=0.12.174
+PKG_VERSION:=0.13.46
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_LICENSE:=GPL-2.0+
PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
PKG_SOURCE_PROTO:=git
+PKG_SOURCE_VERSION:=d1556e0ae3872d676dfd63bd6073fe7e72d0130f
+PKG_MIRROR_HASH:=4a23a3854ceca147e113ab65ecdce3371e30b59436680e7d981b0bab6dbe751d
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/CESNET/libyang.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=7e811613b335afc8e1b2c0ee77e7b3f371bc9175
-PKG_MIRROR_HASH:=860865b294c628ad66ca5ef6848aae8df93e46325302914dbfb14264866f1678
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
+
+PKG_BUILD_ROOT:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
+PKG_BUILD_DIR:=$(PKG_BUILD_ROOT)
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
CATEGORY:=Libraries
TITLE:=YANG data modeling language library
URL:=$(PKG_SOURCE_URL)
- DEPENDS:=+libpcre
+ DEPENDS:=+libpcre +libpthread
endef
define Package/yanglint
include $(TOPDIR)/rules.mk
PKG_NAME:=sqlite
-PKG_VERSION:=3190300
+PKG_VERSION:=3200100
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-autoconf-$(PKG_VERSION).tar.gz
-PKG_HASH:=06129c03dced9f87733a8cba408871bd60673b8f93b920ba8d815efab0a06301
+PKG_HASH:=ec66595b29bc0798b023a5122021ea646ab4fa9e2f735937c5426feeba950742
PKG_SOURCE_URL:=http://www.sqlite.org/2017/
PKG_LICENSE:=PUBLICDOMAIN
PKG_NAME:=dovecot
PKG_VERSION:=2.2.32
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.dovecot.org/releases/2.2
define Package/dovecot
SECTION:=mail
CATEGORY:=Mail
- DEPENDS:=+DOVECOT_LDAP:libopenldap +DOVECOT_SQLITE:libsqlite3 +libopenssl +librt +zlib +libbz2 +libcap
+ DEPENDS:=+DOVECOT_LDAP:libopenldap +DOVECOT_MYSQL:libmysqlclient +DOVECOT_PGSQL:libpq +DOVECOT_SQLITE:libsqlite3 +libopenssl +librt +zlib +libbz2 +libcap
TITLE:=An IMAP and POP3 daemon
MAINTAINER:=Lucian Cristian <lucian.cristian@gmail.com>
URL:=http://www.dovecot.org/
default n
help
Implements LDAP support in dovecot.
+ config DOVECOT_MYSQL
+ bool "MYSQL support"
+ default n
+ help
+ Implements MYSQL support in dovecot.
+ config DOVECOT_PGSQL
+ bool "PostgreSQL support"
+ default n
+ help
+ Implements PostgreSQL support in dovecot.
config DOVECOT_SQLITE
bool "SQLite support"
default n
--without-lz4 \
--with-icu=no \
$(if $(CONFIG_DOVECOT_LDAP),--with-ldap=yes,--with-ldap=no) \
+ $(if $(CONFIG_DOVECOT_MYSQL),--with-mysql=yes,--with-mysql=no) \
+ $(if $(CONFIG_DOVECOT_PGSQL),--with-pgsql=yes,--with-pgsql=no) \
$(if $(CONFIG_DOVECOT_SQLITE),--with-sqlite=yes,--with-sqlite=no)
CONFIGURE_VARS += \
include $(TOPDIR)/rules.mk
PKG_NAME:=postfix
-PKG_RELEASE:=3
-PKG_SOURCE_URL:=ftp://ftp.porcupine.org/mirrors/postfix-release/official/
-PKG_VERSION:=3.2.2
-PKG_HASH:=d06849418d119d09366997b2b481bb23f737629769b4e4a52da42fb3ad8b0576
+PKG_RELEASE:=1
+PKG_VERSION:=3.2.3
+PKG_SOURCE_URL:= \
+ https://cdn.postfix.johnriley.me/mirrors/postfix-release/official/ \
+ ftp://ftp.porcupine.org/mirrors/postfix-release/official/
+
+PKG_HASH:=5b0b975d075ea7561028d4109c581549b794aa92d733429ea6d9fa57751140bf
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_MAINTAINER:=Denis Shulyaka <Shulyaka@gmail.com>
PKG_LICENSE:=IPL-1.0
include $(TOPDIR)/rules.mk
PKG_NAME:=ffmpeg
-PKG_VERSION:=3.2.7
-PKG_RELEASE:=3
+PKG_VERSION:=3.2.8
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://ffmpeg.org/releases/
-PKG_HASH:=28e75fc32485a88035a7ebf0a956a1e5c7e93b440dd4bbd6bc30c7268cf34fe9
+PKG_HASH:=42e7362692318afc666f14378dd445effa9a1b09787504a6ab5811fe442674cd
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>, \
Ian Leonard <antonlacon@gmail.com>
else
FFMPEG_CONFIGURE+= --disable-neon
endif
-
endif
ifeq ($(ARCH),x86_64)
$(call FFMPEG_ENABLE,decoder,$(FFMPEG_AUDIO_DECODERS)) \
$(call FFMPEG_ENABLE,demuxer,$(FFMPEG_AUDIO_DEMUXERS)) \
$(call FFMPEG_ENABLE,protocol,$(FFMPEG_AUDIO_PROTOCOLS)) \
- --disable-decoder=pcm_bluray,pcm_dvd \
-
+ --disable-decoder=pcm_bluray,pcm_dvd
endif
ifeq ($(BUILD_VARIANT),mini)
include $(TOPDIR)/rules.mk
PKG_NAME:=minidlna
-PKG_VERSION:=1.2.0
+PKG_VERSION:=1.2.1
PKG_RELEASE:=1
PKG_SOURCE_URL:=@SF/minidlna
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=8d34436580c4c44be25976d5e46bc5b71af69bf441c4492774eac001164c4433
+PKG_HASH:=67388ba23ab0c7033557a32084804f796aa2a796db7bb2b770fb76ac2a742eec
PKG_LICENSE:=GPL-2.0 BSD-3-Clause
PKG_LICENSE_FILES:=COPYING LICENCE.miniupnpd
+++ /dev/null
-From c8245740c3a8699cfe7d7e5aa0d427b931018ad5 Mon Sep 17 00:00:00 2001
-From: Yusuke Yanbe <y.yanbe@gmail.com>
-Date: Mon, 4 Jul 2016 08:20:46 +0900
-Subject: [PATCH] Add support for grouping videos by directory for Panasonic
- TVs
-
----
- upnpsoap.c | 24 +++++++++++++++++++-----
- upnpsoap.h | 5 ++++-
- 2 files changed, 23 insertions(+), 6 deletions(-)
-
---- a/upnpsoap.c
-+++ b/upnpsoap.c
-@@ -1095,6 +1095,15 @@ callback(void *args, int argc, char **ar
- add_res(size, duration, bitrate, sampleFrequency, nrAudioChannels,
- resolution, dlna_buf, mime, detailID, ext, passed_args);
- }
-+
-+ DPRINTF(E_DEBUG, L_HTTP, "Title: %s - %d Returned / %d childCount\n",
-+ title, passed_args->returned, passed_args->childCount);
-+
-+ ret = strcatf(str, "<pxn:groupTopFlag>%d</pxn:groupTopFlag>"
-+ "<pxn:groupID>%s</pxn:groupID>"
-+ "<pxn:groupTitle>%s</pxn:groupTitle>"
-+ "<pxn:groupMemberNum>%d</pxn:groupMemberNum>",
-+ passed_args->returned == passed_args->childCount, parent, passed_args->parentTitle, passed_args->childCount);
- break;
- case ESamsungSeriesCDE:
- case ELGDevice:
-@@ -1357,8 +1366,11 @@ BrowseContentDirectory(struct upnphttp *
- if (!where[0])
- sqlite3_snprintf(sizeof(where), where, "PARENT_ID = '%q'", ObjectID);
-
-- if (!totalMatches)
-+ if (!totalMatches) {
- totalMatches = get_child_count(ObjectID, magic);
-+ args.childCount = totalMatches;
-+ args.parentTitle = sql_get_text_field(db, "SELECT d.TITLE FROM OBJECTS o LEFT JOIN DETAILS d ON (d.ID = o.DETAIL_ID) WHERE OBJECT_ID='%q'", ObjectID);
-+ }
- ret = 0;
- if (SortCriteria && !orderBy)
- {
-@@ -1397,14 +1409,16 @@ BrowseContentDirectory(struct upnphttp *
- SoapError(h, 709, "Unsupported or invalid sort criteria");
- goto browse_error;
- }
--
- sql = sqlite3_mprintf("SELECT %s, %s, %s, " COLUMNS
- "from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID)"
-- " where %s %s limit %d, %d;",
-+ " where %s order by d.date limit %d, %d;",
- objectid_sql, parentid_sql, refid_sql,
-- where, THISORNUL(orderBy), StartingIndex, RequestedCount);
-+ where, StartingIndex, RequestedCount);
- DPRINTF(E_DEBUG, L_HTTP, "Browse SQL: %s\n", sql);
- ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg);
-+ if (args.parentTitle) {
-+ sqlite3_free(args.parentTitle);
-+ }
- }
- if( (ret != SQLITE_OK) && (zErrMsg != NULL) )
- {
-@@ -1838,7 +1852,7 @@ SearchContentDirectory(struct upnphttp *
- (*ContainerID == '*') ? NULL :
- sqlite3_mprintf("UNION ALL " SELECT_COLUMNS
- "from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID)"
-- " where OBJECT_ID = '%q' and (%s) ", ContainerID, where),
-+ " where OBJECT_ID = '%q' and (%s) ORDER BY d.date", ContainerID, where),
- orderBy, StartingIndex, RequestedCount);
- DPRINTF(E_DEBUG, L_HTTP, "Search SQL: %s\n", sql);
- ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg);
---- a/upnpsoap.h
-+++ b/upnpsoap.h
-@@ -27,7 +27,8 @@
- #define CONTENT_DIRECTORY_SCHEMAS \
- " xmlns:dc=\"http://purl.org/dc/elements/1.1/\"" \
- " xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\"" \
-- " xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\""
-+ " xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\"" \
-+ " xmlns:pxn=\"urn:schemas-panasonic-com:pxn\""
- #define DLNA_NAMESPACE \
- " xmlns:dlna=\"urn:schemas-dlna-org:metadata-1-0/\""
- #define PV_NAMESPACE \
-@@ -39,6 +40,8 @@ struct Response
- int start;
- int returned;
- int requested;
-+ int childCount;
-+ char *parentTitle;
- int iface;
- uint32_t filter;
- uint32_t flags;
--- /dev/null
+menu "Configuration"
+ depends on PACKAGE_apache
+
+config APACHE_HTTP2
+ bool
+ prompt "Enable HTTP2"
+ help
+ Enable HTTPS2 support.
+ default n
+
+endmenu
include $(TOPDIR)/rules.mk
PKG_NAME:=apache
-PKG_VERSION:=2.4.27
+PKG_VERSION:=2.4.28
PKG_RELEASE:=1
PKG_SOURCE_NAME:=httpd
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@APACHE/httpd/
-PKG_HASH:=71fcc128238a690515bd8174d5330a5309161ef314a326ae45c7c15ed139c13a
+PKG_HASH:=c1197a3a62a4ab5c584ab89b249af38cf28b4adee9c0106b62999fd29f920666
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
PKG_INSTALL:=1
+PKG_CONFIG_DEPENDS := \
+ CONFIG_APACHE_HTTP2
+
+ADDITIONAL_MODULES:=
+ifeq ($(CONFIG_APACHE_HTTP2),y)
+ ADDITIONAL_MODULES += --enable-http2
+endif
+ifneq ($(CONFIG_APACHE_HTTP2),y)
+ ADDITIONAL_MODULES += --enable-http2=no
+endif
+
include $(INCLUDE_DIR)/package.mk
define Package/apache/Default
Server, it has grown to be the most popular web server on the Internet.
endef
+define Package/apache/config
+ source "$(SOURCE)/Config.in"
+endef
+
define Package/apache
$(call Package/apache/Default)
- DEPENDS:=+libapr +libaprutil +libpcre +libopenssl +unixodbc +zlib
+ DEPENDS:=+libapr +libaprutil +libpcre +libopenssl +unixodbc +zlib +APACHE_HTTP2:libnghttp2
endef
define Package/apache/description
TARGET_CFLAGS += $(FPIC)
TARGET_CPPFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
-TARGET_LDFLAGS += -lpthread
+TARGET_LDFLAGS += -lpthread
define Build/Configure
$(call Build/Configure/Default, \
--with-apr="$(STAGING_DIR)/usr/bin/apr-1-config" \
--with-apr-util="$(STAGING_DIR)/usr/bin/apu-1-config" \
--with-pcre="$(STAGING_DIR)/usr/bin/pcre-config" \
+ $(ADDITIONAL_MODULES) \
--enable-http \
--with-crypto \
--with-sqlit3="$(STAGING_DIR)/usr" \
include $(TOPDIR)/rules.mk
PKG_NAME:=chrony
-PKG_VERSION:=3.1
-PKG_RELEASE:=2
+PKG_VERSION:=3.2
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://download.tuxfamily.org/chrony/
-PKG_HASH:=9d9107dcdb7768a03dc129d33b2a7a25f1eea2f5620bc85eb00cfea07c1b6075
+PKG_HASH:=329f6718dd8c3ece3eee78be1f4821cbbeb62608e7d23f25da293cfa433c4116
PKG_MAINTAINER:=Miroslav Lichvar <mlichvar0@gmail.com>
PKG_LICENSE:=GPL-2.0
diff --git a/sysincl.h b/sysincl.h
-index 30e9b48..8fe16c0 100644
+index a9e4da0..e2a6e78 100644
--- a/sysincl.h
+++ b/sysincl.h
-@@ -70,4 +70,8 @@
- #include <arpa/inet.h>
+@@ -80,4 +80,8 @@
+ #include <sys/random.h>
#endif
+#if defined(LINUX) && !defined(IP_FREEBIND)
PKG_VERSION:=2.7.6
# Release == build
# increase on changes of services files or tld_names.dat
-PKG_RELEASE:=17
+PKG_RELEASE:=18
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
"ddo.jp" "http://free.ddo.jp/dnsupdate.php?dn=[DOMAIN]&pw=[PASSWORD]&ip=[IP]"
-"desec.io" "http://[USERNAME]:[PASSWORD]@update.dedyn.io/?hostname=[DOMAIN]&myipv4=[IP]" "good|nochg"
+"desec.io" "http://update.dedyn.io/?username=[USERNAME]&password=[PASSWORD]&hostname=[DOMAIN]&myipv4=[IP]" "good|nochg"
"dhis.org" "http://[USERNAME]:[PASSWORD]@is.dhis.org/"
# "ddnss.de" "http://[USERNAME]:[PASSWORD]@ip6.ddnss.de/upd.php?host=[DOMAIN]&ip6=[IP]" "good|nochg"
"ddnss.de" "http://ip6.ddnss.de/upd.php?user=[USERNAME]&pwd=[PASSWORD]&host=[DOMAIN]&ip6=[IP]" "good|nochg"
-"desec.io" "http://[USERNAME]:[PASSWORD]@update.dedyn.io/?hostname=[DOMAIN]&myipv6=[IP]" "good|nochg"
+"desec.io" "http://update.dedyn.io/?username=[USERNAME]&password=[PASSWORD]&hostname=[DOMAIN]&myipv6=[IP]" "good|nochg"
"dhis.org" "http://[USERNAME]:[PASSWORD]@is.dhis.org/"
PKG_NAME:=freeradius3
PKG_VERSION:=release_3_0_11
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/FreeRADIUS/freeradius-server/archive
preserve = no
--- a/raddb/certs/server.cnf
+++ b/raddb/certs/server.cnf
-@@ -14,7 +14,7 @@ private_key = $dir/ca.key
+@@ -14,7 +14,7 @@ private_key = $dir/server.key
RANDFILE = $dir/.rand
name_opt = ca_default
cert_opt = ca_default
--- /dev/null
+Description: disable session caching in the server (as opposed to in the
+ config, which would be way harder to get right) to address
+ https://security-tracker.debian.org/tracker/CVE-2017-9148
+Author: Michael Stapelberg <stapelberg@debian.org>
+Forwarded: not-needed
+Last-Update: 2017-05-30
+
+---
+
+--- a/src/main/tls.c
++++ b/src/main/tls.c
+@@ -369,7 +369,7 @@ tls_session_t *tls_new_session(TALLOC_CT
+ *
+ * FIXME: Also do it every N sessions?
+ */
+- if (conf->session_cache_enable &&
++ if (/*conf->session_cache_enable*/0 &&
+ ((conf->session_last_flushed + ((int)conf->session_timeout * 1800)) <= request->timestamp)){
+ RDEBUG2("Flushing SSL sessions (of #%ld)", SSL_CTX_sess_number(conf->ctx));
+
+@@ -463,7 +463,7 @@ tls_session_t *tls_new_session(TALLOC_CT
+ state->mtu = vp->vp_integer;
+ }
+
+- if (conf->session_cache_enable) state->allow_session_resumption = true; /* otherwise it's false */
++ if (/*conf->session_cache_enable*/0) state->allow_session_resumption = true; /* otherwise it's false */
+
+ return state;
+ }
+@@ -2675,7 +2675,7 @@ post_ca:
+ /*
+ * Callbacks, etc. for session resumption.
+ */
+- if (conf->session_cache_enable) {
++ if (/*conf->session_cache_enable*/0) {
+ /*
+ * Cache sessions on disk if requested.
+ */
+@@ -2745,7 +2745,7 @@ post_ca:
+ /*
+ * Setup session caching
+ */
+- if (conf->session_cache_enable) {
++ if (/*conf->session_cache_enable*/0) {
+ /*
+ * Create a unique context Id per EAP-TLS configuration.
+ */
include $(TOPDIR)/rules.mk
PKG_NAME:=git
-PKG_VERSION:=2.14.1
+PKG_VERSION:=2.14.2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/software/scm/git/
-PKG_HASH:=6f724c6d0e9e13114ab35db6f67e1b2c1934b641e89366e6a0e37618231f2cc6
+PKG_HASH:=50e9723996114ad1eec4dda89960d9fe34461749ae42031008a261fedd03c7a1
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=gnunet
-PKG_SOURCE_VERSION:=556ccd6d483b3678867c3829e6979c307df04450
-PKG_MIRROR_HASH:=5ecf15575eccc30135b2dc9871d88de0b32b593dc79cf5b0632a4fe2ffd711df
+PKG_SOURCE_VERSION:=664aca2d29b15dd75967d2bb0298caf750993b6f
+PKG_MIRROR_HASH:=d3fd9f9275e3173b392ea3d151130fae9fb507986c5bd6a369303e0e1e0ab6d6
-PKG_VERSION:=0.10.2-git-20170626-$(PKG_SOURCE_VERSION)
+PKG_VERSION:=0.10.2-git-20171004-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
$(if $(CONFIG_PACKAGE_$(PKG_NAME)-mysql),--with-mysql="$(STAGING_DIR)/usr",--without-mysql) \
$(if $(CONFIG_PACKAGE_$(PKG_NAME)-pgsql),--with-postgresql="$(STAGING_DIR)/usr/bin/pg_config",--without-postgresql) \
$(if $(CONFIG_PACKAGE_libsqlite3),--with-sqlite="$(STAGING_DIR)/usr",--without-sqlite) \
- --disable-testing \
+ --enable-testing \
--disable-testruns \
--enable-experimental \
--with-extractor=$(STAGING_DIR)/usr \
include $(TOPDIR)/rules.mk
PKG_NAME:=gnurl
-PKG_VERSION:=7.55.0
+PKG_VERSION:=7.55.1-4
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://gnunet.org/sites/default/files
-PKG_HASH:=761b3ddb32946965c62676ca4acf2ebaab38d09068aebeea78caaf6cce8c2b45
+PKG_HASH:=d4758822f84fe961d9253d3d7ff742c9cd0d39d5340d441b8014771eb95b8125
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
define Build/InstallDev
$(INSTALL_DIR) $(2)/bin $(1)/usr/bin $(1)/usr/include/gnurl $(1)/usr/lib $(1)/usr/lib/pkgconfig
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gnurl-config $(1)/usr/bin/
- $(CP) $(PKG_INSTALL_DIR)/usr/include/curl/*.h $(1)/usr/include/gnurl
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/gnurl/*.h $(1)/usr/include/gnurl
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libgnurl.{a,so*} $(1)/usr/lib/
$(CP) $(PKG_BUILD_DIR)/libgnurl.pc $(1)/usr/lib/pkgconfig/
$(SED) 's,-L$$$${exec_prefix}/lib,,g' $(1)/usr/bin/gnurl-config
include $(TOPDIR)/rules.mk
PKG_NAME:=haproxy
-PKG_VERSION:=1.7.8
-PKG_RELEASE:=18
+PKG_VERSION:=1.7.9
+PKG_RELEASE:=02
PKG_SOURCE:=haproxy-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.haproxy.org/download/1.7/src/
-PKG_HASH:=ec90153ccedd20ad4015d3eaf76b502ff1f61b431d54c22b8457b5784a9ae142
+PKG_HASH:=1072337e54fa188dc6e0cfe3ba4c2200b07082e321cbfe5a0882d85d54db068e
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
PKG_LICENSE:=GPL-2.0
URL:=http://haproxy.1wt.eu/
endef
-define Download/lua533
- FILE:=lua-5.3.3.tar.gz
+define Download/lua534
+ FILE:=lua-5.3.4.tar.gz
URL:=http://www.lua.org/ftp/
- HASH:=5113c06884f7de453ce57702abaac1d618307f33f6789fa870e87a59d772aca2
+ HASH:=f681aa518233bc407e23acf0f5887c884f17436f000d453b2491a9f11a52400c
endef
define Build/Prepare
$(call Build/Prepare/Default)
- tar -zxvf $(DL_DIR)/lua-5.3.3.tar.gz -C $(PKG_BUILD_DIR)
- ln -s $(PKG_BUILD_DIR)/lua-5.3.3 $(PKG_BUILD_DIR)/lua
+ifeq ($(ENABLE_LUA),y)
+ tar -zxvf $(DL_DIR)/lua-5.3.4.tar.gz -C $(PKG_BUILD_DIR)
+ ln -s $(PKG_BUILD_DIR)/lua-5.3.4 $(PKG_BUILD_DIR)/lua
+endif
endef
define Package/haproxy/Default/conffiles
This package is built without SSL support.
endef
+ENABLE_LUA:=y
+ifeq ($(CONFIG_mips),y)
+ ENABLE_LUA:=n
+endif
+
ifeq ($(CONFIG_avr32),y)
LINUX_TARGET:=linux26
else
ifeq ($(BUILD_VARIANT),ssl)
ADDON+=USE_OPENSSL=1
+ ADDON+=ADDLIB="-lcrypto -lm "
+else ifeq ($(CONFIG_mips),n)
ADDON+=USE_LUA=1
- ADDON+=LUA_LIB_NAME="lua533"
- ADDON+=LUA_INC="$(STAGING_DIR)/lua-5.3.3/include"
- ADDON+=LUA_LIB="$(STAGING_DIR)/lua-5.3.3/lib"
- ADDON+=ADDLIB="-lcrypto -lm "
+ ADDON+=LUA_LIB_NAME="lua534"
+ ADDON+=LUA_INC="$(STAGING_DIR)/lua-5.3.4/include"
+ ADDON+=LUA_LIB="$(STAGING_DIR)/lua-5.3.4/lib"
else
ADDON+=ADDLIB="-lm"
endif
-
-define Build/Compile
+ifeq ($(ENABLE_LUA),y)
+define Build/Compile/lua
$(MAKE) TARGET=$(LINUX_TARGET) -C $(PKG_BUILD_DIR)/lua \
- INSTALL_TOP="$(STAGING_DIR)/lua-5.3.3/" \
+ INSTALL_TOP="$(STAGING_DIR)/lua-5.3.4/" \
CC="$(TARGET_CC)" \
CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \
LDFLAGS="$(TARGET_LDFLAGS) -lncurses -lreadline" \
LD="$(TARGET_LD)" \
linux install
- mv $(STAGING_DIR)/lua-5.3.3/lib/liblua.a $(STAGING_DIR)/lua-5.3.3/lib/liblua533.a
+ mv $(STAGING_DIR)/lua-5.3.4/lib/liblua.a $(STAGING_DIR)/lua-5.3.4/lib/liblua534.a
+endef
+endif
+define Build/Compile
+ $(call Build/Compile/lua)
$(MAKE) TARGET=$(LINUX_TARGET) -C $(PKG_BUILD_DIR) \
DESTDIR="$(PKG_INSTALL_DIR)" \
CC="$(TARGET_CC)" \
Package/haproxy-nossl/install = $(Package/haproxy/install)
-
define Package/halog
MENU:=1
$(call Package/haproxy)
$(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/halog/halog $(1)/usr/bin/
endef
-$(eval $(call Download,lua533))
+$(eval $(call Download,lua534))
$(eval $(call BuildPackage,haproxy))
$(eval $(call BuildPackage,halog))
$(eval $(call BuildPackage,haproxy-nossl))
-
--- /dev/null
+From 912e8f18ef274fdda0a522b2aa8255bddd00fb7b Mon Sep 17 00:00:00 2001
+From: Willy Tarreau <w@1wt.eu>
+Date: Wed, 30 Aug 2017 07:35:35 +0200
+Subject: [PATCH] BUG/MEDIUM: connection: remove useless flag CO_FL_DATA_RD_SH
+
+This flag is both confusing and wrong. It is supposed to report the
+fact that the data layer has received a shutdown, but in fact this is
+reported by CO_FL_SOCK_RD_SH which is set by the transport layer after
+this condition is detected. The only case where the flag above is set
+is in the stream interface where CF_SHUTR is also set on the receiving
+channel.
+
+In addition, it was checked in the health checks code (while never set)
+and was always test jointly with CO_FL_SOCK_RD_SH everywhere, except in
+conn_data_read0_pending() which incorrectly doesn't match the second
+time it's called and is fortunately protected by an extra check on
+(ic->flags & CF_SHUTR).
+
+This patch gets rid of the flag completely. Now conn_data_read0_pending()
+accurately reports the fact that the transport layer has detected the end
+of the stream, regardless of the fact that this state was already consumed,
+and the stream interface watches ic->flags&CF_SHUTR to know if the channel
+was already closed by the upper layer (which it already used to do).
+
+The now unused conn_data_read0() function was removed.
+(cherry picked from commit 54e917cfa1e7b0539550ae32c48c76da2f169041)
+
+[wt: this happens to fix a real bug which occasionally strikes when
+ using http-reuse in the rare case where a server shuts down after
+ providing its response but before the connection is put back into
+ the idle pool, and it gets immediately recycled for another request,
+ without first passing through the idle handler, and the already
+ reported shutdown is never reported to the second transaction,
+ causing a loop to last for as long as the server timeout]
+---
+ contrib/debug/flags.c | 1 -
+ include/proto/connection.h | 8 +-------
+ include/types/connection.h | 2 +-
+ src/checks.c | 4 ++--
+ src/stream_interface.c | 11 +++++------
+ 5 files changed, 9 insertions(+), 17 deletions(-)
+
+diff --git a/contrib/debug/flags.c b/contrib/debug/flags.c
+index bc71bde9..19327f34 100644
+--- a/contrib/debug/flags.c
++++ b/contrib/debug/flags.c
+@@ -117,7 +117,6 @@ void show_conn_flags(unsigned int f)
+ SHOW_FLAG(f, CO_FL_SOCK_WR_SH);
+ SHOW_FLAG(f, CO_FL_SOCK_RD_SH);
+ SHOW_FLAG(f, CO_FL_DATA_WR_SH);
+- SHOW_FLAG(f, CO_FL_DATA_RD_SH);
+ SHOW_FLAG(f, CO_FL_WAKE_DATA);
+ SHOW_FLAG(f, CO_FL_INIT_DATA);
+ SHOW_FLAG(f, CO_FL_ADDR_TO_SET);
+diff --git a/include/proto/connection.h b/include/proto/connection.h
+index fce60259..eb68322a 100644
+--- a/include/proto/connection.h
++++ b/include/proto/connection.h
+@@ -413,12 +413,6 @@ static inline void conn_sock_read0(struct connection *c)
+ fdtab[c->t.sock.fd].linger_risk = 0;
+ }
+
+-static inline void conn_data_read0(struct connection *c)
+-{
+- c->flags |= CO_FL_DATA_RD_SH;
+- __conn_data_stop_recv(c);
+-}
+-
+ static inline void conn_sock_shutw(struct connection *c)
+ {
+ c->flags |= CO_FL_SOCK_WR_SH;
+@@ -450,7 +444,7 @@ static inline void conn_data_shutw_hard(struct connection *c)
+ /* detect sock->data read0 transition */
+ static inline int conn_data_read0_pending(struct connection *c)
+ {
+- return (c->flags & (CO_FL_DATA_RD_SH | CO_FL_SOCK_RD_SH)) == CO_FL_SOCK_RD_SH;
++ return (c->flags & CO_FL_SOCK_RD_SH) != 0;
+ }
+
+ /* detect data->sock shutw transition */
+diff --git a/include/types/connection.h b/include/types/connection.h
+index 02eac932..90e8e073 100644
+--- a/include/types/connection.h
++++ b/include/types/connection.h
+@@ -90,7 +90,7 @@ enum {
+ CO_FL_WAKE_DATA = 0x00008000, /* wake-up data layer upon activity at the transport layer */
+
+ /* flags used to remember what shutdown have been performed/reported */
+- CO_FL_DATA_RD_SH = 0x00010000, /* DATA layer was notified about shutr/read0 */
++ /* unused : 0x00010000 */
+ CO_FL_DATA_WR_SH = 0x00020000, /* DATA layer asked for shutw */
+ CO_FL_SOCK_RD_SH = 0x00040000, /* SOCK layer was notified about shutr/read0 */
+ CO_FL_SOCK_WR_SH = 0x00080000, /* SOCK layer asked for shutw */
+diff --git a/src/checks.c b/src/checks.c
+index ca3881a5..6c5e3cbc 100644
+--- a/src/checks.c
++++ b/src/checks.c
+@@ -839,7 +839,7 @@ static void event_srv_chk_r(struct connection *conn)
+ done = 0;
+
+ conn->xprt->rcv_buf(conn, check->bi, check->bi->size);
+- if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_DATA_RD_SH)) {
++ if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH)) {
+ done = 1;
+ if ((conn->flags & CO_FL_ERROR) && !check->bi->i) {
+ /* Report network errors only if we got no other data. Otherwise
+@@ -2892,7 +2892,7 @@ static void tcpcheck_main(struct connection *conn)
+ goto out_end_tcpcheck;
+
+ if (conn->xprt->rcv_buf(conn, check->bi, check->bi->size) <= 0) {
+- if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_DATA_RD_SH)) {
++ if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH)) {
+ done = 1;
+ if ((conn->flags & CO_FL_ERROR) && !check->bi->i) {
+ /* Report network errors only if we got no other data. Otherwise
+diff --git a/src/stream_interface.c b/src/stream_interface.c
+index 836487bd..aba49c94 100644
+--- a/src/stream_interface.c
++++ b/src/stream_interface.c
+@@ -1060,14 +1060,14 @@ static void si_conn_recv_cb(struct connection *conn)
+ if (conn->flags & CO_FL_ERROR)
+ return;
+
+- /* stop here if we reached the end of data */
+- if (conn_data_read0_pending(conn))
+- goto out_shutdown_r;
+-
+ /* maybe we were called immediately after an asynchronous shutr */
+ if (ic->flags & CF_SHUTR)
+ return;
+
++ /* stop here if we reached the end of data */
++ if (conn_data_read0_pending(conn))
++ goto out_shutdown_r;
++
+ cur_read = 0;
+
+ if ((ic->flags & (CF_STREAMER | CF_STREAMER_FAST)) && !ic->buf->o &&
+@@ -1153,7 +1153,7 @@ static void si_conn_recv_cb(struct connection *conn)
+ * that if such an event is not handled above in splice, it will be handled here by
+ * recv().
+ */
+- while (!(conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_DATA_RD_SH | CO_FL_WAIT_ROOM | CO_FL_HANDSHAKE))) {
++ while (!(conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_WAIT_ROOM | CO_FL_HANDSHAKE)) && !(ic->flags & CF_SHUTR)) {
+ max = channel_recv_max(ic);
+
+ if (!max) {
+@@ -1267,7 +1267,6 @@ static void si_conn_recv_cb(struct connection *conn)
+ if (ic->flags & CF_AUTO_CLOSE)
+ channel_shutw_now(ic);
+ stream_sock_read0(si);
+- conn_data_read0(conn);
+ return;
+ }
+
+--
+2.13.5
+
+++ /dev/null
-From fa73e6b0d5f64eb8a6fd8a1706d7ec03293a943e Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= <flecaille@haproxy.com>
-Date: Thu, 13 Jul 2017 09:07:09 +0200
-Subject: [PATCH 01/18] BUG/MINOR: peers: peer synchronization issue (with
- several peers sections).
-
-When several stick-tables were configured with several peers sections,
-only a part of them could be synchronized: the ones attached to the last
-parsed 'peers' section. This was due to the fact that, at least, the peer I/O handler
-refered to the wrong peer section list, in fact always the same: the last one parsed.
-
-The fact that the global peer section list was named "struct peers *peers"
-lead to this issue. This variable name is dangerous ;).
-
-So this patch renames global 'peers' variable to 'cfg_peers' to ensure that
-no such wrong references are still in use, then all the functions wich used
-old 'peers' variable have been modified to refer to the correct peer list.
-
-Must be backported to 1.6 and 1.7.
-(cherry picked from commit ed2b4a6b793d062000518e51ed71e014c649c313)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- include/types/peers.h | 2 +-
- src/cfgparse.c | 18 +++++++++---------
- src/haproxy.c | 10 +++++-----
- src/peers.c | 40 ++++++++++++++++++++--------------------
- src/proxy.c | 6 +++---
- 5 files changed, 38 insertions(+), 38 deletions(-)
-
-diff --git a/include/types/peers.h b/include/types/peers.h
-index 105dffb0..a77a0942 100644
---- a/include/types/peers.h
-+++ b/include/types/peers.h
-@@ -91,7 +91,7 @@ struct peers {
- };
-
-
--extern struct peers *peers;
-+extern struct peers *cfg_peers;
-
- #endif /* _TYPES_PEERS_H */
-
-diff --git a/src/cfgparse.c b/src/cfgparse.c
-index 8c0906bf..1b53006b 100644
---- a/src/cfgparse.c
-+++ b/src/cfgparse.c
-@@ -2124,7 +2124,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm)
- goto out;
- }
-
-- for (curpeers = peers; curpeers != NULL; curpeers = curpeers->next) {
-+ for (curpeers = cfg_peers; curpeers != NULL; curpeers = curpeers->next) {
- /*
- * If there are two proxies with the same name only following
- * combinations are allowed:
-@@ -2142,8 +2142,8 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm)
- goto out;
- }
-
-- curpeers->next = peers;
-- peers = curpeers;
-+ curpeers->next = cfg_peers;
-+ cfg_peers = curpeers;
- curpeers->conf.file = strdup(file);
- curpeers->conf.line = linenum;
- curpeers->last_change = now.tv_sec;
-@@ -2223,7 +2223,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm)
- if (strcmp(newpeer->id, localpeer) == 0) {
- /* Current is local peer, it define a frontend */
- newpeer->local = 1;
-- peers->local = newpeer;
-+ cfg_peers->local = newpeer;
-
- if (!curpeers->peers_fe) {
- if ((curpeers->peers_fe = calloc(1, sizeof(struct proxy))) == NULL) {
-@@ -8189,9 +8189,9 @@ int check_config_validity()
- }
-
- if (curproxy->table.peers.name) {
-- struct peers *curpeers = peers;
-+ struct peers *curpeers;
-
-- for (curpeers = peers; curpeers; curpeers = curpeers->next) {
-+ for (curpeers = cfg_peers; curpeers; curpeers = curpeers->next) {
- if (strcmp(curpeers->id, curproxy->table.peers.name) == 0) {
- free((void *)curproxy->table.peers.name);
- curproxy->table.peers.p = curpeers;
-@@ -9279,15 +9279,15 @@ out_uri_auth_compat:
- if (curproxy->table.peers.p)
- curproxy->table.peers.p->peers_fe->bind_proc |= curproxy->bind_proc;
-
-- if (peers) {
-- struct peers *curpeers = peers, **last;
-+ if (cfg_peers) {
-+ struct peers *curpeers = cfg_peers, **last;
- struct peer *p, *pb;
-
- /* Remove all peers sections which don't have a valid listener,
- * which are not used by any table, or which are bound to more
- * than one process.
- */
-- last = &peers;
-+ last = &cfg_peers;
- while (*last) {
- curpeers = *last;
-
-diff --git a/src/haproxy.c b/src/haproxy.c
-index 6d09aed4..25cea0cd 100644
---- a/src/haproxy.c
-+++ b/src/haproxy.c
-@@ -988,7 +988,7 @@ void init(int argc, char **argv)
- struct peers *pr;
- struct proxy *px;
-
-- for (pr = peers; pr; pr = pr->next)
-+ for (pr = cfg_peers; pr; pr = pr->next)
- if (pr->peers_fe)
- break;
-
-@@ -1217,11 +1217,11 @@ void init(int argc, char **argv)
- if (global.stats_fe)
- global.maxsock += global.stats_fe->maxconn;
-
-- if (peers) {
-+ if (cfg_peers) {
- /* peers also need to bypass global maxconn */
-- struct peers *p = peers;
-+ struct peers *p = cfg_peers;
-
-- for (p = peers; p; p = p->next)
-+ for (p = cfg_peers; p; p = p->next)
- if (p->peers_fe)
- global.maxsock += p->peers_fe->maxconn;
- }
-@@ -2067,7 +2067,7 @@ int main(int argc, char **argv)
- }
-
- /* we might have to unbind some peers sections from some processes */
-- for (curpeers = peers; curpeers; curpeers = curpeers->next) {
-+ for (curpeers = cfg_peers; curpeers; curpeers = curpeers->next) {
- if (!curpeers->peers_fe)
- continue;
-
-diff --git a/src/peers.c b/src/peers.c
-index 543c84c1..5b8a287a 100644
---- a/src/peers.c
-+++ b/src/peers.c
-@@ -171,7 +171,7 @@ enum {
- #define PEER_MINOR_VER 1
- #define PEER_DWNGRD_MINOR_VER 0
-
--struct peers *peers = NULL;
-+struct peers *cfg_peers = NULL;
- static void peer_session_forceshutdown(struct appctx *appctx);
-
- /* This function encode an uint64 to 'dynamic' length format.
-@@ -727,19 +727,19 @@ switchstate:
- /* if current peer is local */
- if (curpeer->local) {
- /* if current host need resyncfrom local and no process assined */
-- if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMLOCAL &&
-- !(peers->flags & PEERS_F_RESYNC_ASSIGN)) {
-+ if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMLOCAL &&
-+ !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) {
- /* assign local peer for a lesson, consider lesson already requested */
- curpeer->flags |= PEER_F_LEARN_ASSIGN;
-- peers->flags |= (PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-+ curpeers->flags |= (PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
- }
-
- }
-- else if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
-- !(peers->flags & PEERS_F_RESYNC_ASSIGN)) {
-+ else if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
-+ !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) {
- /* assign peer for a lesson */
- curpeer->flags |= PEER_F_LEARN_ASSIGN;
-- peers->flags |= PEERS_F_RESYNC_ASSIGN;
-+ curpeers->flags |= PEERS_F_RESYNC_ASSIGN;
- }
-
-
-@@ -807,7 +807,7 @@ switchstate:
- curpeer->statuscode = atoi(trash.str);
-
- /* Awake main task */
-- task_wakeup(peers->sync_task, TASK_WOKEN_MSG);
-+ task_wakeup(curpeers->sync_task, TASK_WOKEN_MSG);
-
- /* If status code is success */
- if (curpeer->statuscode == PEER_SESS_SC_SUCCESSCODE) {
-@@ -830,14 +830,14 @@ switchstate:
- curpeer->flags |= PEER_F_TEACH_PROCESS;
-
- }
-- else if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
-- !(peers->flags & PEERS_F_RESYNC_ASSIGN)) {
-+ else if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
-+ !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) {
- /* If peer is remote and resync from remote is needed,
- and no peer currently assigned */
-
- /* assign peer for a lesson */
- curpeer->flags |= PEER_F_LEARN_ASSIGN;
-- peers->flags |= PEERS_F_RESYNC_ASSIGN;
-+ curpeers->flags |= PEERS_F_RESYNC_ASSIGN;
- }
-
- }
-@@ -950,8 +950,8 @@ switchstate:
-
- if (curpeer->flags & PEER_F_LEARN_ASSIGN) {
- curpeer->flags &= ~PEER_F_LEARN_ASSIGN;
-- peers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-- peers->flags |= (PEERS_F_RESYNC_LOCAL|PEERS_F_RESYNC_REMOTE);
-+ curpeers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-+ curpeers->flags |= (PEERS_F_RESYNC_LOCAL|PEERS_F_RESYNC_REMOTE);
- }
- curpeer->confirm++;
- }
-@@ -959,11 +959,11 @@ switchstate:
-
- if (curpeer->flags & PEER_F_LEARN_ASSIGN) {
- curpeer->flags &= ~PEER_F_LEARN_ASSIGN;
-- peers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-+ curpeers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-
- curpeer->flags |= PEER_F_LEARN_NOTUP2DATE;
-- peers->resync_timeout = tick_add(now_ms, MS_TO_TICKS(5000));
-- task_wakeup(peers->sync_task, TASK_WOKEN_MSG);
-+ curpeers->resync_timeout = tick_add(now_ms, MS_TO_TICKS(5000));
-+ task_wakeup(curpeers->sync_task, TASK_WOKEN_MSG);
- }
- curpeer->confirm++;
- }
-@@ -1334,8 +1334,8 @@ incomplete:
-
- /* Need to request a resync */
- if ((curpeer->flags & PEER_F_LEARN_ASSIGN) &&
-- (peers->flags & PEERS_F_RESYNC_ASSIGN) &&
-- !(peers->flags & PEERS_F_RESYNC_PROCESS)) {
-+ (curpeers->flags & PEERS_F_RESYNC_ASSIGN) &&
-+ !(curpeers->flags & PEERS_F_RESYNC_PROCESS)) {
- unsigned char msg[2];
-
- /* Current peer was elected to request a resync */
-@@ -1351,7 +1351,7 @@ incomplete:
- appctx->st0 = PEER_SESS_ST_END;
- goto switchstate;
- }
-- peers->flags |= PEERS_F_RESYNC_PROCESS;
-+ curpeers->flags |= PEERS_F_RESYNC_PROCESS;
- }
-
- /* Nothing to read, now we start to write */
-@@ -1624,7 +1624,7 @@ incomplete:
-
- /* Current peer was elected to request a resync */
- msg[0] = PEER_MSG_CLASS_CONTROL;
-- msg[1] = ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FINISHED) ? PEER_MSG_CTRL_RESYNCFINISHED : PEER_MSG_CTRL_RESYNCPARTIAL;
-+ msg[1] = ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FINISHED) ? PEER_MSG_CTRL_RESYNCFINISHED : PEER_MSG_CTRL_RESYNCPARTIAL;
- /* process final lesson message */
- repl = bi_putblk(si_ic(si), (char *)msg, sizeof(msg));
- if (repl <= 0) {
-diff --git a/src/proxy.c b/src/proxy.c
-index 78120d9b..bedc7ae0 100644
---- a/src/proxy.c
-+++ b/src/proxy.c
-@@ -1007,7 +1007,7 @@ void soft_stop(void)
- p = p->next;
- }
-
-- prs = peers;
-+ prs = cfg_peers;
- while (prs) {
- if (prs->peers_fe)
- stop_proxy(prs->peers_fe);
-@@ -1142,7 +1142,7 @@ void pause_proxies(void)
- p = p->next;
- }
-
-- prs = peers;
-+ prs = cfg_peers;
- while (prs) {
- if (prs->peers_fe)
- err |= !pause_proxy(prs->peers_fe);
-@@ -1176,7 +1176,7 @@ void resume_proxies(void)
- p = p->next;
- }
-
-- prs = peers;
-+ prs = cfg_peers;
- while (prs) {
- if (prs->peers_fe)
- err |= !resume_proxy(prs->peers_fe);
---
-2.13.0
-
+++ /dev/null
-From bcc483a9edfeb8ab69d1af83886d9e1323cffd06 Mon Sep 17 00:00:00 2001
-From: Thierry FOURNIER <thierry.fournier@ozon.io>
-Date: Wed, 12 Jul 2017 11:18:00 +0200
-Subject: [PATCH 02/18] BUG/MINOR: lua: In error case, the safe mode is not
- removed
-
-Just forgot of reset the safe mode. This have not consequences
-the safe mode just set a pointer on fucntion which is called only
-and initialises a longjmp.
-
-Out of lua execution, this longjmp is never executed and the
-function is never called.
-
-This patch should be backported in 1.6 and 1.7
-(cherry picked from commit 0a97620c080232a21ad7fce2c859a2edc9d7147e)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- src/hlua.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/hlua.c b/src/hlua.c
-index c862102d..4c1c2d21 100644
---- a/src/hlua.c
-+++ b/src/hlua.c
-@@ -854,6 +854,7 @@ int hlua_ctx_init(struct hlua *lua, struct task *task)
- lua->T = lua_newthread(gL.T);
- if (!lua->T) {
- lua->Tref = LUA_REFNIL;
-+ RESET_SAFE_LJMP(gL.T);
- return 0;
- }
- hlua_sethlua(lua);
---
-2.13.0
-
+++ /dev/null
-From 49d319a677432b69c6a69ef5331ae2ed592075c9 Mon Sep 17 00:00:00 2001
-From: Thierry FOURNIER <thierry.fournier@ozon.io>
-Date: Wed, 12 Jul 2017 13:41:33 +0200
-Subject: [PATCH 03/18] BUG/MINOR: lua: executes the function destroying the
- Lua session in safe mode
-
-When we destroy the Lua session, we manipulates Lua stack,
-so errors can raises. It will be better to catch these errors.
-
-This patch should be backported in 1.6 and 1.7
-(cherry picked from commit 75d0208009c3189b5d10793e08f27dd62a76c3ae)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- src/hlua.c | 17 +++++++++++++++--
- 1 file changed, 15 insertions(+), 2 deletions(-)
-
-diff --git a/src/hlua.c b/src/hlua.c
-index 4c1c2d21..2d312804 100644
---- a/src/hlua.c
-+++ b/src/hlua.c
-@@ -876,9 +876,15 @@ void hlua_ctx_destroy(struct hlua *lua)
- /* Purge all the pending signals. */
- hlua_com_purge(lua);
-
-+ if (!SET_SAFE_LJMP(lua->T))
-+ return;
- luaL_unref(lua->T, LUA_REGISTRYINDEX, lua->Mref);
-- luaL_unref(gL.T, LUA_REGISTRYINDEX, lua->Tref);
-+ RESET_SAFE_LJMP(lua->T);
-
-+ if (!SET_SAFE_LJMP(gL.T))
-+ return;
-+ luaL_unref(gL.T, LUA_REGISTRYINDEX, lua->Tref);
-+ RESET_SAFE_LJMP(gL.T);
- /* Forces a garbage collecting process. If the Lua program is finished
- * without error, we run the GC on the thread pointer. Its freed all
- * the unused memory.
-@@ -889,9 +895,16 @@ void hlua_ctx_destroy(struct hlua *lua)
- * the garbage collection.
- */
- if (lua->flags & HLUA_MUST_GC) {
-+ if (!SET_SAFE_LJMP(lua->T))
-+ return;
- lua_gc(lua->T, LUA_GCCOLLECT, 0);
-- if (lua_status(lua->T) != LUA_OK)
-+ RESET_SAFE_LJMP(lua->T);
-+ if (lua_status(lua->T) != LUA_OK) {
-+ if (!SET_SAFE_LJMP(gL.T))
-+ return;
- lua_gc(gL.T, LUA_GCCOLLECT, 0);
-+ RESET_SAFE_LJMP(gL.T);
-+ }
- }
-
- lua->T = NULL;
---
-2.13.0
-
+++ /dev/null
-From 2823f54f706f56304970313cb14a98a4ce20d5ab Mon Sep 17 00:00:00 2001
-From: Thierry FOURNIER <thierry.fournier@ozon.io>
-Date: Sun, 16 Jul 2017 20:48:54 +0200
-Subject: [PATCH 04/18] BUG/MAJOR: lua/socket: resources not detroyed when the
- socket is aborted
-
-In some cases, the socket is misused. The user can open socket and never
-close it, or open the socket and close it without sending data. This
-causes resources leak on all resources associated to the stream (buffer,
-spoe, ...)
-
-This is caused by the stream_shutdown function which is called outside
-of the stream execution process. Sometimes, the shtudown is required
-while the stream is not started, so the cleanup is ignored.
-
-This patch change the shutdown mode of the session. Now if the session is
-no longer used and the Lua want to destroy it, it just set a destroy flag
-and the session kill itself.
-
-This patch should be backported in 1.6 and 1.7
-
-(cherry picked from cmomit b13b20a19aacb039a33f886e38a181b00c9a6d41)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- include/types/applet.h | 1 +
- src/hlua.c | 16 ++++++++++++++--
- 2 files changed, 15 insertions(+), 2 deletions(-)
-
-diff --git a/include/types/applet.h b/include/types/applet.h
-index 46b2bc10..aee9167e 100644
---- a/include/types/applet.h
-+++ b/include/types/applet.h
-@@ -122,6 +122,7 @@ struct appctx {
- struct hlua_socket *socket;
- struct list wake_on_read;
- struct list wake_on_write;
-+ int die;
- } hlua;
- struct {
- struct hlua hlua;
-diff --git a/src/hlua.c b/src/hlua.c
-index 2d312804..eb003558 100644
---- a/src/hlua.c
-+++ b/src/hlua.c
-@@ -1544,6 +1544,15 @@ static void hlua_socket_handler(struct appctx *appctx)
- struct stream_interface *si = appctx->owner;
- struct connection *c = objt_conn(si_opposite(si)->end);
-
-+ if (appctx->ctx.hlua.die) {
-+ si_shutw(si);
-+ si_shutr(si);
-+ si_ic(si)->flags |= CF_READ_NULL;
-+ hlua_com_wake(&appctx->ctx.hlua.wake_on_read);
-+ hlua_com_wake(&appctx->ctx.hlua.wake_on_write);
-+ stream_shutdown(si_strm(si), SF_ERR_KILLED);
-+ }
-+
- /* If the connection object is not avalaible, close all the
- * streams and wakeup everithing waiting for.
- */
-@@ -1619,9 +1628,10 @@ __LJMP static int hlua_socket_gc(lua_State *L)
-
- /* Remove all reference between the Lua stack and the coroutine stream. */
- appctx = objt_appctx(socket->s->si[0].end);
-- stream_shutdown(socket->s, SF_ERR_KILLED);
- socket->s = NULL;
- appctx->ctx.hlua.socket = NULL;
-+ appctx->ctx.hlua.die = 1;
-+ appctx_wakeup(appctx);
-
- return 0;
- }
-@@ -1641,10 +1651,11 @@ __LJMP static int hlua_socket_close(lua_State *L)
- return 0;
-
- /* Close the stream and remove the associated stop task. */
-- stream_shutdown(socket->s, SF_ERR_KILLED);
- appctx = objt_appctx(socket->s->si[0].end);
- appctx->ctx.hlua.socket = NULL;
- socket->s = NULL;
-+ appctx->ctx.hlua.die = 1;
-+ appctx_wakeup(appctx);
-
- return 0;
- }
-@@ -2316,6 +2327,7 @@ __LJMP static int hlua_socket_new(lua_State *L)
-
- appctx->ctx.hlua.socket = socket;
- appctx->ctx.hlua.connected = 0;
-+ appctx->ctx.hlua.die = 0;
- LIST_INIT(&appctx->ctx.hlua.wake_on_write);
- LIST_INIT(&appctx->ctx.hlua.wake_on_read);
-
---
-2.13.0
-
+++ /dev/null
-From ea3b479be6cacb399a6541a00b1bdce17b0179d0 Mon Sep 17 00:00:00 2001
-From: Thierry FOURNIER <thierry.fournier@ozon.io>
-Date: Mon, 17 Jul 2017 00:44:40 +0200
-Subject: [PATCH 05/18] BUG/MEDIUM: lua: bad memory access
-
-We cannot perform garbage collection on unreferenced thread.
-This memory is now free and another Lua process can use it for
-other things.
-
-HAProxy is monothread, so this bug doesn't cause crash.
-
-This patch must be backported in 1.6 and 1.7
-(cherry picked from commit 7bd10d58d3aecf7cf1e5ee7df01193e07128a52d)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- src/hlua.c | 12 +++---------
- 1 file changed, 3 insertions(+), 9 deletions(-)
-
-diff --git a/src/hlua.c b/src/hlua.c
-index eb003558..a998860e 100644
---- a/src/hlua.c
-+++ b/src/hlua.c
-@@ -895,16 +895,10 @@ void hlua_ctx_destroy(struct hlua *lua)
- * the garbage collection.
- */
- if (lua->flags & HLUA_MUST_GC) {
-- if (!SET_SAFE_LJMP(lua->T))
-+ if (!SET_SAFE_LJMP(gL.T))
- return;
-- lua_gc(lua->T, LUA_GCCOLLECT, 0);
-- RESET_SAFE_LJMP(lua->T);
-- if (lua_status(lua->T) != LUA_OK) {
-- if (!SET_SAFE_LJMP(gL.T))
-- return;
-- lua_gc(gL.T, LUA_GCCOLLECT, 0);
-- RESET_SAFE_LJMP(gL.T);
-- }
-+ lua_gc(gL.T, LUA_GCCOLLECT, 0);
-+ RESET_SAFE_LJMP(gL.T);
- }
-
- lua->T = NULL;
---
-2.13.0
-
+++ /dev/null
-From 20850d19250eb530cab889bb9059a630b3f805a3 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Tue, 18 Jul 2017 06:56:40 +0200
-Subject: [PATCH 06/18] DOC: update CONTRIBUTING regarding optional parts and
- message format
-
-Make it clear that optional components must not break when disabled,
-that openssl is the only officially supported library and its support
-must not be broken, and that bug fixes must always be detailed.
-(cherry picked from commit 9d84cd602f4adb3954209eb14c94eea9254d1b5b)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- CONTRIBUTING | 21 ++++++++++++++++++++-
- 1 file changed, 20 insertions(+), 1 deletion(-)
-
-diff --git a/CONTRIBUTING b/CONTRIBUTING
-index 74a099bc..b2c2b493 100644
---- a/CONTRIBUTING
-+++ b/CONTRIBUTING
-@@ -69,6 +69,16 @@ code :
- Since most of these restrictions are just a matter of coding style, it is
- normally not a problem to comply.
-
-+When modifying some optional subsystem (SSL, Lua, compression, device detection
-+engines), please make sure the code continues to build (and to work) when these
-+features are disabled. Similarly, when modifying the SSL stack, please always
-+ensure that supported OpenSSL versions continue to build and to work, especially
-+if you modify support for alternate libraries. Clean support for the legacy
-+OpenSSL libraries is mandatory, support for its derivatives is a bonus and may
-+occasionally break eventhough a great care is taken. In other words, if you
-+provide a patch for OpenSSL you don't need to test its derivatives, but if you
-+provide a patch for a derivative you also need to test with OpenSSL.
-+
- If your work is very confidential and you can't publicly discuss it, you can
- also mail willy@haproxy.org directly about it, but your mail may be waiting
- several days in the queue before you get a response, if you get a response at
-@@ -441,13 +451,22 @@ do not think about them anymore after a few patches.
- way the subject is built. Please see the section below for more information
- regarding this formatting.
-
-- As a rule of thumb, your patch must never be made only of a subject line,
-+ As a rule of thumb, your patch MUST NEVER be made only of a subject line,
- it *must* contain a description. Even one or two lines, or indicating
- whether a backport is desired or not. It turns out that single-line commits
- are so rare in the Git world that they require special manual (hence
- painful) handling when they are backported, and at least for this reason
- it's important to keep this in mind.
-
-+ Each patch fixing a bug MUST be tagged with "BUG", a severity level, an
-+ indication of the affected subsystem and a brief description of the nature
-+ of the issue in the subject line, and a detailed analysis in the message
-+ body. The explanation of the user-visible impact and the need for
-+ backporting to stable branches or not are MANDATORY. Bug fixes with no
-+ indication will simply be rejected as they are very likely to cause more
-+ harm when nobody is able to tell whether or not the patch needs to be
-+ backported or can be reverted in case of regression.
-+
- 12) Discuss on the mailing list
-
- When submitting changes, please always CC the mailing list address so that
---
-2.13.0
-
+++ /dev/null
-From 8d99949c4c51d95c14fb2b09d18e1cff058f0c17 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Tue, 18 Jul 2017 06:58:16 +0200
-Subject: [PATCH 07/18] DOC: update the list of OpenSSL versions in the README
-
-1.1.0 is also supported nowadays. Also mention the best effort support
-for derivatives.
-(cherry picked from commit 7ab16868bc6e9d5ef879e1046effa035789835cc)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- README | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/README b/README
-index 839d06ec..8ad70e66 100644
---- a/README
-+++ b/README
-@@ -113,8 +113,12 @@ build fails due to missing symbols such as deflateInit(), then try again with
- Your are strongly encouraged to always use an up-to-date version of OpenSSL, as
- found on https://www.openssl.org/ as vulnerabilities are occasionally found and
- you don't want them on your systems. HAProxy is known to build correctly on all
--currently supported branches (0.9.8, 1.0.0, 1.0.1 and 1.0.2 at the time of
--writing). Branch 1.0.2 is recommended for the richest features.
-+currently supported branches (0.9.8, 1.0.0, 1.0.1, 1.0.2 and 1.1.0 at the time
-+of writing). Branch 1.0.2 is currently recommended for the best combination of
-+features and stability. Asynchronous engines require OpenSSL 1.1.0 though. It's
-+worth mentionning that some OpenSSL derivatives are also reported to work but
-+may occasionally break. Patches to fix them are welcome but please read the
-+CONTRIBUTING file first.
-
- To link OpenSSL statically against haproxy, build OpenSSL with the no-shared
- keyword and install it to a local directory, so your system is not affected :
---
-2.13.0
-
+++ /dev/null
-From 3e21b8d25ad148ef4e6544f28a8b2305f9484a7b Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Wed, 19 Jul 2017 19:05:29 +0200
-Subject: [PATCH 08/18] MINOR: tools: add a portable timegm() alternative
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-timegm() is not provided everywhere and the documentation on how to
-replace it is bogus as it proposes an inefficient and non-thread safe
-alternative.
-
-Here we reimplement everything needed to compute the number of seconds
-since Epoch based on the broken down fields in struct tm. It is only
-guaranteed to return correct values for correct inputs. It was successfully
-tested with all possible 32-bit values of time_t converted to struct tm
-using gmtime() and back to time_t using the legacy timegm() and this
-function, and both functions always produced the same result.
-
-Thanks to Benoît Garnier for an instructive discussion and detailed
-explanations of the various time functions, leading to this solution.
-(cherry picked from commit cb1949b8b30b8db7e05546da2939eff2b5973321)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- include/common/standard.h | 21 ++++++++++++++++++
- src/standard.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 75 insertions(+)
-
-diff --git a/include/common/standard.h b/include/common/standard.h
-index 87f90a65..c19c368b 100644
---- a/include/common/standard.h
-+++ b/include/common/standard.h
-@@ -624,6 +624,27 @@ static inline void get_gmtime(const time_t now, struct tm *tm)
- gmtime_r(&now, tm);
- }
-
-+/* Counts a number of elapsed days since 01/01/0000 based solely on elapsed
-+ * years and assuming the regular rule for leap years applies. It's fake but
-+ * serves as a temporary origin. It's worth remembering that it's the first
-+ * year of each period that is leap and not the last one, so for instance year
-+ * 1 sees 366 days since year 0 was leap. For this reason we have to apply
-+ * modular arithmetics which is why we offset the year by 399 before
-+ * subtracting the excess at the end. No overflow here before ~11.7 million
-+ * years.
-+ */
-+static inline unsigned int days_since_zero(unsigned int y)
-+{
-+ return y * 365 + (y + 399) / 4 - (y + 399) / 100 + (y + 399) / 400
-+ - 399 / 4 + 399 / 100;
-+}
-+
-+/* Returns the number of seconds since 01/01/1970 0:0:0 GMT for GMT date <tm>.
-+ * It is meant as a portable replacement for timegm() for use with valid inputs.
-+ * Returns undefined results for invalid dates (eg: months out of range 0..11).
-+ */
-+extern time_t my_timegm(const struct tm *tm);
-+
- /* This function parses a time value optionally followed by a unit suffix among
- * "d", "h", "m", "s", "ms" or "us". It converts the value into the unit
- * expected by the caller. The computation does its best to avoid overflows.
-diff --git a/src/standard.c b/src/standard.c
-index 8df1da6c..e1d414f3 100644
---- a/src/standard.c
-+++ b/src/standard.c
-@@ -2841,6 +2841,60 @@ char *localdate2str_log(char *dst, time_t t, struct tm *tm, size_t size)
- return dst;
- }
-
-+/* Returns the number of seconds since 01/01/1970 0:0:0 GMT for GMT date <tm>.
-+ * It is meant as a portable replacement for timegm() for use with valid inputs.
-+ * Returns undefined results for invalid dates (eg: months out of range 0..11).
-+ */
-+time_t my_timegm(const struct tm *tm)
-+{
-+ /* Each month has 28, 29, 30 or 31 days, or 28+N. The date in the year
-+ * is thus (current month - 1)*28 + cumulated_N[month] to count the
-+ * sum of the extra N days for elapsed months. The sum of all these N
-+ * days doesn't exceed 30 for a complete year (366-12*28) so it fits
-+ * in a 5-bit word. This means that with 60 bits we can represent a
-+ * matrix of all these values at once, which is fast and efficient to
-+ * access. The extra February day for leap years is not counted here.
-+ *
-+ * Jan : none = 0 (0)
-+ * Feb : Jan = 3 (3)
-+ * Mar : Jan..Feb = 3 (3 + 0)
-+ * Apr : Jan..Mar = 6 (3 + 0 + 3)
-+ * May : Jan..Apr = 8 (3 + 0 + 3 + 2)
-+ * Jun : Jan..May = 11 (3 + 0 + 3 + 2 + 3)
-+ * Jul : Jan..Jun = 13 (3 + 0 + 3 + 2 + 3 + 2)
-+ * Aug : Jan..Jul = 16 (3 + 0 + 3 + 2 + 3 + 2 + 3)
-+ * Sep : Jan..Aug = 19 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3)
-+ * Oct : Jan..Sep = 21 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3 + 2)
-+ * Nov : Jan..Oct = 24 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3 + 2 + 3)
-+ * Dec : Jan..Nov = 26 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3 + 2 + 3 + 2)
-+ */
-+ uint64_t extra =
-+ ( 0ULL << 0*5) + ( 3ULL << 1*5) + ( 3ULL << 2*5) + /* Jan, Feb, Mar, */
-+ ( 6ULL << 3*5) + ( 8ULL << 4*5) + (11ULL << 5*5) + /* Apr, May, Jun, */
-+ (13ULL << 6*5) + (16ULL << 7*5) + (19ULL << 8*5) + /* Jul, Aug, Sep, */
-+ (21ULL << 9*5) + (24ULL << 10*5) + (26ULL << 11*5); /* Oct, Nov, Dec, */
-+
-+ unsigned int y = tm->tm_year + 1900;
-+ unsigned int m = tm->tm_mon;
-+ unsigned long days = 0;
-+
-+ /* days since 1/1/1970 for full years */
-+ days += days_since_zero(y) - days_since_zero(1970);
-+
-+ /* days for full months in the current year */
-+ days += 28 * m + ((extra >> (m * 5)) & 0x1f);
-+
-+ /* count + 1 after March for leap years. A leap year is a year multiple
-+ * of 4, unless it's multiple of 100 without being multiple of 400. 2000
-+ * is leap, 1900 isn't, 1904 is.
-+ */
-+ if ((m > 1) && !(y & 3) && ((y % 100) || !(y % 400)))
-+ days++;
-+
-+ days += tm->tm_mday - 1;
-+ return days * 86400ULL + tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec;
-+}
-+
- /* This function check a char. It returns true and updates
- * <date> and <len> pointer to the new position if the
- * character is found.
---
-2.13.0
-
+++ /dev/null
-From df1655a6c0e4431317cc66c67693281092a952b0 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Wed, 19 Jul 2017 19:08:48 +0200
-Subject: [PATCH 09/18] BUILD: lua: replace timegm() with my_timegm() to fix
- build on Solaris 10
-
-Akhnin Nikita reported that Lua doesn't build on Solaris 10 because
-the code uses timegm() to parse a date, which is not provided there.
-The recommended way to implement timegm() is broken in the man page,
-as it is based on a change of the TZ environment variable at run time
-before calling the function (which is obviously not thread safe, and
-terribly inefficient).
-
-Here instead we rely on the new my_timegm() function, it should be
-sufficient for all known use cases.
-(cherry picked from commit abd9bb20b76818c9f461a82b72b10818736ff8b3)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- src/hlua_fcn.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
-index 58905d7d..fe899a4a 100644
---- a/src/hlua_fcn.c
-+++ b/src/hlua_fcn.c
-@@ -287,7 +287,7 @@ static int hlua_parse_date(lua_State *L, int (*fcn)(const char *, int, struct tm
- * the timezone from the broken-down time, it must be fixed
- * after the conversion.
- */
-- time = timegm(&tm);
-+ time = my_timegm(&tm);
- if (time == -1) {
- lua_pushnil(L);
- return 1;
---
-2.13.0
-
+++ /dev/null
-From e14ec1d816de60b648dd7cb6c55b665f5163156b Mon Sep 17 00:00:00 2001
-From: ben51degrees <ben@51degrees.com>
-Date: Wed, 19 Jul 2017 16:22:04 +0100
-Subject: [PATCH 10/18] DOC: Updated 51Degrees git URL to point to a stable
- version.
-
-The previously documented location doesn't work anymore and must not be
-used. Warning for backports, different branches are in use depending on
-the version (v3.2.10 for 1.7, v3.2.5 for 1.6).
-(cherry picked from commit ac752ff68cd3ac88a7a27ce17daa5c3f0c839694)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- doc/51Degrees-device-detection.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/doc/51Degrees-device-detection.txt b/doc/51Degrees-device-detection.txt
-index 1ee912d9..71b2eb76 100644
---- a/doc/51Degrees-device-detection.txt
-+++ b/doc/51Degrees-device-detection.txt
-@@ -14,7 +14,7 @@ headers as configurable parameters.
- In order to enable 51Degrees download the 51Degrees source code from the
- official github repository :
-
-- git clone https://github.com/51Degrees/Device-Detection
-+ git clone https://git.51Degrees.com/Device-Detection.git -b v3.2.10
-
- then run 'make' with USE_51DEGREES and 51DEGREES_SRC set. Both 51DEGREES_INC
- and 51DEGREES_LIB may additionally be used to force specific different paths
---
-2.13.0
-
+++ /dev/null
-From 9304b76fb37a36f6249ec963093d74210bd237f6 Mon Sep 17 00:00:00 2001
-From: Christopher Faulet <cfaulet@haproxy.com>
-Date: Tue, 18 Jul 2017 10:35:55 +0200
-Subject: [PATCH 11/18] BUG/MINOR: http: Set the response error state in
- http_sync_res_state
-
-This is just typo. It may only report a wrong response message state in
-"show errors" on the CLI.
-
-This patch must be backported in 1.7.
-
-(cherry picked from commit a3992e06a6e74142d9784d18d8cb3527fadb64d6)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/proto_http.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index 94c8d639..796955f5 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -5530,7 +5530,7 @@ int http_sync_res_state(struct stream *s)
- goto http_msg_closed;
- }
- else if (chn->flags & CF_SHUTW) {
-- txn->req.err_state = txn->req.msg_state;
-+ txn->rsp.err_state = txn->rsp.msg_state;
- txn->rsp.msg_state = HTTP_MSG_ERROR;
- s->be->be_counters.cli_aborts++;
- if (objt_server(s->target))
---
-2.13.0
-
+++ /dev/null
-From a49007a187ab7fddfcec58e1d9fc8a707e4531c9 Mon Sep 17 00:00:00 2001
-From: Christopher Faulet <cfaulet@haproxy.com>
-Date: Tue, 18 Jul 2017 11:18:46 +0200
-Subject: [PATCH 12/18] MINOR: http: Reorder/rewrite checks in
- http_resync_states
-
-The previous patch removed the forced symmetry of the TUNNEL mode during the
-state synchronization. Here, we take care to remove body analyzer only on the
-channel in TUNNEL mode. In fact, today, this change has no effect because both
-sides are switched in same time. But this way, with some changes, it will be
-possible to keep body analyzer on a side (to finish the states synchronization)
-with the other one in TUNNEL mode.
-
-WARNING: This patch will be used to fix a bug. The fix will be commited in a
-very next commit. So if the fix is backported, this one must be backported too.
-
-(cherry picked from commit f77bb539d4846ab278269b99a3165a5608ca0cf4)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/proto_http.c | 48 +++++++++++++++++++++++++++++-------------------
- 1 file changed, 29 insertions(+), 19 deletions(-)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index 796955f5..aaf9f648 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -5577,34 +5577,27 @@ int http_resync_states(struct stream *s)
-
- /* OK, both state machines agree on a compatible state.
- * There are a few cases we're interested in :
-- * - HTTP_MSG_TUNNEL on either means we have to disable both analysers
- * - HTTP_MSG_CLOSED on both sides means we've reached the end in both
- * directions, so let's simply disable both analysers.
-- * - HTTP_MSG_CLOSED on the response only means we must abort the
-- * request.
-- * - HTTP_MSG_CLOSED on the request and HTTP_MSG_DONE on the response
-- * with server-close mode means we've completed one request and we
-- * must re-initialize the server connection.
-+ * - HTTP_MSG_CLOSED on the response only or HTTP_MSG_ERROR on either
-+ * means we must abort the request.
-+ * - HTTP_MSG_TUNNEL on either means we have to disable analyser on
-+ * corresponding channel.
-+ * - HTTP_MSG_DONE or HTTP_MSG_CLOSED on the request and HTTP_MSG_DONE
-+ * on the response with server-close mode means we've completed one
-+ * request and we must re-initialize the server connection.
- */
--
-- if (txn->req.msg_state == HTTP_MSG_TUNNEL ||
-- txn->rsp.msg_state == HTTP_MSG_TUNNEL ||
-- (txn->req.msg_state == HTTP_MSG_CLOSED &&
-- txn->rsp.msg_state == HTTP_MSG_CLOSED)) {
-+ if (txn->req.msg_state == HTTP_MSG_CLOSED &&
-+ txn->rsp.msg_state == HTTP_MSG_CLOSED) {
- s->req.analysers &= AN_REQ_FLT_END;
- channel_auto_close(&s->req);
- channel_auto_read(&s->req);
- s->res.analysers &= AN_RES_FLT_END;
- channel_auto_close(&s->res);
- channel_auto_read(&s->res);
-- if (txn->req.msg_state == HTTP_MSG_TUNNEL && HAS_REQ_DATA_FILTERS(s))
-- s->req.analysers |= AN_REQ_FLT_XFER_DATA;
-- if (txn->rsp.msg_state == HTTP_MSG_TUNNEL && HAS_RSP_DATA_FILTERS(s))
-- s->res.analysers |= AN_RES_FLT_XFER_DATA;
-- }
-- else if ((txn->req.msg_state >= HTTP_MSG_DONE &&
-- (txn->rsp.msg_state == HTTP_MSG_CLOSED || (s->res.flags & CF_SHUTW))) ||
-- txn->rsp.msg_state == HTTP_MSG_ERROR ||
-+ }
-+ else if (txn->rsp.msg_state == HTTP_MSG_CLOSED ||
-+ txn->rsp.msg_state == HTTP_MSG_ERROR ||
- txn->req.msg_state == HTTP_MSG_ERROR) {
- s->res.analysers &= AN_RES_FLT_END;
- channel_auto_close(&s->res);
-@@ -5615,6 +5608,23 @@ int http_resync_states(struct stream *s)
- channel_auto_read(&s->req);
- channel_truncate(&s->req);
- }
-+ else if (txn->req.msg_state == HTTP_MSG_TUNNEL ||
-+ txn->rsp.msg_state == HTTP_MSG_TUNNEL) {
-+ if (txn->req.msg_state == HTTP_MSG_TUNNEL) {
-+ s->req.analysers &= AN_REQ_FLT_END;
-+ if (HAS_REQ_DATA_FILTERS(s))
-+ s->req.analysers |= AN_REQ_FLT_XFER_DATA;
-+ }
-+ if (txn->rsp.msg_state == HTTP_MSG_TUNNEL) {
-+ s->res.analysers &= AN_RES_FLT_END;
-+ if (HAS_RSP_DATA_FILTERS(s))
-+ s->res.analysers |= AN_RES_FLT_XFER_DATA;
-+ }
-+ channel_auto_close(&s->req);
-+ channel_auto_read(&s->req);
-+ channel_auto_close(&s->res);
-+ channel_auto_read(&s->res);
-+ }
- else if ((txn->req.msg_state == HTTP_MSG_DONE ||
- txn->req.msg_state == HTTP_MSG_CLOSED) &&
- txn->rsp.msg_state == HTTP_MSG_DONE &&
---
-2.13.0
-
+++ /dev/null
-From 1430a0c0f62fcff4303706f5baf2b544e00fcda3 Mon Sep 17 00:00:00 2001
-From: Christopher Faulet <cfaulet@haproxy.com>
-Date: Tue, 18 Jul 2017 10:48:24 +0200
-Subject: [PATCH 13/18] MINOR: http: Switch requests/responses in TUNNEL mode
- only by checking txn flags
-
-Today, the only way to have a request or a response in HTTP_MSG_TUNNEL state is
-to have the flag TX_CON_WANT_TUN set on the transaction. So this is a symmetric
-state. Both the request and the response are switch in same time in this
-state. This can be done only by checking transaction flags instead of relying on
-the other side state. This is the purpose of this patch.
-
-This way, if for any reason we need to switch only one side in TUNNEL mode, it
-will be possible. And to prepare asymmetric cases, we check channel flags in
-DONE _AND_ TUNNEL states.
-
-WARNING: This patch will be used to fix a bug. The fix will be commited in a
-very next commit. So if the fix is backported, this one must be backported too.
-
-(cherry picked from commit 4be9803914ae7156109c915659aad216e4a3c6c1)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/proto_http.c | 65 +++++++++++++++++++-------------------------------------
- 1 file changed, 22 insertions(+), 43 deletions(-)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index aaf9f648..00a92cdb 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -5294,7 +5294,7 @@ int http_sync_req_state(struct stream *s)
- unsigned int old_flags = chn->flags;
- unsigned int old_state = txn->req.msg_state;
-
-- if (unlikely(txn->req.msg_state < HTTP_MSG_BODY))
-+ if (unlikely(txn->req.msg_state < HTTP_MSG_DONE))
- return 0;
-
- if (txn->req.msg_state == HTTP_MSG_DONE) {
-@@ -5338,13 +5338,6 @@ int http_sync_req_state(struct stream *s)
- goto wait_other_side;
- }
-
-- if (txn->rsp.msg_state == HTTP_MSG_TUNNEL) {
-- /* if any side switches to tunnel mode, the other one does too */
-- channel_auto_read(chn);
-- txn->req.msg_state = HTTP_MSG_TUNNEL;
-- goto wait_other_side;
-- }
--
- /* When we get here, it means that both the request and the
- * response have finished receiving. Depending on the connection
- * mode, we'll have to wait for the last bytes to leave in either
-@@ -5377,20 +5370,7 @@ int http_sync_req_state(struct stream *s)
- }
- }
-
-- if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) {
-- /* if we've just closed an output, let's switch */
-- s->si[1].flags |= SI_FL_NOLINGER; /* we want to close ASAP */
--
-- if (!channel_is_empty(chn)) {
-- txn->req.msg_state = HTTP_MSG_CLOSING;
-- goto http_msg_closing;
-- }
-- else {
-- txn->req.msg_state = HTTP_MSG_CLOSED;
-- goto http_msg_closed;
-- }
-- }
-- goto wait_other_side;
-+ goto check_channel_flags;
- }
-
- if (txn->req.msg_state == HTTP_MSG_CLOSING) {
-@@ -5419,6 +5399,16 @@ int http_sync_req_state(struct stream *s)
- goto wait_other_side;
- }
-
-+ check_channel_flags:
-+ /* Here, we are in HTTP_MSG_DONE or HTTP_MSG_TUNNEL */
-+ if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) {
-+ /* if we've just closed an output, let's switch */
-+ s->si[1].flags |= SI_FL_NOLINGER; /* we want to close ASAP */
-+ txn->req.msg_state = HTTP_MSG_CLOSING;
-+ goto http_msg_closing;
-+ }
-+
-+
- wait_other_side:
- return txn->req.msg_state != old_state || chn->flags != old_flags;
- }
-@@ -5438,7 +5428,7 @@ int http_sync_res_state(struct stream *s)
- unsigned int old_flags = chn->flags;
- unsigned int old_state = txn->rsp.msg_state;
-
-- if (unlikely(txn->rsp.msg_state < HTTP_MSG_BODY))
-+ if (unlikely(txn->rsp.msg_state < HTTP_MSG_DONE))
- return 0;
-
- if (txn->rsp.msg_state == HTTP_MSG_DONE) {
-@@ -5461,14 +5451,6 @@ int http_sync_res_state(struct stream *s)
- goto wait_other_side;
- }
-
-- if (txn->req.msg_state == HTTP_MSG_TUNNEL) {
-- /* if any side switches to tunnel mode, the other one does too */
-- channel_auto_read(chn);
-- txn->rsp.msg_state = HTTP_MSG_TUNNEL;
-- chn->flags |= CF_NEVER_WAIT;
-- goto wait_other_side;
-- }
--
- /* When we get here, it means that both the request and the
- * response have finished receiving. Depending on the connection
- * mode, we'll have to wait for the last bytes to leave in either
-@@ -5506,18 +5488,7 @@ int http_sync_res_state(struct stream *s)
- txn->rsp.msg_state = HTTP_MSG_TUNNEL;
- }
-
-- if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) {
-- /* if we've just closed an output, let's switch */
-- if (!channel_is_empty(chn)) {
-- txn->rsp.msg_state = HTTP_MSG_CLOSING;
-- goto http_msg_closing;
-- }
-- else {
-- txn->rsp.msg_state = HTTP_MSG_CLOSED;
-- goto http_msg_closed;
-- }
-- }
-- goto wait_other_side;
-+ goto check_channel_flags;
- }
-
- if (txn->rsp.msg_state == HTTP_MSG_CLOSING) {
-@@ -5548,6 +5519,14 @@ int http_sync_res_state(struct stream *s)
- goto wait_other_side;
- }
-
-+ check_channel_flags:
-+ /* Here, we are in HTTP_MSG_DONE or HTTP_MSG_TUNNEL */
-+ if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) {
-+ /* if we've just closed an output, let's switch */
-+ txn->rsp.msg_state = HTTP_MSG_CLOSING;
-+ goto http_msg_closing;
-+ }
-+
- wait_other_side:
- /* We force the response to leave immediately if we're waiting for the
- * other side, since there is no pending shutdown to push it out.
---
-2.13.0
-
+++ /dev/null
-From f82344c1cf20afcf77e8c3df8f9d341d659da93b Mon Sep 17 00:00:00 2001
-From: Christopher Faulet <cfaulet@haproxy.com>
-Date: Tue, 18 Jul 2017 11:42:08 +0200
-Subject: [PATCH 14/18] BUG/MEDIUM: http: Switch HTTP responses in TUNNEL mode
- when body length is undefined
-
-When the body length of a HTTP response is undefined, the HTTP parser is blocked
-in the body parsing. Before HAProxy 1.7, in this case, because
-AN_RES_HTTP_XFER_BODY is never set, there is no visible effect. When the server
-closes its connection to terminate the response, HAProxy catches it as a normal
-closure. Since 1.7, we always set this analyzer to enter at least once in
-http_response_forward_body. But, in the present case, when the server connection
-is closed, http_response_forward_body is called one time too many. The response
-is correctly sent to the client, but an error is catched and logged with "SD--"
-flags.
-
-To reproduce the bug, you can use the configuration "tests/test-fsm.cfg". The
-tests 3 and 21 hit the bug.
-
-Idea to fix the bug is to switch the response in TUNNEL mode without switching
-the request. This is possible because of previous patches.
-
-First, we need to detect responses with undefined body length during states
-synchronization. Excluding tunnelled transactions, when the response length is
-undefined, TX_CON_WANT_CLO is always set on the transaction. So, when states are
-synchronized, if TX_CON_WANT_CLO is set, the response is switched in TUNNEL mode
-and the request remains unchanged.
-
-Then, in http_msg_forward_body, we add a specific check to switch the response
-in DONE mode if the body length is undefined and if there is no data filter.
-
-This patch depends on following previous commits:
-
- * MINOR: http: Switch requests/responses in TUNNEL mode only by checking txn flags
- * MINOR: http: Reorder/rewrite checks in http_resync_states
-
-This patch must be backported in 1.7 with 2 previous ones.
-
-(cherry picked from commit 1486b0ab6de744e14ae684af105951345534f9ec)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/proto_http.c | 37 +++++++++++++++++++++++++------------
- 1 file changed, 25 insertions(+), 12 deletions(-)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index 00a92cdb..e776e4d5 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -5354,7 +5354,16 @@ int http_sync_req_state(struct stream *s)
- * let's enforce it now that we're not expecting any new
- * data to come. The caller knows the stream is complete
- * once both states are CLOSED.
-+ *
-+ * However, there is an exception if the response
-+ * length is undefined. In this case, we need to wait
-+ * the close from the server. The response will be
-+ * switched in TUNNEL mode until the end.
- */
-+ if (!(txn->rsp.flags & HTTP_MSGF_XFER_LEN) &&
-+ txn->rsp.msg_state != HTTP_MSG_CLOSED)
-+ goto check_channel_flags;
-+
- if (!(chn->flags & (CF_SHUTW|CF_SHUTW_NOW))) {
- channel_shutr_now(chn);
- channel_shutw_now(chn);
-@@ -5471,8 +5480,16 @@ int http_sync_res_state(struct stream *s)
- * let's enforce it now that we're not expecting any new
- * data to come. The caller knows the stream is complete
- * once both states are CLOSED.
-+ *
-+ * However, there is an exception if the response length
-+ * is undefined. In this case, we switch in TUNNEL mode.
- */
-- if (!(chn->flags & (CF_SHUTW|CF_SHUTW_NOW))) {
-+ if (!(txn->rsp.flags & HTTP_MSGF_XFER_LEN)) {
-+ channel_auto_read(chn);
-+ txn->rsp.msg_state = HTTP_MSG_TUNNEL;
-+ chn->flags |= CF_NEVER_WAIT;
-+ }
-+ else if (!(chn->flags & (CF_SHUTW|CF_SHUTW_NOW))) {
- channel_shutr_now(chn);
- channel_shutw_now(chn);
- }
-@@ -6952,14 +6969,6 @@ int http_response_forward_body(struct stream *s, struct channel *res, int an_bit
- if ((msg->flags & HTTP_MSGF_TE_CHNK) || (msg->flags & HTTP_MSGF_COMPRESSING))
- res->flags |= CF_EXPECT_MORE;
-
-- /* If there is neither content-length, nor transfer-encoding header
-- * _AND_ there is no data filtering, we can safely forward all data
-- * indefinitely. */
-- if (!(msg->flags & HTTP_MSGF_XFER_LEN) && !HAS_DATA_FILTERS(s, res)) {
-- buffer_flush(res->buf);
-- channel_forward_forever(res);
-- }
--
- /* the stream handler will take care of timeouts and errors */
- return 0;
-
-@@ -7036,9 +7045,13 @@ http_msg_forward_body(struct stream *s, struct http_msg *msg)
- goto missing_data_or_waiting;
- }
-
-- /* The server still sending data that should be filtered */
-- if (!(msg->flags & HTTP_MSGF_XFER_LEN) && !(chn->flags & CF_SHUTR))
-- goto missing_data_or_waiting;
-+ /* This check can only be true for a response. HTTP_MSGF_XFER_LEN is
-+ * always set for a request. */
-+ if (!(msg->flags & HTTP_MSGF_XFER_LEN)) {
-+ /* The server still sending data that should be filtered */
-+ if (!(chn->flags & CF_SHUTR) && HAS_DATA_FILTERS(s, chn))
-+ goto missing_data_or_waiting;
-+ }
-
- msg->msg_state = HTTP_MSG_ENDING;
-
---
-2.13.0
-
+++ /dev/null
-From af9b52e92be8ca6a07f9156dcb0b08dd2ad8db75 Mon Sep 17 00:00:00 2001
-From: Christopher Faulet <cfaulet@haproxy.com>
-Date: Thu, 20 Jul 2017 11:05:10 +0200
-Subject: [PATCH 15/18] BUG/MAJOR: http: Fix possible infinity loop in
- http_sync_(req|res)_state
-
-In commit "MINOR: http: Switch requests/responses in TUNNEL mode only by
-checking txn flags", it is possible to have an infinite loop on HTTP_MSG_CLOSING
-state.
-
-(cherry picked from commit 56d260916f61e48c8b2f1fd2f9431afac776d160)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/proto_http.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index e776e4d5..4a030013 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -5394,8 +5394,8 @@ int http_sync_req_state(struct stream *s)
- else if (chn->flags & CF_SHUTW) {
- txn->req.err_state = txn->req.msg_state;
- txn->req.msg_state = HTTP_MSG_ERROR;
-- goto wait_other_side;
- }
-+ goto wait_other_side;
- }
-
- if (txn->req.msg_state == HTTP_MSG_CLOSED) {
-@@ -5523,8 +5523,8 @@ int http_sync_res_state(struct stream *s)
- s->be->be_counters.cli_aborts++;
- if (objt_server(s->target))
- objt_server(s->target)->counters.cli_aborts++;
-- goto wait_other_side;
- }
-+ goto wait_other_side;
- }
-
- if (txn->rsp.msg_state == HTTP_MSG_CLOSED) {
---
-2.13.0
-
+++ /dev/null
-From c00347899e9f0c3420f98c53eab1469644e28e06 Mon Sep 17 00:00:00 2001
-From: Nenad Merdanovic <nmerdan@haproxy.com>
-Date: Sun, 23 Jul 2017 22:04:58 -0400
-Subject: [PATCH 16/18] BUG/MINOR: lua: Fix Server.get_addr() port values
-
-The get_addr() method of the Lua Server class was using the
-'sockaddr_storage addr' member to get the port value. HAProxy does not
-store ports in this member as it uses a separate member, called
-'svc_port'.
-
-This fix should be backported to 1.7.
-
-(cherry picked from commit 3849473828f319829aff422d2fbbce0823e65d64)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/hlua_fcn.c | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
-index fe899a4a..0752220e 100644
---- a/src/hlua_fcn.c
-+++ b/src/hlua_fcn.c
-@@ -545,8 +545,7 @@ int hlua_server_get_addr(lua_State *L)
- addr, INET_ADDRSTRLEN);
- luaL_addstring(&b, addr);
- luaL_addstring(&b, ":");
-- snprintf(addr, INET_ADDRSTRLEN, "%d",
-- ntohs(((struct sockaddr_in *)&srv->addr)->sin_port));
-+ snprintf(addr, INET_ADDRSTRLEN, "%d", srv->svc_port);
- luaL_addstring(&b, addr);
- break;
- case AF_INET6:
-@@ -554,8 +553,7 @@ int hlua_server_get_addr(lua_State *L)
- addr, INET_ADDRSTRLEN);
- luaL_addstring(&b, addr);
- luaL_addstring(&b, ":");
-- snprintf(addr, INET_ADDRSTRLEN, "%d",
-- ntohs(((struct sockaddr_in6 *)&srv->addr)->sin6_port));
-+ snprintf(addr, INET_ADDRSTRLEN, "%d", srv->svc_port);
- luaL_addstring(&b, addr);
- break;
- case AF_UNIX:
---
-2.13.0
-
+++ /dev/null
-From e79fe9bc0ae363e91555f1ba64889e2ddf475b8e Mon Sep 17 00:00:00 2001
-From: Nenad Merdanovic <nmerdan@haproxy.com>
-Date: Sun, 23 Jul 2017 22:04:59 -0400
-Subject: [PATCH 17/18] BUG/MINOR: lua: Correctly use INET6_ADDRSTRLEN in
- Server.get_addr()
-
-The get_addr() method of the Lua Server class incorrectly used
-INET_ADDRSTRLEN for IPv6 addresses resulting in failing to convert
-longer IPv6 addresses to strings.
-
-This fix should be backported to 1.7.
-
-(cherry picked from commit a9f040453acc09e888c3f2dc983f15dcf3fa66e3)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/hlua_fcn.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
-index 0752220e..f8b9b5ec 100644
---- a/src/hlua_fcn.c
-+++ b/src/hlua_fcn.c
-@@ -550,7 +550,7 @@ int hlua_server_get_addr(lua_State *L)
- break;
- case AF_INET6:
- inet_ntop(AF_INET6, &((struct sockaddr_in6 *)&srv->addr)->sin6_addr,
-- addr, INET_ADDRSTRLEN);
-+ addr, INET6_ADDRSTRLEN);
- luaL_addstring(&b, addr);
- luaL_addstring(&b, ":");
- snprintf(addr, INET_ADDRSTRLEN, "%d", srv->svc_port);
---
-2.13.0
-
+++ /dev/null
-From dd18f945c26fc30872a52c66b06b5a0a86b10060 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Mon, 24 Jul 2017 17:35:27 +0200
-Subject: [PATCH 18/18] BUG/MINOR: lua: always detach the tcp/http tasks before
- freeing them
-
-In hlua_{http,tcp}_applet_release(), a call to task_free() is performed
-to release the task, but no task_delete() is made on these tasks. Till
-now it wasn't much of a problem because this was normally not done with
-the task in the run queue, and the task was never put into the wait queue
-since it doesn't have any timer. But with threading it will become an
-issue. And not having this already prevents another bug from being fixed.
-
-Thanks to Christopher for spotting this one. A backport to 1.7 and 1.6 is
-preferred for safety.
-
-(cherry picked from commit bd7fc95edbce821f1d7b745a7b75deef4d6b1e27)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/hlua.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/hlua.c b/src/hlua.c
-index a998860e..67b9458c 100644
---- a/src/hlua.c
-+++ b/src/hlua.c
-@@ -5948,6 +5948,7 @@ error:
-
- static void hlua_applet_tcp_release(struct appctx *ctx)
- {
-+ task_delete(ctx->ctx.hlua_apptcp.task);
- task_free(ctx->ctx.hlua_apptcp.task);
- ctx->ctx.hlua_apptcp.task = NULL;
- hlua_ctx_destroy(&ctx->ctx.hlua_apptcp.hlua);
-@@ -6226,6 +6227,7 @@ error:
-
- static void hlua_applet_http_release(struct appctx *ctx)
- {
-+ task_delete(ctx->ctx.hlua_apphttp.task);
- task_free(ctx->ctx.hlua_apphttp.task);
- ctx->ctx.hlua_apphttp.task = NULL;
- hlua_ctx_destroy(&ctx->ctx.hlua_apphttp.hlua);
---
-2.13.0
-
include $(TOPDIR)/rules.mk
PKG_NAME:=horst
-PKG_VERSION:=5.0
+PKG_VERSION:=5.1
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-git.tar.gz
-PKG_MIRROR_HASH:=3a677e504e8a1f27c899dfbf39da8c94412b24b08bb2eab0de7807cef07d078b
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_URL:=git://github.com/br101/horst.git
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=version-$(PKG_VERSION)
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://github.com/br101/horst/archive/v$(PKG_VERSION)/
+PKG_HASH:=74b4cb1143d93c73c3b4bbbe0c36f89a790401bde9e894e94e2a27339ca384d9
PKG_MAINTAINER:=Bruno Randolf <br1@einfach.org>
PKG_LICENSE:=GPL-2.0+
and especially IBSS (ad-hoc) mode and mesh networks (OLSR).
endef
+define Package/horst/conffiles
+/etc/config/horst
+endef
+
define Package/horst/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/horst $(1)/usr/sbin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/horst.sh $(1)/usr/sbin/
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./horst.init $(1)/etc/init.d/horst
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_DATA) ./horst.config $(1)/etc/config/horst
endef
$(eval $(call BuildPackage,horst))
--- /dev/null
+config init 'init'
+ option disabled 1
+ option interface 'mon0'
+ option scan 1
--- /dev/null
+#!/bin/sh /etc/rc.common
+
+START=94
+
+USE_PROCD=1
+PROG=/usr/sbin/horst
+
+start_service() {
+ config_load horst
+ config_get dis "init" 'disabled' '0'
+ [ "$dis" == "0" ] || exit
+
+ config_get intf "init" 'interface' 'wlan0'
+ config_get scan "init" 'scan' '0'
+ [ "$scan" == "0" ] && scan='' || scan="-s"
+
+ procd_open_instance
+ procd_set_param command $PROG -q -i $intf $scan -N
+ procd_set_param netdev $intf
+ procd_set_param respawn
+ procd_close_instance
+}
+++ /dev/null
-From c91e2f6d72823938052044eef858c3c675617ae4 Mon Sep 17 00:00:00 2001
-From: Bruno Randolf <br1@einfach.org>
-Date: Wed, 15 Mar 2017 21:22:48 +0000
-Subject: [PATCH] Remove _GNU_SOURCE from ccan config
-
-It creates problems with LEDEs FORTIFY and is not needed
----
- config.h | 3 ---
- 1 file changed, 3 deletions(-)
-
-diff --git a/config.h b/config.h
-index 5c398c4..7e1027a 100644
---- a/config.h
-+++ b/config.h
-@@ -1,8 +1,5 @@
- /* Generated by CCAN configurator */
- #ifndef CCAN_CONFIG_H
- #define CCAN_CONFIG_H
--#ifndef _GNU_SOURCE
--#define _GNU_SOURCE /* Always use GNU extensions. */
--#endif
- #define HAVE_TYPEOF 1
- #endif /* CCAN_CONFIG_H */
---
-2.7.4
-
PKG_NAME:=htpdate
PKG_VERSION:=1.1.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.vervest.org/htp/archive/c/
CATEGORY:=Network
TITLE:=an HTP (Hypertext Time Protocol) implementation
URL:=http://www.vervest.com/htp/
- MAINTAINER:=Tijs Van Buggenhout <tvbuggen@netzerk.be>
+ MAINTAINER:=Tijs Van Buggenhout <tvbuggen@netzerk.be>, \
+ Marcin Jurkowski <marcin1j@gmail.com>
endef
define Package/htpdate/description
endef
define Package/htpdate/conffiles
-/etc/default/htpdate
+/etc/config/htpdate
endef
define Build/Compile
define Package/htpdate/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/htpdate $(1)/usr/sbin/
- $(INSTALL_DIR) $(1)/etc/default/
- $(INSTALL_CONF) ./files/htpdate.default $(1)/etc/default/htpdate
+ $(INSTALL_DIR) $(1)/etc/config/
+ $(INSTALL_CONF) ./files/htpdate.conf $(1)/etc/config/htpdate
$(INSTALL_DIR) $(1)/etc/init.d/
$(INSTALL_BIN) ./files/htpdate.init $(1)/etc/init.d/htpdate
endef
--- /dev/null
+config htpdate 'htpdate'
+ option enabled 1
+ list server 'www.google.com'
+ list server 'www.yahoo.com'
+ list server 'www.linux.com'
+ list server 'www.freebsd.org'
+ option proxy_host ''
+ option proxy_port '8080'
+ option debug 0
+ option sanity_check 1
+ #list option '-4'
+++ /dev/null
-OPTIONS="www.google.com www.yahoo.com www.linux.org www.freebsd.org"
# Copyright (C) 2006 OpenWrt.org
START=49
-BIN=htpdate
-DEFAULT=/etc/default/$BIN
-RUN_D=/var/run
-PID_F=$RUN_D/$BIN.pid
-
-start() {
- [ -f $DEFAULT ] && . $DEFAULT
- mkdir -p $RUN_D
- $BIN -l -s -t $OPTIONS && $BIN -D $OPTIONS
+USE_PROCD=1
+PROG=/usr/sbin/htpdate
+
+
+
+
+validate_htpdate_section() {
+ uci_validate_section htpdate htpdate "${1}" \
+ 'server:list(host)' \
+ 'proxy_host:host' \
+ 'proxy_port:port:8080' \
+ 'debug:bool:0' \
+ 'sanity_check:bool:1' \
+ 'option:list(string)' \
+ 'enabled:bool:1'
}
-stop() {
- [ -f $PID_F ] && kill $(cat $PID_F)
+
+start_service() {
+ local server proxy debug sanity_check option enabled
+
+ validate_htpdate_section htpdate || {
+ echo "validation failed"
+ return 1
+ }
+
+ [ "$enabled" = 0 ] && return
+
+
+ procd_open_instance
+ procd_set_param command "$PROG" -f
+
+ [ -n "$proxy" ] && procd_append_param command -P $proxy:$proxy_port
+ [ "$debug" = "1" ] && procd_append_param command -d
+ [ "$sanity_check" = "0" ] && procd_append_param command -t
+ [ -n "$option" ] && procd_append_param command $option
+ for peer in $server; do
+ procd_append_param command $peer
+ done
+
+ procd_set_param stdout 1
+ procd_set_param stderr 1
+ procd_set_param respawn
+ procd_close_instance
}
+service_triggers() {
+ procd_add_reload_trigger "htpdate"
+ procd_add_validation validate_htpdate_section
+}
--- /dev/null
+--- a/htpdate.c
++++ b/htpdate.c
+@@ -395,6 +395,7 @@ Usage: htpdate [-046abdhlqstxD] [-i pid
+ -b burst mode\n\
+ -d debug mode\n\
+ -D daemon mode\n\
++ -f run in foreground\n\
+ -h help\n\
+ -i pid file\n\
+ -l use syslog for output\n\
+@@ -510,7 +511,7 @@ int main( int argc, char *argv[] ) {
+
+
+ /* Parse the command line switches and arguments */
+- while ( (param = getopt(argc, argv, "046abdhi:lm:p:qstu:xDM:P:") ) != -1)
++ while ( (param = getopt(argc, argv, "046abdhi:lm:p:qstu:xDfM:P:") ) != -1)
+ switch( param ) {
+
+ case '0': /* HTTP/1.0 */
+@@ -593,6 +594,9 @@ int main( int argc, char *argv[] ) {
+ daemonize = 1;
+ logmode = 1;
+ break;
++ case 'f': /* run in foreground */
++ daemonize = 2;
++ break;
+ case 'M': /* maximum poll interval */
+ if ( ( maxsleep = atoi(optarg) ) <= 0 ) {
+ fputs( "Invalid sleep time\n", stderr );
+@@ -631,7 +635,9 @@ int main( int argc, char *argv[] ) {
+
+ /* Run as a daemonize when -D is set */
+ if ( daemonize ) {
+- runasdaemon( pidfile );
++ if ( daemonize == 1 ) {
++ runasdaemon( pidfile );
++ }
+ /* Query only mode doesn't exist in daemon mode */
+ if ( !setmode )
+ setmode = 1;
include $(TOPDIR)/rules.mk
PKG_NAME:=inadyn
-PKG_VERSION=2017-02-02
+PKG_VERSION=2.2
PKG_RELEASE:=1
PKG_MAINTAINER:=Daniel Engberg <daniel.engberg.lists@pyret.net>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/troglobit/inadyn
-PKG_SOURCE_SUBDIR=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=3b9ae1c22f96194232cc86ded33af9e0a1602af2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_MIRROR_HASH:=9db6cd8d2b421d8bc61d4ae60c8215a86d73657746a1b06d79f4fbfd79734f6e
+PKG_SOURCE_URL:=https://github.com/troglobit/inadyn/releases/download/v$(PKG_VERSION)
+PKG_HASH:=27aed84a3d04591540b01ef91a5af4b02cbd0e0c20db36a2660453780bd645f6
PKG_FIXUP:=autoreconf
define Package/inadyn/install
$(INSTALL_DIR) $(1)/etc
- $(INSTALL_DATA) $(PKG_BUILD_DIR)/examples/dyndns.conf $(1)/etc/inadyn.conf
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/inadyn $(1)/usr/sbin/
endef
PKG_TINYCBOR_PROTO:=git
PKG_TINYCBOR_VERSION:=0.4
PKG_TINYCBOR_SOURCE_VERSION:=a088996aa5f59b4f27f20fadad053d88bee357d4
+PKG_TINYCBOR_MIRROR_HASH:=77c600bd7362df8291148fa3d94ca780815ea2b74b817dca7565310ea0abff96
PKG_TINYCBOR_SOURCE:=$(PKG_TINYCBOR_NAME)-$(PKG_TINYCBOR_VERSION).tar.bz2
PKG_TINYCBOR_SOURCE_URL:=https://github.com/01org/tinycbor.git
PKG_TINYCBOR_SUBDIR:=$(PKG_TINYCBOR_NAME)
define Download/iotivity-tinycbor
FILE:=$(PKG_TINYCBOR_SOURCE)
URL:=$(PKG_TINYCBOR_SOURCE_URL)
+ MIRROR_HASH:=$(PKG_TINYCBOR_MIRROR_HASH)
PROTO:=$(PKG_TINYCBOR_PROTO)
VERSION:=$(PKG_TINYCBOR_SOURCE_VERSION)
SUBDIR:=$(PKG_TINYCBOR_SUBDIR)
PKG_NAME:=knxd
PKG_VERSION:=0.14.18
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/knxd/knxd.git
endef
define Package/knxd/conffiles
-/etc/config/knxd.ini
+/etc/knxd.ini
+/etc/config/knxd
endef
TARGET_CXXFLAGS+= -std=c++0x
$(INSTALL_BIN) ./files/knxd.init $(1)/etc/init.d/knxd
$(INSTALL_DIR) $(1)/etc/config
- $(INSTALL_DATA) ./files/knxd.ini $(1)/etc/config/knxd.ini
+ $(INSTALL_DATA) ./files/knxd.ini $(1)/etc/knxd.ini
+ $(INSTALL_DATA) ./files/knxd.config $(1)/etc/config/knxd
endef
$(eval $(call BuildPackage,knxd))
--- /dev/null
+config daemon args
+ # driver:[arg] a Layer-2 driver to use (knxd supports more than one)
+ #option layer2 ""
+ # enable caching of group communication networkstate
+ option GroupCache 0
+ # FILE start the programm as daemon. Output will be written to FILE if given
+ option daemon "/var/log/knxd.log"
+ #enable the EIBnet/IP server to answer discovery and description requests (SEARCH, DESCRIPTION)
+ option Discovery 1
+ # EIBADDR set our EIB address to EIBADDR (default 0.0.1)
+ option eibaddr "0.0.2"
+ # LEVEL set error level
+ option error 0
+ # PORT listen at TCP port PORT (default 6720)
+ option listen_tcp "6720"
+ # wait for L_Data_ind while sending (for all EMI based backends)
+ option no_emisend_queuing 0
+ # SERVERNAME name of the EIBnet/IP server (default is 'knxd')
+ option Name "KNX2"
+ # do not assume KNXnet/IP Tunneling bus interface can handle parallel cEMI requests
+ option no_tunnel_client_queuing 0
+ # the next Layer2 interface may not enter monitor mode
+ option no_monitor 0
+ # enable EIBnet/IP Routing in the EIBnet/IP server
+ option Routing 1
+ # [ip[:port]] starts an EIBnet/IP multicast server
+ option Server '224.0.23.12'
+ # MASK set trace flags (bitmask)
+ option trace 0
+ # tpuarts backend should generate L2 acks for all group telegrams
+ option tpuarts_ack_all_group 0
+ # tpuarts backend should generate L2 acks for all individual telegrams
+ option tpuarts_ack_all_individual 0
+ # tpuarts backend should should use a full interface reset (for Disch TPUART interfaces)
+ option tpuarts_disch_reset 0
+ # enable EIBnet/IP Tunneling in the EIBnet/IP server
+ option Tunnelling 1
+ # FILE listen at Unix domain socket FILE (default /tmp/eib)
+ option listen_local "/var/run/knxd"
+ # example with tpuarts interface
+ # option url 'tpuarts:/dev/ttyAMA0'
+ # example with IP interface in tunnel mode
+ option url 'usb:'
local options url
config_load knxd
append_parm args eibaddr "eibaddr" "0.0.1"
- append_parm args client-addrs "client-addrs" "0.0.2:10"
+ append_parm args client_addrs "client-addrs" "0.0.2:10"
append_parm args layer2 "layer2"
append_bool args GroupCache "GroupCache" 0
append_parm args daemon "daemon" "/var/log/knxd.log"
- append_bool args Discovery "Discovery" 1
append_parm args error "error" # "5"
append_parm args listen_tcp "listen-tcp" "6720"
append_parm args Interface "Interface" # "eth0"
- append_parm args send-delay "send-delay" # "50"
+ append_parm args send_delay "send-delay" # "50"
append_parm args Name "Name" "OpenWrt"
append_bool args no_monitor "no-monitor" 0
append_bool args Routing "Routing" 0
append_bool args tpuarts_ack_all_individual "tpuarts-ack-all-individual" 0
append_bool args tpuarts_disch_reset "tpuarts-disch-reset" 0
append_bool args Tunnelling "Tunnelling" 1
- append_bool args Server "Server" 1
+ append_bool args Discovery "Discovery" 1
+ append_parm args Server "Server" "224.0.23.12"
append_parm args listen_local "listen-local" "/var/run/knxd"
config_get url args url
+ if [ "$url" == "usb:" ] ; then
+ url="usb:""$(findknxusb | tail -n1 | sed -e 's/device: \([0-9]:[0-9]:[0-9]\):[0-9].*/\1/')"
+ fi
+ echo "/usr/lib/knxd_args $params $url"
+ /usr/lib/knxd_args $params $url > /tmp/etc/knxd.ini
procd_open_instance
- procd_set_param command $PROG $params $url
+ procd_set_param command $PROG "/tmp/etc/knxd.ini"
procd_set_param respawn
procd_close_instance
}
+++ /dev/null
-#
-# Copyright (C) 2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=l7-protocols
-PKG_VERSION:=2009-05-28
-PKG_RELEASE:=2
-PKG_LICENSE:=GPL-2.0
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=@SF/l7-filter
-PKG_HASH:=d6bf98a69268558543bd32fccea287cb3f14b37521d18c790e2b6f8dcfaa5381
-
-include $(INCLUDE_DIR)/uclibc++.mk
-include $(INCLUDE_DIR)/package.mk
-
-define Package/l7-protocols
- SECTION:=net
- CATEGORY:=Network
- TITLE:=Protocols for layer7 filtering
- URL:=http://l7-filter.sourceforge.net/
- SUBMENU:=Firewall
- MAINTAINER:=Lim Guo Wei <limguowei@gmail.com>
- DEPENDS:=iptables-mod-filter
-endef
-
-define Package/l7-protocols/description
- l7-filter classifies packets based on patterns in application
- layer data. This allows correct classification of P2P traffic that
- uses unpredictable ports as well as standard protocols running on
- non-standard ports.
-endef
-
-define Package/l7-protocols-testing
- $(call Package/l7-protocols)
- TITLE:=testing utilities for layer7
- DEPENDS+=l7-protocols $(CXX_DEPENDS)
-endef
-
-define Package/l7-protocols-testing/description
- testing utilities for layer 7 patterns
-endef
-
-define Build/Configure
-endef
-
-ifneq ($(SDK)$(CONFIG_PACKAGE_l7-protocols-testing),)
- define Build/Compile
- cd $(PKG_BUILD_DIR)/testing && $(MAKE) $(CONFIGURE_VARS)
- endef
-else
- define Build/Compile
- endef
-endif
-
-define Package/l7-protocols/install
- find $(PKG_BUILD_DIR) -name "README" -delete
- $(INSTALL_DIR) $(1)/etc/l7-protocols
- $(CP) $(PKG_BUILD_DIR)/extra \
- $(PKG_BUILD_DIR)/file_types \
- $(PKG_BUILD_DIR)/groups.sh \
- $(PKG_BUILD_DIR)/malware \
- $(PKG_BUILD_DIR)/protocols \
- $(1)/etc/l7-protocols
-endef
-
-define Package/l7-protocols-testing/install
- $(INSTALL_DIR) $(1)/etc/l7-protocols/testing
- $(CP) $(PKG_BUILD_DIR)/testing/data \
- $(1)/etc/l7-protocols/testing
- $(INSTALL_BIN) \
- $(PKG_BUILD_DIR)/testing/rand{chars,printable} \
- $(PKG_BUILD_DIR)/testing/test_speed-{kernel,userspace} \
- $(PKG_BUILD_DIR)/testing/match_kernel \
- $(PKG_BUILD_DIR)/testing/doallspeeds.sh \
- $(PKG_BUILD_DIR)/testing/test_match.sh \
- $(PKG_BUILD_DIR)/testing/timeit.sh \
- $(1)/etc/l7-protocols/testing
-endef
-
-$(eval $(call BuildPackage,l7-protocols))
-$(eval $(call BuildPackage,l7-protocols-testing))
+++ /dev/null
---- a/testing/Makefile
-+++ b/testing/Makefile
-@@ -1,19 +1,19 @@
- all: randchars randprintable test_speed-kernel test_speed-userspace match_kernel
-
- randchars: randchars.c
-- gcc -O2 -o randchars randchars.c
-+ $(CC) $(CFLAGS) -o randchars randchars.c
-
- randprintable: randprintable.c
-- gcc -O2 -o randprintable randprintable.c
-+ $(CC) $(CFLAGS) -o randprintable randprintable.c
-
- test_speed-kernel: test_speed-kernel.c
-- gcc -o test_speed-kernel test_speed-kernel.c
-+ $(CC) $(CFLAGS) -o test_speed-kernel test_speed-kernel.c
-
- test_speed-userspace: test_speed-userspace.cpp l7-parse-patterns.cpp l7-parse-patterns.h
-- g++ -Wall -o test_speed-userspace test_speed-userspace.cpp l7-parse-patterns.cpp
-+ $(CXX) $(CXXFLAGS) -Wall -o test_speed-userspace test_speed-userspace.cpp l7-parse-patterns.cpp
-
- match_kernel: match-kernel.c
-- gcc -O2 -o match_kernel match-kernel.c
-+ $(CC) $(CFLAGS) -o match_kernel match-kernel.c
-
- clean:
- rm -f randprintable randchars test_speed-kernel test_speed-userspace match_kernel
+++ /dev/null
---- a/testing/timeit.sh
-+++ b/testing/timeit.sh
-@@ -1,11 +1,8 @@
- #!/bin/bash
-
--# "man 1 time" for details
--export TIME="%U seconds"
--
- add()
- {
-- if ! dc -e ""; then
-+ if ! dc p >/dev/null 2>&1; then
- echo you do not have dc, so I cannot add these numbers...
- exit 1
- fi
-@@ -14,7 +11,7 @@ add()
- tot=0
-
- while read n; do
-- tot=`dc -e "$n $tot + pop" 2> /dev/null`
-+ tot=`dc $n $tot + p 2> /dev/null`
- done
-
- echo $tot seconds
-@@ -34,7 +31,7 @@ extract()
-
- if [ ! $3 ] || [ $2 == "-h" ] || [ $2 == "--help" ]; then
- echo
-- echo Syntax: ./timeit.sh patternfile kernel\|userspace all\|print\|real [data_files]
-+ echo Syntax: .//usr/bin/timeit.sh patternfile kernel\|userspace all\|print\|real [data_files]
- echo
- echo \"kernel\" uses the kernel pattern and library
- echo \"userspace\" uses userspace pattern and library
-@@ -72,12 +69,12 @@ echo Timing $1
- if [ $3 == "all" ]; then
- echo Using all characters
- if [ $2 == "kernel" ]; then
-- if ! ./randchars | time $speedprog "`extract $1`" verbose; then
-+ if ! ./randchars | /usr/bin/time $speedprog "`extract $1`" verbose 2>&1 >/dev/null | grep user | cut -d\ -f2; then
- echo $speedprog failed. > /dev/stderr
- exit 1
- fi
- else
-- if ! ./randchars | time $speedprog -f "$1" -v; then
-+ if ! ./randchars | /usr/bin/time $speedprog -f "$1" -v 2>&1 >/dev/null | grep user | cut -d\ -f2; then
- echo $speedprog failed. > /dev/stderr
- exit 1
- fi
-@@ -85,12 +82,12 @@ if [ $3 == "all" ]; then
- elif [ $3 == "print" ]; then
- echo Using only printable characters
- if [ $2 == "kernel" ]; then
-- if ! ./randprintable | time $speedprog "`extract $1`" verbose; then
-+ if ! ./randprintable | /usr/bin/time $speedprog "`extract $1`" verbose 2>&1 >/dev/null | grep user | cut -d\ -f2; then
- echo $speedprog failed. > /dev/stderr
- exit 1
- fi
- else
-- if ! ./randprintable | time $speedprog -f "$1" -v; then
-+ if ! ./randprintable | /usr/bin/time $speedprog -f "$1" -v 2>&1 >/dev/null | grep user | cut -d\ -f2; then
- echo $speedprog failed. > /dev/stderr
- exit 1
- fi
-@@ -107,12 +104,12 @@ elif [ $3 == "real" ]; then
- printf $f\\t
- #echo `extract $1`
- if [ $2 == "kernel" ]; then
-- if ! cat $f | time $speedprog "`extract $1`" 2> /dev/stdout | tee -a tmp.$$; then
-+ if ! cat $f | /usr/bin/time $speedprog "`extract $1`" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then
- echo $speedprog failed. > /dev/stderr
- exit 1
- fi
- else
-- if ! cat $f | time $speedprog -f "$1" 2> /dev/stdout | tee -a tmp.$$; then
-+ if ! cat $f | /usr/bin/time $speedprog -f "$1" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then
- echo $speedprog failed. > /dev/stderr
- exit 1
- fi
-@@ -123,12 +120,12 @@ elif [ $3 == "real" ]; then
- for f in data/*; do
- printf $f\\t
- if [ $2 == "kernel" ]; then
-- if ! cat $f | time $speedprog "`extract $1`" 2> /dev/stdout | tee -a tmp.$$; then
-+ if ! cat $f | /usr/bin/time $speedprog "`extract $1`" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then
- echo $speedprog failed. > /dev/stderr
- exit 1
- fi
- else
-- if ! cat $f | time $speedprog -f "$1" 2> /dev/stdout | tee -a tmp.$$; then
-+ if ! cat $f | /usr/bin/time $speedprog -f "$1" 2>&1 >/dev/null | grep user | cut -d\ -f2 | tee -a tmp.$$; then
- echo $speedprog failed. > /dev/stderr
- exit 1
- fi
-@@ -137,7 +134,7 @@ elif [ $3 == "real" ]; then
- fi
-
- printf Total:\
-- cat tmp.$$ | cut -d\ -f 2 | add
-+ cat tmp.$$ | cut -ds -f 1| add
-
- rm tmp.$$
- else
+++ /dev/null
---- a/testing/doallspeeds.sh
-+++ b/testing/doallspeeds.sh
-@@ -25,11 +25,11 @@ for f in ../*/*.pat; do
- printf `basename $f .pat`
-
- if [ $userspace ]; then
-- gtime=`./timeit.sh $f userspace real | grep Total | cut -d\ -f 2`
-+ gtime=`./timeit.sh $f userspace real | grep Total | cut -d\ -f 2 | awk '{print $1}'`
- printf \\t$gtime
- fi
- if [ $kernel ]; then
-- htime=`./timeit.sh $f kernel real | grep Total | cut -d\ -f 2`
-+ htime=`./timeit.sh $f kernel real | grep Total | cut -d\ -f 2 | awk '{print $1}'`
- printf \\t$htime
- fi
- printf \\n
include $(TOPDIR)/rules.mk
PKG_NAME:=lftp
-PKG_VERSION:=4.7.5
-PKG_RELEASE:=1
+PKG_VERSION:=4.8.2
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://lftp.tech/ftp/ \
- ftp://ftp.st.ryukoku.ac.jp/pub/network/ftp/lftp/
-PKG_HASH:=53b5c5eba2e38b418bcf451776f2df596050dff4db90ab4ea73d872f8b1fd0d8
-
+ https://mirror.csclub.uwaterloo.ca/gentoo-distfiles/distfiles/
+
+PKG_HASH:=5c875b8476e05e856ebc8eec458e43317b2bebd6ed5f7725a733d4591548cd9c
PKG_LICENSE:=GPL-3.0+
LFTP is a sophisticated file transfer program with command line interface. It supports FTP, HTTP, FISH, SFTP, HTTPS and FTPS protocols. GNU Readline library is used for input.
Every operation in lftp is reliable, that is any non-fatal error is handled and the operation is retried automatically. So if downloading breaks, it will be restarted from the point automatically. Even if ftp server does not support REST command, lftp will try to retrieve the file from the very beginning until the file is transferred completely. This is useful for dynamic-ip machines which change their IP addresses quite often, and for sites with very bad internet connectivity.
-If you exit lftp when some jobs are not finished yet, lftp will move itself to nohup mode in background. The same happens when you have a real modem hangup or when you close an xterm.
-
lftp has shell-like command syntax allowing you to launch several commands in parallel in background (&). It is also possible to group commands within () and execute them in background. All background jobs are executed in the same single process. You can bring a foreground job to background with ^Z (c-z) and back with command `wait' (or `fg' which is alias to `wait'). To list running jobs, use command `jobs'. Some commands allow redirecting their output (cat, ls, ...) to file or via pipe to external command. Commands can be executed conditionally based on termination status of previous command (&&, ||).
lftp has builtin mirror which can download or update a whole directory tree. There is also reverse mirror (mirror -R) which uploads or updates a directory tree on server.
-
-There is command `at' to launch a job at specified time in current context, command `queue' to queue commands for sequential execution for current server, and much more.
-
-LFTP supports IPv6 for both FTP and HTTP protocols. For FTP protocol it uses method described in RFC2428.
-
-Other low level stuff supported: ftp proxy, http proxy, ftp over http, opie/skey, fxp transfers, socks.
-
-LFTP supports secure versions of the protocols FTP and HTTP: FTPS (explicit and implicit) and HTTPS. LFTP needs to be linked with an SSL library to support them. GNU TLS and OpenSSL are both supported as SSL backend.
endef
CONFIGURE_ARGS += \
--with-zlib="$(STAGING_DIR)/usr" \
--disable-static
-#CONFIGURE_VARS += \
-# LIBS="-lz -lutil -lcurses -ldl" \
-# i_cv_posix_fallocate_works=no
-
-#MAKE_VARS += \
-# LD="$(TARGET_CXX)"
+TARGET_CXXFLAGS+= -std=c++11
define Package/lftp/install
$(INSTALL_DIR) $(1)/usr/bin
include $(TOPDIR)/rules.mk
PKG_NAME:=memcached
-PKG_VERSION:=1.5.1
+PKG_VERSION:=1.5.2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://memcached.org/files
-PKG_HASH:=a87908936b51d1bd3ef10a2347eef5647f003b63407a5d8161fa7928b1cd6b5c
+PKG_HASH:=9ac93113bdb5d037e79c61277386564ac2e5e31d49e594f11e554e4c149b7245
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_NAME:=net-snmp
PKG_VERSION:=5.7.3
-PKG_RELEASE:=7
+PKG_RELEASE:=9
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/net-snmp
define Package/snmp-utils/description
$(call Package/net-snmp/Default/description)
.
- This package contains SNMP client utilities.
+ This package contains SNMP client utilities:
+ - snmpget
+ - snmpset
+ - snmpstatus
+ - snmptest
+ - snmptrap
+ - snmpwalk
endef
endef
+define Package/snmptrapd
+$(call Package/net-snmp/Default)
+ DEPENDS:=+libnetsnmp
+ TITLE:=Open source SNMP implementation (notification receiver)
+endef
+
+define Package/snmptrapd/description
+$(call Package/net-snmp/Default/description)
+ .
+ This package contains the SNMP notification receiver.
+endef
+
SNMP_MIB_MODULES_INCLUDED = \
agent/extend \
--with-transports="$(SNMP_TRANSPORTS_INCLUDED)" \
--without-openssl \
--without-libwrap \
+ --without-mysql \
--without-rpm \
--without-zlib \
--with-nl \
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DATA) ./files/snmpd.conf $(1)/etc/config/snmpd
$(INSTALL_DIR) $(1)/etc/snmp
- ln -sf /var/run/snmpd.conf $(1)/etc/snmp/
+ $(LN) /var/run/snmpd.conf $(1)/etc/snmp/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/snmpd.init $(1)/etc/init.d/snmpd
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/snmpd $(1)/usr/sbin/snmpd
endef
+define Package/snmptrapd/install
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/snmptrapd.init $(1)/etc/init.d/snmptrapd
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnetsnmptrapd.so.* $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/snmptrapd $(1)/usr/sbin/
+endef
+
$(eval $(call BuildPackage,libnetsnmp))
$(eval $(call BuildPackage,snmp-mibs))
$(eval $(call BuildPackage,snmp-utils))
$(eval $(call BuildPackage,snmpd))
$(eval $(call BuildPackage,snmpd-static))
+$(eval $(call BuildPackage,snmptrapd))
config agent
- option agentaddress UDP:161
+ option agentaddress UDP:161,UDP6:161
config agentx
option agentxsocket /var/run/agentx.sock
option source localhost
option community private
+config com2sec6 public6
+ option secname ro
+ option source default
+ option community public
+
+config com2sec6 private6
+ option secname rw
+ option source localhost
+ option community private
+
config group public_v1
option group public
option version v1
--- /dev/null
+#!/bin/sh /etc/rc.common
+
+START=50
+
+USE_PROCD=1
+PROG="/usr/sbin/snmptrapd"
+
+start_service() {
+ procd_open_instance
+
+ procd_set_param command $PROG -Lf /dev/null -f
+ procd_set_param respawn
+
+ procd_close_instance
+}
+++ /dev/null
-if PACKAGE_netopeer2-server
-
-config SSH_SERVER
- bool "Install the default ssh server (openssh-server)"
- default y
-
-endif
PKG_LICENSE:=BSD-3-Clause
PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
-PKG_VERSION:=0.3.65
+PKG_VERSION:=0.4.0
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=c204b59f9c2bb7e63eb907f33c44adbf208295ee
-PKG_MIRROR_HASH:=61a2b3e0ee9a3cf2f73715843f059c79292446ad3643f4eeb85d48d1e185c3b9
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.bz2
+PKG_SOURCE_VERSION:=d028c1f931819db4b3e3cb1fd2d349a4fd5c0459
+PKG_MIRROR_HASH:=7f5b3ad49aaf2a8ceea2c17a37e276f5694af570ef904cfc5a6f53d295809cef
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/CESNET/Netopeer2.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
PKG_BUILD_ROOT:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
PKG_BUILD_DIR:=$(PKG_BUILD_ROOT)
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk
-define Package/netopeer2-server/config
- source "$(SOURCE)/Config_server.in"
-endef
-
define Package/netopeer2-keystored/config
source "$(SOURCE)/Config_keystored.in"
endef
CATEGORY:=Utilities
TITLE:=NETCONF server
URL:=$(PKG_SOURCE_URL)
- DEPENDS:=+libpthread +libyang +libnetconf2 +netopeer2-keystored +libsysrepo +sysrepocfg +sysrepoctl +sysrepo +SSH_SERVER:openssh-server
+ DEPENDS:=+libpthread +libyang +libnetconf2 +netopeer2-keystored +libsysrepo +sysrepocfg +sysrepoctl +sysrepo
MENU:=1
endef
sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-netconf-server.yang -o root:root -p 600
sysrepoctl -m ietf-netconf-server -e listen
sysrepoctl -m ietf-netconf-server -e ssh-listen
- sysrepoctl -m ietf-netconf-server -e tls-listen
- sysrepoctl -m ietf-netconf-server -e call-home
- sysrepoctl -m ietf-netconf-server -e ssh-call-home
- sysrepoctl -m ietf-netconf-server -e tls-call-home
if [ -x /bin/sysrepocfg ]; then
sysrepocfg -d startup -i /usr/share/netopeer2-server/stock_config.xml ietf-netconf-server
rm /usr/share/netopeer2-server/stock_config.xml
--- /dev/null
+Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/server/ietf_netconf_server.c
+===================================================================
+--- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/server/ietf_netconf_server.c
++++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/server/ietf_netconf_server.c
+@@ -1161,8 +1161,8 @@ feature_change_ietf_netconf_server(const
+ {
+ int rc, rc2 = 0;
+ const char *path = NULL;
+- sr_val_iter_t *sr_iter;
+- sr_val_t *sr_val;
++ sr_val_t *values;
++ size_t value_cnt;
+
+ assert(feature_name);
+
+@@ -1180,26 +1180,26 @@ feature_change_ietf_netconf_server(const
+ return EXIT_SUCCESS;
+ }
+
+- rc = sr_get_items_iter(np2srv.sr_sess.srs, path, &sr_iter);
++ rc =sr_get_items(np2srv.sr_sess.srs, path, &values, &value_cnt);
+ if (rc != SR_ERR_OK) {
+ ERR("Failed to get \"%s\" values iterator from sysrepo (%s).", sr_strerror(rc));
+ return EXIT_FAILURE;
+ }
+
+- while ((rc = sr_get_item_next(np2srv.sr_sess.srs, sr_iter, &sr_val)) == SR_ERR_OK) {
+- if (sr_val->type == SR_LIST_T) {
++ size_t i;
++ for(i = 0; i < value_cnt; i++) {
++ if (values[i].type == SR_LIST_T) {
+ /* no semantic meaning */
+ continue;
+ }
+
+- rc2 = module_change_resolve(np2srv.sr_sess.srs, SR_OP_CREATED, NULL, sr_val, NULL, NULL);
+- sr_free_val(sr_val);
++ rc2 = module_change_resolve(np2srv.sr_sess.srs, SR_OP_CREATED, NULL, &values[i], NULL, NULL);
+ if (rc2) {
+ ERR("Failed to enable nodes depending on the \"%s\" ietf-netconf-server feature.", feature_name);
+ break;
+ }
+ }
+- sr_free_val_iter(sr_iter);
++ sr_free_values(values, value_cnt);
+ if (rc2) {
+ return EXIT_FAILURE;
+ } else if ((rc != SR_ERR_OK) && (rc != SR_ERR_NOT_FOUND)) {
--- /dev/null
+Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/CMakeLists.txt
+===================================================================
+--- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/CMakeLists.txt
++++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/CMakeLists.txt
+@@ -67,6 +67,9 @@ if(NOT MAN_INSTALL_DIR)
+ set(MAN_INSTALL_DIR share/man)
+ endif()
+
++include(CheckFunctionExists)
++check_function_exists(eaccess HAVE_EACCESS)
++
+ # install binary
+ install(TARGETS netopeer2-cli DESTINATION ${BIN_INSTALL_DIR})
+
+Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/commands.c
+===================================================================
+--- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/commands.c
++++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/commands.c
+@@ -37,6 +37,10 @@
+ # include <openssl/x509v3.h>
+ #endif
+
++#ifndef HAVE_EACCESS
++#define eaccess access
++#endif
++
+ #include "commands.h"
+ #include "configuration.h"
+ #include "completion.h"
+Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/completion.c
+===================================================================
+--- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/completion.c
++++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/completion.c
+@@ -27,6 +27,10 @@
+
+ #include <nc_client.h>
+
++#ifndef HAVE_EACCESS
++#define eaccess access
++#endif
++
+ #include "commands.h"
+ #include "linenoise/linenoise.h"
+
+Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/configuration.c
+===================================================================
+--- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/configuration.c
++++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/configuration.c
+@@ -28,6 +28,10 @@
+ #include <libyang/libyang.h>
+ #include <nc_client.h>
+
++#ifndef HAVE_EACCESS
++#define eaccess access
++#endif
++
+ #include "configuration.h"
+ #include "commands.h"
+ #include "linenoise/linenoise.h"
--- /dev/null
+Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/CMakeLists.txt
+===================================================================
+--- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/CMakeLists.txt
++++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/CMakeLists.txt
+@@ -69,6 +69,10 @@ endif()
+
+ include(CheckFunctionExists)
+ check_function_exists(eaccess HAVE_EACCESS)
++check_function_exists(mkstemps HAVE_MKSTEMPS)
++if(HAVE_MKSTEMPS)
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_MKSTEMPS")
++endif(HAVE_MKSTEMPS)
+
+ # install binary
+ install(TARGETS netopeer2-cli DESTINATION ${BIN_INSTALL_DIR})
+Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/completion.c
+===================================================================
+--- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/completion.c
++++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/completion.c
+@@ -120,6 +120,7 @@ readinput(const char *instruction, const
+ char* tmpname = NULL, *input = NULL, *old_content = NULL, *ptr, *ptr2;
+
+ /* Create a unique temporary file */
++#ifdef HAVE_MKSTEMPS
+ if (asprintf(&tmpname, "/tmp/tmpXXXXXX.xml") == -1) {
+ ERROR(__func__, "asprintf() failed (%s).", strerror(errno));
+ goto fail;
+@@ -129,6 +130,23 @@ readinput(const char *instruction, const
+ ERROR(__func__, "Failed to create a temporary file (%s).", strerror(errno));
+ goto fail;
+ }
++#else
++ if (asprintf(&tmpname, "/tmp/tmpXXXXXX") == -1) {
++ ERROR(__func__, "asprintf() failed (%s).", strerror(errno));
++ goto fail;
++ }
++ /* cannot fail */
++ mktemp(tmpname);
++ if (asprintf(&tmpname, ".xml") == -1) {
++ ERROR(__func__, "asprintf() failed (%s).", strerror(errno));
++ goto fail;
++ }
++ tmpfd = open(tmpname, O_RDWR | O_CREAT | O_EXCL, 0600);
++ if (tmpfd == -1) {
++ ERROR(__func__, "Failed to create a temporary file (%s).", strerror(errno));
++ goto fail;
++ }
++#endif /* #ifdef HAVE_MKSTEMPS */
+
+ /* Read the old content, if any */
+ if (old_tmp != NULL) {
PKG_NAME:=noddos
PKG_RELEASE:=1
PKG_LICENSE:=GPLv3
+PKG_MAINTAINER:=Steven Hessing <steven.hessing@gmail.com>
-PKG_SOURCE_VERSION:=0.4.1
+PKG_SOURCE_VERSION:=0.5.2
PKG_SOURCE_URL:=https://github.com/noddos/noddos/releases/download/v$(PKG_SOURCE_VERSION)/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.xz
-PKG_HASH:=f676b1c7d9aa6496184b73eacbbfe27b4f54e53c726769ef9ceeeda9c31a7fa3
-
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION)
+PKG_HASH:=63fe85fc4a588da2d71b7b7db68f1c80ba19520467a3800bdb43bc516a6cff72
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION)
CATEGORY:=Network
TITLE:=noddos -- device-aware cloud-powered firewall
URL:=https://www.noddos.io/
- DEPENDS:=+libstdcpp +libnetfilter-conntrack +libcurl +libopenssl +openssl-util +ca-bundle +ca-certificates +wget +bzip2 +libtins +ipset
+ DEPENDS:=+libstdcpp +libnetfilter-conntrack +libcurl +libopenssl +openssl-util +ca-bundle +ca-certificates +wget +bzip2 +libtins +ipset +libpthread
endef
define Package/noddos/description
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/etc/noddos
- $(INSTALL_DIR) $(1)/var/lib/noddos
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/noddos $(1)/usr/sbin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/getnoddosdeviceprofiles $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/makenoddoscert.sh $(1)/usr/bin
include $(TOPDIR)/rules.mk
PKG_NAME:=openssh
-PKG_VERSION:=7.5p1
-PKG_RELEASE:=4
+PKG_VERSION:=7.6p1
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ \
https://ftp.spline.de/pub/OpenBSD/OpenSSH/portable/ \
https://anorien.csc.warwick.ac.uk/pub/OpenBSD/OpenSSH/portable/
-PKG_HASH:=9846e3c5fab9f0547400b4d2c017992f914222b3fd1f8eee6c7dc6bc5e59f9f0
+PKG_HASH:=a323caeeddfe145baaa0db16e98d784b1fbc7dd436a6bf1f479dfd5cd1d21723
PKG_LICENSE:=BSD ISC
PKG_LICENSE_FILES:=LICENCE
PKG_NAME:=rp-pppoe
PKG_VERSION:=3.12
-PKG_RELEASE:=1
+PKG_RELEASE:=3
PKG_MAINTAINER:=Daniel Dickinson <lede@cshore.thecshore.com>
PKG_LICENSE:=LGPL-2.0+
config_get server_interfaces "$cfg" server_interface
config_get client_interfaces "$cfg" client_interface
config_get both_interfaces "$cfg" both_interfaces
- config_get maxsessions "$cfg" maxsesssions
+ config_get maxsessions "$cfg" maxsessions
config_get timeout "$cfg" timeout
config_get_bool use_non_uci_config "$cfg" use_non_uci_config 0
for interface in $both_interfaces; do
append OPTIONS "-B $interface"
done
- [ -n "$maxsesssions" ] && append OPTIONS "-n $maxsesssions"
+ [ -n "$maxsessions" ] && append OPTIONS "-n $maxsessions"
[ -n "$timeout" ] && append OPTIONS "-i $timeout"
fi
config_get interface "$cfg" interface
config_get ac_name "$cfg" ac_name
config_get service_names "$cfg" service_name
- config_get maxsessionsperpeer "$cfg" maxsesssionsperpeer
+ config_get maxsessionsperpeer "$cfg" maxsessionsperpeer
config_get localip "$cfg" localip
config_get firstremoteip "$cfg" firstremoteip
config_get maxsessions "$cfg" maxsessions
append OPTIONS "-S $service_name"
done
append OPTIONS "-I $interface"
- [ -n "$maxsesssionsperpeer" ] && append OPTIONS "-x $maxsesssionsperpeer"
+ [ -n "$maxsessionsperpeer" ] && append OPTIONS "-x $maxsessionsperpeer"
[ -n "$localip" ] && append OPTIONS "-L $localip"
[ -n "$firstremoteip" ] && append OPTIONS "-R $firstremoteip"
[ -n "maxsessions" ] && append OPTIONS "-N $maxsessions"
# - check if default mode has changed from being tcp_only
#
PKG_NAME:=shadowsocks-libev
-PKG_VERSION:=3.0.8
-PKG_RELEASE:=15
+PKG_VERSION:=3.1.0
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-libev/releases/download/v$(PKG_VERSION)
-PKG_HASH:=3bdf7f8f89050aee896496fd86b6b7ef694754f0b8cd97c4b5a04d1d3e5c2e5b
+PKG_HASH:=3b6493ebdcfff1eb31faf34d164d57049f7253ff5bffafa6ce2263c9ac123f31
PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
SUBMENU:=Web Servers/Proxies
TITLE:=shadowsocks-libev $(1)
URL:=https://github.com/shadowsocks/shadowsocks-libev
- DEPENDS:=+libev +libmbedtls +libpcre +libpthread +libsodium +libudns +shadowsocks-libev-config +zlib
+ DEPENDS:=+libcares +libev +libmbedtls +libpcre +libpthread +libsodium +shadowsocks-libev-config +zlib
endef
define Package/shadowsocks-libev-$(1)/install
}
ss_rules_iptchains_init_tcp() {
- local ipt="iptables -t nat"
local local_target
[ -n "$o_redir_tcp_port" ] || return 0
+++ /dev/null
-From a91d70dd37e9555d104629538890d44ef355c772 Mon Sep 17 00:00:00 2001
-From: Yousong Zhou <yszhou4tech@gmail.com>
-Date: Mon, 26 Jun 2017 14:49:36 +0800
-Subject: [PATCH 1/2] decouple use_syslog from pid_flags
-
-Sometimes we need processes to run in the foreground to be supervised
-and at the same time use syslog facility instead of logging its stdout,
-stderr output
----
- src/jconf.c | 6 ++++++
- src/local.c | 2 +-
- src/manager.c | 2 +-
- src/redir.c | 2 +-
- src/server.c | 2 +-
- src/tunnel.c | 2 +-
- src/utils.h | 18 +++++++++++-------
- 7 files changed, 22 insertions(+), 12 deletions(-)
-
-diff --git a/src/jconf.c b/src/jconf.c
-index 3c58148..05445c3 100644
---- a/src/jconf.c
-+++ b/src/jconf.c
-@@ -313,6 +313,12 @@ read_jconf(const char *file)
- check_json_value_type(value, json_boolean,
- "invalid config file: option 'ipv6_first' must be a boolean");
- conf.ipv6_first = value->u.boolean;
-+#ifdef HAS_SYSLOG
-+ } else if (strcmp(name, "use_syslog") == 0) {
-+ check_json_value_type(value, json_boolean,
-+ "invalid config file: option 'use_syslog' must be a boolean");
-+ use_syslog = value->u.boolean;
-+#endif
- }
- }
- } else {
-diff --git a/src/local.c b/src/local.c
-index 78f6d29..e4bd477 100644
---- a/src/local.c
-+++ b/src/local.c
-@@ -1522,8 +1522,8 @@ main(int argc, char **argv)
- local_addr = "127.0.0.1";
- }
-
-+ USE_SYSLOG(argv[0], pid_flags);
- if (pid_flags) {
-- USE_SYSLOG(argv[0]);
- daemonize(pid_path);
- }
-
-diff --git a/src/manager.c b/src/manager.c
-index 6e7197c..338ab85 100644
---- a/src/manager.c
-+++ b/src/manager.c
-@@ -1149,8 +1149,8 @@ main(int argc, char **argv)
- timeout = "60";
- }
-
-+ USE_SYSLOG(argv[0], pid_flags);
- if (pid_flags) {
-- USE_SYSLOG(argv[0]);
- daemonize(pid_path);
- }
-
-diff --git a/src/redir.c b/src/redir.c
-index 3809411..fae8d54 100644
---- a/src/redir.c
-+++ b/src/redir.c
-@@ -1140,8 +1140,8 @@ main(int argc, char **argv)
- #endif
- }
-
-+ USE_SYSLOG(argv[0], pid_flags);
- if (pid_flags) {
-- USE_SYSLOG(argv[0]);
- daemonize(pid_path);
- }
-
-diff --git a/src/server.c b/src/server.c
-index 534dbd8..1c25c74 100644
---- a/src/server.c
-+++ b/src/server.c
-@@ -1726,8 +1726,8 @@ main(int argc, char **argv)
- }
- #endif
-
-+ USE_SYSLOG(argv[0], pid_flags);
- if (pid_flags) {
-- USE_SYSLOG(argv[0]);
- daemonize(pid_path);
- }
-
-diff --git a/src/tunnel.c b/src/tunnel.c
-index 77c7380..2419fa0 100644
---- a/src/tunnel.c
-+++ b/src/tunnel.c
-@@ -1022,8 +1022,8 @@ main(int argc, char **argv)
- local_addr = "127.0.0.1";
- }
-
-+ USE_SYSLOG(argv[0], pid_flags);
- if (pid_flags) {
-- USE_SYSLOG(argv[0]);
- daemonize(pid_path);
- }
-
-diff --git a/src/utils.h b/src/utils.h
-index 2603e85..53f3983 100644
---- a/src/utils.h
-+++ b/src/utils.h
-@@ -35,7 +35,7 @@
-
- #include <android/log.h>
- #define USE_TTY()
--#define USE_SYSLOG(ident)
-+#define USE_SYSLOG(ident, _cond)
- #define LOGI(...) \
- ((void)__android_log_print(ANDROID_LOG_DEBUG, "shadowsocks", \
- __VA_ARGS__))
-@@ -53,7 +53,7 @@
- extern FILE *logfile;
- #define TIME_FORMAT "%Y-%m-%d %H:%M:%S"
- #define USE_TTY()
--#define USE_SYSLOG(ident)
-+#define USE_SYSLOG(ident, _cond)
- #define USE_LOGFILE(ident) \
- do { \
- if (ident != NULL) { logfile = fopen(ident, "w+"); } } \
-@@ -99,11 +99,15 @@ extern int use_syslog;
- use_tty = isatty(STDERR_FILENO); \
- } while (0)
-
--#define USE_SYSLOG(ident) \
-- do { \
-- use_syslog = 1; \
-- openlog((ident), LOG_CONS | LOG_PID, 0); } \
-- while (0)
-+#define USE_SYSLOG(_ident, _cond) \
-+ do { \
-+ if (!use_syslog && (_cond)) { \
-+ use_syslog = 1; \
-+ } \
-+ if (use_syslog) { \
-+ openlog((_ident), LOG_CONS | LOG_PID, 0); \
-+ } \
-+ } while (0)
-
- #define LOGI(format, ...) \
- do { \
---
-2.12.2
-
+++ /dev/null
-From afe796ce6e7a4164459009c58d7e60862edb0be3 Mon Sep 17 00:00:00 2001
-From: Yousong Zhou <yszhou4tech@gmail.com>
-Date: Tue, 1 Aug 2017 15:21:38 +0800
-Subject: [PATCH 2/2] syslog with daemon facility instead of kern (0)
-
----
- src/utils.h | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
-diff --git a/src/utils.h b/src/utils.h
-index 53f3983..3b624e8 100644
---- a/src/utils.h
-+++ b/src/utils.h
-@@ -99,14 +99,14 @@ extern int use_syslog;
- use_tty = isatty(STDERR_FILENO); \
- } while (0)
-
--#define USE_SYSLOG(_ident, _cond) \
-- do { \
-- if (!use_syslog && (_cond)) { \
-- use_syslog = 1; \
-- } \
-- if (use_syslog) { \
-- openlog((_ident), LOG_CONS | LOG_PID, 0); \
-- } \
-+#define USE_SYSLOG(_ident, _cond) \
-+ do { \
-+ if (!use_syslog && (_cond)) { \
-+ use_syslog = 1; \
-+ } \
-+ if (use_syslog) { \
-+ openlog((_ident), LOG_CONS | LOG_PID, LOG_DAEMON); \
-+ } \
- } while (0)
-
- #define LOGI(format, ...) \
---
-2.12.2
-
PKG_SOURCE_URL:=http://www.shorewall.net/pub/shorewall/$(PKG_DIRECTORY)/shorewall-$(PKG_MAINVERSION)/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=118378698e0fa1216b52ace92fe9eae0f7d32c39becbc50837a895d7367674b2c973b1633c8919045d9d16dd2a5fdbedb9d62ff1513547ee4770a2e9116d8b1e
+PKG_HASH:=3d1446f7e437104c8f8c7257ccdbddfc0dc7df3ea68b80274c11dd94cc1c8629
PKG_MAINTAINER:=Willem van den Akker <wvdakker@wilsoft.nl>
PKG_LICENSE:=GPL-2.0+
PKG_SOURCE_URL:=http://www.shorewall.net/pub/shorewall/$(PKG_DIRECTORY)/shorewall-$(PKG_MAINVERSION)/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=c06e365d06c484e7ef673e5a8597d70996f1008a00163aae2d7a53d0d720739a8b0317a093b3e75487ef1c8a02ac4c4c542480757226a974671f82ab08353896
+PKG_HASH:=e90d419ed8a6da615c3a0d6fdcb9481f8e71f89c2bdcff09ab027198ca2ce293
PKG_MAINTAINER:=Willem van den Akker <wvdakker@wilsoft.nl>
PKG_LICENSE:=GPL-2.0+
PKG_SOURCE_URL:=http://www.shorewall.net/pub/shorewall/$(PKG_DIRECTORY)/shorewall-$(PKG_MAINVERSION)/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=b616c5886b5bc274e88052359ca4c8aa6df60a9706958698eac7fc362f1c893de00ed2272535d61a88cb6a786bae9b7cba64a835833a9f81c991fb2ffed8244b
+PKG_HASH:=29a2f2be295b4f995b38e663b771660ccdc6321134bcfbd0f9378f9bb1237e3c
PKG_MAINTAINER:=Willem van den Akker <wvdakker@wilsoft.nl>
PKG_LICENSE:=GPL-2.0+
include $(TOPDIR)/rules.mk
PKG_NAME:=sngrep
-PKG_VERSION=1.4.2
+PKG_VERSION=1.4.4-rc2
PKG_RELEASE:=1
PKG_MAINTAINER:=Daniel Engberg <daniel.engberg.lists@pyret.net>
PKG_LICENSE:=GPL-3.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/irontec/sngrep
PKG_SOURCE_SUBDIR=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=da791185cabeea5a6fcc7372157340b2d1369df7
+PKG_SOURCE_VERSION:=cf5e1da49d00bc7ab1afe9d63daa240db2b9b19c
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_MIRROR_HASH:=2cc640e065f33cae4a3a8e14bdc740e49269cd850eee2ffa9eb821427caaa371
+PKG_MIRROR_HASH:=a6cee2caa108a618134fe87d7c04862e93aa2fdf9647d81dfe4abe91a6c9c19f
PKG_FIXUP:=autoreconf
PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
PKG_NAME:=sysrepo
-PKG_VERSION:=0.6.0
+PKG_VERSION:=0.7.0
PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=e4a5705a4c5293ba121048c71899b98243d99edf
-PKG_MIRROR_HASH:=aa0fb5d7c947dd428d9f573c84edf6237c8c1a4db92dcd4d7552a68d25277a39
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.bz2
+PKG_SOURCE_VERSION:=7aa2f18d234267403147df92c0005c871f0aa840
+PKG_MIRROR_HASH:=31125596ae1c4dbf8dd48c639bf78043060ab1b89678c860eb2b10606fe4b686
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/sysrepo/sysrepo.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
+PKG_BUILD_ROOT:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
+PKG_BUILD_DIR:=$(PKG_BUILD_ROOT)
CMAKE_INSTALL:=1
CATEGORY:=Utilities
URL:=$(PKG_SOURCE_URL)
TITLE:=YANG-based data store library
- DEPENDS:=+libyang +libprotobuf-c +libev +libavl
+ DEPENDS:=+libyang +libprotobuf-c +libev +libredblack +librt
endef
define Package/sysrepo
CMAKE_OPTIONS += \
-DCMAKE_BUILD_TYPE:STRING=Release \
+ -DUSE_AVL_LIB:BOOL=FALSE \
-DENABLE_TESTS:BOOL=FALSE \
-DBUILD_EXAMPLES:BOOL=FALSE \
-DCMAKE_DISABLE_FIND_PACKAGE_SWIG=TRUE \
-Index: sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/src/CMakeLists.txt
+Index: sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/CMakeLists.txt
===================================================================
---- sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf.orig/src/CMakeLists.txt
-+++ sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/src/CMakeLists.txt
+--- sysrepo-7aa2f18d234267403147df92c0005c871f0aa840.orig/src/CMakeLists.txt
++++ sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/CMakeLists.txt
@@ -21,14 +21,6 @@ set(GENERATED_PROTO_H "${COMMON_BIN_DIR}
set(GENERATED_PROTO_C "${COMMON_BIN_DIR}/${PROTO_NAME}.pb-c.c")
configure_file("${COMMON_DIR}/sr_constants.h.in" "${COMMON_BIN_DIR}/sr_constants.h" ESCAPE_QUOTES @ONLY)
-Index: sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/src/common/sysrepo.pb-c.c
+Index: sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/common/sysrepo.pb-c.c
===================================================================
--- /dev/null
-+++ sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/src/common/sysrepo.pb-c.c
-@@ -0,0 +1,10517 @@
++++ sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/common/sysrepo.pb-c.c
+@@ -0,0 +1,10537 @@
+/* Generated by the protocol buffer compiler. DO NOT EDIT! */
+/* Generated from: sysrepo.proto */
+
+ (ProtobufCMessageInit) sr__copy_config_req__init,
+ NULL,NULL,NULL /* reserved[123] */
+};
-+#define sr__copy_config_resp__field_descriptors NULL
-+#define sr__copy_config_resp__field_indices_by_name NULL
-+#define sr__copy_config_resp__number_ranges NULL
++static const ProtobufCFieldDescriptor sr__copy_config_resp__field_descriptors[1] =
++{
++ {
++ "errors",
++ 1,
++ PROTOBUF_C_LABEL_REPEATED,
++ PROTOBUF_C_TYPE_MESSAGE,
++ offsetof(Sr__CopyConfigResp, n_errors),
++ offsetof(Sr__CopyConfigResp, errors),
++ &sr__error__descriptor,
++ NULL,
++ 0, /* flags */
++ 0,NULL,NULL /* reserved1,reserved2, etc */
++ },
++};
++static const unsigned sr__copy_config_resp__field_indices_by_name[] = {
++ 0, /* field[0] = errors */
++};
++static const ProtobufCIntRange sr__copy_config_resp__number_ranges[1 + 1] =
++{
++ { 1, 0 },
++ { 0, 1 }
++};
+const ProtobufCMessageDescriptor sr__copy_config_resp__descriptor =
+{
+ PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
+ "Sr__CopyConfigResp",
+ "sr",
+ sizeof(Sr__CopyConfigResp),
-+ 0,
++ 1,
+ sr__copy_config_resp__field_descriptors,
+ sr__copy_config_resp__field_indices_by_name,
-+ 0, sr__copy_config_resp__number_ranges,
++ 1, sr__copy_config_resp__number_ranges,
+ (ProtobufCMessageInit) sr__copy_config_resp__init,
+ NULL,NULL,NULL /* reserved[123] */
+};
+ sr__operation__value_ranges,
+ NULL,NULL,NULL,NULL /* reserved[1234] */
+};
-Index: sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/src/common/sysrepo.pb-c.h
+Index: sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/common/sysrepo.pb-c.h
===================================================================
--- /dev/null
-+++ sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/src/common/sysrepo.pb-c.h
-@@ -0,0 +1,4236 @@
++++ sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/common/sysrepo.pb-c.h
+@@ -0,0 +1,4238 @@
+/* Generated by the protocol buffer compiler. DO NOT EDIT! */
+/* Generated from: sysrepo.proto */
+
+
+#if PROTOBUF_C_VERSION_NUMBER < 1000000
+# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers.
-+#elif 1001001 < PROTOBUF_C_MIN_COMPILER_VERSION
++#elif 1002001 < PROTOBUF_C_MIN_COMPILER_VERSION
+# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c.
+#endif
+
+struct _Sr__CopyConfigResp
+{
+ ProtobufCMessage base;
++ size_t n_errors;
++ Sr__Error **errors;
+};
+#define SR__COPY_CONFIG_RESP__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&sr__copy_config_resp__descriptor) \
-+ }
++ , 0,NULL }
+
+
+/*
--- /dev/null
+Index: sysrepo-0.7.0-7aa2f18d234267403147df92c0005c871f0aa840/src/common/sr_utils.c
+===================================================================
+--- sysrepo-0.7.0-7aa2f18d234267403147df92c0005c871f0aa840.orig/src/common/sr_utils.c
++++ sysrepo-0.7.0-7aa2f18d234267403147df92c0005c871f0aa840/src/common/sr_utils.c
+@@ -460,14 +460,24 @@ sr_fd_set_nonblock(int fd)
+
+ #if defined(SO_PEERCRED)
+
++#if defined(__GLIBC__)
+ #if !defined(SCM_CREDENTIALS)
+-/* struct ucred is ifdefined behind __USE_GNU, but __USE_GNU is not defined */
+ struct ucred {
+ pid_t pid; /* process ID of the sending process */
+ uid_t uid; /* user ID of the sending process */
+ gid_t gid; /* group ID of the sending process */
+ };
+ #endif /* !defined(SCM_CREDENTIALS) */
++#else
++#if !defined(__USE_GNU)
++struct ucred {
++ pid_t pid; /* process ID of the sending process */
++ uid_t uid; /* user ID of the sending process */
++ gid_t gid; /* group ID of the sending process */
++};
++/* struct ucred is ifdefined behind __USE_GNU, but __USE_GNU is not defined */
++#endif /* !defined(__USE_GNU) */
++#endif /* defined(__GLIBC__) */
+
+ int
+ sr_get_peer_eid(int fd, uid_t *uid, gid_t *gid)
include $(TOPDIR)/rules.mk
PKG_NAME:=tor
-PKG_VERSION:=0.2.9.11
+PKG_VERSION:=0.2.9.12
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://dist.torproject.org/ \
https://archive.torproject.org/tor-package-archive
-PKG_HASH:=c1959bebff9a546a54cbedb58c8289a42441991af417d2d16f7b336be8903221
+PKG_HASH:=6e7466625d53812f23c2ad60a873c5855f63f756fde0fc5cbeda8d32cee1086b
PKG_MAINTAINER:=Hauke Mehrtens <hauke@hauke-m.de>
PKG_LICENSE_FILES:=LICENSE
include $(TOPDIR)/rules.mk
PKG_NAME:=unbound
-PKG_VERSION:=1.6.5
+PKG_VERSION:=1.6.7
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.unbound.net/downloads
-PKG_HASH:=e297aa1229015f25bf24e4923cb1dadf1f29b84f82a353205006421f82cc104e
+PKG_HASH:=4e7bd43d827004c6d51bef73adf941798e4588bdb40de5e79d89034d69751c9f
PKG_BUILD_DEPENDS:=libexpat
PKG_BUILD_PARALLEL:=1
Bytes. Extended DNS is necessary for DNSSEC. However, it can run
into MTU issues. Use this size in bytes to manage drop outs.
+ option extended_luci '0'
+ Boolean. Extends a tab hierarchy in LuCI for advanced congfiguration.
+
+ option extended_stats '0'
+ Boolean. extended statistics are printed from unbound-control.
+ Keeping track of more statistics takes time.
+
option hide_binddata '1'
Boolean. If enabled version.server, version.bind, id.server, and
hostname.bind queries are refused.
Typical to configure maybe 0~300, but 1800 is the maximum accepted.
option unbound_control '0'
- Boolean. Enables unbound-control application access ports. Enabling
- this without the unbound-control package installed is robust.
+ Level. Enables unbound-control application access ports.
+ 0 - No unbound-control Access, or add your own in 'unbound_ext.conf'
+ 1 - Unencrypted Local Host Access
+ 2 - SSL Local Host Access; auto unbound-control-setup if available
+ 3 - SSL Network Access; auto unbound-control-setup if available
+ 4 - SSL Network Access; static key/pem files must already exist
option validator '0'
Boolean. Enable DNSSEC. Unbound names this the "validator" module.
if ( bconf == 1 ) {
x = ( "local-data: \"" fqdn ". 120 IN A " adr "\"" ) ;
y = ( "local-data-ptr: \"" adr " 120 " fqdn "\"" ) ;
- print ( x "\n" y ) > hostfile ;
+ print ( x "\n" y "\n" ) > hostfile ;
}
else {
# GA or ULA routed addresses only (not LL or MC)
sub( /\/.*/, "", adr ) ;
adr = ( adr slaac ) ;
-
-
- if ( split( adr, tmp0, ":" ) >= 8 ) {
- sub( "::", ":", adr ) ;
+
+
+ if ( split( adr, tmp0, ":" ) >= 8 ) {
+ sub( "::", ":", adr ) ;
}
if ( bconf == 1 ) {
x = ( "local-data: \"" fqdn ". 120 IN AAAA " adr "\"" ) ;
y = ( "local-data-ptr: \"" adr " 120 " fqdn "\"" ) ;
- print ( x "\n" y ) > hostfile ;
+ print ( x "\n" y "\n" ) > hostfile ;
}
else {
if ( bconf == 1 ) {
x = ( "local-data: \"" fqdn ". 120 IN AAAA " adr "\"" ) ;
y = ( "local-data-ptr: \"" adr " 120 " fqdn "\"" ) ;
- print ( x "\n" y ) > hostfile ;
+ print ( x "\n" y "\n" ) > hostfile ;
}
else {
print ( x "\n" y ) > hostfile ;
}
}
-
+
if (( cdr2 == 128 ) && ( hst != "-" )) {
if ( bconf == 1 ) {
x = ( "local-data: \"" fqdn ". 120 IN AAAA " adr2 "\"" ) ;
y = ( "local-data-ptr: \"" adr2 " 120 " fqdn "\"" ) ;
- print ( x "\n" y ) > hostfile ;
+ print ( x "\n" y "\n" ) > hostfile ;
}
else {
#
##############################################################################
-UNBOUND_B_CONTROL=0
UNBOUND_B_SLAAC6_MAC=0
UNBOUND_B_DNSSEC=0
UNBOUND_B_DNS64=0
+UNBOUND_B_EXT_STATS=0
UNBOUND_B_GATE_NAME=0
UNBOUND_B_HIDE_BIND=1
UNBOUND_B_LOCL_BLCK=0
UNBOUND_B_QUERY_MIN=0
UNBOUND_B_QRY_MINST=0
+UNBOUND_D_CONTROL=0
UNBOUND_D_DOMAIN_TYPE=static
UNBOUND_D_DHCP_LINK=none
UNBOUND_D_EXTRA_DNS=0
UNBOUND_HINTFILE=$UNBOUND_VARDIR/root.hints
UNBOUND_TIMEFILE=$UNBOUND_VARDIR/hotplug.time
+UNBOUND_CTLKEY_FILE=$UNBOUND_VARDIR/unbound_control.key
+UNBOUND_CTLPEM_FILE=$UNBOUND_VARDIR/unbound_control.pem
+UNBOUND_SRVKEY_FILE=$UNBOUND_VARDIR/unbound_server.key
+UNBOUND_SRVPEM_FILE=$UNBOUND_VARDIR/unbound_server.pem
+
##############################################################################
UNBOUND_ANCHOR=/usr/sbin/unbound-anchor
# Ensure access and prepare to jail
chown -R unbound:unbound $UNBOUND_VARDIR
- chmod 775 $UNBOUND_VARDIR
- chmod 664 $UNBOUND_VARDIR/*
+ chmod 755 $UNBOUND_VARDIR
+ chmod 644 $UNBOUND_VARDIR/*
+
+
+ if [ -f $UNBOUND_CTLKEY_FILE -o -f $UNBOUND_CTLPEM_FILE \
+ -o -f $UNBOUND_SRVKEY_FILE -o -f $UNBOUND_SRVPEM_FILE ] ; then
+ # Keys (some) exist already; do not create new ones
+ chmod 640 $UNBOUND_CTLKEY_FILE $UNBOUND_CTLPEM_FILE \
+ $UNBOUND_SRVKEY_FILE $UNBOUND_SRVPEM_FILE
+
+ elif [ -x /usr/sbin/unbound-control-setup ] ; then
+ case "$UNBOUND_D_CONTROL" in
+ [2-3])
+ # unbound-control-setup for encrypt opt. 2 and 3, but not 4 "static"
+ /usr/sbin/unbound-control-setup -d $UNBOUND_VARDIR
+
+ chown -R unbound:unbound $UNBOUND_CTLKEY_FILE $UNBOUND_CTLPEM_FILE \
+ $UNBOUND_SRVKEY_FILE $UNBOUND_SRVPEM_FILE
+
+ chmod 640 $UNBOUND_CTLKEY_FILE $UNBOUND_CTLPEM_FILE \
+ $UNBOUND_SRVKEY_FILE $UNBOUND_SRVPEM_FILE
+
+ cp -p $UNBOUND_CTLKEY_FILE /etc/unbound/unbound_control.key
+ cp -p $UNBOUND_CTLPEM_FILE /etc/unbound/unbound_control.pem
+ cp -p $UNBOUND_SRVKEY_FILE /etc/unbound/unbound_server.key
+ cp -p $UNBOUND_SRVPEM_FILE /etc/unbound/unbound_server.pem
+ ;;
+ esac
+ fi
}
##############################################################################
unbound_control() {
- if [ "$UNBOUND_B_CONTROL" -gt 0 ] ; then
+ if [ "$UNBOUND_D_CONTROL" -gt 1 ] ; then
+ if [ ! -f $UNBOUND_CTLKEY_FILE -o ! -f $UNBOUND_CTLPEM_FILE \
+ -o ! -f $UNBOUND_SRVKEY_FILE -o ! -f $UNBOUND_SRVPEM_FILE ] ; then
+ # Key files need to be present; if unbound-control-setup was found, then
+ # they might have been made during unbound_makedir() above.
+ UNBOUND_D_CONTROL=0
+ fi
+ fi
+
+
+ case "$UNBOUND_D_CONTROL" in
+ 1)
{
- # Enable remote control tool, but only at local host for security
- # You can hand write fancier encrypted access with /etc/..._ext.conf
+ # Local Host Only Unencrypted Remote Control
echo "remote-control:"
echo " control-enable: yes"
echo " control-use-cert: no"
echo " control-interface: ::1"
echo
} >> $UNBOUND_CONFFILE
- fi
+ ;;
+
+ 2)
+ {
+ # Local Host Only Encrypted Remote Control
+ echo "remote-control:"
+ echo " control-enable: yes"
+ echo " control-use-cert: yes"
+ echo " control-interface: 127.0.0.1"
+ echo " control-interface: ::1"
+ echo " server-key-file: \"$UNBOUND_SRVKEY_FILE\""
+ echo " server-cert-file: \"$UNBOUND_SRVPEM_FILE\""
+ echo " control-key-file: \"$UNBOUND_CTLKEY_FILE\""
+ echo " control-cert-file: \"$UNBOUND_CTLPEM_FILE\""
+ echo
+ } >> $UNBOUND_CONFFILE
+ ;;
+
+ [3-4])
+ {
+ # Network Encrypted Remote Control
+ # (3) may auto setup and (4) must have static key/pem files
+ # TODO: add UCI list for interfaces to bind
+ echo "remote-control:"
+ echo " control-enable: yes"
+ echo " control-use-cert: yes"
+ echo " control-interface: 0.0.0.0"
+ echo " control-interface: ::0"
+ echo " server-key-file: \"$UNBOUND_SRVKEY_FILE\""
+ echo " server-cert-file: \"$UNBOUND_SRVPEM_FILE\""
+ echo " control-key-file: \"$UNBOUND_CTLKEY_FILE\""
+ echo " control-cert-file: \"$UNBOUND_CTLPEM_FILE\""
+ echo
+ } >> $UNBOUND_CONFFILE
+ ;;
+ esac
{
local cfg="$1"
local rt_mem rt_conn modulestring
+ # Make fresh conf file
+ echo > $UNBOUND_CONFFILE
+
{
# Make fresh conf file
echo "# $UNBOUND_CONFFILE generated by UCI $( date )"
echo
- } > $UNBOUND_CONFFILE
-
-
- {
# No threading
echo "server:"
echo " username: unbound"
echo " infra-cache-slabs: 1"
echo " key-cache-slabs: 1"
echo
- } >> $UNBOUND_CONFFILE
-
-
- {
+ # Interface Wildcard (access contol handled by "option local_service")
+ echo " interface: 0.0.0.0"
+ echo " interface: ::0"
+ echo " outgoing-interface: 0.0.0.0"
+ echo " outgoing-interface: ::0"
+ echo
# Logging
echo " verbosity: 1"
echo " statistics-interval: 0"
echo " statistics-cumulative: no"
- echo " extended-statistics: no"
- echo
} >> $UNBOUND_CONFFILE
- {
- # Interfaces (access contol "option local_service")
- echo " interface: 0.0.0.0"
- echo " interface: ::0"
- echo " outgoing-interface: 0.0.0.0"
- echo " outgoing-interface: ::0"
- echo
- } >> $UNBOUND_CONFFILE
+ if [ "$UNBOUND_B_EXT_STATS" -gt 0 ] ; then
+ {
+ # Log More
+ echo " extended-statistics: yes"
+ echo
+ } >> $UNBOUND_CONFFILE
+
+ else
+ {
+ # Log Less
+ echo " extended-statistics: no"
+ echo
+ } >> $UNBOUND_CONFFILE
+ fi
case "$UNBOUND_D_PROTOCOL" in
config_get_bool UNBOUND_B_SLAAC6_MAC "$cfg" dhcp4_slaac6 0
config_get_bool UNBOUND_B_DNS64 "$cfg" dns64 0
+ config_get_bool UNBOUND_B_EXT_STATS "$cfg" extended_stats 0
config_get_bool UNBOUND_B_HIDE_BIND "$cfg" hide_binddata 1
config_get_bool UNBOUND_B_LOCL_SERV "$cfg" localservice 1
config_get_bool UNBOUND_B_MAN_CONF "$cfg" manual_conf 0
config_get_bool UNBOUND_B_QRY_MINST "$cfg" query_min_strict 0
config_get_bool UNBOUND_B_PRIV_BLCK "$cfg" rebind_protection 1
config_get_bool UNBOUND_B_LOCL_BLCK "$cfg" rebind_localhost 0
- config_get_bool UNBOUND_B_CONTROL "$cfg" unbound_control 0
config_get_bool UNBOUND_B_DNSSEC "$cfg" validator 0
config_get_bool UNBOUND_B_NTP_BOOT "$cfg" validator_ntp 1
config_get UNBOUND_N_RX_PORT "$cfg" listen_port 53
config_get UNBOUND_N_ROOT_AGE "$cfg" root_age 9
+ config_get UNBOUND_D_CONTROL "$cfg" unbound_control 0
config_get UNBOUND_D_DOMAIN_TYPE "$cfg" domain_type static
config_get UNBOUND_D_DHCP_LINK "$cfg" dhcp_link none
config_get UNBOUND_D_EXTRA_DNS "$cfg" add_extra_dns 0
option domain 'lan'
option domain_type 'static'
option edns_size '1280'
+ option extended_luci '0'
+ option extended_stats '0'
option hide_binddata '1'
option listen_port '53'
option localservice '1'
##############################################################################
-# UNBOUND UCI USER ADDED CLAUSES
+# Extended user clauses added to the end of the UCI generated 'unbound.conf'
#
-# Put your own forward:, view:, stub:, and control: clauses here. This file is
-# appended to the end of UCI auto generated 'unbound.conf'. This is done with
-# include: statement. Notice, it is outside of the server: clause.
+# Put your own forward:, view:, stub:, or remote-control: clauses here. This
+# file is appended to the end of 'unbound.conf' with an include: statement.
+# Notice that it is not part of the server: clause. Use 'unbound_srv.conf' to
+# place custom option statements in the server: clause.
##############################################################################
##############################################################################
-# UNBOUND UCI USER ADDED SERVER OPTIONS
+# User custom options added in the server: clause part of UCI 'unbound.conf'
#
-# Put your own choice options here when not covered by UCI. These are all part
-# of the server: clause only. Most likely are hardening options or local-zone:
-# This is in an include: statement towards the end of the server: cluase.
+# Add your own option statements here when they are not covered by UCI. This
+# file is placed _inside_ the server: clause with an include: statement. Do
+# not start other clauses here, because that would brake the server: clause.
+# Use 'unbound_ext.conf' to start new clauses at the end of 'unbound.conf'.
##############################################################################
-#
-# Example configuration file.
-#
--# See unbound.conf(5) man page, version 1.6.5.
+-# See unbound.conf(5) man page, version 1.6.7.
-#
-# this is a comment.
+##############################################################################
PKG_NAME:=wireguard
-PKG_VERSION:=0.0.20170907
+PKG_VERSION:=0.0.20171005
PKG_RELEASE:=1
PKG_SOURCE:=WireGuard-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://git.zx2c4.com/WireGuard/snapshot/
-PKG_HASH:=a1ee12d60662607e4c5a19f84b5115e56f083e2600053882e161537f12d963fd
+PKG_HASH:=832a3b7cbb510f6986fd0c3a6b2d86bc75fc9f23b6754d8f46bc58ea8e02d608
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
SECTION:=net
CATEGORY:=Network
SUBMENU:=VPN
- URL:=https://www.wireguard.io
+ URL:=https://www.wireguard.com
MAINTAINER:=Baptiste Jonglez <openwrt@bitsofnetworks.org>, \
- Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> \
+ Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>, \
Dan Luedtke <mail@danrl.com>, \
Jason A. Donenfeld <Jason@zx2c4.com>
endef
more useful than IPSec, while avoiding the massive headache. It intends to
be considerably more performant than OpenVPN. WireGuard is designed as a
general purpose VPN for running on embedded interfaces and super computers
- alike, fit for many different circumstances.
- It runs over UDP.
+ alike, fit for many different circumstances. It uses UDP.
endef
define Package/wireguard
include $(TOPDIR)/rules.mk
PKG_NAME:=pulseaudio
-PKG_VERSION:=11.0
-PKG_RELEASE:=2
+PKG_VERSION:=11.1
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=http://freedesktop.org/software/pulseaudio/releases/
-PKG_HASH:=072305d4018fc5e75bb1b45ee6b938fa52fc9fd27493bf327415ef89ed14c969
+PKG_SOURCE_URL:=https://freedesktop.org/software/pulseaudio/releases/
+PKG_HASH:=f2521c525a77166189e3cb9169f75c2ee2b82fa3fcf9476024fbc2c3a6c9cd9e
PKG_LICENSE:=LGPL-2.1+
PKG_LICENSE_FILES:=GPL LICENSE
include $(TOPDIR)/rules.mk
PKG_NAME:=acpica-unix
-PKG_VERSION:=20170831
+PKG_VERSION:=20170929
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://acpica.org/sites/$(subst -unix,,$(PKG_NAME))/files/$(PKG_SOURCE_URL)
-PKG_HASH:=c918a422f6c72e27b08c841158b52d870b92730fb6406b33d20ef50b1d2b4113
+PKG_HASH:=c786868ae6c7a4c7bca19a5ca66bfb16740cad5c1c01b21642932f2f0dea9cc8
PKG_MAINTAINER:=Philip Prindeville <philipp@redfish-solutions.com>
PKG_LICENSE:=GPL-2.0
(AML) interpreter, a simulator, test suites, and a compiler to
translate ACPI Source Language (ASL) into AML.
- At this time, only acpidump is bundledr; more might be added later.
+ At this time, only acpidump is bundled; more might be added later.
endef
define Build/Configure
include $(TOPDIR)/rules.mk
PKG_NAME:=acpid
-PKG_VERSION:=2.0.27
+PKG_VERSION:=2.0.28
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@SF/acpid2
-PKG_HASH:=820c223e53cc11d9d7229fb1ffc2c2205f1054082c80f83f5a4ec4df16d3a616
+PKG_HASH:=980c3a54b0d3f2fd49fd845a0584c5c2abeaab9e9ac09fcbb68686bbb57a7110
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=bluez
-PKG_VERSION:=5.38
+PKG_VERSION:=5.47
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/bluetooth/
-PKG_HASH:=0618c5440be6715805060ab5eea930526f34089c437bf61819447b160254f4df
+PKG_HASH:=cf75bf7cd5d564f21cc4a2bd01d5c39ce425397335fd47d9bbe43af0a58342c8
PKG_LICENSE:=GPL-2.0+
PKG_LICENSE_FILES:=COPYING
/etc/bluetooth/main.conf
/etc/bluetooth/network.conf
/etc/bluetooth/input.conf
-/etc/bluetooth/proximity.conf
+/etc/bluetooth/audio.conf
/etc/config/bluetooth
endef
--disable-systemd \
--disable-test \
--disable-udev \
+ --enable-deprecated
TARGET_CPPFLAGS += \
-D_GNU_SOURCE
$(INSTALL_DATA) $(PKG_BUILD_DIR)/src/main.conf $(1)/etc/bluetooth/main.conf
$(INSTALL_DATA) $(PKG_BUILD_DIR)/profiles/network/network.conf $(1)/etc/bluetooth/network.conf
$(INSTALL_DATA) $(PKG_BUILD_DIR)/profiles/input/input.conf $(1)/etc/bluetooth/input.conf
- $(INSTALL_DATA) $(PKG_BUILD_DIR)/profiles/proximity/proximity.conf $(1)/etc/bluetooth/proximity.conf
+ $(INSTALL_DATA) ./files/audio.conf $(1)/etc/bluetooth/audio.conf
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/bluetoothd.init $(1)/etc/init.d/bluetoothd
endef
--- /dev/null
+Enable=Source,Sink,Media,Socket
--- a/tools/hciattach.c
+++ b/tools/hciattach.c
-@@ -1144,6 +1144,9 @@ struct uart_t uart[] = {
+@@ -1090,6 +1090,9 @@ struct uart_t uart[] = {
{ "bcm43xx", 0x0000, 0x0000, HCI_UART_H4, 115200, 3000000,
FLOW_CTL, DISABLE_PM, NULL, bcm43xx, NULL },
--- a/tools/hciattach.c
+++ b/tools/hciattach.c
-@@ -1293,7 +1293,7 @@ int main(int argc, char *argv[])
+@@ -1239,7 +1239,7 @@ int main(int argc, char *argv[])
{
struct uart_t *u = NULL;
int detach, printpid, raw, opt, i, n, ld, err;
+++ /dev/null
---- a/tools/hciattach.c
-+++ b/tools/hciattach.c
-@@ -101,20 +101,37 @@ int uart_speed(int s)
- return B230400;
- case 460800:
- return B460800;
-+/* FIX: Not all platform support this high serial speed
-+ claudyus84 @gamil.com
-+*/
-+#ifdef B500000
- case 500000:
- return B500000;
-+#endif
-+#ifdef B576000
- case 576000:
- return B576000;
-+#endif
-+#ifdef B921600
- case 921600:
- return B921600;
-+#endif
-+#ifdef B1000000
- case 1000000:
- return B1000000;
-+#endif
-+#ifdef B1152000
- case 1152000:
- return B1152000;
-+#endif
-+#ifdef B1500000
- case 1500000:
- return B1500000;
-+#endif
-+#ifdef B2000000
- case 2000000:
- return B2000000;
-+#endif
- #ifdef B2500000
- case 2500000:
- return B2500000;
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -2441,7 +2441,7 @@ unit_tests = $(am__append_35) unit/test-
+--- a/Makefile.in 2017-09-14 11:47:06.000000000 +0200
++++ b/Makefile.in 2017-09-15 02:52:39.315926972 +0200
+@@ -2447,7 +2447,7 @@
@CLIENT_TRUE@ monitor/uuid.h monitor/uuid.c
- @CLIENT_TRUE@client_bluetoothctl_LDADD = gdbus/libgdbus-internal.la @GLIB_LIBS@ @DBUS_LIBS@ \
--@CLIENT_TRUE@ -lreadline
-+@CLIENT_TRUE@ -lreadline -lncurses
+ @CLIENT_TRUE@client_bluetoothctl_LDADD = gdbus/libgdbus-internal.la src/libshared-glib.la \
+-@CLIENT_TRUE@ @GLIB_LIBS@ @DBUS_LIBS@ -lreadline
++@CLIENT_TRUE@ @GLIB_LIBS@ @DBUS_LIBS@ -lreadline -lncurses
- @MONITOR_TRUE@monitor_btmon_SOURCES = monitor/main.c monitor/bt.h \
- @MONITOR_TRUE@ monitor/display.h monitor/display.c \
-@@ -2691,13 +2691,13 @@ unit_tests = $(am__append_35) unit/test-
- @READLINE_TRUE@ client/display.h
+ @MESH_TRUE@mesh_meshctl_SOURCES = mesh/main.c \
+ @MESH_TRUE@ mesh/mesh-net.h \
+@@ -2468,7 +2468,7 @@
- @READLINE_TRUE@attrib_gatttool_LDADD = lib/libbluetooth-internal.la \
--@READLINE_TRUE@ src/libshared-glib.la @GLIB_LIBS@ -lreadline
-+@READLINE_TRUE@ src/libshared-glib.la @GLIB_LIBS@ -lreadline -lncurses
+ @MESH_TRUE@mesh_meshctl_LDADD = gdbus/libgdbus-internal.la src/libshared-glib.la \
+ @MESH_TRUE@ lib/libbluetooth-internal.la \
+-@MESH_TRUE@ @GLIB_LIBS@ @DBUS_LIBS@ -ljson-c -lreadline
++@MESH_TRUE@ @GLIB_LIBS@ @DBUS_LIBS@ -ljson-c -lreadline -lncurses
- @READLINE_TRUE@tools_obex_client_tool_SOURCES = $(gobex_sources) $(btio_sources) \
+ @MONITOR_TRUE@monitor_btmon_SOURCES = monitor/main.c monitor/bt.h \
+ @MONITOR_TRUE@ monitor/display.h monitor/display.c \
+@@ -2724,7 +2724,7 @@
@READLINE_TRUE@ tools/obex-client-tool.c
@READLINE_TRUE@tools_obex_client_tool_LDADD = lib/libbluetooth-internal.la \
@READLINE_TRUE@tools_obex_server_tool_SOURCES = $(gobex_sources) $(btio_sources) \
@READLINE_TRUE@ tools/obex-server-tool.c
-@@ -2707,17 +2707,17 @@ unit_tests = $(am__append_35) unit/test-
+@@ -2734,17 +2734,17 @@
@READLINE_TRUE@ client/display.h client/display.c
@READLINE_TRUE@tools_bluetooth_player_LDADD = gdbus/libgdbus-internal.la \
-@READLINE_TRUE@ -lreadline
+@READLINE_TRUE@ -lreadline -lncurses
- @EXPERIMENTAL_TRUE@tools_gatt_service_SOURCES = tools/gatt-service.c
- @EXPERIMENTAL_TRUE@tools_gatt_service_LDADD = @GLIB_LIBS@ @DBUS_LIBS@ gdbus/libgdbus-internal.la
+ @DEPRECATED_TRUE@@READLINE_TRUE@attrib_gatttool_SOURCES = attrib/gatttool.c attrib/att.c attrib/gatt.c \
+ @DEPRECATED_TRUE@@READLINE_TRUE@ attrib/gattrib.c btio/btio.c \
+@@ -2753,7 +2753,7 @@
+ @DEPRECATED_TRUE@@READLINE_TRUE@ client/display.h
+
+ @DEPRECATED_TRUE@@READLINE_TRUE@attrib_gatttool_LDADD = lib/libbluetooth-internal.la \
+-@DEPRECATED_TRUE@@READLINE_TRUE@ src/libshared-glib.la @GLIB_LIBS@ -lreadline
++@DEPRECATED_TRUE@@READLINE_TRUE@ src/libshared-glib.la @GLIB_LIBS@ -lreadline -lncurses
+
+ @CUPS_TRUE@cupsdir = $(libdir)/cups/backend
+ @CUPS_TRUE@profiles_cups_bluetooth_SOURCES = profiles/cups/main.c \
include $(TOPDIR)/rules.mk
PKG_NAME:=btrfs-progs
-PKG_VERSION:=4.11
-PKG_RELEASE:=2
+PKG_VERSION:=4.13.2
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/kernel/people/kdave/btrfs-progs/
-PKG_HASH:=e17a68cc52a27d905b715445e91ddbaa4d42de4847d54836d6ed21e012dabf0e
+PKG_HASH:=75c7331f1306495dfffabe542ef6c5539808f0cdaebdf14fa8b7ab09c59448bd
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-v$(PKG_VERSION)
PKG_LICENSE:=GPL-2.0
PKG_SOURCE_URL:=https://github.com/linux-can/can-utils
PKG_SOURCE_DATE:=2017-02-16
PKG_SOURCE_VERSION:=cb33a55720716cbe01e6025a2bda74a1b7e492d3
-PKG_MIRROR_HASH:=cb6a615bc7d62923d5bc0130891e824e9964de8a31920004b74872a07d8743ef
+PKG_MIRROR_HASH:=d9c01eeff3d81a28161ca5c3937ec005a1f49ca3eb97bee0164d53cc66365786
PKG_MAINTAINER:=Anton Glukhov <anton.a.glukhov@gmail.com>
PKG_LICENSE:=GPL-2.0+
PKG_SOURCE_URL:=https://github.com/cryptodev-linux/cryptodev-linux
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=a705360197260d28535746ae98c461ba2cfb7a9e
-PKG_MIRROR_HASH:=553069ecf1f3d5d5652404aaf438610f555c94db4369c7c1db85210c4e3cdfee
+PKG_MIRROR_HASH:=334a8f4df18e36e97459b4c6669c9873c13c4f5dae25243cf41ff70c2ce661d8
PKG_MAINTAINER:=Ansuel Smith <ansuelsmth@gmail.com>
PKG_VERSION_MAJOR:=3
PKG_VERSION_PATCH:=8153
PKG_VERSION:=$(PKG_VERSION_MAJOR).$(PKG_VERSION_PATCH)
-PKG_RELEASE:=1
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/domoticz/domoticz/archive/$(PKG_VERSION)/$(PKG_SOURCE)
-DUSE_STATIC_OPENZWAVE=no \
-DUSE_PYTHON=no
+TARGET_CXXFLAGS+=-DWITH_GPIO
+
define Build/Prepare
$(call Build/Prepare/Default)
# Fix APPVERSION to suppress update popup
buienradar_rain_example.pl \
_domoticz_main* \
download_update.sh \
- dzVents/{.gitignore,documentation,examples} \
+ dzVents/{.gitignore,documentation,examples,generated_scripts} \
dzVents/runtime/{integration-tests,misc/smoothing.xlsx,tests} \
logrotate/ \
lua_parsers/example* \
[ -n "$loglevel" ] && procd_append_param command -loglevel "$loglevel"
[ -n "$syslog" ] && procd_append_param command -syslog "$syslog"
[ -n "$userdata" ] && {
- mkdir -p "$userdata"
- chmod 0770 "$userdata"
- chown domoticz:domoticz "$userdata"
+ mkdir -p "${userdata}/generated_scripts"
+ chmod -R 0770 "$userdata"
+ chown -R domoticz:domoticz "$userdata"
procd_append_param command -userdata "$userdata"
}
[ -n "$sslcert" -a "${sslwww:-0}" -gt 0 ] && {
+++ /dev/null
---- a/hardware/OpenZWave.cpp
-+++ b/hardware/OpenZWave.cpp
-@@ -948,7 +948,7 @@ bool COpenZWave::OpenSerialConnector()
-
- m_nodes.clear();
- m_bNeedSave = false;
-- std::string ConfigPath = szStartupFolder + "Config/";
-+ std::string ConfigPath = "/usr/share/domoticz/openzwave/";
- std::string UserPath = ConfigPath;
- if (szStartupFolder != szUserDataFolder)
- {
---- a/main/EventSystem.cpp
-+++ b/main/EventSystem.cpp
-@@ -33,7 +33,7 @@ extern "C" {
- #endif
- }
-
--extern std::string szUserDataFolder;
-+extern std::string szScriptsFolder;
- extern http::server::CWebServerHelper m_webservers;
-
- static std::string m_printprefix;
-@@ -149,7 +149,7 @@ void CEventSystem::StartEventSystem()
- GetCurrentScenesGroups();
- GetCurrentUserVariables();
- #ifdef ENABLE_PYTHON
-- Plugins::PythonEventsInitialize(szUserDataFolder);
-+ Plugins::PythonEventsInitialize(szScriptsFolder);
- #endif
-
- m_thread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&CEventSystem::Do_Work, this)));
-@@ -181,9 +181,9 @@ void CEventSystem::LoadEvents()
- {
- std::string dzv_Dir,s;
- #ifdef WIN32
-- dzv_Dir = szUserDataFolder + "scripts\\dzVents\\generated_scripts\\";
-+ dzv_Dir = szScriptsFolder + "dzVents\\generated_scripts\\";
- #else
-- dzv_Dir = szUserDataFolder + "scripts/dzVents/generated_scripts/";
-+ dzv_Dir = szScriptsFolder + "dzVents/generated_scripts/";
- #endif
- boost::unique_lock<boost::shared_mutex> eventsMutexLock(m_eventsMutex);
- _log.Log(LOG_STATUS, "EventSystem: reset all events...");
-@@ -274,18 +274,18 @@ void CEventSystem::LoadEvents()
- void CEventSystem::Do_Work()
- {
- #ifdef WIN32
-- m_lua_Dir = szUserDataFolder + "scripts\\lua\\";
-- m_dzv_Dir = szUserDataFolder + "scripts\\dzVents\\runtime\\";
-+ m_lua_Dir = szScriptsFolder + "lua\\";
-+ m_dzv_Dir = szScriptsFolder + "dzVents\\runtime\\";
- #else
-- m_lua_Dir = szUserDataFolder + "scripts/lua/";
-- m_dzv_Dir = szUserDataFolder + "scripts/dzVents/runtime/";
-+ m_lua_Dir = szScriptsFolder + "lua/";
-+ m_dzv_Dir = szScriptsFolder + "dzVents/runtime/";
- #endif
-
- #ifdef ENABLE_PYTHON
- #ifdef WIN32
-- m_python_Dir = szUserDataFolder + "scripts\\python\\";
-+ m_python_Dir = szScriptsFolder + "python\\";
- #else
-- m_python_Dir = szUserDataFolder + "scripts/python/";
-+ m_python_Dir = szScriptsFolder + "python/";
- #endif
- #endif
- m_stoprequested = false;
-@@ -1426,9 +1426,9 @@ void CEventSystem::EvaluateEvent(const s
- {
- std::string dzv_scripts;
- #ifdef WIN32
-- dzv_scripts = szUserDataFolder + "scripts\\dzVents\\scripts\\";
-+ dzv_scripts = szScriptsFolder + "dzVents\\scripts\\";
- #else
-- dzv_scripts = szUserDataFolder + "scripts/dzVents/scripts/";
-+ dzv_scripts = szScriptsFolder + "dzVents/scripts/";
- #endif
- DirectoryListing(FileEntries, dzv_scripts, false, true);
- for (itt = FileEntries.begin(); itt != FileEntries.end(); ++itt)
-@@ -2404,7 +2404,7 @@ bool CEventSystem::parseBlocklyActions(c
- }
- #if !defined WIN32
- if (sPath.find("/") != 0)
-- sPath = szUserDataFolder + "scripts/" + sPath;
-+ sPath = szScriptsFolder + sPath;
- #endif
-
- m_sql.AddTaskItem(_tTaskItem::ExecuteScript(0.2f, sPath, sParam));
-@@ -3508,11 +3508,11 @@ void CEventSystem::EvaluateLua(const std
- {
- std::stringstream lua_DirT;
-
-- lua_DirT << szUserDataFolder <<
-+ lua_DirT << szScriptsFolder <<
- #ifdef WIN32
-- "scripts\\dzVents\\";
-+ "dzVents\\";
- #else
-- "scripts/dzVents/";
-+ "dzVents/";
- #endif
-
- lua_pushstring(lua_state, "script_path");
-@@ -4695,9 +4695,9 @@ namespace http {
-
- std::stringstream template_file;
- #ifdef WIN32
-- template_file << szUserDataFolder << "scripts\\templates\\" << eventType << "." << interpreter;
-+ template_file << szScriptsFolder << "templates\\" << eventType << "." << interpreter;
- #else
-- template_file << szUserDataFolder << "scripts/templates/" << eventType << "." << interpreter;
-+ template_file << szScriptsFolder << "templates/" << eventType << "." << interpreter;
- #endif
- std::ifstream file;
- std::stringstream template_content;
---- a/main/LuaHandler.cpp
-+++ b/main/LuaHandler.cpp
-@@ -22,7 +22,7 @@ extern "C" {
- #include "mainworker.h"
- #include "../hardware/hardwaretypes.h"
-
--extern std::string szUserDataFolder;
-+extern std::string szScriptsFolder;
-
- int CLuaHandler::l_domoticz_updateDevice(lua_State* lua_state)
- {
-@@ -155,9 +155,9 @@ bool CLuaHandler::executeLuaScript(const
- {
- std::stringstream lua_DirT;
- #ifdef WIN32
-- lua_DirT << szUserDataFolder << "scripts\\lua_parsers\\";
-+ lua_DirT << szScriptsFolder << "lua_parsers\\";
- #else
-- lua_DirT << szUserDataFolder << "scripts/lua_parsers/";
-+ lua_DirT << szScriptsFolder << "lua_parsers/";
- #endif
- std::string lua_Dir = lua_DirT.str();
-
---- a/main/SQLHelper.cpp
-+++ b/main/SQLHelper.cpp
-@@ -633,6 +633,7 @@ const char *sqlCreateMobileDevices =
- "[LastUpdate] DATETIME DEFAULT(datetime('now', 'localtime'))"
- ");";
-
-+extern std::string szScriptsFolder;
- extern std::string szUserDataFolder;
-
- CSQLHelper::CSQLHelper(void)
-@@ -3683,9 +3684,9 @@ uint64_t CSQLHelper::UpdateValueInt(cons
- //Execute possible script
- std::string scriptname;
- #ifdef WIN32
-- scriptname = szUserDataFolder + "scripts\\domoticz_main.bat";
-+ scriptname = szScriptsFolder + "domoticz_main.bat";
- #else
-- scriptname = szUserDataFolder + "scripts/domoticz_main";
-+ scriptname = szScriptsFolder + "domoticz_main";
- #endif
- if (file_exist(scriptname.c_str()))
- {
-@@ -6641,7 +6642,7 @@ bool CSQLHelper::HandleOnOffAction(const
- std::string scriptname = OnAction.substr(9);
- #if !defined WIN32
- if (scriptname.find("/") != 0)
-- scriptname = szUserDataFolder + "scripts/" + scriptname;
-+ scriptname = szScriptsFolder + scriptname;
- #endif
- std::string scriptparams="";
- //Add parameters
-@@ -6675,7 +6676,7 @@ bool CSQLHelper::HandleOnOffAction(const
- std::string scriptname = OffAction.substr(9);
- #if !defined WIN32
- if (scriptname.find("/") != 0)
-- scriptname = szUserDataFolder + "scripts/" + scriptname;
-+ scriptname = szScriptsFolder + scriptname;
- #endif
- std::string scriptparams = "";
- int pindex = scriptname.find(' ');
---- a/main/WebServer.cpp
-+++ b/main/WebServer.cpp
-@@ -59,6 +59,7 @@
-
- #define round(a) ( int ) ( a + .5 )
-
-+extern std::string szScriptsFolder;
- extern std::string szUserDataFolder;
- extern std::string szWWWFolder;
-
-@@ -2987,9 +2988,9 @@ namespace http {
- if (scriptname.find("..") != std::string::npos)
- return;
- #ifdef WIN32
-- scriptname = szUserDataFolder + "scripts\\" + scriptname;
-+ scriptname = szScriptsFolder + scriptname;
- #else
-- scriptname = szUserDataFolder + "scripts/" + scriptname;
-+ scriptname = szScriptsFolder + scriptname;
- #endif
- if (!file_exist(scriptname.c_str()))
- return;
---- a/main/domoticz.cpp
-+++ b/main/domoticz.cpp
-@@ -136,6 +136,7 @@ static const _facilities facilities[] =
- };
- std::string logfacname = "user";
- #endif
-+std::string szScriptsFolder;
- std::string szStartupFolder;
- std::string szUserDataFolder;
- std::string szWWWFolder;
-@@ -696,6 +697,19 @@ int main(int argc, char**argv)
- szUserDataFolder = szroot;
- }
-
-+ szScriptsFolder=szStartupFolder;
-+ if (cmdLine.HasSwitch("-scripts"))
-+ {
-+ if (cmdLine.GetArgumentCount("-scripts") != 1)
-+ {
-+ _log.Log(LOG_ERROR, "Please specify a path for scripts directory");
-+ return 1;
-+ }
-+ std::string szroot = cmdLine.GetSafeArgument("-scripts", 0, "");
-+ if (szroot.size() != 0)
-+ szScriptsFolder = szroot;
-+ }
-+
- if (cmdLine.HasSwitch("-startupdelay"))
- {
- if (cmdLine.GetArgumentCount("-startupdelay") != 1)
---- a/main/mainworker.cpp
-+++ b/main/mainworker.cpp
-@@ -159,6 +159,7 @@
-
- #define round(a) ( int ) ( a + .5 )
-
-+extern std::string szScriptsFolder;
- extern std::string szStartupFolder;
- extern std::string szUserDataFolder;
- extern std::string szWWWFolder;
-@@ -1473,8 +1474,8 @@ void MainWorker::Do_Work()
- m_sql.GetPreferencesVar("ReleaseChannel", nValue);
- bool bIsBetaChannel = (nValue != 0);
-
-- std::string scriptname = szUserDataFolder + "scripts/download_update.sh";
-- std::string strparm = szUserDataFolder;
-+ std::string scriptname = szScriptsFolder + "download_update.sh";
-+ std::string strparm = szScriptsFolder;
- if (bIsBetaChannel)
- strparm += " /beta";
-
---- a/notifications/NotificationHTTP.cpp
-+++ b/notifications/NotificationHTTP.cpp
-@@ -6,7 +6,7 @@
- #include "../main/SQLHelper.h"
- #include "../main/Logger.h"
-
--extern std::string szUserDataFolder;
-+extern std::string szScriptsFolder;
-
- CNotificationHTTP::CNotificationHTTP() : CNotificationBase(std::string("http"), OPTIONS_NONE)
- {
-@@ -105,7 +105,7 @@ bool CNotificationHTTP::SendMessageImple
- std::string scriptparams = "";
- #if !defined WIN32
- if (scriptname.find("/") != 0)
-- scriptname = szUserDataFolder + "scripts/" + scriptname;
-+ scriptname = szScriptsFolder + scriptname;
- #endif
- //Add parameters
- uPos = scriptname.find(" ");
---- a/push/GooglePubSubPush.cpp
-+++ b/push/GooglePubSubPush.cpp
-@@ -22,7 +22,7 @@ extern "C" {
- using namespace boost::python;
- #endif
-
--extern std::string szUserDataFolder;
-+extern std::string szScriptsFolder;
-
- // this should be filled in by the preprocessor
- extern const char * Python_exe;
-@@ -231,11 +231,11 @@ void CGooglePubSubPush::DoGooglePubSubPu
-
- #ifdef ENABLE_PYTHON_DECAP
- #ifdef WIN32
-- python_DirT << szUserDataFolder << "scripts\\python\\";
-- std::string filename = szUserDataFolder + "scripts\\python\\" + "googlepubsub.py";
-+ python_DirT << szScriptsFolder << "python\\";
-+ std::string filename = szScriptsFolder + "python\\" + "googlepubsub.py";
- #else
-- python_DirT << szUserDataFolder << "scripts/python/";
-- std::string filename = szUserDataFolder + "scripts/python/" + "googlepubsub.py";
-+ python_DirT << szScriptsFolder << "python/";
-+ std::string filename = szScriptsFolder + "python/" + "googlepubsub.py";
- #endif
-
- wchar_t * argv[1];
---- a/hardware/EvohomeScript.cpp
-+++ b/hardware/EvohomeScript.cpp
-@@ -30,7 +30,7 @@
-
- #include <string>
-
--extern std::string szUserDataFolder;
-+extern std::string szScriptsFolder;
-
-
- CEvohomeScript::CEvohomeScript(const int ID)
-@@ -143,7 +143,7 @@ void CEvohomeScript::RunScript(const cha
- std::string scriptname = OnAction.substr(9);
- #if !defined WIN32
- if (scriptname.find("/") != 0)
-- scriptname = szUserDataFolder + "scripts/" + scriptname;
-+ scriptname = szScriptsFolder + "scripts/" + scriptname;
- #endif
- std::string scriptparams="";
- //Add parameters
---- a/main/EventsPythonModule.cpp
-+++ b/main/EventsPythonModule.cpp
-@@ -108,7 +108,7 @@
-
- int PythonEventsInitalized = 0;
-
-- bool PythonEventsInitialize(std::string szUserDataFolder) {
-+ bool PythonEventsInitialize(std::string szScriptsFolder) {
-
- if (!Plugins::Py_LoadLibrary())
- {
-@@ -131,9 +131,9 @@
-
- std::string ssPath;
- #ifdef WIN32
-- ssPath = szUserDataFolder + "scripts\\python\\;";
-+ ssPath = szScriptsFolder + "python\\;";
- #else
-- ssPath = szUserDataFolder + "scripts/python/:";
-+ ssPath = szScriptsFolder + "python/:";
- #endif
-
- std::wstring sPath = std::wstring(ssPath.begin(), ssPath.end());
--- /dev/null
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -521,20 +521,23 @@ else()
+ MESSAGE(FATAL_ERROR "cURL not found on your system, see install.txt how to get them installed. (for example 'sudo apt-get install curl libcurl4-openssl-dev')")
+ ENDIF(CURL_FOUND)
+
+-find_path(LIBUSB_INCLUDE_DIR usb.h
+- HINTS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
+-find_library(LIBUSB_LIBRARY NAMES usb
+- HINTS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
+-set(LIBUSB_LIBRARIES ${LIBUSB_LIBRARY})
++option(WITH_LIBUSB "Enable libusb support" NO)
++ if(WITH_LIBUSB)
++ find_path(LIBUSB_INCLUDE_DIR usb.h
++ HINTS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
++ find_library(LIBUSB_LIBRARY NAMES usb
++ HINTS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
++ set(LIBUSB_LIBRARIES ${LIBUSB_LIBRARY})
+
+-find_package_handle_standard_args(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR)
+-IF(LIBUSB_FOUND)
+- MESSAGE(STATUS "LIBUSB found at: ${LIBUSB_LIBRARIES}")
+- add_definitions(-DWITH_LIBUSB)
+- target_link_libraries(domoticz ${LIBUSB_LIBRARIES})
+-else()
+- MESSAGE(STATUS "==== LibUSB not found, support for TE923/Voltcraft disabled!")
+-ENDIF(LIBUSB_FOUND)
++ find_package_handle_standard_args(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR)
++ IF(LIBUSB_FOUND)
++ MESSAGE(STATUS "LIBUSB found at: ${LIBUSB_LIBRARIES}")
++ add_definitions(-DWITH_LIBUSB)
++ target_link_libraries(domoticz ${LIBUSB_LIBRARIES})
++ else()
++ MESSAGE(STATUS "==== LibUSB not found, support for TE923/Voltcraft disabled!")
++ ENDIF(LIBUSB_FOUND)
++endif(WITH_LIBUSB)
+
+ #
+ # Find MD5/RMD160/SHA library
+++ /dev/null
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -521,20 +521,23 @@ else()
- MESSAGE(FATAL_ERROR "cURL not found on your system, see install.txt how to get them installed. (for example 'sudo apt-get install curl libcurl4-openssl-dev')")
- ENDIF(CURL_FOUND)
-
--find_path(LIBUSB_INCLUDE_DIR usb.h
-- HINTS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
--find_library(LIBUSB_LIBRARY NAMES usb
-- HINTS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
--set(LIBUSB_LIBRARIES ${LIBUSB_LIBRARY})
-+option(WITH_LIBUSB "Enable libusb support" NO)
-+ if(WITH_LIBUSB)
-+ find_path(LIBUSB_INCLUDE_DIR usb.h
-+ HINTS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
-+ find_library(LIBUSB_LIBRARY NAMES usb
-+ HINTS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
-+ set(LIBUSB_LIBRARIES ${LIBUSB_LIBRARY})
-
--find_package_handle_standard_args(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR)
--IF(LIBUSB_FOUND)
-- MESSAGE(STATUS "LIBUSB found at: ${LIBUSB_LIBRARIES}")
-- add_definitions(-DWITH_LIBUSB)
-- target_link_libraries(domoticz ${LIBUSB_LIBRARIES})
--else()
-- MESSAGE(STATUS "==== LibUSB not found, support for TE923/Voltcraft disabled!")
--ENDIF(LIBUSB_FOUND)
-+ find_package_handle_standard_args(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR)
-+ IF(LIBUSB_FOUND)
-+ MESSAGE(STATUS "LIBUSB found at: ${LIBUSB_LIBRARIES}")
-+ add_definitions(-DWITH_LIBUSB)
-+ target_link_libraries(domoticz ${LIBUSB_LIBRARIES})
-+ else()
-+ MESSAGE(STATUS "==== LibUSB not found, support for TE923/Voltcraft disabled!")
-+ ENDIF(LIBUSB_FOUND)
-+endif(WITH_LIBUSB)
-
- #
- # Find MD5/RMD160/SHA library
--- /dev/null
+diff --git a/hardware/EvohomeScript.cpp b/hardware/EvohomeScript.cpp
+index 5258fc55..0a44e97c 100644
+--- a/hardware/EvohomeScript.cpp
++++ b/hardware/EvohomeScript.cpp
+@@ -30,7 +30,7 @@
+
+ #include <string>
+
+-extern std::string szUserDataFolder;
++extern std::string szScriptsFolder;
+
+
+ CEvohomeScript::CEvohomeScript(const int ID)
+@@ -143,7 +143,7 @@ void CEvohomeScript::RunScript(const char *pdata, const unsigned char length)
+ std::string scriptname = OnAction.substr(9);
+ #if !defined WIN32
+ if (scriptname.find("/") != 0)
+- scriptname = szUserDataFolder + "scripts/" + scriptname;
++ scriptname = szScriptsFolder + "scripts/" + scriptname;
+ #endif
+ std::string scriptparams="";
+ //Add parameters
+diff --git a/hardware/OpenZWave.cpp b/hardware/OpenZWave.cpp
+index 1f5c341c..24db61c9 100644
+--- a/hardware/OpenZWave.cpp
++++ b/hardware/OpenZWave.cpp
+@@ -948,7 +948,7 @@ bool COpenZWave::OpenSerialConnector()
+
+ m_nodes.clear();
+ m_bNeedSave = false;
+- std::string ConfigPath = szStartupFolder + "Config/";
++ std::string ConfigPath = "/usr/share/domoticz/openzwave/";
+ std::string UserPath = ConfigPath;
+ if (szStartupFolder != szUserDataFolder)
+ {
+diff --git a/main/EventSystem.cpp b/main/EventSystem.cpp
+index 4eff02fd..f2b17b97 100644
+--- a/main/EventSystem.cpp
++++ b/main/EventSystem.cpp
+@@ -33,9 +33,11 @@ extern "C" {
+ #endif
+ }
+
++extern std::string szScriptsFolder;
+ extern std::string szUserDataFolder;
+ extern http::server::CWebServerHelper m_webservers;
+
++static std::string dzv_Dir;
+ static std::string m_printprefix;
+
+ #ifdef ENABLE_PYTHON
+@@ -115,7 +117,6 @@ static const _tJsonMap JsonMap[] =
+ { NULL, NULL, tString }
+ };
+
+-
+ CEventSystem::CEventSystem(void)
+ {
+ m_stoprequested = false;
+@@ -149,7 +150,7 @@ void CEventSystem::StartEventSystem()
+ GetCurrentScenesGroups();
+ GetCurrentUserVariables();
+ #ifdef ENABLE_PYTHON
+- Plugins::PythonEventsInitialize(szUserDataFolder);
++ Plugins::PythonEventsInitialize(szScriptsFolder);
+ #endif
+
+ m_thread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&CEventSystem::Do_Work, this)));
+@@ -179,11 +180,11 @@ void CEventSystem::SetEnabled(const bool bEnabled)
+
+ void CEventSystem::LoadEvents()
+ {
+- std::string dzv_Dir,s;
++ std::string s;
+ #ifdef WIN32
+- dzv_Dir = szUserDataFolder + "scripts\\dzVents\\generated_scripts\\";
++ dzv_Dir = szUserDataFolder + "generated_scripts\\";
+ #else
+- dzv_Dir = szUserDataFolder + "scripts/dzVents/generated_scripts/";
++ dzv_Dir = szUserDataFolder + "generated_scripts/";
+ #endif
+ boost::unique_lock<boost::shared_mutex> eventsMutexLock(m_eventsMutex);
+ _log.Log(LOG_STATUS, "EventSystem: reset all events...");
+@@ -274,18 +275,18 @@ void CEventSystem::LoadEvents()
+ void CEventSystem::Do_Work()
+ {
+ #ifdef WIN32
+- m_lua_Dir = szUserDataFolder + "scripts\\lua\\";
+- m_dzv_Dir = szUserDataFolder + "scripts\\dzVents\\runtime\\";
++ m_lua_Dir = szScriptsFolder + "lua\\";
++ m_dzv_Dir = szScriptsFolder + "dzVents\\runtime\\";
+ #else
+- m_lua_Dir = szUserDataFolder + "scripts/lua/";
+- m_dzv_Dir = szUserDataFolder + "scripts/dzVents/runtime/";
++ m_lua_Dir = szScriptsFolder + "lua/";
++ m_dzv_Dir = szScriptsFolder + "dzVents/runtime/";
+ #endif
+
+ #ifdef ENABLE_PYTHON
+ #ifdef WIN32
+- m_python_Dir = szUserDataFolder + "scripts\\python\\";
++ m_python_Dir = szScriptsFolder + "python\\";
+ #else
+- m_python_Dir = szUserDataFolder + "scripts/python/";
++ m_python_Dir = szScriptsFolder + "python/";
+ #endif
+ #endif
+ m_stoprequested = false;
+@@ -1426,9 +1427,9 @@ void CEventSystem::EvaluateEvent(const std::string &reason, const uint64_t Devic
+ {
+ std::string dzv_scripts;
+ #ifdef WIN32
+- dzv_scripts = szUserDataFolder + "scripts\\dzVents\\scripts\\";
++ dzv_scripts = szScriptsFolder + "dzVents\\scripts\\";
+ #else
+- dzv_scripts = szUserDataFolder + "scripts/dzVents/scripts/";
++ dzv_scripts = szScriptsFolder + "dzVents/scripts/";
+ #endif
+ DirectoryListing(FileEntries, dzv_scripts, false, true);
+ for (itt = FileEntries.begin(); itt != FileEntries.end(); ++itt)
+@@ -2404,7 +2405,7 @@ bool CEventSystem::parseBlocklyActions(const std::string &Actions, const std::st
+ }
+ #if !defined WIN32
+ if (sPath.find("/") != 0)
+- sPath = szUserDataFolder + "scripts/" + sPath;
++ sPath = szScriptsFolder + sPath;
+ #endif
+
+ m_sql.AddTaskItem(_tTaskItem::ExecuteScript(0.2f, sPath, sParam));
+@@ -3508,13 +3509,16 @@ void CEventSystem::EvaluateLua(const std::string &reason, const std::string &fil
+ {
+ std::stringstream lua_DirT;
+
+- lua_DirT << szUserDataFolder <<
++ lua_DirT << szScriptsFolder <<
+ #ifdef WIN32
+- "scripts\\dzVents\\";
++ "dzVents\\";
+ #else
+- "scripts/dzVents/";
++ "dzVents/";
+ #endif
+
++ lua_pushstring(lua_state, "generated_script_path");
++ lua_pushstring(lua_state, dzv_Dir.c_str());
++ lua_rawset(lua_state, -3);
+ lua_pushstring(lua_state, "script_path");
+ lua_pushstring(lua_state, lua_DirT.str().c_str());
+ lua_rawset(lua_state, -3);
+@@ -4695,9 +4699,9 @@ namespace http {
+
+ std::stringstream template_file;
+ #ifdef WIN32
+- template_file << szUserDataFolder << "scripts\\templates\\" << eventType << "." << interpreter;
++ template_file << szScriptsFolder << "templates\\" << eventType << "." << interpreter;
+ #else
+- template_file << szUserDataFolder << "scripts/templates/" << eventType << "." << interpreter;
++ template_file << szScriptsFolder << "templates/" << eventType << "." << interpreter;
+ #endif
+ std::ifstream file;
+ std::stringstream template_content;
+diff --git a/main/EventsPythonModule.cpp b/main/EventsPythonModule.cpp
+index f69e7219..2d97562e 100644
+--- a/main/EventsPythonModule.cpp
++++ b/main/EventsPythonModule.cpp
+@@ -108,7 +108,7 @@
+
+ int PythonEventsInitalized = 0;
+
+- bool PythonEventsInitialize(std::string szUserDataFolder) {
++ bool PythonEventsInitialize(std::string szScriptsFolder) {
+
+ if (!Plugins::Py_LoadLibrary())
+ {
+@@ -131,9 +131,9 @@
+
+ std::string ssPath;
+ #ifdef WIN32
+- ssPath = szUserDataFolder + "scripts\\python\\;";
++ ssPath = szScriptsFolder + "python\\;";
+ #else
+- ssPath = szUserDataFolder + "scripts/python/:";
++ ssPath = szScriptsFolder + "python/:";
+ #endif
+
+ std::wstring sPath = std::wstring(ssPath.begin(), ssPath.end());
+diff --git a/main/LuaHandler.cpp b/main/LuaHandler.cpp
+index 8fdcb278..c2ad98ff 100644
+--- a/main/LuaHandler.cpp
++++ b/main/LuaHandler.cpp
+@@ -22,7 +22,7 @@ extern "C" {
+ #include "mainworker.h"
+ #include "../hardware/hardwaretypes.h"
+
+-extern std::string szUserDataFolder;
++extern std::string szScriptsFolder;
+
+ int CLuaHandler::l_domoticz_updateDevice(lua_State* lua_state)
+ {
+@@ -155,9 +155,9 @@ bool CLuaHandler::executeLuaScript(const std::string &script, const std::string
+ {
+ std::stringstream lua_DirT;
+ #ifdef WIN32
+- lua_DirT << szUserDataFolder << "scripts\\lua_parsers\\";
++ lua_DirT << szScriptsFolder << "lua_parsers\\";
+ #else
+- lua_DirT << szUserDataFolder << "scripts/lua_parsers/";
++ lua_DirT << szScriptsFolder << "lua_parsers/";
+ #endif
+ std::string lua_Dir = lua_DirT.str();
+
+diff --git a/main/SQLHelper.cpp b/main/SQLHelper.cpp
+index 491aa5a2..d529243a 100644
+--- a/main/SQLHelper.cpp
++++ b/main/SQLHelper.cpp
+@@ -633,6 +633,7 @@ const char *sqlCreateMobileDevices =
+ "[LastUpdate] DATETIME DEFAULT(datetime('now', 'localtime'))"
+ ");";
+
++extern std::string szScriptsFolder;
+ extern std::string szUserDataFolder;
+
+ CSQLHelper::CSQLHelper(void)
+@@ -3683,9 +3684,9 @@ uint64_t CSQLHelper::UpdateValueInt(const int HardwareID, const char* ID, const
+ //Execute possible script
+ std::string scriptname;
+ #ifdef WIN32
+- scriptname = szUserDataFolder + "scripts\\domoticz_main.bat";
++ scriptname = szScriptsFolder + "domoticz_main.bat";
+ #else
+- scriptname = szUserDataFolder + "scripts/domoticz_main";
++ scriptname = szScriptsFolder + "domoticz_main";
+ #endif
+ if (file_exist(scriptname.c_str()))
+ {
+@@ -6641,7 +6642,7 @@ bool CSQLHelper::HandleOnOffAction(const bool bIsOn, const std::string &OnAction
+ std::string scriptname = OnAction.substr(9);
+ #if !defined WIN32
+ if (scriptname.find("/") != 0)
+- scriptname = szUserDataFolder + "scripts/" + scriptname;
++ scriptname = szScriptsFolder + scriptname;
+ #endif
+ std::string scriptparams="";
+ //Add parameters
+@@ -6675,7 +6676,7 @@ bool CSQLHelper::HandleOnOffAction(const bool bIsOn, const std::string &OnAction
+ std::string scriptname = OffAction.substr(9);
+ #if !defined WIN32
+ if (scriptname.find("/") != 0)
+- scriptname = szUserDataFolder + "scripts/" + scriptname;
++ scriptname = szScriptsFolder + scriptname;
+ #endif
+ std::string scriptparams = "";
+ int pindex = scriptname.find(' ');
+diff --git a/main/WebServer.cpp b/main/WebServer.cpp
+index f8471791..d2cf10b2 100644
+--- a/main/WebServer.cpp
++++ b/main/WebServer.cpp
+@@ -59,6 +59,7 @@
+
+ #define round(a) ( int ) ( a + .5 )
+
++extern std::string szScriptsFolder;
+ extern std::string szUserDataFolder;
+ extern std::string szWWWFolder;
+
+@@ -2987,9 +2988,9 @@ namespace http {
+ if (scriptname.find("..") != std::string::npos)
+ return;
+ #ifdef WIN32
+- scriptname = szUserDataFolder + "scripts\\" + scriptname;
++ scriptname = szScriptsFolder + scriptname;
+ #else
+- scriptname = szUserDataFolder + "scripts/" + scriptname;
++ scriptname = szScriptsFolder + scriptname;
+ #endif
+ if (!file_exist(scriptname.c_str()))
+ return;
+diff --git a/main/domoticz.cpp b/main/domoticz.cpp
+index 5ef96f68..52599b14 100644
+--- a/main/domoticz.cpp
++++ b/main/domoticz.cpp
+@@ -136,6 +136,7 @@ static const _facilities facilities[] =
+ };
+ std::string logfacname = "user";
+ #endif
++std::string szScriptsFolder;
+ std::string szStartupFolder;
+ std::string szUserDataFolder;
+ std::string szWWWFolder;
+@@ -696,6 +697,19 @@ int main(int argc, char**argv)
+ szUserDataFolder = szroot;
+ }
+
++ szScriptsFolder=szStartupFolder;
++ if (cmdLine.HasSwitch("-scripts"))
++ {
++ if (cmdLine.GetArgumentCount("-scripts") != 1)
++ {
++ _log.Log(LOG_ERROR, "Please specify a path for scripts directory");
++ return 1;
++ }
++ std::string szroot = cmdLine.GetSafeArgument("-scripts", 0, "");
++ if (szroot.size() != 0)
++ szScriptsFolder = szroot;
++ }
++
+ if (cmdLine.HasSwitch("-startupdelay"))
+ {
+ if (cmdLine.GetArgumentCount("-startupdelay") != 1)
+diff --git a/main/mainworker.cpp b/main/mainworker.cpp
+index 803690e1..e89a783b 100644
+--- a/main/mainworker.cpp
++++ b/main/mainworker.cpp
+@@ -159,6 +159,7 @@
+
+ #define round(a) ( int ) ( a + .5 )
+
++extern std::string szScriptsFolder;
+ extern std::string szStartupFolder;
+ extern std::string szUserDataFolder;
+ extern std::string szWWWFolder;
+@@ -1473,8 +1474,8 @@ void MainWorker::Do_Work()
+ m_sql.GetPreferencesVar("ReleaseChannel", nValue);
+ bool bIsBetaChannel = (nValue != 0);
+
+- std::string scriptname = szUserDataFolder + "scripts/download_update.sh";
+- std::string strparm = szUserDataFolder;
++ std::string scriptname = szScriptsFolder + "download_update.sh";
++ std::string strparm = szScriptsFolder;
+ if (bIsBetaChannel)
+ strparm += " /beta";
+
+diff --git a/notifications/NotificationHTTP.cpp b/notifications/NotificationHTTP.cpp
+index decff3b4..632e4e66 100644
+--- a/notifications/NotificationHTTP.cpp
++++ b/notifications/NotificationHTTP.cpp
+@@ -6,7 +6,7 @@
+ #include "../main/SQLHelper.h"
+ #include "../main/Logger.h"
+
+-extern std::string szUserDataFolder;
++extern std::string szScriptsFolder;
+
+ CNotificationHTTP::CNotificationHTTP() : CNotificationBase(std::string("http"), OPTIONS_NONE)
+ {
+@@ -105,7 +105,7 @@ bool CNotificationHTTP::SendMessageImplementation(
+ std::string scriptparams = "";
+ #if !defined WIN32
+ if (scriptname.find("/") != 0)
+- scriptname = szUserDataFolder + "scripts/" + scriptname;
++ scriptname = szScriptsFolder + scriptname;
+ #endif
+ //Add parameters
+ uPos = scriptname.find(" ");
+diff --git a/push/GooglePubSubPush.cpp b/push/GooglePubSubPush.cpp
+index 359a7d7c..46e489f6 100644
+--- a/push/GooglePubSubPush.cpp
++++ b/push/GooglePubSubPush.cpp
+@@ -22,7 +22,7 @@ extern "C" {
+ using namespace boost::python;
+ #endif
+
+-extern std::string szUserDataFolder;
++extern std::string szScriptsFolder;
+
+ // this should be filled in by the preprocessor
+ extern const char * Python_exe;
+@@ -231,11 +231,11 @@ void CGooglePubSubPush::DoGooglePubSubPush()
+
+ #ifdef ENABLE_PYTHON_DECAP
+ #ifdef WIN32
+- python_DirT << szUserDataFolder << "scripts\\python\\";
+- std::string filename = szUserDataFolder + "scripts\\python\\" + "googlepubsub.py";
++ python_DirT << szScriptsFolder << "python\\";
++ std::string filename = szScriptsFolder + "python\\" + "googlepubsub.py";
+ #else
+- python_DirT << szUserDataFolder << "scripts/python/";
+- std::string filename = szUserDataFolder + "scripts/python/" + "googlepubsub.py";
++ python_DirT << szScriptsFolder << "python/";
++ std::string filename = szScriptsFolder + "python/" + "googlepubsub.py";
+ #endif
+
+ wchar_t * argv[1];
+diff --git a/scripts/dzVents/runtime/dzVents.lua b/scripts/dzVents/runtime/dzVents.lua
+index d0dfa869..8370d6a9 100644
+--- a/scripts/dzVents/runtime/dzVents.lua
++++ b/scripts/dzVents/runtime/dzVents.lua
+@@ -1,8 +1,9 @@
+ local currentPath = globalvariables['script_path']
++local generatedScriptPath = globalvariables['generated_script_path']
+ local triggerReason = globalvariables['script_reason']
+
+ _G.scriptsFolderPath = currentPath .. 'scripts' -- global
+-_G.generatedScriptsFolderPath = currentPath .. 'generated_scripts' -- global
++_G.generatedScriptsFolderPath = generatedScriptPath -- global
+ _G.dataFolderPath = currentPath .. 'data' -- global
+
+ package.path = package.path .. ';' .. currentPath .. '?.lua'
+@@ -10,7 +11,7 @@ package.path = package.path .. ';' .. currentPath .. 'runtime/?.lua'
+ package.path = package.path .. ';' .. currentPath .. 'runtime/device-adapters/?.lua'
+ package.path = package.path .. ';' .. currentPath .. 'dzVents/?.lua'
+ package.path = package.path .. ';' .. currentPath .. 'scripts/?.lua'
+-package.path = package.path .. ';' .. currentPath .. 'generated_scripts/?.lua'
++package.path = package.path .. ';' .. generatedScriptPath .. '?.lua'
+ package.path = package.path .. ';' .. currentPath .. 'data/?.lua'
+
+ local EventHelpers = require('EventHelpers')
+++ /dev/null
-#
-# Copyright (C) 2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=f2fs-tools
-PKG_VERSION:=1.7.0
-PKG_RELEASE:=1
-
-PKG_LICENSE:=GPLv2
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git/snapshot/
-PKG_MD5SUM:=9db22274264f0c88dbee012f257917b1
-
-PKG_FIXUP:=autoreconf
-PKG_BUILD_PARALLEL:=1
-PKG_INSTALL:=1
-
-PKG_MAINTAINER:=Luka Perkov <luka@openwrt.org>
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/f2fs-tools/Default
- SECTION:=utils
- CATEGORY:=Utilities
- SUBMENU:=Filesystem
- DEPENDS:=+libf2fs
- URL:=http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git
-endef
-
-define Package/mkf2fs
- $(Package/f2fs-tools/Default)
- TITLE:=Utility for creating a Flash-Friendly File System (F2FS)
-endef
-
-define Package/f2fsck
- $(Package/f2fs-tools/Default)
- TITLE:=Utility for checking/repairing a Flash-Friendly File System (F2FS)
-endef
-
-define Package/f2fs-tools
- $(Package/f2fs-tools/Default)
- TITLE:=Tools for Flash-Friendly File System (F2FS)
- DEPENDS += +mkf2fs +f2fsck
-endef
-
-define Package/libf2fs
- SECTION:=libs
- CATEGORY:=Libraries
- TITLE:=Library for Flash-Friendly File System (F2FS) tools
- DEPENDS:=+libuuid
-endef
-
-define Package/libf2fs/install
- $(INSTALL_DIR) $(1)/usr/lib
- $(CP) \
- $(PKG_INSTALL_DIR)/usr/lib/libf2fs.so* $(1)/usr/lib/
-endef
-
-define Package/mkf2fs/install
- $(INSTALL_DIR) $(1)/usr/sbin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/mkfs.f2fs $(1)/usr/sbin
-endef
-
-define Package/f2fsck/install
- $(INSTALL_DIR) $(1)/usr/sbin
-
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/fsck.f2fs $(1)/usr/sbin
- ln -s /usr/sbin/fsck.f2fs $(1)/usr/sbin/defrag.f2fs
- ln -s /usr/sbin/fsck.f2fs $(1)/usr/sbin/dump.f2fs
- ln -s /usr/sbin/fsck.f2fs $(1)/usr/sbin/sload.f2fs
- ln -s /usr/sbin/fsck.f2fs $(1)/usr/sbin/resize.f2fs
-endef
-
-define Package/f2fs-tools/install
- $(INSTALL_DIR) $(1)/usr/sbin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/f2fstat $(1)/usr/sbin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/fibmap.f2fs $(1)/usr/sbin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/parse.f2fs $(1)/usr/sbin
-endef
-
-$(eval $(call BuildPackage,libf2fs))
-$(eval $(call BuildPackage,mkf2fs))
-$(eval $(call BuildPackage,f2fsck))
-$(eval $(call BuildPackage,f2fs-tools))
+++ /dev/null
---- a/configure.ac
-+++ b/configure.ac
-@@ -20,14 +20,9 @@ AC_DEFINE([F2FS_MINOR_VERSION], m4_bpats
- [\([0-9]*\).\([0-9]*\)\(\w\|\W\)*], [\2]),
- [Minor version for f2fs-tools])
-
--AC_CHECK_FILE(.git,
-- AC_DEFINE([F2FS_TOOLS_DATE],
-- "m4_bpatsubst(f2fs_tools_gitdate,
-- [\([0-9-]*\)\(\w\|\W\)*], [\1])",
-- [f2fs-tools date based on Git commits]),
-- AC_DEFINE([F2FS_TOOLS_DATE],
-+AC_DEFINE([F2FS_TOOLS_DATE],
- "f2fs_tools_date",
-- [f2fs-tools date based on Source releases]))
-+ [f2fs-tools date based on Source releases])
-
- AC_CONFIG_SRCDIR([config.h.in])
- AC_CONFIG_HEADER([config.h])
+++ /dev/null
---- a/include/f2fs_fs.h
-+++ b/include/f2fs_fs.h
-@@ -12,6 +12,7 @@
- #include <inttypes.h>
- #include <linux/types.h>
- #include <sys/types.h>
-+#include <byteswap.h>
-
- #ifdef HAVE_CONFIG_H
- #include <config.h>
+++ /dev/null
-From b0a2386089fd6efade6b89094325ed8a9f8c6fff Mon Sep 17 00:00:00 2001
-From: Christian Hesse <mail@eworm.de>
-Date: Sat, 22 Oct 2016 22:06:54 +0200
-Subject: [PATCH] sload.f2fs: allow to build without libselinux
-
-Some systems do not have libselinux. Allow to build sload.f2fs without
-support for selinux.
-
-Signed-off-by: Christian Hesse <mail@eworm.de>
-Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
----
- configure.ac | 4 +++-
- fsck/sload.c | 12 +++++++++++-
- 2 files changed, 14 insertions(+), 2 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index f519790..7a62328 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -54,7 +54,9 @@ AC_PATH_PROG([LDCONFIG], [ldconfig],
-
- # Checks for libraries.
- PKG_CHECK_MODULES([libuuid], [uuid])
--PKG_CHECK_MODULES([libselinux], [libselinux])
-+PKG_CHECK_MODULES([libselinux], [libselinux],
-+ [AC_DEFINE([HAVE_LIBSELINUX], [1], [Use libselinux])],
-+ [AC_MSG_NOTICE([libselinux not found])])
-
- # Checks for header files.
- AC_CHECK_HEADERS([linux/fs.h fcntl.h mntent.h stdlib.h string.h \
-diff --git a/fsck/sload.c b/fsck/sload.c
-index ea072d1..68799c1 100644
---- a/fsck/sload.c
-+++ b/fsck/sload.c
-@@ -16,8 +16,11 @@
- #include <libgen.h>
- #include <dirent.h>
- #include <mntent.h>
-+
-+#ifdef HAVE_LIBSELINUX
- #include <selinux/selinux.h>
- #include <selinux/label.h>
-+#endif
-
- #ifdef WITH_ANDROID
- #include <selinux/label.h>
-@@ -110,10 +113,12 @@ static int build_directory(struct f2fs_sb_info *sbi, const char *full_path,
- handle_selabel(dentries + i, S_ISDIR(stat.st_mode),
- target_out_dir);
-
-+#ifdef HAVE_LIBSELINUX
- if (sehnd && selabel_lookup(sehnd, &dentries[i].secon,
- dentries[i].path, stat.st_mode) < 0)
- ERR_MSG("Cannot lookup security context for %s\n",
- dentries[i].path);
-+#endif
-
- dentries[i].pino = dir_ino;
-
-@@ -174,6 +179,7 @@ static int build_directory(struct f2fs_sb_info *sbi, const char *full_path,
- MSG(1, "Error unknown file type\n");
- }
-
-+#ifdef HAVE_LIBSELINUX
- if (dentries[i].secon) {
- inode_set_selinux(sbi, dentries[i].ino, dentries[i].secon);
- MSG(1, "File = %s \n----->SELinux context = %s\n",
-@@ -184,10 +190,12 @@ static int build_directory(struct f2fs_sb_info *sbi, const char *full_path,
- dentries[i].gid, dentries[i].capabilities);
- }
-
-+ free(dentries[i].secon);
-+#endif
-+
- free(dentries[i].path);
- free(dentries[i].full_path);
- free((void *)dentries[i].name);
-- free(dentries[i].secon);
- }
-
- free(dentries);
-@@ -218,6 +226,7 @@ int f2fs_sload(struct f2fs_sb_info *sbi, const char *from_dir,
- return ret;
- }
-
-+#ifdef HAVE_LIBSELINUX
- if (sehnd) {
- char *secontext = NULL;
-
-@@ -233,6 +242,7 @@ int f2fs_sload(struct f2fs_sb_info *sbi, const char *from_dir,
- }
- free(secontext);
- }
-+#endif
-
- /* update curseg info; can update sit->types */
- move_curseg_info(sbi, SM_I(sbi)->main_blkaddr);
---
-2.10.0
-
include $(TOPDIR)/rules.mk
PKG_NAME:=less
-PKG_VERSION:=481
+PKG_VERSION:=487
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.greenwoodsoftware.com/less
-PKG_HASH:=3fa38f2cf5e9e040bb44fffaa6c76a84506e379e47f5a04686ab78102090dda5
+PKG_HASH:=f3dc8455cb0b2b66e0c6b816c00197a71bf6d1787078adeee0bcf2aea4b12706
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE_URL:=https://github.com/webstack/mbtools.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=149e9c69cec180f18cf8781cf5285b97352bf719
-PKG_MIRROR_HASH:=1e6e2f0e40b1c596bb55279bcedfac5a8deb86ef56978dce01a78877151c9352
+PKG_MIRROR_HASH:=3aed4146e06bd9f9bcc271824c6b1d75d1fc2a0bd980f2b729c3b4755c6f70a8
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_FIXUP:=autoreconf
PKG_SOURCE_URL:=https://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git
PKG_SOURCE_DATE:=2017-03-20
PKG_SOURCE_VERSION:=37c86e60c0442fef570b75cd81aeb1db4d0cbafd
-PKG_MIRROR_HASH:=fc49fce4f592ffdc2a9c8f453ea96b28eb3ece0c6303ed73462cc61fb5b63318
+PKG_MIRROR_HASH:=652958e818d984804be6846ba504961f31c6e98414d0d34ec7a0d76d0844584a
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=
include $(TOPDIR)/rules.mk
PKG_NAME:=nano
-PKG_VERSION:=2.8.6
+PKG_VERSION:=2.8.7
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GNU/nano
-PKG_HASH:=9a46962a3ae59db922467a095217ed23280b42d80640f932f3a59ba2a6a85776
+PKG_HASH:=fbe31746958698d73c6726ee48ad8b0612697157961a2e9aaa83b4aa53d1165a
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
--- /dev/null
+From 28cfab7580c42a6d6c9c5d787ce736094fd51a0c Mon Sep 17 00:00:00 2001
+From: Benno Schulenberg <bensberg@telfort.nl>
+Date: Tue, 29 Aug 2017 19:28:44 +0200
+Subject: tweaks: fix compilation when configured with --enable-tiny
+
+When moving the cursor to the top-left corner, it is not necessary
+to compute leftedge because firstcolumn IS the relevant leftedge.
+
+Reported-by: Jordi Mallach <jordi@debian.org>
+---
+ src/move.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/move.c b/src/move.c
+index d138356..ce276e4 100644
+--- a/src/move.c
++++ b/src/move.c
+@@ -121,7 +121,7 @@ void do_page_up(void)
+ openfile->current = openfile->edittop;
+ openfile->current_y = 0;
+
+- leftedge = leftedge_for(openfile->firstcolumn, openfile->edittop);
++ leftedge = openfile->firstcolumn;
+ target_column = 0;
+ } else
+ get_edge_and_target(&leftedge, &target_column);
+@@ -152,7 +152,7 @@ void do_page_down(void)
+ openfile->current = openfile->edittop;
+ openfile->current_y = 0;
+
+- leftedge = leftedge_for(openfile->firstcolumn, openfile->edittop);
++ leftedge = openfile->firstcolumn;
+ target_column = 0;
+ } else
+ get_edge_and_target(&leftedge, &target_column);
+--
+cgit v1.0-41-gc330
+
--- /dev/null
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=netwhere
+PKG_VERSION:=0.6
+PKG_RELEASE:=1
+PKG_LICENSE:=MIT
+
+PKG_SOURCE:=netwhere-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://github.com/benhsmith/netwhere/archive/$(PKG_VERSION)/
+PKG_HASH:=0820cf5e59bf6b635c09a6282c664d6966b4d2887736b0f20937c86a8a03f563
+
+PKG_BUILD_DEPENDS:=boost
+
+PKG_MAINTAINER:=Ben Smith <le.ben.smith@gmail.com>
+
+CMAKE_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/netwhere
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=Netwhere
+ MAINTAINER:=Ben Smith
+ DEPENDS:=+libtins +libmicrohttpd
+endef
+
+define Package/netwhere/description
+ Network monitor
+endef
+
+define Package/netwhere/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/netwhere $(1)/usr/bin/netwhere
+ $(INSTALL_DIR) $(1)/www/netwhere
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/html/index.html $(1)/www/netwhere/
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/html/netwhere.js $(1)/www/netwhere/
+endef
+
+$(eval $(call BuildPackage,netwhere))
PKG_NAME:=pciutils
PKG_VERSION:=3.5.2
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/software/utils/pciutils
of PCI devices
endef
-define Package/pciutils/postinst
-#!/bin/sh
-[ -z "$${IPKG_INSTROOT}" ] || \
-(cd $${PKG_ROOT}/usr/share; $${PKG_ROOT}/usr/sbin/update-pciids; rm pci.ids.gz.old)
-exit 0
+PCI_IDS_REV:=91cfa8a0c994634ba9a4a8639aa2ac6dff8453b9
+PCI_IDS_FILE:=pci.ids.$(PCI_IDS_REV)
+define Download/pci_ids
+ FILE:=$(PCI_IDS_FILE)
+ URL_FILE:=pci.ids
+ URL:=@GITHUB/pciutils/pciids/$(PCI_IDS_REV)
+ HASH:=798528092d1c58eeac99c6505033ec4ce8fe3e19d7e0c41b06790d58753a89b6
+endef
+$(eval $(call Download,pci_ids))
+
+define Build/Prepare
+ $(call Build/Prepare/Default)
+ $(RM) $(PKG_BUILD_DIR)/pci.ids
+ $(CP) $(DL_DIR)/$(PCI_IDS_FILE) $(PKG_BUILD_DIR)/pci.ids
endef
MAKE_FLAGS += \
include $(TOPDIR)/rules.mk
PKG_NAME:=sysstat
-PKG_VERSION:=11.0.4
-PKG_RELEASE:=2
+PKG_VERSION:=11.6.0
+PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=http://perso.orange.fr/sebastien.godard/
-PKG_HASH:=9a721992e70883c1b9a09d9977501662587b909a014ac0eaa397d30a963acc53
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://pagesperso-orange.fr/sebastien.godard/
+PKG_HASH:=14bb696545cba0d99e3492092c9ed15fe9b6da79df349695251b41d345e969a7
PKG_INSTALL:=1
--- /dev/null
+if PACKAGE_yara
+ comment "Optional modules"
+
+ config YARA_module_magic
+ bool "Magic module"
+ default y
+ help
+ Identify the type of the file based on the output of file command
+
+ config YARA_module_cuckoo
+ bool "Cuckoo module"
+ default n
+ help
+ Create rules based on behavioral info generated by a Cuckoo sandbox
+endif
+
--- /dev/null
+#
+# Copyright (C) 2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=yara
+PKG_VERSION:=3.6.3
+PKG_RELEASE:=1
+PKG_LICENSE:=BSD-3-Clause
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://github.com/VirusTotal/yara/archive/v$(PKG_VERSION)/
+PKG_HASH:=ad2c0e788b4d8b2f3e9078f448754313249a302b749b9a24e932bfc5e141a5e8
+
+PKG_FIXUP:=autoreconf
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/yara
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=Pattern matching swiss knife for malware researchers
+ URL:=http://virustotal.github.io/yara/
+ MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
+ DEPENDS:= +libopenssl
+ DEPENDS+= +YARA_module_magic:libmagic
+ DEPENDS+= +YARA_module_cuckoo:jansson
+ MENU:=1
+endef
+
+define Package/yara/description
+ YARA is a tool aimed at (but not limited to) helping malware researchers
+ to identify and classify malware samples. With YARA you can create
+ descriptions of malware families based on textual or binary patterns.
+endef
+
+CONFIGURE_ARGS += \
+ --disable-dotnet \
+ $(if $(YARA_module_magic),--enable,--disable)-magic \
+ $(if $(YARA_module_cuckoo),--enable,--disable)-cuckoo
+
+define Package/yara/config
+ source "$(SOURCE)/Config.in"
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/include
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/yara.h $(1)/usr/include
+ $(INSTALL_DIR) $(1)/usr/include/yara
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/yara/* $(1)/usr/include/yara
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libyara.{a,la,so*} $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/yara.pc $(1)/usr/lib/pkgconfig
+endef
+
+define Package/yara/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/yara $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/yarac $(1)/usr/bin/
+ $(INSTALL_DIR) $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libyara.so* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,yara))