Merge pull request #4024 from danrl/mwan
authorHannu Nyman <hannu.nyman@iki.fi>
Wed, 15 Mar 2017 16:14:40 +0000 (18:14 +0200)
committerGitHub <noreply@github.com>
Wed, 15 Mar 2017 16:14:40 +0000 (18:14 +0200)
net/mwan3-luci: removed application

136 files changed:
CONTRIBUTING.md
admin/htop/Makefile
admin/monit/Makefile
admin/monit/patches/001-fix-default-piddir.patch
admin/openwisp-config/Makefile [new file with mode: 0644]
admin/zabbix/Makefile
fonts/dejavu-fonts-ttf/Makefile
lang/lua-mosquitto/Makefile
lang/lua-openssl/Makefile
lang/lua-penlight/Makefile
lang/php7/Makefile
lang/python-cryptography/Makefile
lang/python-cryptography/patches/001-disable-setup-requirements.patch [new file with mode: 0644]
lang/python-ldap/Makefile
lang/python-psycopg2/Makefile
libs/boost/Makefile
libs/boost/patches/02_fix_libc_regression_execution_monitor.patch [new file with mode: 0644]
libs/flac/Makefile
libs/flac/patches/001-no-docs-and-examples.patch
libs/flac/patches/002-no-utility.patch
libs/flac/patches/005-gcc_debug_options.patch
libs/flac/patches/020-fix-musl-sigemptyset-x86.patch [deleted file]
libs/glib2/Makefile
libs/icu/Makefile
libs/libarchive/Makefile
libs/libwebsockets/Makefile
libs/musl-fts/Makefile [new file with mode: 0644]
libs/pcre2/Makefile [new file with mode: 0644]
libs/sqlite3/Makefile
mail/dovecot/Makefile
mail/postfix/Makefile
mail/postfix/patches/501-include_stdio.patch [new file with mode: 0644]
mail/ssmtp/Makefile
multimedia/ffmpeg/Config.in
multimedia/ffmpeg/Makefile
multimedia/youtube-dl/Makefile
net/adblock/Makefile
net/adblock/files/README.md
net/adblock/files/adblock.init
net/adblock/files/adblock.sh
net/addrwatch/Makefile
net/addrwatch/files/addrwatch.init
net/aria2/Config.in
net/aria2/Makefile
net/bitlbee/Makefile
net/clamav/Makefile
net/clamav/files/clamav.config
net/clamav/files/clamav.init
net/clamav/files/freshclam.config
net/clamav/files/freshclam.init
net/clamav/patches/001-compile.patch
net/cshark/Makefile
net/ddns-scripts/Makefile
net/ddns-scripts/files/services
net/dynapoint/Makefile
net/fping/Makefile
net/gnunet/Makefile
net/gnurl/Makefile
net/irssi/Makefile
net/jool/Makefile
net/knot/Makefile
net/knot/patches/04_cookies_big_endian.patch [deleted file]
net/lighttpd/Makefile
net/lighttpd/patches/0001-mod_cgi-fix-CGI-local-redir-w-url.rewrite-once-fixes.patch [new file with mode: 0644]
net/mwan3/Makefile
net/net-snmp/Makefile
net/ntpd/Makefile
net/ntpd/files/ntpd.hotplug
net/openssh/Makefile
net/pptpd/files/pptpd.init
net/privoxy/Makefile
net/radicale/Makefile
net/ser2net/Makefile
net/strongswan/Makefile
net/strongswan/files/ipsec.init
net/tor/Makefile
net/travelmate/Makefile
net/travelmate/files/README.md
net/travelmate/files/travelmate.conf
net/travelmate/files/travelmate.init
net/travelmate/files/travelmate.sh
net/unbound/Makefile
net/unbound/files/README.md
net/unbound/files/odhcpd.sh
net/unbound/files/root.key
net/unbound/files/rootzone.sh
net/unbound/files/unbound.sh
net/unbound/files/unbound.uci
net/unbound/patches/001-conf.patch
net/vpnbypass/Makefile
net/vpnbypass/files/README.md
net/vpnbypass/files/vpnbypass.conf
net/vpnbypass/files/vpnbypass.init
net/webui-aria2/Makefile
net/webui-aria2/patches/001-simplify-flag-icon-css.patch [new file with mode: 0644]
net/wireguard/Makefile
net/wireguard/files/wireguard.sh
net/xinetd/Makefile
utils/collectd/Makefile
utils/cryptodev-linux/Makefile
utils/domoticz/Makefile [new file with mode: 0644]
utils/domoticz/files/domoticz.config [new file with mode: 0644]
utils/domoticz/files/domoticz.hotplug [new file with mode: 0644]
utils/domoticz/files/domoticz.init [new file with mode: 0644]
utils/domoticz/patches/001-Add-sslkey-option-to-allow-separate-cert-key-files-1.patch [new file with mode: 0644]
utils/domoticz/patches/002-Evohome-updates-to-6708.patch [new file with mode: 0644]
utils/domoticz/patches/900_fix-build.patch [new file with mode: 0644]
utils/domoticz/patches/901_no-udev.patch [new file with mode: 0644]
utils/domoticz/patches/902_add-scripts-path.patch [new file with mode: 0644]
utils/domoticz/patches/903_disable-libusb.patch [new file with mode: 0644]
utils/gpsd/files/gpsd.init
utils/luci-app-lxc/Makefile [deleted file]
utils/luci-app-lxc/files/controller/lxc.lua [deleted file]
utils/luci-app-lxc/files/lxc.config [deleted file]
utils/luci-app-lxc/files/model/cbi/lxc.lua [deleted file]
utils/luci-app-lxc/files/view/lxc.htm [deleted file]
utils/luci-app-lxc/files/www/luci-static/resources/cbi/green.gif [deleted file]
utils/luci-app-lxc/files/www/luci-static/resources/cbi/purple.gif [deleted file]
utils/luci-app-lxc/files/www/luci-static/resources/cbi/red.gif [deleted file]
utils/mc/Makefile
utils/mc/patches/010-subshell.patch
utils/mksh/Makefile
utils/mksh/patches/100-dot_mkshrc
utils/nano/Makefile
utils/open-plc-utils/Makefile
utils/openzwave/Makefile [new file with mode: 0644]
utils/openzwave/patches/001-unix-fix-compilation-against-musl-libc-1127.patch [new file with mode: 0644]
utils/openzwave/patches/900_fix-build.patch [new file with mode: 0644]
utils/openzwave/patches/901_no-hidcontroller.patch [new file with mode: 0644]
utils/openzwave/patches/902_no-udev.patch [new file with mode: 0644]
utils/owfs/Makefile
utils/screen/Makefile
utils/ttyd/Makefile
utils/vim/Makefile
utils/vim/patches/001-compile.patch [deleted file]
utils/zoneinfo/Makefile

index 29ba5dbaa9eab437bce9db6f4314486f08fbb1bd..4cfaef151ffd2c2e0b577649f365b611288f84ab 100644 (file)
@@ -22,6 +22,7 @@ All packages you commit or submit by pull-request should follow these simple gui
 * An optional PKG_LICENSE_FILES tag including the filenames of the license-files in the source-package.
     (E.g.: PKG_LICENSE_FILES:=COPYING)
 * PKG_RELEASE should be initially set to 1 or reset to 1 if the software version is changed. You should increment it if the package itself has changed. For example, modifying a support script, changing configure options like --disable* or --enable* switches, or if you changed something in the package which causes the resulting binaries to be different. Changes like correcting md5sums, changing mirror URLs, adding a maintainer field or updating a comment or copyright year in a Makefile do not require a change to PKG_RELEASE.
+* Avoid reuse of PKG_NAME in call, define and eval lines to improve readability.
 
 #### Commits in your pull-requests should:
 
index 010f36dbf4358241a8e86a322f22170e8b532666..d45b3d9371f2278cb610b64174765ec1ab916621 100644 (file)
@@ -13,7 +13,7 @@ PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://hisham.hm/htop/releases/$(PKG_VERSION)/
-PKG_MD5SUM:=7d354d904bad591a931ad57e99fea84a
+PKG_HASH:=179be9dccb80cee0c5e1a1f58c8f72ce7b2328ede30fb71dcdf336539be2f487
 
 PKG_LICENSE:=GPL-2.0
 PKG_LICENSE_FILES:=COPYING
index 4f8c14a29e4ffd7865ac11ab8b58138fd035d4a1..ac2fcecc5cea3d83ab1a3331d4b5c0d03e092487 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=monit
-PKG_VERSION:=5.18
+PKG_VERSION:=5.20.0
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=ebac395ec50c1ae64d568db1260bc049d0e0e624c00e79d7b1b9a59c2679b98d
 PKG_SOURCE_URL:=http://mmonit.com/monit/dist
-PKG_MD5SUM:=a1bfac0fbb83439435f8616200d2364d
 
 PKG_LICENSE:=AGPL-3.0
 PKG_LICENSE_FILES:=COPYING
@@ -26,7 +26,7 @@ include $(INCLUDE_DIR)/package.mk
 define Package/monit/Default
   SECTION:=admin
   CATEGORY:=Administration
-  DEPENDS:= +libpthread
+  DEPENDS:= +libpthread +zlib
   TITLE:=System services monitoring utility
   URL:=http://mmonit.com/monit/
   MAINTAINER:=Etienne CHAMPETIER <champetier.etienne@gmail.com>
index 7af871f0deb4492e927c697caf1c5b2f9aee00ac..3d6059df706b0c817113387ce5c4a12655944391 100644 (file)
@@ -1,6 +1,6 @@
 --- a/configure
 +++ b/configure
-@@ -13849,14 +13849,7 @@ fi
+@@ -13839,14 +13839,7 @@ fi
  # Find the right directory to put the root-mode PID file in
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking pid file location" >&5
  $as_echo_n "checking pid file location... " >&6; }
diff --git a/admin/openwisp-config/Makefile b/admin/openwisp-config/Makefile
new file mode 100644 (file)
index 0000000..ed539b0
--- /dev/null
@@ -0,0 +1,119 @@
+# openwisp.org
+#
+# This is free software, licensed under the GNU General Public License v3.
+# See /LICENSE for more information.
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=openwisp-config
+PKG_VERSION:=0.4.5
+PKG_RELEASE:=1
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://github.com/openwisp/openwisp-config.git
+PKG_SOURCE_VERSION:=0.4.5
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
+PKG_MIRROR_HASH:=017a8ed35ebfda2805426e7da02559d5cc2845ee9ded60fdae8e848d377424fb
+PKG_LICENSE:=GPL-3.0
+PKGARCH:=all
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/openwisp-config/default
+       TITLE:=Remote configuration management agent ($(2) variant)
+       CATEGORY:=Administration
+       SECTION:=admin
+       SUBMENU:=openwisp
+       DEPENDS:=+curl +lua +libuci-lua +luafilesystem $(3)
+       VARIANT:=$(1)
+       MAINTAINER:=Federico Capoano <f.capoano@cineca.it>
+       URL:=http://openwisp.org
+endef
+
+Package/openwisp-config-openssl=$(call Package/openwisp-config/default,openssl,OpenSSL,+ca-certificates +libopenssl)
+Package/openwisp-config-mbedtls=$(call Package/openwisp-config/default,mbedtls,mbedTLS,+ca-certificates +libmbedtls)
+Package/openwisp-config-cyassl=$(call Package/openwisp-config/default,cyassl,CyaSSL,+ca-certificates +libcyassl)
+# deprecated on recent versions of OpenWRT (>= Designated Driver) and LEDE (>= 17.01)
+Package/openwisp-config-polarssl=$(call Package/openwisp-config/default,polarssl,PolarSSL,+ca-certificates +libpolarssl)
+Package/openwisp-config-nossl=$(call Package/openwisp-config/default,nossl,No SSL)
+
+define Build/Compile
+endef
+
+define Package/openwisp-config-$(BUILD_VARIANT)/conffiles
+/etc/config/openwisp
+endef
+
+ifeq ($(BUILD_VARIANT),openssl)
+CONFIG_OPENWISP_UCI:=ssl
+endif
+ifeq ($(BUILD_VARIANT),mbedtls)
+CONFIG_OPENWISP_UCI:=ssl
+endif
+ifeq ($(BUILD_VARIANT),cyassl)
+CONFIG_OPENWISP_UCI:=ssl
+endif
+ifeq ($(BUILD_VARIANT),polarssl)
+CONFIG_OPENWISP_UCI:=ssl
+endif
+ifeq ($(BUILD_VARIANT),nossl)
+CONFIG_OPENWISP_UCI:=nossl
+endif
+
+
+define Package/openwisp-config-$(BUILD_VARIANT)/install
+       $(INSTALL_DIR) \
+               $(1)/usr/sbin \
+               $(1)/etc/init.d \
+               $(1)/etc/config \
+               $(1)/etc/openwisp \
+               $(1)/usr/lib/lua/openwisp
+
+       $(INSTALL_BIN) \
+               $(PKG_BUILD_DIR)/openwisp-config/files/openwisp.agent \
+               $(1)/usr/sbin/openwisp_config
+
+       $(INSTALL_BIN) \
+               $(PKG_BUILD_DIR)/openwisp-config/files/openwisp.init \
+               $(1)/etc/init.d/openwisp_config
+
+       $(INSTALL_CONF) $(PKG_BUILD_DIR)/openwisp-config/files/openwisp-$(CONFIG_OPENWISP_UCI).config \
+               $(1)/etc/config/openwisp
+
+       $(INSTALL_BIN) \
+               $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-reload-config \
+               $(1)/usr/sbin/openwisp-reload-config
+
+       $(INSTALL_BIN) \
+               $(PKG_BUILD_DIR)/openwisp-config/files/lib/openwisp/utils.lua \
+               $(1)/usr/lib/lua/openwisp/utils.lua
+
+       $(INSTALL_BIN) \
+               $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-store-unmanaged.lua \
+               $(1)/usr/sbin/openwisp-store-unmanaged
+
+       $(INSTALL_BIN) \
+               $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-restore-unmanaged.lua \
+               $(1)/usr/sbin/openwisp-restore-unmanaged
+
+       $(INSTALL_BIN) \
+               $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-remove-default-wifi.lua \
+               $(1)/usr/sbin/openwisp-remove-default-wifi
+
+       $(INSTALL_BIN) \
+               $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-uci-autoname.lua \
+               $(1)/usr/sbin/openwisp-uci-autoname
+
+       $(INSTALL_BIN) \
+               $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-update-config.lua \
+               $(1)/usr/sbin/openwisp-update-config
+
+       $(CP) $(PKG_BUILD_DIR)/VERSION $(1)/etc/openwisp/
+endef
+
+$(eval $(call BuildPackage,openwisp-config-openssl))
+$(eval $(call BuildPackage,openwisp-config-mbedtls))
+$(eval $(call BuildPackage,openwisp-config-cyassl))
+$(eval $(call BuildPackage,openwisp-config-polarssl))
+$(eval $(call BuildPackage,openwisp-config-nossl))
index f66c237d074fa48ee653f7dd6cc72fb61c8d4bf5..dcc41b9e506c06fa80073802cc62a5df5a6cec2f 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=zabbix
-PKG_VERSION:=3.0.3
+PKG_VERSION:=3.2.4
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=22cf19ef5a9478df2281bf518e8be38adc7dbc508bf63111e02388ca7aabeef4
 PKG_SOURCE_URL:=@SF/zabbix
-PKG_MD5SUM:=7c45d37000e67d75042695344c9937e0
 
 PKG_LICENSE:=GPL-2.0
 PKG_LICENSE_FILES:=COPYING
index 7a0885c91ba5a515c8c3d615fd58e363b5a7acb8..76bb48c1d95f79dfa724a31a0d3811bc02d4cc4e 100644 (file)
@@ -13,6 +13,9 @@ PKG_RELEASE:=1
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=@SF/dejavu
 PKG_HASH:=fa9ca4d13871dd122f61258a80d01751d603b4d3ee14095d65453b4e846e17d7
+PKG_LICENSE:=Bitstream-Vera-Fonts-Copyright Arev-Fonts-Copyright Public-Domain 
+PKG_LICENSE_FILES:=LICENSE
+PKG_MAINTAINER:=Mirko Vogt <mirko-dev@nanl.de>
 
 include $(INCLUDE_DIR)/package.mk
 
index 2220b2e07fc3b5e4b4f138ab9410dac45d554009..6497c9a968a678eb5d4c60135db4de6b3b0f5c00 100644 (file)
@@ -21,7 +21,7 @@ PKG_SOURCE_VERSION:=v$(PKG_VERSION)
 
 include $(INCLUDE_DIR)/package.mk
 
-define Package/$(PKG_NAME)
+define Package/lua-mosquitto
     SUBMENU:=Lua
     SECTION:=lang
     CATEGORY:=Languages
@@ -30,13 +30,13 @@ define Package/$(PKG_NAME)
     MAINTAINER:=Karl Palsson <karlp@remake.is>
 endef
 
-define Package/$(PKG_NAME)/description
+define Package/lua-mosquitto/description
        Lua bindings to libmosquitto
 endef
 
-define Package/$(PKG_NAME)/install
+define Package/lua-mosquitto/install
        $(INSTALL_DIR) $(1)/usr/lib/lua
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/mosquitto.so $(1)/usr/lib/lua
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,lua-mosquitto))
index 6f46e7a0884cf77e6132f1e1929012b0abbc7088..fddca22e37d708d34f9c8f8971322bcdd10875b6 100644 (file)
@@ -21,7 +21,7 @@ PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
 
 include $(INCLUDE_DIR)/package.mk
 
-define Package/$(PKG_NAME)
+define Package/lua-openssl
   SUBMENU:=Lua
   SECTION:=lang
   CATEGORY:=Languages
@@ -34,9 +34,9 @@ define Package/lua-openssl/description
     A free, MIT-licensed OpenSSL binding for Lua.
 endef
 
-define Package/$(PKG_NAME)/install
+define Package/lua-openssl/install
        $(INSTALL_DIR) $(1)/usr/lib/lua
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/openssl.so $(1)/usr/lib/lua/
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,lua-openssl))
index 5c1b72a2a049da77efe5b8c366e41f147a7b6273..de594ec126892cadadbc521342d4e58138d10723 100644 (file)
@@ -19,7 +19,7 @@ PKG_LICENSE_FILES:=LICENSE.md
 
 include $(INCLUDE_DIR)/package.mk
 
-define Package/$(PKG_NAME)
+define Package/lua-penlight
   SUBMENU:=Lua
   SECTION:=lang
   CATEGORY:=Languages
@@ -29,7 +29,7 @@ define Package/$(PKG_NAME)
   MAINTAINER:= Karl Palsson <karlp@remake.is>
 endef
 
-define Package/$(PKG_NAME)/description
+define Package/lua-penlight/description
   It is often said of Lua that it does not include batteries.
   Penlight is the batteries.
 endef
@@ -38,9 +38,9 @@ define Build/Compile
        echo "Nothing to compile, pure lua package"
 endef
 
-define Package/$(PKG_NAME)/install
+define Package/lua-penlight/install
        $(INSTALL_DIR) $(1)/usr/lib/lua
        $(CP) $(PKG_BUILD_DIR)/lua/pl $(1)/usr/lib/lua
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,lua-penlight))
index 6cd2bebd2e6e1f776101793d3704fccfc0e0a041..188da1f4964e9edbc8acd01a0af63922e6060379 100644 (file)
@@ -6,7 +6,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=php
-PKG_VERSION:=7.1.1
+PKG_VERSION:=7.1.2
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=Michael Heimpold <mhei@heimpold.de>
@@ -16,8 +16,8 @@ PKG_LICENSE_FILES:=LICENSE
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://www.php.net/distributions/
-PKG_MD5SUM:=65eef256f6e7104a05361939f5e23ada
-PKG_HASH:=b3565b0c1441064eba204821608df1ec7367abff881286898d900c2c2a5ffe70
+PKG_MD5SUM:=d79afea1870277c86fac903566fb6c5d
+PKG_HASH:=d815a0c39fd57bab1434a77ff0610fb507c22f790c66cd6f26e27030c4b3e971
 
 PKG_FIXUP:=libtool autoreconf
 PKG_BUILD_PARALLEL:=1
index d657089d76bf59c6200ca780d721a0d82f775fd3..9ac237d0138cb12cbdb9a9c91ec7e0e655006a1b 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=cryptography
 PKG_VERSION:=1.5.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://pypi.python.org/packages/21/e1/37fc14f9d77924e84ba0dcb88eb8352db914583af229287c6c965d66ba0d
diff --git a/lang/python-cryptography/patches/001-disable-setup-requirements.patch b/lang/python-cryptography/patches/001-disable-setup-requirements.patch
new file mode 100644 (file)
index 0000000..07ae483
--- /dev/null
@@ -0,0 +1,12 @@
+diff --git a/setup.py b/setup.py
+index b5c05df..a777dd7 100644
+--- a/setup.py
++++ b/setup.py
+@@ -266,6 +266,7 @@ class DummyPyTest(test):
+ with open(os.path.join(base_dir, "README.rst")) as f:
+     long_description = f.read()
++setup_requirements=[]
+ setup(
+     name=about["__title__"],
index 3cf66314b93b255f2e101c90c294c65355afe724..dae5316326cbf7ac1320eb7be4c6931022453afe 100644 (file)
@@ -8,15 +8,15 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-ldap
-PKG_VERSION:=2.4.30
+PKG_VERSION:=2.4.32
 PKG_RELEASE:=1
 PKG_MAINTAINER:=Dmitry Trefilov <the-alien@live.ru>
 PKG_LICENSE:=Python-style
 PKG_LICENSE_FILES:=LICENSE
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/84/61/36ca1a3474aee17ee975deaea51ae8725e49af29ca4c3e88743cd454d2bd
-PKG_MD5SUM:=948342ab28b9a4520ff421bf676b7a7b
+PKG_SOURCE_URL:=https://pypi.python.org/packages/67/d9/fa0ea70d1792875745116ad62ac8d4bcb07550b15cded591bb57df6a6d9a
+PKG_MD5SUM:=7c46c8a04acc227a778c7900c87cdfc7
 
 PKG_BUILD_DEPENDS:=python libopenldap
 
index cf7ada88d05746ad5e770020d89acb7ccc82196b..96817a4a3b4bf19e956d285b1834a4fe4ac738eb 100644 (file)
@@ -19,7 +19,7 @@ PKG_SOURCE_URL:=http://initd.org/psycopg/tarballs/PSYCOPG-2-6/
 PKG_MD5SUM:=4a392949ba31a378a18ed3e775a4693f
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/psycopg2-$(PKG_VERSION)
-PKG_BUILD_DEPENDS:=python libpq python-setuptools
+PKG_BUILD_DEPENDS:=python libpq python/host
 
 include $(INCLUDE_DIR)/package.mk
 $(call include_mk, python-package.mk)
index 45e9c6282bb6db898051f461b0078784d92f64bb..54c281ddd36273d0318f08b998ccc903b337946d 100644 (file)
@@ -18,7 +18,7 @@ include $(INCLUDE_DIR)/target.mk
 PKG_NAME:=boost
 PKG_VERSION:=1.63.0
 PKG_SOURCE_VERSION:=1_63_0
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)_$(PKG_SOURCE_VERSION).tar.bz2
 PKG_SOURCE_URL:=https://sourceforge.net/projects/boost/files/boost/$(PKG_VERSION)
diff --git a/libs/boost/patches/02_fix_libc_regression_execution_monitor.patch b/libs/boost/patches/02_fix_libc_regression_execution_monitor.patch
new file mode 100644 (file)
index 0000000..2c7533c
--- /dev/null
@@ -0,0 +1,22 @@
+Index: boost_1_63_0/boost/test/impl/execution_monitor.ipp
+===================================================================
+--- boost_1_63_0.orig/boost/test/impl/execution_monitor.ipp
++++ boost_1_63_0/boost/test/impl/execution_monitor.ipp
+@@ -1375,7 +1375,7 @@ enable( unsigned mask )
+ #endif
+     return ~old_cw & BOOST_FPE_ALL;
+-#elif defined(__GLIBC__) && defined(__USE_GNU)
++#elif defined(__GLIBC__) && defined(__USE_GNU) && !defined(BOOST_CLANG) && !defined(BOOST_NO_FENV_H)
+     if (BOOST_FPE_ALL == BOOST_FPE_OFF)
+         /* Not Implemented */
+         return BOOST_FPE_OFF;
+@@ -1415,7 +1415,7 @@ disable( unsigned mask )
+ #endif
+     return ~old_cw & BOOST_FPE_ALL;
+-#elif defined(__GLIBC__) && defined(__USE_GNU)
++#elif defined(__GLIBC__) && defined(__USE_GNU) && !defined(BOOST_CLANG) && !defined(BOOST_NO_FENV_H)
+     if (BOOST_FPE_ALL == BOOST_FPE_OFF)
+         /* Not Implemented */
+         return BOOST_FPE_INV;
index 01d7d646e3e06b8f272d688d9ae12dd1a373325e..136e03b9cf8e8b30712f314e8dd3aeca968d06ab 100644 (file)
@@ -8,12 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=flac
-PKG_VERSION:=1.3.1
-PKG_RELEASE:=3
+PKG_VERSION:=1.3.2
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://downloads.xiph.org/releases/flac/
-PKG_MD5SUM:=b9922c9a0378c88d3e901b234f852698
+PKG_MD5SUM:=454f1bfa3f93cc708098d7890d0499bd
+PKG_HASH:=91cfc3ed61dc40f47f050a109b08610667d73477af6ef36dcad31c31a4a8d53f
 PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
 
 PKG_INSTALL:=1
index 72b26310e3d5ee56800c15b2c558be97bba0cc6a..7c34288c3060633625e5775d94c4f334813e10ca 100644 (file)
@@ -4,7 +4,7 @@
  
  ACLOCAL_AMFLAGS = -I m4
  
--SUBDIRS = doc include m4 man src examples test build objs
+-SUBDIRS = doc include m4 man src examples test build objs microbench
 +SUBDIRS = include m4 src build objs
  
  EXTRA_DIST = \
index f74460259caeb6597195aebd755ea6e0c91bcdae..17aaf7392e2c8f88498334bd42e6bd2682392c61 100644 (file)
@@ -2,8 +2,8 @@
 +++ b/src/Makefile.am
 @@ -27,10 +27,7 @@ endif
  SUBDIRS = \
-       share \
        libFLAC \
+       share \
 -      flac \
 -      metaflac \
        $(XMMS_DIRS) \
index 80ffff1a689e00591d5755ce303bb6c738f79bb0..ea7db8e148eaba4a9321038e788c4301e483bd41 100644 (file)
@@ -1,16 +1,15 @@
 --- a/configure.ac
 +++ b/configure.ac
-@@ -348,11 +348,11 @@ fi
+@@ -386,10 +386,11 @@ fi
  
  if test "x$debug" = xtrue; then
        CPPFLAGS="-DDEBUG $CPPFLAGS"
--      CFLAGS=$(echo "$CFLAGS" | sed 's/-g//')
 -      CFLAGS="-g $CFLAGS"
 +      CFLAGS=$(echo "$CFLAGS" | sed 's/-g[0-9]*//')
 +      CFLAGS="-g3 $CFLAGS"
  else
        CPPFLAGS="-DNDEBUG $CPPFLAGS"
--      CFLAGS=$(echo "$CFLAGS" | sed 's/-O2//;s/-g//')
+-      CFLAGS=$(echo "$CFLAGS" | sed 's/-O2//')
 +      CFLAGS=$(echo "$CFLAGS" | sed 's/-O2//;s/-g[0-9]*//')
        CFLAGS="-O3 -funroll-loops $CFLAGS"
  fi
diff --git a/libs/flac/patches/020-fix-musl-sigemptyset-x86.patch b/libs/flac/patches/020-fix-musl-sigemptyset-x86.patch
deleted file mode 100644 (file)
index 0ee3ce5..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/src/libFLAC/cpu.c
-+++ b/src/libFLAC/cpu.c
-@@ -243,7 +243,7 @@ void FLAC__cpu_info(FLAC__CPUInfo *info)
-               struct sigaction sigill_save;
-               struct sigaction sigill_sse;
-               sigill_sse.sa_sigaction = sigill_handler_sse_os;
--              __sigemptyset(&sigill_sse.sa_mask);
-+              sigemptyset(&sigill_sse.sa_mask);
-               sigill_sse.sa_flags = SA_SIGINFO | SA_RESETHAND; /* SA_RESETHAND just in case our SIGILL return jump breaks, so we don't get stuck in a loop */
-               if(0 == sigaction(SIGILL, &sigill_sse, &sigill_save))
-               {
index dce64f9606da857f0a430fca50c3cd844d44c69f..9c8bac55c50ba34c7a0d098be7e3ad9c17cea95a 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=glib2
-PKG_VERSION:=2.50.2
-PKG_RELEASE:=2
+PKG_VERSION:=2.50.3
+PKG_RELEASE:=1
 
 PKG_SOURCE:=glib-$(PKG_VERSION).tar.xz
 PKG_BUILD_DIR:=$(BUILD_DIR)/glib-$(PKG_VERSION)
 PKG_SOURCE_URL:=@GNOME/glib/2.50
-PKG_MD5SUM:=5eeb2bfaf78a07be59585e8b6e80b1d6
+PKG_HASH:=82ee94bf4c01459b6b00cb9db0545c2237921e3060c0b74cff13fbc020cfd999
 
 PKG_BUILD_PARALLEL:=1
 HOST_BUILD_PARALLEL:=1
index 4c232cabe1a2f2fc9399094685c53e1750c923e9..58234d415c5491b63c013d46056a78d62180568b 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=icu4c
 PKG_VERSION:=58.2
-PKG_RELEASE:=4
+PKG_RELEASE:=5
 
 PKG_SOURCE:=$(PKG_NAME)-58_2-src.tgz
 PKG_SOURCE_URL:=http://download.icu-project.org/files/$(PKG_NAME)/$(PKG_VERSION)
@@ -79,19 +79,15 @@ HOST_CONFIGURE_ARGS:= \
        --prefix=$(STAGING_DIR_HOSTPKG)
 
 define Build/InstallDev
-       $(INSTALL_DIR) \
-               $(1)/usr/include
-
-       $(CP) \
-               $(PKG_INSTALL_DIR)/usr/include/* \
-               $(1)/usr/include/
-
-       $(INSTALL_DIR) \
-               $(1)/usr/lib
-
-       $(CP) \
-               $(PKG_INSTALL_DIR)/usr/lib/* \
-               $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/include
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_DIR) $(2)/bin
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/icu-config $(1)/usr/bin/
+       $(SED) 's,^\(prefix\|execprefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(1)/usr/bin/icu-config
+       $(LN) $(STAGING_DIR)/usr/bin/icu-config $(2)/bin/
 endef
 
 define Host/Install
@@ -105,12 +101,8 @@ define Host/Install
 endef
 
 define Package/icu/install
-       $(INSTALL_DIR) \
-               $(1)/usr/lib
-
-       $(CP) \
-               $(PKG_INSTALL_DIR)/usr/lib/*.so* \
-               $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib/
 endef
 
 $(eval $(call BuildPackage,icu))
index b1a69e206ea760064d36dc4b70964b48a3b81e64..5620391f9c118de7c1a5bec9fdee8bbfffea75d8 100644 (file)
@@ -22,7 +22,7 @@ PKG_FIXUP:=autoreconf
 
 include $(INCLUDE_DIR)/package.mk
 
-define Package/$(PKG_NAME)/Default
+define Package/libarchive/Default
        SECTION:=libs
        CATEGORY:=Libraries
        DEPENDS:=+zlib +liblzma +libbz2 +libexpat
@@ -30,13 +30,13 @@ define Package/$(PKG_NAME)/Default
        URL:=http://www.libarchive.org/
 endef
 
-define Package/$(PKG_NAME)
-       $(call Package/$(PKG_NAME)/Default)
+define Package/libarchive
+       $(call Package/libarchive/Default)
        DEPENDS += +libopenssl
 endef
 
-define Package/$(PKG_NAME)-noopenssl
-       $(call Package/$(PKG_NAME)/Default)
+define Package/libarchive-noopenssl
+       $(call Package/libarchive/Default)
        TITLE += (without OpenSSL dependency)
        VARIANT:=noopenssl
 endef
@@ -90,7 +90,7 @@ define Package/bsdtar/install
        $(CP) $(PKG_INSTALL_DIR)/usr/bin/bsdtar $(1)/usr/bin
 endef
 
-Package/$(PKG_NAME)-noopenssl/install = $(Package/$(PKG_NAME)/install)
+Package/libarchive-noopenssl/install = $(Package/libarchive/install)
 
 $(eval $(call BuildPackage,libarchive))
 $(eval $(call BuildPackage,libarchive-noopenssl))
index cd090a7a995a3d7669b46f6d395b150678e1a845..3260fa5bc95d4b3e214ae47f66eb39995c35ae18 100644 (file)
@@ -39,7 +39,7 @@ CMAKE_OPTIONS += -DLWS_WITHOUT_TESTAPPS=ON
 # CMAKE_OPTIONS += -DLWS_WITHOUT_DEBUG=ON
 
 
-define Package/$(PKG_NAME)/Default
+define Package/libwebsockets/Default
        SECTION:=libs
        CATEGORY:=Libraries
        TITLE:=libwebsockets
@@ -49,21 +49,21 @@ define Package/$(PKG_NAME)/Default
 endef
 
 define Package/libwebsockets-openssl
-       $(call Package/$(PKG_NAME)/Default)
+       $(call Package/libwebsockets/Default)
        TITLE += (OpenSSL)
        DEPENDS += +libopenssl
        VARIANT:=openssl
 endef
 
 define Package/libwebsockets-cyassl
-       $(call Package/$(PKG_NAME)/Default)
+       $(call Package/libwebsockets/Default)
        TITLE += (CyaSSL)
        DEPENDS += +libcyassl
        VARIANT:=cyassl
 endef
 
 define Package/libwebsockets-full
-       $(call Package/$(PKG_NAME)/Default)
+       $(call Package/libwebsockets/Default)
        TITLE += (Full - OpenSSL, libuv, plugins, CGI)
        DEPENDS += +libopenssl +libuv
        VARIANT:=full
@@ -102,9 +102,9 @@ define Package/libwebsockets/install
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/libwebsockets.so* $(1)/usr/lib/
 endef
 
-Package/$(PKG_NAME)-cyassl/install = $(Package/$(PKG_NAME)/install)
-Package/$(PKG_NAME)-openssl/install = $(Package/$(PKG_NAME)/install)
-Package/$(PKG_NAME)-full/install = $(Package/$(PKG_NAME)/install)
+Package/libwebsockets-cyassl/install = $(Package/libwesockets/install)
+Package/libwebsockets-openssl/install = $(Package/libwebsockets/install)
+Package/libwesockets-full/install = $(Package/libwebsockets/install)
 
 $(eval $(call BuildPackage,libwebsockets-openssl))
 $(eval $(call BuildPackage,libwebsockets-cyassl))
diff --git a/libs/musl-fts/Makefile b/libs/musl-fts/Makefile
new file mode 100644 (file)
index 0000000..d6dd1d1
--- /dev/null
@@ -0,0 +1,59 @@
+#
+# Copyright (C) 2017 Lucian Cristian <lucian.cristian@gmail.com>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+# updated to work with latest source from abrasive
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=musl-fts
+PKG_VERSION:=1.2.7
+PKG_RELEASE:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/pullmoll/musl-fts.git
+PKG_SOURCE_VERSION:=0bde52df588e8969879a2cae51c3a4774ec62472
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+
+PKG_MAINTAINER:= Lucian Cristian <lucian.cristian@gmail.com>
+
+PKG_LICENSE:=LGPL-2.1
+PKG_LICENSE_FILES:=COPYING AUTHORS
+
+PKG_FIXUP:=autoreconf
+PKG_REMOVE_FILES:=autogen.sh
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/musl-fts
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=fts implementation for musl libc
+  URL:=https://github.com/pullmoll/musl-fts
+  DEPENDS:= +libpthread
+endef
+
+define Package/musl-fts/description
+  The musl-fts package implements the fts(3) functions fts_open, fts_read, fts_children, fts_set and fts_close, which are missing in musl libc.
+endef
+
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/fts.h $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfts.so* $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/musl-fts.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/musl-fts/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfts.so* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,musl-fts))
diff --git a/libs/pcre2/Makefile b/libs/pcre2/Makefile
new file mode 100644 (file)
index 0000000..fd20b95
--- /dev/null
@@ -0,0 +1,96 @@
+#
+# Copyright (C) 2017 Shane Peelar
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=pcre2
+PKG_VERSION:=10.23
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
+PKG_MD5SUM:=b2cd00ca7e24049040099b0a46bb3649
+PKG_HASH:=dfc79b918771f02d33968bd34a749ad7487fa1014aeb787fad29dd392b78c56e
+PKG_MAINTAINER:=Shane Peelar <lookatyouhacker@gmail.com>
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=LICENCE
+
+PKG_FIXUP:=autoreconf
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libpcre2/default
+  SECTION:=libs
+  CATEGORY:=Libraries
+  URL:=http://www.pcre.org/
+endef
+
+define Package/libpcre2
+  $(call Package/libpcre2/default)
+  TITLE:=A Perl Compatible Regular Expression library
+endef
+
+define Package/libpcre2-16
+  $(call Package/libpcre2/default)
+  TITLE:=A Perl Compatible Regular Expression library (16bit support)
+endef
+
+
+define Package/libpcre2-32
+  $(call Package/libpcre2/default)
+  TITLE:=A Perl Compatible Regular Expression library (32bit support)
+endef
+
+TARGET_CFLAGS += $(FPIC)
+
+CONFIGURE_ARGS += \
+       --enable-pcre2-16 \
+       --enable-pcre2-32 
+
+MAKE_FLAGS += \
+       CFLAGS="$(TARGET_CFLAGS)"
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/pcre2-config $(1)/usr/bin/
+
+       $(INSTALL_DIR) $(2)/bin
+       $(LN) $(STAGING_DIR)/usr/bin/pcre2-config $(2)/bin
+
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/pcre*.h $(1)/usr/include/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre*.{a,so*} $(1)/usr/lib/
+
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libpcre*.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/libpcre2/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-{8,posix}.so* $(1)/usr/lib/
+endef
+
+define Package/libpcre2-16/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-16.so* $(1)/usr/lib/
+endef
+
+define Package/libpcre2-32/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-32.so* $(1)/usr/lib/
+endef
+
+
+
+$(eval $(call BuildPackage,libpcre2))
+$(eval $(call BuildPackage,libpcre2-16))
+$(eval $(call BuildPackage,libpcre2-32))
index 7f9b1b34ce940b8ba5b36c635d32f56a51457249..9219691b34fa219179614487bb45a2675c63bb7b 100644 (file)
@@ -8,12 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=sqlite
-PKG_VERSION:=3160000
+PKG_VERSION:=3170000
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-autoconf-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.sqlite.org/2017/
-PKG_MD5SUM:=5102404047054b2cec2f43463293f94dea39425d42bf386d24596ab4fac7c7ff
+PKG_MD5SUM:=450a95a7bde697c9fe4de9ae2fffdcca
+PKG_HASH:=a4e485ad3a16e054765baf6371826b5000beed07e626510896069c0bf013874c
 
 PKG_LICENSE:=PUBLICDOMAIN
 PKG_LICENSE_FILES:=
index 43f540f5c352b062920f3a61db35663d49d21bdb..0bd8c8f706468751131c4552e0cd4ee08c962359 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dovecot
-PKG_VERSION:=2.2.26.0
+PKG_VERSION:=2.2.28
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.dovecot.org/releases/2.2
-PKG_MD5SUM:=85bc42328de41d1eb8d6d3f1db666db8
+PKG_HASH:=e0288f59e326ab87cb3881fdabadafe542f4dc7ab9996db13863a439ebbc1f25
 PKG_LICENSE:=LGPL-2.1 MIT BSD-3-Clause Unique
 PKG_LICENSE_FILES:=COPYING COPYING.LGPL COPYING.MIT
 
@@ -27,9 +27,9 @@ include $(INCLUDE_DIR)/package.mk
 define Package/dovecot
   SECTION:=mail
   CATEGORY:=Mail
-  DEPENDS:=+DOVECOT_LDAP:libopenldap +libopenssl +librt +zlib +libbz2 +libcap
+  DEPENDS:=+DOVECOT_LDAP:libopenldap +DOVECOT_SQLITE:libsqlite3 +libopenssl +librt +zlib +libbz2 +libcap
   TITLE:=An IMAP and POP3 daemon
-  MAINTAINER:=Peter Wagner <tripolar@gmx.at>
+  MAINTAINER:=Lucian Cristian <lucian.cristian@gmail.com>
   URL:=http://www.dovecot.org/
   USERID:=dovecot=59:dovecot=59
 endef
@@ -46,6 +46,11 @@ define Package/dovecot/config
                         default n
                         help
                           Implements LDAP support in dovecot.
+                config DOVECOT_SQLITE
+                        bool "SQLite support"
+                        default n
+                        help
+                          Implements SQLite DB support in dovecot.
         endmenu
 endef
 
@@ -55,15 +60,10 @@ CONFIGURE_ARGS += \
        --with-moduledir=/usr/lib/dovecot/modules \
        --with-notify=dnotify \
        --without-lzma \
-       --without-lz4
-
-ifneq ($(strip $(CONFIG_DOVECOT_LDAP)),)
-  CONFIGURE_ARGS+= \
-       --with-ldap=yes
-else
-  CONFIGURE_ARGS+= \
-       --with-ldap=no
-endif
+       --without-lz4 \
+       --with-icu=no \
+       $(if $(CONFIG_DOVECOT_LDAP),--with-ldap=yes,--with-ldap=no) \
+       $(if $(CONFIG_DOVECOT_SQLITE),--with-sqlite=yes,--with-sqlite=no)
 
 CONFIGURE_VARS += \
        RPCGEN= \
index 8801948dce3f002e0bf8b2c95c33cd94e8f5d5f2..7b6b7664b90cb30504bc20fc4d98bdbec24f7d87 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=postfix
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_SOURCE_URL:=ftp://ftp.porcupine.org/mirrors/postfix-release/official/
 PKG_VERSION:=3.1.4
 PKG_MD5SUM:=878a059d92ee3b093d7d3e97248c915d
@@ -25,7 +25,7 @@ define Package/postfix
   CATEGORY:=Mail
   TITLE:=Postfix Mail Transmit Agent
   URL:=http://www.postfix.org/
-  DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_EAI:icu +libpcre
+  DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_SQLITE:libsqlite3 +POSTFIX_EAI:icu +libpcre
 endef
 
 define Package/postfix/description
@@ -59,6 +59,11 @@ define Package/postfix/config
                        default y
                        help
                          Implements support for cdb files using tinycdb
+               config POSTFIX_SQLITE
+                       bool "SQLITE support"
+                       default y
+                       help
+                         Implements support for SQLite3 DB
                config POSTFIX_EAI
                        bool "SMTPUTF8 support"
                        default n
@@ -106,6 +111,11 @@ else
   CCARGS+=-DNO_DB
 endif
 
+ifdef CONFIG_POSTFIX_SQLITE
+  CCARGS+=-DHAS_SQLITE -I$(STAGING_DIR)/usr/include/
+  AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lsqlite3 -lpthread
+endif
+
 ifdef CONFIG_POSTFIX_EAI
   AUXLIBS+=-licuuc
   CCARGS+=-DHAS_EAI
diff --git a/mail/postfix/patches/501-include_stdio.patch b/mail/postfix/patches/501-include_stdio.patch
new file mode 100644 (file)
index 0000000..4fc3f52
--- /dev/null
@@ -0,0 +1,10 @@
+--- a/src/posttls-finger/posttls-finger.c
++++ b/src/posttls-finger/posttls-finger.c
+@@ -318,6 +318,7 @@
+ #include <sys/un.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
++#include <stdio.h>
+ #ifdef STRCASECMP_IN_STRINGS_H
+ #include <strings.h>
index 22db52a04867387aad8c270f34e2b5684cf64230..3e6147ab150656d7e53e1fcf3081f17cdf16ab86 100644 (file)
@@ -21,7 +21,7 @@ include $(INCLUDE_DIR)/package.mk
 
 TARGET_CFLAGS += $(TARGET_CPPFLAGS)
 
-define Package/$(PKG_NAME)
+define Package/ssmtp
        SECTION:=mail
        CATEGORY:=Mail
        DEPENDS:=+libopenssl
@@ -29,14 +29,14 @@ define Package/$(PKG_NAME)
        URL:=http://packages.debian.org/ssmtp
 endef
 
-define Package/$(PKG_NAME)/description
+define Package/ssmtp/description
 A secure, effective and simple way of getting mail off a system to your mail hub.
 Mail is simply forwarded to the configured mailhost, no daemons running in the background.
 Extremely easy configuration.
 
 endef
 
-define Package/$(PKG_NAME)/conffiles
+define Package/ssmtp/conffiles
 /etc/ssmtp/ssmtp.conf
 /etc/ssmtp/revaliases
 endef
@@ -47,7 +47,7 @@ CONFIGURE_VARS += \
 CONFIGURE_ARGS += \
        --enable-ssl
 
-define Package/$(PKG_NAME)/install
+define Package/ssmtp/install
        $(INSTALL_DIR) $(1)/etc/ssmtp
        $(INSTALL_CONF) $(PKG_BUILD_DIR)/ssmtp.conf $(1)/etc/ssmtp/
        $(INSTALL_DATA) $(PKG_BUILD_DIR)/revaliases $(1)/etc/ssmtp/
@@ -56,4 +56,4 @@ define Package/$(PKG_NAME)/install
        ln -s /usr/sbin/ssmtp $(1)/usr/sbin/sendmail
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,ssmtp))
index d2ab7d1f0d5b5bf9be2a90667b8c9c4b3a31b2eb..cd0d5f8857530d191c6390fef954cffcfdc0f4b3 100644 (file)
@@ -1,9 +1,37 @@
 if PACKAGE_libffmpeg-custom
 
+comment "Build Licensing"
+
+config FFMPEG_CUSTOM_GPL
+       bool "Allow use of GPL code"
+       help
+               By default, FFMpeg is licensed under the LGPL. This builds a GPL licensed version.
+               Some software requires this, such as libx264.
+       default y
+
+config FFMPEG_CUSTOM_GPLV3
+       bool "Use (L)GPL v3"
+       help
+               Uses the LPGL v3 if GPL isn't selected, or GPL v3 if it is.
+
+config FFMPEG_CUSTOM_NONFREE
+       bool "Use code with complex licensing requirements; see help"
+       help
+               This sets --enable-nonfree, which in almost all cases, will prohibit redistribution of the resulting package.
+               Use this with care.
+       default n
+
 config FFMPEG_CUSTOM_PATENTED
        bool "Include patented codecs and technologies"
        default BUILD_PATENTED
 
+comment "Build Properties"
+
+config FFMPEG_CUSTOM_LARGE
+       bool "Build libffmpeg for performance instead of minimizing size on disk"
+       default y if ( x86_64 )
+       default n
+
 comment "Profiles"
 
 config FFMPEG_CUSTOM_FFSERVER_SUPPORT
@@ -105,8 +133,14 @@ config FFMPEG_CUSTOM_AUDIO_DEC_SUPPORT
 
 comment "External Libraries"
 
-config FFMPEG_CUSTOM_SELECT_mp3lame
-       bool "MP3 LAME"
+config FFMPEG_CUSTOM_SELECT_libfdk-aac
+       bool "Fraunhofer FDK AAC encoding library (libfdk-aac)"
+       depends on FFMPEG_CUSTOM_NONFREE
+       depends on FFMPEG_CUSTOM_PATENTED
+       depends on PACKAGE_fdk-aac
+
+config FFMPEG_CUSTOM_SELECT_libmp3lame
+       bool "Libmp3lame"
        depends on FFMPEG_CUSTOM_PATENTED
        depends on PACKAGE_lame-lib
        select FFMPEG_CUSTOM_DECODER_mp3
@@ -114,11 +148,15 @@ config FFMPEG_CUSTOM_SELECT_mp3lame
        select FFMPEG_CUSTOM_DEMUXER_mp3
 
 config FFMPEG_CUSTOM_SELECT_libopus
-       bool "Opus"
+       bool "Libopus"
+
+config FFMPEG_CUSTOM_SELECT_libshine
+       bool "Libshine"
 
-config FFMPEG_CUSTOM_SELECT_x264
-       bool "x264"
+config FFMPEG_CUSTOM_SELECT_libx264
+       bool "Libx264"
        depends on FFMPEG_CUSTOM_PATENTED
+       depends on FFMPEG_CUSTOM_GPL
        depends on PACKAGE_libx264
        select FFMPEG_CUSTOM_DECODER_h264
        select FFMPEG_CUSTOM_MUXER_h264
index f87401444dc7ecbc4ff1bd51abf8093803253303..75933bb3ac70adc5fdffb3eefdd58d796df2514e 100644 (file)
@@ -1,5 +1,6 @@
 #
 # Copyright (C) 2006-2017 OpenWrt.org
+# Copyright (C) 2017 Ian Leonard <antonlacon@gmail.com>
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -8,14 +9,15 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ffmpeg
-PKG_VERSION:=3.2.2
+PKG_VERSION:=3.2.4
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://ffmpeg.org/releases/
-PKG_MD5SUM:=e34d1b92c5d844f2a3611c741a6dba18
-PKG_HASH:=3f01bd1fe1a17a277f8c84869e5d9192b4b978cb660872aa2b54c3cc8a2fedfc
-PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
+PKG_MD5SUM:=39fd71024ac76ba35f04397021af5606
+PKG_HASH:=6e38ff14f080c98b58cf5967573501b8cb586e3a173b591f3807d8f0660daf7a
+PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>, \
+               Ian Leonard <antonlacon@gmail.com>
 
 PKG_LICENSE:=LGPL-2.1+ GPL-2+ LGPL-3
 PKG_LICENSE_FILES:=COPYING.GPLv2 COPYING.GPLv3 COPYING.LGPLv2.1 COPYING.LGPLv3
@@ -224,7 +226,8 @@ include $(INCLUDE_DIR)/package.mk
 
 define Package/ffmpeg/Default
  TITLE:=FFmpeg
- URL:=http://ffmpeg.mplayerhq.hu/
+ URL:=https://ffmpeg.org/
+ DEPENDS+= +libpthread
 endef
 
 define Package/ffmpeg/Default/description
@@ -238,7 +241,7 @@ $(call Package/ffmpeg/Default)
  SECTION:=multimedia
  CATEGORY:=Multimedia
  TITLE+= program
- DEPENDS+= +libpthread +libffmpeg-full
+ DEPENDS+= +libffmpeg-full
  VARIANT:=full
 endef
 
@@ -270,7 +273,7 @@ $(call Package/ffserver/Default)
  SECTION:=multimedia
  CATEGORY:=Multimedia
  TITLE+= streaming server
- DEPENDS+= +libpthread +libffmpeg-full
+ DEPENDS+= +libffmpeg-full
  VARIANT:=full
 endef
 
@@ -285,7 +288,7 @@ $(call Package/ffmpeg/Default)
  SECTION:=libs
  CATEGORY:=Libraries
  TITLE+= libraries
- DEPENDS+= @BUILD_PATENTED +libpthread +zlib +libbz2
+ DEPENDS+= +libpthread +zlib +libbz2
  PROVIDES:= libffmpeg
 endef
 
@@ -294,8 +297,9 @@ define Package/libffmpeg-custom
 $(call Package/libffmpeg/Default)
  TITLE+= (custom)
  DEPENDS+= +FFMPEG_CUSTOM_SELECT_libopus:libopus \
-           +PACKAGE_libx264:libx264 +PACKAGE_lame-lib:lame-lib
-
+           +PACKAGE_libx264:libx264 +PACKAGE_lame-lib:lame-lib \
+           +FFMPEG_CUSTOM_SELECT_libshine:shine \
+           +PACKAGE_fdk-aac:fdk-aac
  VARIANT:=custom
  MENU:=1
 endef
@@ -314,6 +318,7 @@ endef
 define Package/libffmpeg-audio-dec
 $(call Package/libffmpeg/Default)
  TITLE+= (audio)
+ DEPENDS+= @BUILD_PATENTED
  VARIANT:=audio-dec
 endef
 
@@ -327,10 +332,16 @@ endef
 define Package/libffmpeg-full
 $(call Package/libffmpeg/Default)
  TITLE+= (full)
- DEPENDS+= +alsa-lib +PACKAGE_libx264:libx264 +PACKAGE_lame-lib:lame-lib +libopus
+ DEPENDS+= @BUILD_PATENTED +alsa-lib +PACKAGE_libopus:libopus
+ ifeq ($(CONFIG_SOFT_FLOAT),y)
+       DEPENDS+= +PACKAGE_shine:shine
+ else
+       DEPENDS+= +PACKAGE_lame-lib:lame-lib +PACKAGE_libx264:libx264
+ endif
  VARIANT:=full
 endef
 
+
 define Package/libffmpeg-full/description
 $(call Package/ffmpeg/Default/description)
  .
@@ -341,6 +352,7 @@ endef
 define Package/libffmpeg-mini
 $(call Package/libffmpeg/Default)
  TITLE+= (mini)
+ DEPENDS+= @BUILD_PATENTED
  VARIANT:=mini
 endef
 
@@ -363,15 +375,11 @@ FFMPEG_CONFIGURE:= \
        --pkg-config="pkg-config" \
        --enable-shared \
        --enable-static \
-       --enable-small \
        --enable-pthreads \
        --enable-zlib \
        --disable-doc \
        --disable-debug \
        \
-       --enable-gpl \
-       --enable-version3 \
-       \
        --disable-dxva2 \
        --disable-lzma \
        --disable-vaapi \
@@ -415,18 +423,13 @@ FFMPEG_CONFIGURE += \
 else ifneq ($(findstring arm,$(CONFIG_ARCH)),)
 FFMPEG_CONFIGURE += \
        --disable-runtime-cpudetect
+# XXX: GitHub issue 3320 ppc cpu with fpu but no altivec (WNDR4700)
 else ifneq ($(findstring powerpc,$(CONFIG_ARCH)),)
 FFMPEG_CONFIGURE += \
        --disable-altivec
 endif
 
-ifneq ($(CONFIG_YASM),y)
-FFMPEG_CONFIGURE += \
-       --disable-yasm
-
-endif
-
-#selectibly disable optimizations according to arch/cpu type
+# selectively disable optimizations according to arch/cpu type
 ifneq ($(findstring arm,$(CONFIG_ARCH)),)
        ifeq (,$(findstring vfp,$(CONFIG_TARGET_OPTIMIZATION)))
                FFMPEG_CONFIGURE+= \
@@ -439,11 +442,28 @@ ifneq ($(findstring arm,$(CONFIG_ARCH)),)
 
 endif
 
+ifneq ($(CONFIG_YASM),y)
+FFMPEG_CONFIGURE += \
+       --disable-yasm
+
+endif
+
 ifeq ($(BUILD_VARIANT),full)
        FFMPEG_CONFIGURE+= \
-               --enable-libopus --enable-decoder=libopus \
-               $(if $(CONFIG_PACKAGE_libx264),--enable-libx264) \
-               $(if $(CONFIG_PACKAGE_lame-lib),--enable-libmp3lame)
+               $(if $(CONFIG_PACKAGE_libopus),--enable-libopus)
+  ifeq ($(CONFIG_SOFT_FLOAT),y)
+       FFMPEG_CONFIGURE+= \
+               --enable-small \
+               \
+               $(if $(CONFIG_PACKAGE_shine),--enable-libshine)
+  else
+       FFMPEG_CONFIGURE+= \
+               --enable-small \
+               --enable-gpl \
+               \
+               $(if $(CONFIG_PACKAGE_lame-lib),--enable-libmp3lame) \
+               $(if $(CONFIG_PACKAGE_libx264),--enable-libx264)
+  endif
 endif
 
 ifeq ($(BUILD_VARIANT),custom)
@@ -453,6 +473,26 @@ ifeq ($(BUILD_VARIANT),custom)
                $(if $($(3)_$(c)),--enable-$(1)="$(c)") \
        )
 
+  ifeq ($(CONFIG_FFMPEG_CUSTOM_LARGE),y)
+       FFMPEG_CONFIGURE+= \
+               --enable-hardcoded-tables
+  else
+       FFMPEG_CONFIGURE+= \
+               --enable-small
+  endif
+
+  ifeq ($(CONFIG_FFMPEG_CUSTOM_GPL),y)
+       FFMPEG_CONFIGURE+= --enable-gpl
+  endif
+
+  ifeq ($(CONFIG_FFMPEG_CUSTOM_GPLV3),y)
+       FFMPEG_CONFIGURE+= --enable-version3
+  endif
+
+  ifeq ($(CONFIG_FFMPEG_CUSTOM_NONFREE),y)
+       FFMPEG_CONFIGURE+= --enable-nonfree
+  endif
+
   FFMPEG_CONFIGURE+= \
        --disable-programs \
        --disable-avfilter \
@@ -471,23 +511,32 @@ ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_adpcm),y)
   FFMPEG_CONFIGURE+= \
        --enable-decoder=adpcm_ima_wav \
        --enable-decoder=adpcm_ima_qt \
-       --enable-decoder=adpcm_ms \
+       --enable-decoder=adpcm_ms
+endif
+
+ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libfdk-aac),y)
+  FFMPEG_CONFIGURE+= \
+       --enable-libfdk-aac --enable-encoder=libfdk_aac
+endif
 
+ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libmp3lame),y)
+  FFMPEG_CONFIGURE+= \
+       --enable-libmp3lame --enable-encoder=libmp3lame
 endif
 
 ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libopus),y)
   FFMPEG_CONFIGURE+= \
-       --enable-libopus --enable-decoder=libopus
+       --enable-libopus --enable-decoder=libopus --enable-encoder=libopus
 endif
 
-ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_x264),y)
+ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libshine),y)
   FFMPEG_CONFIGURE+= \
-       --enable-libx264
+       --enable-libshine --enable-encoder=libshine
 endif
 
-ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_mp3lame),y)
+ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libx264),y)
   FFMPEG_CONFIGURE+= \
-       --enable-libmp3lame
+       --enable-libx264 --enable-encoder=libx264
 endif
 
 endif
@@ -500,6 +549,9 @@ ifeq ($(BUILD_VARIANT),audio-dec)
        )
 
   FFMPEG_CONFIGURE+= \
+       --enable-small \
+       --enable-gpl \
+       \
        --disable-programs \
        --disable-avfilter \
        --disable-postproc \
@@ -522,6 +574,8 @@ ifeq ($(BUILD_VARIANT),mini)
        )
 
   FFMPEG_CONFIGURE+= \
+       --enable-small \
+       \
        --disable-programs \
        --disable-avdevice \
        --disable-avfilter \
@@ -531,8 +585,7 @@ ifeq ($(BUILD_VARIANT),mini)
        --disable-everything \
        $(call FFMPEG_ENABLE,decoder,$(FFMPEG_MINI_DECODERS)) \
        $(call FFMPEG_ENABLE,demuxer,$(FFMPEG_MINI_DEMUXERS)) \
-       $(call FFMPEG_ENABLE,protocol,$(FFMPEG_MINI_PROTOCOLS)) \
-
+       $(call FFMPEG_ENABLE,protocol,$(FFMPEG_MINI_PROTOCOLS))
 endif
 
 ifneq ($(CONFIG_TARGET_x86),)
@@ -558,13 +611,19 @@ define Build/InstallDev/custom
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avformat,avutil}.pc $(1)/usr/lib/pkgconfig/
 endef
 
+# Soft float is LGPL (no libpostproc); Hard float is GPL (yes libpostproc)
 define Build/InstallDev/full
        $(INSTALL_DIR) $(1)/usr/include
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale} $(1)/usr/include/
        $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale}.{a,so*} $(1)/usr/lib/
        $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale}.pc $(1)/usr/lib/pkgconfig/
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/lib{avcodec,avdevice,avfilter,avformat,avutil,swresample,swscale} $(1)/usr/include/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avutil,swresample,swscale}.{a,so*} $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avfilter,avformat,avutil,swresample,swscale}.pc $(1)/usr/lib/pkgconfig/
+ifneq ($(CONFIG_SOFT_FLOAT),y)
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/libpostproc $(1)/usr/include/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpostproc.{a,so*} $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libpostproc.pc $(1)/usr/lib/pkgconfig/
+endif
 endef
 
 define Build/InstallDev/mini
@@ -622,9 +681,13 @@ define Package/libffmpeg-custom/install
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avformat,avutil}.so.* $(1)/usr/lib/
 endef
 
+# Soft float is LGPL (no libpostproc); Hard float is GPL (yes libpostproc)
 define Package/libffmpeg-full/install
        $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale}.so.* $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avutil,swresample,swscale}.so.* $(1)/usr/lib/
+ifneq ($(CONFIG_SOFT_FLOAT),y)
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpostproc.so.* $(1)/usr/lib/
+endif
 endef
 
 define Package/libffmpeg-mini/install
index a510a7e44f74d5f7e77cc2ae4a9f2961e7597422..6433079f947236931b8da310dbf7e3bad4f9ece8 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=youtube-dl
-PKG_VERSION:=2016.11.27
+PKG_VERSION:=2017.02.17
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://yt-dl.org/downloads/$(PKG_VERSION)/
-PKG_MD5SUM:=2bb2c4ebf5335d69e03e32a0309abfba
+PKG_MD5SUM:=d38dbe099af22eb9af35b0e8b274dc4e
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
 
 PKG_LICENSE:=Unlicense
index a10fcd4c820c2a99be49f237f7028b4562d91076..a5f4b803fc557567ae7368b26af3592cf23b4b96 100644 (file)
@@ -6,28 +6,28 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=adblock
-PKG_VERSION:=2.3.1
-PKG_RELEASE:=1
+PKG_VERSION:=2.4.0
+PKG_RELEASE:=2
 PKG_LICENSE:=GPL-3.0+
 PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
 
 include $(INCLUDE_DIR)/package.mk
 
-define Package/$(PKG_NAME)
+define Package/adblock
        SECTION:=net
        CATEGORY:=Network
        TITLE:=Powerful adblock script to block ad/abuse domains
        PKGARCH:=all
 endef
 
-define Package/$(PKG_NAME)/description
+define Package/adblock/description
 Powerful adblock script to block ad/abuse domains via dnsmasq or unbound dns backend.
 The script supports many domain blacklist sites plus manual black- and whitelist overrides.
 Please see https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md for further information.
 
 endef
 
-define Package/$(PKG_NAME)/conffiles
+define Package/adblock/conffiles
 /etc/config/adblock
 /etc/adblock/adblock.whitelist
 /etc/adblock/adblock.blacklist
@@ -42,7 +42,7 @@ endef
 define Build/Compile
 endef
 
-define Package/$(PKG_NAME)/install
+define Package/adblock/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) ./files/adblock.sh $(1)/usr/bin/
 
@@ -57,4 +57,4 @@ define Package/$(PKG_NAME)/install
        $(INSTALL_CONF) ./files/adblock.whitelist $(1)/etc/adblock/
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,adblock))
index 62732e9075d0bf28888dbff583b94be094cc8b48..172551f5cdac76f0bbdf76818265c5ebae26aac4 100644 (file)
@@ -57,6 +57,7 @@ A lot of people already use adblocker plugins within their desktop browsers, but
 * automatically selects uclient-fetch or wget as download utility (other tools like curl or aria2c are supported as well)
 * automatically supports a wide range of router modes, even AP modes are supported
 * full IPv4 and IPv6 support
+* supports tld compression (top level domain compression), this feature removes thousands of needless host entries from the block lists and lowers the memory footprint for the dns backends
 * each block list source will be updated and processed separately
 * block list source parsing by fast & flexible regex rulesets
 * overall duplicate removal in separate block lists
@@ -120,6 +121,7 @@ A lot of people already use adblocker plugins within their desktop browsers, but
     * adb\_iface => restrict the procd interface trigger to a (list of) certain wan interface(s) or disable it at all (default: not set, disabled)
     * adb\_fetch => full path to a different download utility, see example below (default: not set, use wget)
     * adb\_fetchparm => options for the download utility, see example below (default: not set, use wget options)
+    * adb\_tldcomp => enable/disable tld compression (default: '1', enabled)
 
 ## Examples
 
@@ -136,19 +138,19 @@ If you use manual configuration for unbound, then just include the following lin
 <pre><code>
 wget (default):
   option adb_fetch="/usr/bin/wget"
-  option adb_fetchparm="--no-config --quiet --tries=1 --no-cache --no-cookies --max-redirect=0 --timeout=5 --no-check-certificate -O"
+  option adb_fetchparm="--no-config --quiet --no-cache --no-cookies --max-redirect=0 --timeout=10 --no-check-certificate -O"
 
 aria2c:
   option adb_fetch '/usr/bin/aria2c'
-  option adb_fetchparm '-q --max-tries=1 --timeout=5 --allow-overwrite=true --auto-file-renaming=false --check-certificate=false -o'
+  option adb_fetchparm '-q --timeout=10 --allow-overwrite=true --auto-file-renaming=false --check-certificate=false -o'
 
 uclient-fetch:
   option adb_fetch '/bin/uclient-fetch'
-  option adb_fetchparm '-q --timeout=5 --no-check-certificate -O'
+  option adb_fetchparm '-q --timeout=10 --no-check-certificate -O'
 
 curl:
   option adb_fetch '/usr/bin/curl'
-  option adb_fetchparm '-s --retry 1 --connect-timeout 5 --insecure -o'
+  option adb_fetchparm '-s --connect-timeout 10 --insecure -o'
 </code></pre>
   
 **receive adblock statistics via ubus:**
index 7c4a91c1c4a8e7f10e8ae883a95ebf5ce49836a4..cf8a57b1516ba2f9bd0327f97816fd508dd1c9e4 100755 (executable)
@@ -37,7 +37,6 @@ start_service()
     if [ $(/etc/init.d/adblock enabled; printf ${?}) -eq 0 ]
     then
         procd_open_instance "adblock"
-        procd_set_param env adb_procd="true"
         procd_set_param command "${adb_script}" "${@}"
         procd_set_param stdout 1
         procd_set_param stderr 1
@@ -52,7 +51,6 @@ reload_service()
 
 stop_service()
 {
-    export adb_procd="true"
     rc_procd "${adb_script}" stop
 }
 
@@ -73,7 +71,6 @@ resume()
 
 query()
 {
-    export adb_procd="true"
     rc_procd "${adb_script}" query "${1}"
 }
 
@@ -81,8 +78,6 @@ service_triggers()
 {
     local iface="$(uci -q get adblock.global.adb_iface)"
 
-    procd_open_trigger
-    procd_add_config_trigger "config.change" "adblock" /etc/init.d/adblock start
     if [ -z "${iface}" ]
     then
         procd_add_raw_trigger "interface.*.up" 1000 /etc/init.d/adblock start
@@ -92,5 +87,5 @@ service_triggers()
             procd_add_interface_trigger "interface.*.up" "${name}" /etc/init.d/adblock start
         done
     fi
-    procd_close_trigger
+    procd_add_config_trigger "config.change" "adblock" /etc/init.d/adblock start
 }
index c25541979c2fdcfbeddbc6baf80eb2c2ae315727..a470d0bf7e0c82ddd29acacd6b5f8467f2989668 100755 (executable)
 #
 LC_ALL=C
 PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-adb_ver="2.3.1"
+adb_ver="2.4.0-2"
 adb_enabled=1
 adb_debug=0
 adb_backup=0
+adb_tldcomp=1
 adb_backupdir="/mnt"
 adb_whitelist="/etc/adblock/adblock.whitelist"
 adb_whitelist_rset="\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\"^\"\$1\"\\\|[.]\"\$1)}"
@@ -169,9 +170,12 @@ f_envcheck()
 #
 f_rmtemp()
 {
-    rm -f "${adb_tmpload}"
-    rm -f "${adb_tmpfile}"
-    rm -rf "${adb_tmpdir}"
+    if [ -d "${adb_tmpdir}" ]
+    then
+        rm -f "${adb_tmpload}"
+        rm -f "${adb_tmpfile}"
+        rm -rf "${adb_tmpdir}"
+    fi
 }
 
 # f_rmdns: remove dns related files & directories
@@ -321,7 +325,11 @@ f_log()
         then
             logger -t "adblock-[${adb_ver}] ${class}" "Please check the online documentation 'https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md'"
             f_rmtemp
-            f_rmdns
+            if [ "$(ls -dA "${adb_dnsdir}/${adb_dnsprefix}"* >/dev/null 2>&1)" ]
+            then
+                f_rmdns
+                f_dnsrestart
+            fi
             exit 255
         fi
     fi
@@ -331,9 +339,10 @@ f_log()
 #
 f_main()
 {
-    local enabled url cnt sum_cnt=0
-    local src_name src_rset shalla_file shalla_archive list active_lists
+    local enabled url cnt sum_cnt=0 mem_total=0
+    local src_name src_rset shalla_archive list active_lists
     local sysver="$(ubus -S call system board | jsonfilter -e '@.release.description')"
+    mem_total="$(awk '$1 ~ /^MemTotal/ {printf $2}' "/proc/meminfo" 2>/dev/null)"
 
     f_log "info " "start adblock processing ..."
     for src_name in ${adb_sources}
@@ -356,7 +365,7 @@ f_main()
 
         # download block list
         #
-        f_log "debug" "name: ${src_name}, enabled: ${enabled}, backup: ${adb_backup}, dns: ${adb_dns}, fetch: ${adb_fetch}"
+        f_log "debug" "name: ${src_name}, enabled: ${enabled}, backup: ${adb_backup}, dns: ${adb_dns}, fetch: ${adb_fetch}, memory: ${mem_total}"
         if [ "${src_name}" = "blacklist" ]
         then
             cat "${url}" 2>/dev/null > "${adb_tmpload}"
@@ -364,23 +373,19 @@ f_main()
         elif [ "${src_name}" = "shalla" ]
         then
             shalla_archive="${adb_tmpdir}/shallalist.tar.gz"
-            shalla_file="${adb_tmpdir}/shallalist.txt"
             "${adb_fetch}" ${adb_fetchparm} "${shalla_archive}" "${url}" 2>/dev/null
             adb_rc=${?}
             if [ ${adb_rc} -eq 0 ]
             then
-                > "${shalla_file}"
                 for category in ${adb_src_cat_shalla}
                 do
-                    tar -xOzf "${shalla_archive}" BL/${category}/domains >> "${shalla_file}"
+                    tar -xOzf "${shalla_archive}" BL/${category}/domains >> "${adb_tmpload}"
                     adb_rc=${?}
                     if [ ${adb_rc} -ne 0 ]
                     then
                         break
                     fi
                 done
-                cat "${shalla_file}" 2>/dev/null > "${adb_tmpload}"
-                rm -f "${shalla_file}"
             fi
             rm -f "${shalla_archive}"
             rm -rf "${adb_tmpdir}/BL"
@@ -389,13 +394,22 @@ f_main()
             adb_rc=${?}
         fi
 
-        # check download result and prepare domain output (incl. list backup/restore)
+        # check download result and prepare domain output (incl. tld compression, list backup & restore)
         #
         if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpload}" ]
         then
             awk "${src_rset}" "${adb_tmpload}" > "${adb_tmpfile}"
             if [ -s "${adb_tmpfile}" ]
             then
+                if [ ${adb_tldcomp} -eq 1 ]
+                then
+                    awk -F "." '{for(f=NF;f > 1;f--) printf "%s.", $f;print $1}' "${adb_tmpfile}" | sort -u > "${adb_tmpload}"
+                    awk '{if(NR==1){tld=$NF};while(getline){if($NF !~ tld"\\."){print tld;tld=$NF}}print tld}' "${adb_tmpload}" > "${adb_tmpfile}"
+                    awk -F "." '{for(f=NF;f > 1;f--) printf "%s.", $f;print $1}' "${adb_tmpfile}" > "${adb_tmpload}"
+                else
+                    sort -u "${adb_tmpfile}" > "${adb_tmpload}"
+                fi
+                mv -f "${adb_tmpload}" "${adb_tmpfile}"
                 f_list backup
             else
                 f_list restore
@@ -410,9 +424,9 @@ f_main()
         then
             if [ -s "${adb_tmpdir}/tmp.whitelist" ]
             then
-                grep -vf "${adb_tmpdir}/tmp.whitelist" "${adb_tmpfile}" | sort -u | eval "${adb_dnsformat}" > "${adb_dnsfile}"
+                grep -vf "${adb_tmpdir}/tmp.whitelist" "${adb_tmpfile}" | eval "${adb_dnsformat}" > "${adb_dnsfile}"
             else
-                sort -u "${adb_tmpfile}" | eval "${adb_dnsformat}" > "${adb_dnsfile}"
+                cat "${adb_tmpfile}" | eval "${adb_dnsformat}" > "${adb_dnsfile}"
             fi
             adb_rc=${?}
             if [ ${adb_rc} -ne 0 ]
@@ -424,16 +438,19 @@ f_main()
         fi
     done
 
-    # sort/unique overall
+    # overall sort
     #
     for src_name in $(ls -dASr "${adb_tmpdir}/${adb_dnsprefix}"* 2>/dev/null)
     do
-        if [ -s "${adb_tmpdir}/blocklist.overall" ]
+        if [ ${mem_total} -ge 64000 ]
         then
-            sort "${adb_tmpdir}/blocklist.overall" "${adb_tmpdir}/blocklist.overall" "${src_name}" | uniq -u > "${adb_tmpdir}/tmp.blocklist"
-            cat "${adb_tmpdir}/tmp.blocklist" > "${src_name}"
+            if [ -s "${adb_tmpdir}/blocklist.overall" ]
+            then
+                sort "${adb_tmpdir}/blocklist.overall" "${adb_tmpdir}/blocklist.overall" "${src_name}" | uniq -u > "${adb_tmpdir}/tmp.blocklist"
+                mv -f "${adb_tmpdir}/tmp.blocklist" "${src_name}"
+            fi
+            cat "${src_name}" >> "${adb_tmpdir}/blocklist.overall"
         fi
-        cat "${src_name}" >> "${adb_tmpdir}/blocklist.overall"
         cnt="$(wc -l < "${src_name}")"
         sum_cnt=$((sum_cnt + cnt))
         list="${src_name/*./}"
@@ -449,6 +466,7 @@ f_main()
     #
     mv -f "${adb_tmpdir}/${adb_dnsprefix}"* "${adb_dnsdir}" 2>/dev/null
     chown "${adb_dns}":"${adb_dns}" "${adb_dnsdir}/${adb_dnsprefix}"* 2>/dev/null
+    f_rmtemp
     f_dnsrestart
     if [ "${adb_dnsup}" = "true" ]
     then
@@ -461,7 +479,6 @@ f_main()
             \"dns_backend\":\"${adb_dns}\",
             \"last_rundate\":\"$(/bin/date "+%d.%m.%Y %H:%M:%S")\",
             \"system\":\"${sysver}\"}}}}"
-        f_rmtemp
         return 0
     fi
     f_log "error" "dns backend restart with active block lists failed (${sysver})"
@@ -469,34 +486,31 @@ f_main()
 
 # handle different adblock actions
 #
-if [ "${adb_procd}" = "true" ]
-then
-    f_envload
-    case "${1}" in
-        stop)
-            f_rmtemp
-            f_rmdns
-            f_dnsrestart
-            ;;
-        restart)
-            f_rmtemp
-            f_rmdns
-            f_envcheck
-            f_main
-            ;;
-        suspend)
-            f_switch suspend
-            ;;
-        resume)
-            f_switch resume
-            ;;
-        query)
-            f_query "${2}"
-            ;;
-        *)
-            f_envcheck
-            f_main
-            ;;
-    esac
-fi
+f_envload
+case "${1}" in
+    stop)
+        f_rmtemp
+        f_rmdns
+        f_dnsrestart
+        ;;
+    restart)
+        f_rmtemp
+        f_rmdns
+        f_envcheck
+        f_main
+        ;;
+    suspend)
+        f_switch suspend
+        ;;
+    resume)
+        f_switch resume
+        ;;
+    query)
+        f_query "${2}"
+        ;;
+    *)
+        f_envcheck
+        f_main
+        ;;
+esac
 exit 0
index aadac26612c2420e149c07aae09f9a28cd2bd3eb..2bba0829dc96d07f8d4e96f3ec6156e54ae054f9 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=addrwatch
 PKG_VERSION:=0.8
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-master.tar.gz
 PKG_SOURCE_URL:=https://github.com/fln/addrwatch/releases/download/$(PKG_VERSION)/
@@ -46,7 +46,7 @@ define Package/addrwatch/install
        $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/addrwatch $(1)/usr/sbin/
        $(INSTALL_BIN) ./files/addrwatch.init $(1)/etc/init.d/addrwatch
-       $(INSTALL_CONF) ./files/addrwatch.config $(1)/etc/config/addrwatch$
+       $(INSTALL_CONF) ./files/addrwatch.config $(1)/etc/config/addrwatch
 endef
 
 $(eval $(call BuildPackage,addrwatch))
index c7cbbfe1b1da0f7e55f28baa6b2d575074950b2d..fb0ea469163ea8c01bfb72f94caf74973144c365 100644 (file)
@@ -4,8 +4,6 @@
 START=50
 USE_PROCD=1
 
-. /lib/functions/network.sh
-
 validate_section_addrwatch() {
        uci_validate_section addrwatch addrwatch "${1}" \
                'disabled:bool:0' \
@@ -65,6 +63,7 @@ start_instance() {
 }
 
 start_service() {
+       . /lib/functions/network.sh
        config_load 'addrwatch'
        config_foreach start_instance 'addrwatch'
 }
index b0d7309d33c00320aeda1d65ff94a688426282e6..2f0443993f052ada1cba15b49ffb2b7c419876e2 100644 (file)
@@ -1,8 +1,8 @@
-menu "Aria2 configuration"
+menu "Aria2 Configuration"
        depends on PACKAGE_aria2
 
 choice
-       prompt "SSL library"
+       prompt "SSL Library"
        default ARIA2_OPENSSL
 
 config ARIA2_OPENSSL
@@ -12,34 +12,42 @@ config ARIA2_GNUTLS
        bool "GNUTLS"
 
 config ARIA2_NOSSL
-       bool "No SSL support"
+       bool "No SSL Support"
 
 endchoice
 
 config ARIA2_BITTORRENT
-       bool "Enable bittorrent support"
+       bool "Enable Bittorrent Support"
        depends on ARIA2_OPENSSL
        default n
 
-config ARIA2_METALINK
-       bool "Enable metalink support"
-       default n
-
 config ARIA2_SFTP
-        bool "Enable sftp support"
+        bool "Enable SFTP Support"
         default n
 
+config ARIA2_ASYNC_DNS
+       bool "Enable Async DNS Support"
+       default n
+
+config ARIA2_COOKIE
+       bool "Enable Firefox3/Chromium Cookie Support"
+       default n
+
+config ARIA2_METALINK
+       bool "Enable Metalink Support"
+       default n
+
 choice
-       prompt "XML library"
-       default ARIA2_EXPAT
+       prompt "XML Library"
+       default ARIA2_LIBXML2
        depends on ARIA2_METALINK
 
+config ARIA2_LIBXML2
+        bool "LIBXML2"
+
 config ARIA2_EXPAT
        bool "EXPAT"
 
-config ARIA2_LIBXML2
-       bool "LIBXML2"
-
 endchoice
 
 endmenu
index a96d4b86c42884b7e4035b1b571bf40441c8095c..1ad16fa9d15be9159f2f02926dfafbadeabd92a6 100644 (file)
@@ -7,12 +7,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=aria2
-PKG_VERSION:=1.30.0
+PKG_VERSION:=1.31.0
 PKG_RELEASE:=1
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://github.com/aria2/aria2/releases/download/release-$(PKG_VERSION)/
-PKG_MD5SUM:=8c22f569d3fb9e42c5fd9a95173b9b5f
+PKG_HASH:=7b85619048b23406f241e38a5b1b8b0bc2cae9e80fd117810c2a71ecca813f8c
 PKG_INSTALL:=1
 
 PKG_MAINTAINER:=Imre Kaloz <kaloz@openwrt.org>, Hsing-Wang Liao <kuoruan@gmail.com>
@@ -24,8 +24,10 @@ PKG_CONFIG_DEPENDS := \
   ARIA2_OPENSSL \
   ARIA2_GNUTLS \
   ARIA2_BITTORRENT \
-  ARIA2_METALINK \
   ARIA2_SFTP \
+  ARIA2_ASYNC_DNS \
+  ARIA2_COOKIE \
+  ARIA2_METALINK \
   ARIA2_EXPAT \
   ARIA2_LIBXML2
 
@@ -41,7 +43,7 @@ define Package/aria2
   SUBMENU:=File Transfer
   TITLE:=lightweight download utility
   URL:=https://aria2.github.io/
-  DEPENDS:=+zlib +ARIA2_SFTP:libssh2 +ARIA2_LIBXML2:libxml2 +ARIA2_EXPAT:libexpat +libstdcpp +ARIA2_OPENSSL:libopenssl +ARIA2_GNUTLS:libgnutls
+  DEPENDS:=+zlib +libstdcpp +ARIA2_SFTP:libssh2 +ARIA2_ASYNC_DNS:libcares +ARIA2_COOKIE:libsqlite3 +ARIA2_LIBXML2:libxml2 +ARIA2_EXPAT:libexpat +ARIA2_OPENSSL:libopenssl +ARIA2_GNUTLS:libgnutls
 endef
 
 define Package/aria2/description
@@ -52,19 +54,19 @@ endef
 CONFIGURE_ARGS += \
        --disable-nls \
        $(if $(CONFIG_ARIA2_NOSSL),--disable,--enable)-ssl \
-       $(if $(CONFIG_ARIA2_OPENSSL),--with,--without)-openssl \
-       $(if $(CONFIG_ARIA2_GNUTLS),--with,--without)-gnutls \
        $(if $(CONFIG_ARIA2_BITTORRENT),--enable,--disable)-bittorrent \
        $(if $(CONFIG_ARIA2_METALINK),--enable,--disable)-metalink \
+       $(if $(CONFIG_ARIA2_OPENSSL),--with,--without)-openssl \
+       $(if $(CONFIG_ARIA2_GNUTLS),--with,--without)-gnutls \
        $(if $(CONFIG_ARIA2_SFTP),--with,--without)-libssh2 \
+       $(if $(CONFIG_ARIA2_ASYNC_DNS),--with,--without)-libcares \
+       $(if $(CONFIG_ARIA2_COOKIE),--with,--without)-sqlite3 \
        $(if $(CONFIG_ARIA2_LIBXML2),--with,--without)-libxml2 \
        $(if $(CONFIG_ARIA2_EXPAT),--with,--without)-libexpat \
        --without-libnettle \
        --without-libgmp \
        --without-libgcrypt \
-       --without-libcares \
        --without-libuv \
-       --without-sqlite3 \
        --with-libz
 
 define Package/aria2/install
index 9781d8cac3ff487149dbc320075329bbc92af0aa..e144edd6bb0b9319df1e888dc01e7e1e7f7b945c 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=bitlbee
-PKG_VERSION:=3.4.2
+PKG_VERSION:=3.5.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://get.bitlbee.org/src/ \
                        http://distcache.FreeBSD.org/local-distfiles/brix/
-PKG_MD5SUM:=69c85554def74f314e3b6e390389a30b0e748f23ef37883e9d7545ee2c45ea57
+PKG_MD5SUM:=9636d7fd89ebb3756c13a9a3387736ca6d56ccf66ec0580d512f07b21db0fa69
 
 PKG_MAINTAINER:=Nikil Mehta <nikil.mehta@gmail.com>
 PKG_LICENSE:=GPL-2.0
index 3f3edab564093bfd29b4179093dbbc359c910d92..8e9dfa9abe4008fbfda52e5b8cdc50ec1f7bc3bc 100644 (file)
@@ -8,15 +8,16 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=clamav
-PKG_VERSION:=0.98.7
+PKG_VERSION:=0.99.2
 PKG_RELEASE:=1
 
 PKG_LICENSE:=GPL-2.0
-PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
+PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr> \
+               Lucian Cristian <lucian.cristian@gmail.com>
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://sourceforge.net/projects/clamav/files/clamav/$(PKG_VERSION)/
-PKG_MD5SUM:=157c601161da1c2d5a0e48ea1b49e067
+PKG_SOURCE_URL:=https://www.clamav.net/downloads/production/
+PKG_HASH:=167bd6a13e05ece326b968fdb539b05c2ffcfef6018a274a10aeda85c2c0027a
 
 PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
@@ -26,7 +27,7 @@ include $(INCLUDE_DIR)/package.mk
 
 define Package/clamav/Default
   SECTION:=net
-  DEPENDS:=+libpthread +uclibcxx +zlib +libcurl +libopenssl
+  DEPENDS:=+libpthread +uclibcxx +zlib +libcurl +libopenssl +libltdl +libpcre2 +USE_MUSL:musl-fts
   CATEGORY:=Network
   SUBMENU:=Web Servers/Proxies
   TITLE:=ClamAV
@@ -58,7 +59,7 @@ endef
 CONFIGURE_VARS += \
        INCLUDES="" \
        CXXFLAGS="$$$$CXXFLAGS -fno-rtti" \
-       LIBS="-lpthread" \
+       $(if $(CONFIG_USE_MUSL),LIBS="-lpthread -lfts",LIBS="-lpthread") \
 
 define Build/Configure
        $(call Build/Configure/Default, \
@@ -67,9 +68,9 @@ define Build/Configure
                --exec-prefix=/usr/ \
                --disable-xml \
                --disable-bzip2 \
-               --enable-ltdl-install \
                --with-user nobody \
                --with-group nogroup \
+               --with-pcre="$(STAGING_DIR)/usr/" \
        )
 endef
 
index 1543caa718831134a013b44c00d599e0016c7f9a..26d941ea17e652bc1b0e499617bded5a141c7f09 100644 (file)
@@ -32,3 +32,4 @@ config clamav 'clamav'
        option LocalSocket '/var/run/clamav/clamd.sock'
        option User 'nobody'
        option ExitOnOOM 'yes'
+       option DatabaseDirectory '/usr/share/clamav'
index b2a89501962865d010d30618656595e43fb557b8..a02468e0737aebd12281155f588944c65edf0ba9 100644 (file)
@@ -42,7 +42,8 @@ validate_clamav_section() {
                'MaxFileSize:string' \
                'LocalSocket:string' \
                'User:string' \
-               'ExitOnOOM:string'
+               'ExitOnOOM:string' \
+               'DatabaseDirectory:string'
 }
 
 start_service() {
@@ -50,14 +51,15 @@ start_service() {
                StreamMaxPort MaxThreads ReadTimeout CommandReadTimeout MaxDirectoryRecursion \
                FollowFileSymlinks FollowDirectorySymlinks SelfCheck DetectPUA ScanPE DisableCertCheck \
                ScanELF DetectBrokenExecutables ScanOLE2 ScanPDF ScanSWF ScanMail ScanPartialMessages \
-               ScanArchive TemporaryDirectory ArchiveBlockEncrypted MaxFileSize LocalSocket User
+               ScanArchive TemporaryDirectory ArchiveBlockEncrypted MaxFileSize LocalSocket User \
+               DatabaseDirectory
 
        validate_clamav_section clamav || {
                echo "validation failed"
                return 1
        }
 
-       mkdir -p /usr/share/clamav
+       mkdir -p $DatabaseDirectory
        mkdir -p /etc/clamav/
        mkdir -p /var/run/clamav/
        chmod a+rw /var/run/clamav
@@ -97,6 +99,7 @@ start_service() {
        echo "LocalSocket " $LocalSocket >> $CLAMD_CONFIGFILE
        echo "User " $User >> $CLAMD_CONFIGFILE
        echo "ExitOnOOM " $ExitOnOOM >> $CLAMD_CONFIGFILE
+       echo "DatabaseDirectory " $DatabaseDirectory >> $CLAMD_CONFIGFILE
 
        procd_open_instance
        procd_set_param command $PROG -c $CLAMD_CONFIGFILE
index 827e8dd959121047d276c8a15057f4a40d6a0228..ccce09a41758a5b421927d3d494a72412855d091 100644 (file)
@@ -5,3 +5,4 @@ config freshclam 'freshclam'
        option NotifyClamd '/etc/clamav/clamd.conf'
        option DatabaseOwner 'root'
        option CompressLocalDatabase 'yes'
+       option DatabaseDirectory '/usr/share/clamav'
index 37b276729843857a76245a4f72482ddf790ba05e..9504b7ffaae7654f1d1a7b4b87bf19cffbf99998 100644 (file)
@@ -15,11 +15,13 @@ validate_freshclam_section() {
                'DatabaseMirror:string' \
                'NotifyClamd:string' \
                'DatabaseOwner:string' \
-               'CompressLocalDatabase:string:'
+               'CompressLocalDatabase:string' \
+               'DatabaseDirectory:string:'
 }
 
 start_service() {
-       local freshclam_config_file UpdateLogFile DatabaseOwner NotifyClamd DatabaseMirror
+       local freshclam_config_file UpdateLogFile DatabaseOwner NotifyClamd DatabaseMirror \
+       DatabaseDirectory
 
        validate_freshclam_section freshclam || {
                echo "validation failed"
@@ -28,7 +30,7 @@ start_service() {
 
        [ -f /tmp/freshclam.pid ] && echo "already running" && return 0
 
-       mkdir -p /usr/share/clamav
+       mkdir -p $DatabaseDirectory
        mkdir -p /etc/clamav
        touch /tmp/freshclam.log
        touch /tmp/freshclam.pid
@@ -41,6 +43,7 @@ start_service() {
        echo "NotifyClamd " $NotifyClamd >> $FRESHCLAM_CONFIGFILE
        echo "DatabaseOwner " $DatabaseOwner >> $FRESHCLAM_CONFIGFILE
        echo "CompressLocalDatabase " $CompressLocalDatabase >> $FRESHCLAM_CONFIGFILE
+       echo "DatabaseDirectory " $DatabaseDirectory >> $FRESHCLAM_CONFIGFILE
 
        procd_open_instance
        procd_set_param command $PROG -d --config-file=$FRESHCLAM_CONFIGFILE -p /tmp/freshclam.pid --no-warnings
index 3992257089b354e31d4e574b0e514f7353ca072e..096d9cb9c55193e24a8308d4adb78e0f55c2a968 100644 (file)
@@ -1,6 +1,6 @@
 --- a/clamdscan/proto.c
 +++ b/clamdscan/proto.c
-@@ -55,6 +55,7 @@
+@@ -59,6 +59,7 @@
  #include "shared/misc.h"
  #include "shared/clamdcom.h"
  
index 4ed43fc9b686a14a3cfa11975e36bf89655c2243..420372c2c39fe7850cf37f8e01f6a06e54390ab3 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=cshark
 PKG_VERSION=2015-11-24-$(PKG_SOURCE_VERSION)
-PKG_RELEASE=2
+PKG_RELEASE=3
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/cloudshark/cshark.git
@@ -32,15 +32,6 @@ define Package/cshark
   MAINTAINER:=Luka Perkov <luka@openwrt.org>
 endef
 
-define Package/luci-app-cshark
-  SECTION:=luci
-  CATEGORY:=LuCI
-  SUBMENU:=3. Applications
-  TITLE:=Cloudshark capture tool Web UI
-  DEPENDS:=+cshark +luci
-  MAINTAINER:=Luka Perkov <luka@openwrt.org>
-endef
-
 CMAKE_OPTIONS = \
        -DCMAKE_INSTALL_PREFIX=/usr \
        -DWITH_DEBUG=OFF \
@@ -66,10 +57,5 @@ define Package/cshark/install
                $(1)/etc/ssl/certs/
 endef
 
-define Package/luci-app-cshark/install
-       $(INSTALL_DIR) $(1)/usr/lib/lua/luci
-       $(CP) -R $(PKG_BUILD_DIR)/openwrt/luci/luasrc/* $(1)/usr/lib/lua/luci/
-endef
 
 $(eval $(call BuildPackage,cshark))
-$(eval $(call BuildPackage,luci-app-cshark))
index 7be49477f7036f631a75b41e4404cd33d5f9bb1c..cf18203ec503146db623cca83deacc36f3df3ea3 100755 (executable)
@@ -12,7 +12,7 @@ PKG_NAME:=ddns-scripts
 PKG_VERSION:=2.7.6
 # Release == build
 # increase on changes of services files or tld_names.dat
-PKG_RELEASE:=13
+PKG_RELEASE:=14
 
 PKG_LICENSE:=GPL-2.0
 PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
@@ -22,7 +22,7 @@ include $(INCLUDE_DIR)/package.mk
 # no default dependencies
 PKG_DEFAULT_DEPENDS=
 
-define Package/$(PKG_NAME)/Default
+define Package/ddns-scripts/Default
     SECTION:=net
     CATEGORY:=Network
     SUBMENU:=IP Addresses and Names
@@ -30,16 +30,16 @@ define Package/$(PKG_NAME)/Default
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)
-    $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts
+    $(call Package/ddns-scripts/Default)
     TITLE:=Dynamic DNS Client scripts (with IPv6 support)
 endef
 # shown in LuCI package description
-define Package/$(PKG_NAME)/description
+define Package/ddns-scripts/description
     Dynamic DNS Client scripts (with IPv6 support) - Info: http://wiki.openwrt.org/doc/howto/ddns.client
 endef
 # shown in menuconfig <Help>
-define Package/$(PKG_NAME)/config
+define Package/ddns-scripts/config
        help
                A highly configurable set of scripts for doing dynamic dns updates.
                  - IPv6 support
@@ -54,55 +54,55 @@ define Package/$(PKG_NAME)/config
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)_cloudflare
-    $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts_cloudflare
+    $(call Package/ddns-scripts/Default)
     TITLE:=CloudFlare.com API v1 (deprecated)
-    DEPENDS:=$(PKG_NAME)
+    DEPENDS:=ddns-scripts
 endef
-define Package/$(PKG_NAME)_cloudflare/description
+define Package/ddns-scripts_cloudflare/description
     Dynamic DNS Client scripts extension for CloudFlare.com API-v1 (deprecated)
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)_cloudflare.com-v4
-    $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts_cloudflare.com-v4
+    $(call Package/ddns-scripts/Default)
     TITLE:=CloudFlare.com API v4 (require cURL)
-    DEPENDS:=$(PKG_NAME) +curl
+    DEPENDS:=ddns-scripts +curl
 endef
-define Package/$(PKG_NAME)_cloudflare.com-v4/description
+define Package/ddns-scripts_cloudflare.com-v4/description
     Dynamic DNS Client scripts extension for CloudFlare.com API-v4 (require/install cURL)
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)_godaddy.com-v1
-    $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts_godaddy.com-v1
+    $(call Package/ddns-scripts/Default)
     TITLE:=GoDaddy.com (require cURL)
-    DEPENDS:=$(PKG_NAME) +curl
+    DEPENDS:=ddns-scripts +curl
 endef
-define Package/$(PKG_NAME)_godaddy.com-v1/description
+define Package/ddns-scripts_godaddy.com-v1/description
     Dynamic DNS Client scripts extension for GoDaddy.com (require/install cURL)
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)_no-ip_com
-    $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts_no-ip_com
+    $(call Package/ddns-scripts/Default)
     TITLE:=DDNS extension for No-IP.com
-    DEPENDS:=$(PKG_NAME)
+    DEPENDS:=ddns-scripts
 endef
-define Package/$(PKG_NAME)_no-ip_com/description
+define Package/ddns-scripts_no-ip_com/description
     Dynamic DNS Client scripts extension for No-IP.com
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)_nsupdate
-    $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts_nsupdate
+    $(call Package/ddns-scripts/Default)
     TITLE:=DDNS extension using Bind nsupdate
-    DEPENDS:=$(PKG_NAME) +bind-client
+    DEPENDS:=ddns-scripts +bind-client
 endef
-define Package/$(PKG_NAME)_nsupdate/description
+define Package/ddns-scripts_nsupdate/description
     Dynamic DNS Client scripts extension for direct updates using Bind nsupdate
 endef
-define Package/$(PKG_NAME)_nsupdate/config
+define Package/ddns-scripts_nsupdate/config
     help
        The script directly updates a PowerDNS (or maybe bind server) via nsupdate
        from bind-client package. It requires
@@ -132,18 +132,18 @@ define Build/Compile
        gzip -f9 $(PKG_BUILD_DIR)/files/public_suffix_list.dat
 endef
 
-define Package/$(PKG_NAME)/conffiles
+define Package/ddns-scripts/conffiles
 /etc/config/ddns
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)/preinst
+define Package/ddns-scripts/preinst
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)/install
+define Package/ddns-scripts/install
        $(INSTALL_DIR)  $(1)/etc/uci-defaults
        $(INSTALL_BIN)  $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns
        $(INSTALL_DIR)  $(1)/etc/hotplug.d/iface
@@ -159,7 +159,7 @@ define Package/$(PKG_NAME)/install
        $(INSTALL_DIR)  $(1)/usr/lib/ddns
        $(INSTALL_BIN)  $(PKG_BUILD_DIR)/files/dynamic_dns_*.sh $(1)/usr/lib/ddns
 endef
-define Package/$(PKG_NAME)/postinst
+define Package/ddns-scripts/postinst
        #!/bin/sh
        # if NOT run buildroot and PKG_UPGRADE then (re)start service if enabled
        [ -z "$${IPKG_INSTROOT}" -a "$${PKG_UPGRADE}" = "1" ] && {
@@ -171,7 +171,7 @@ define Package/$(PKG_NAME)/postinst
        }
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)/prerm
+define Package/ddns-scripts/prerm
        #!/bin/sh
        # if run within buildroot exit
        [ -n "$${IPKG_INSTROOT}" ] && exit 0
@@ -184,13 +184,13 @@ define Package/$(PKG_NAME)/prerm
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)_cloudflare/preinst
+define Package/ddns-scripts_cloudflare/preinst
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)_cloudflare/install
+define Package/ddns-scripts_cloudflare/install
        $(INSTALL_DIR)  $(1)/etc/uci-defaults
        $(INSTALL_BIN)  $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_cloudflare
        $(INSTALL_DIR)  $(1)/usr/share
@@ -198,7 +198,7 @@ define Package/$(PKG_NAME)_cloudflare/install
        $(INSTALL_DIR)  $(1)/usr/lib/ddns
        $(INSTALL_BIN)  $(PKG_BUILD_DIR)/files/update_cloudflare_com_v1.sh $(1)/usr/lib/ddns
 endef
-define Package/$(PKG_NAME)_cloudflare/postinst
+define Package/ddns-scripts_cloudflare/postinst
        #!/bin/sh
        # remove old services file entries
        /bin/sed -i '/cloudflare\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services         >/dev/null 2>&1
@@ -216,7 +216,7 @@ define Package/$(PKG_NAME)_cloudflare/postinst
        }
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)_cloudflare/prerm
+define Package/ddns-scripts_cloudflare/prerm
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop                             >/dev/null 2>&1
@@ -227,19 +227,19 @@ define Package/$(PKG_NAME)_cloudflare/prerm
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)_cloudflare.com-v4/preinst
+define Package/ddns-scripts_cloudflare.com-v4/preinst
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)_cloudflare.com-v4/install
+define Package/ddns-scripts_cloudflare.com-v4/install
        $(INSTALL_DIR) $(1)/etc/uci-defaults
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_cloudflare.com-v4
        $(INSTALL_DIR) $(1)/usr/lib/ddns
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_cloudflare_com_v4.sh $(1)/usr/lib/ddns
 endef
-define Package/$(PKG_NAME)_cloudflare.com-v4/postinst
+define Package/ddns-scripts_cloudflare.com-v4/postinst
        #!/bin/sh
        # remove old services file entries
        /bin/sed -i '/cloudflare\.com-v4/d' $${IPKG_INSTROOT}/etc/ddns/services         >/dev/null 2>&1
@@ -257,7 +257,7 @@ define Package/$(PKG_NAME)_cloudflare.com-v4/postinst
        }
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)_cloudflare.com-v4/prerm
+define Package/ddns-scripts_cloudflare.com-v4/prerm
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop                             >/dev/null 2>&1
@@ -268,19 +268,19 @@ define Package/$(PKG_NAME)_cloudflare.com-v4/prerm
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)_godaddy.com-v1/preinst
+define Package/ddns-scripts_godaddy.com-v1/preinst
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)_godaddy.com-v1/install
+define Package/ddns-scripts_godaddy.com-v1/install
        $(INSTALL_DIR) $(1)/etc/uci-defaults
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_godaddy.com-v1
        $(INSTALL_DIR) $(1)/usr/lib/ddns
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_godaddy_com_v1.sh $(1)/usr/lib/ddns
 endef
-define Package/$(PKG_NAME)_godaddy.com-v1/postinst
+define Package/ddns-scripts_godaddy.com-v1/postinst
        #!/bin/sh
        # remove old services file entries
        /bin/sed -i '/godaddy\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services            >/dev/null 2>&1
@@ -298,7 +298,7 @@ define Package/$(PKG_NAME)_godaddy.com-v1/postinst
        }
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)_godaddy.com-v1/prerm
+define Package/ddns-scripts_godaddy.com-v1/prerm
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop                             >/dev/null 2>&1
@@ -309,19 +309,19 @@ define Package/$(PKG_NAME)_godaddy.com-v1/prerm
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)_no-ip_com/preinst
+define Package/ddns-scripts_no-ip_com/preinst
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)_no-ip_com/install
+define Package/ddns-scripts_no-ip_com/install
        $(INSTALL_DIR) $(1)/etc/uci-defaults
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_no-ip_com
        $(INSTALL_DIR) $(1)/usr/lib/ddns
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_no-ip_com.sh $(1)/usr/lib/ddns
 endef
-define Package/$(PKG_NAME)_no-ip_com/postinst
+define Package/ddns-scripts_no-ip_com/postinst
        #!/bin/sh
        # remove old services file entries
        /bin/sed -i '/no-ip\.com/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1
@@ -337,7 +337,7 @@ define Package/$(PKG_NAME)_no-ip_com/postinst
        }
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)_no-ip_com/prerm
+define Package/ddns-scripts_no-ip_com/prerm
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop             >/dev/null 2>&1
@@ -347,19 +347,19 @@ define Package/$(PKG_NAME)_no-ip_com/prerm
 endef
 
 ###### *************************************************************************
-define Package/$(PKG_NAME)_nsupdate/preinst
+define Package/ddns-scripts_nsupdate/preinst
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)_nsupdate/install
+define Package/ddns-scripts_nsupdate/install
        $(INSTALL_DIR) $(1)/etc/uci-defaults
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_nsupdate
        $(INSTALL_DIR) $(1)/usr/lib/ddns
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_nsupdate.sh $(1)/usr/lib/ddns
 endef
-define Package/$(PKG_NAME)_nsupdate/postinst
+define Package/ddns-scripts_nsupdate/postinst
        #!/bin/sh
        # remove old services file entries
        /bin/sed -i '/bind-nsupdate/d' $${IPKG_INSTROOT}/etc/ddns/services      >/dev/null 2>&1
@@ -377,7 +377,7 @@ define Package/$(PKG_NAME)_nsupdate/postinst
        }
        exit 0  # suppress errors
 endef
-define Package/$(PKG_NAME)_nsupdate/prerm
+define Package/ddns-scripts_nsupdate/prerm
        #!/bin/sh
        # if NOT run buildroot then stop service
        [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop                     >/dev/null 2>&1
@@ -388,9 +388,9 @@ define Package/$(PKG_NAME)_nsupdate/prerm
 endef
 
 ###### *************************************************************************
-$(eval $(call BuildPackage,$(PKG_NAME)))
-$(eval $(call BuildPackage,$(PKG_NAME)_cloudflare))
-$(eval $(call BuildPackage,$(PKG_NAME)_cloudflare.com-v4))
-$(eval $(call BuildPackage,$(PKG_NAME)_godaddy.com-v1))
-$(eval $(call BuildPackage,$(PKG_NAME)_no-ip_com))
-$(eval $(call BuildPackage,$(PKG_NAME)_nsupdate))
+$(eval $(call BuildPackage,ddns-scripts))
+$(eval $(call BuildPackage,ddns-scripts_cloudflare))
+$(eval $(call BuildPackage,ddns-scripts_cloudflare.com-v4))
+$(eval $(call BuildPackage,ddns-scripts_godaddy.com-v1))
+$(eval $(call BuildPackage,ddns-scripts_no-ip_com))
+$(eval $(call BuildPackage,ddns-scripts_nsupdate))
index 78b345675ad2ddf7db834d4f8d9d1df3b0932ddf..df3667dc478bedf72e2e34e9b62cc6ebff1f309b 100644 (file)
@@ -64,7 +64,7 @@
 
 "dnsdynamic.org"       "http://[USERNAME]:[PASSWORD]@www.dnsdynamic.org/api/?hostname=[DOMAIN]&myip=[IP]"      "good|nochg"
 
-"dnsexit.com"          "http://www.dnsexit.com/RemoteUpdate.sv?login=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&myip=[IP]"   "0=|1="
+"dnsexit.com"          "http://update.dnsexit.com/RemoteUpdate.sv?login=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&myip=[IP]"
 
 "dnshome.de"           "http://[USERNAME]:[PASSWORD]@www.dnshome.de/dyndns.php?hostname=[DOMAIN]&ip=[IP]"
 
index ca32cd1dc1d940fc4338a0bd8d6c9de0bca5f697..60c8c8701a9cff728794d5125a8fc41d571eb3dc 100644 (file)
@@ -15,7 +15,7 @@ PKG_LICENSE:=GPL-3.0+
 
 include $(INCLUDE_DIR)/package.mk
 
-define Package/$(PKG_NAME)
+define Package/dynapoint
     SECTION:=net
     CATEGORY:=Network
     SUBMENU:=wireless
@@ -23,19 +23,19 @@ define Package/$(PKG_NAME)
     TITLE:=Dynamic access point manager
 endef
 
-define Package/$(PKG_NAME)/description
+define Package/dynapoint/description
   Dynapoint uses LUA scripts to allow dynamic access point creation
   and deletion depending on changes of certain network conditions.
 endef
 
-define Package/$(PKG_NAME)/conffiles
+define Package/dynapoint/conffiles
 /etc/config/dynapoint
 endef
 
 define Build/Compile
 endef
 
-define Package/$(PKG_NAME)/install
+define Package/dynapoint/install
        $(INSTALL_DIR) $(1)/usr/sbin
        $(INSTALL_BIN) ./src/dynapoint.lua $(1)/usr/sbin/
        $(INSTALL_DIR) $(1)/etc/init.d
@@ -44,4 +44,4 @@ define Package/$(PKG_NAME)/install
        $(INSTALL_DATA) ./src/dynapoint.config $(1)/etc/config/dynapoint
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,dynapoint))
index c8be1f3d71e23ac70cb7a4d9faa5c930ad3ffbee..99828c14cac8bbbe716d99dce084cfef54655052 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=fping
-PKG_VERSION:=3.13
+PKG_VERSION:=3.16
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://fping.org/dist/
-PKG_MD5SUM:=4bb28efd1cb3d1240ae551dadc20daa852b1ba71bafe32e49ca629c1848e5720
+PKG_MD5SUM:=2f753094e4df3cdb1d99be1687c0fb7d2f14c0d526ebf03158c8c5519bc78f54
 
 PKG_MAINTAINER:=Nikil Mehta <nikil.mehta@gmail.com>
 PKG_LICENSE:=BSD-4-Clause
index 3dead69587fb12cce5cb4ece7d5b0773f42d2156..249048fc1cef0264fc249ac871c69de1d2c7e859 100644 (file)
@@ -1,11 +1,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gnunet
-PKG_SOURCE_VERSION:=a4295da3df82817ff2fe1fa547374a96a2e0280b
-PKG_VERSION:=0.10.2-git-20170111-$(PKG_SOURCE_VERSION)
+PKG_SOURCE_VERSION:=f7ef810b99d2c47d5a07739ecb0be1667f32567f
+PKG_MIRROR_HASH:=1f1fbccff28240ca8c1980b3f7c95ee413a2978f6a245838d7acaae19db3f586
+
+PKG_VERSION:=0.10.2-git-20170313-$(PKG_SOURCE_VERSION)
 PKG_RELEASE:=1
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
 PKG_SOURCE_URL:=https://gnunet.org/git/gnunet.git
 PKG_SOURCE_PROTO:=git
@@ -30,7 +32,6 @@ CONFIGURE_ARGS+= \
        $(if $(CONFIG_PACKAGE_libsqlite3),--with-sqlite="$(STAGING_DIR)/usr",--without-sqlite) \
        --disable-testing \
        --disable-testruns \
-       --disable-wachs \
        --enable-experimental \
        --with-extractor=$(STAGING_DIR)/usr \
        --with-gnutls=$(STAGING_DIR)/usr \
@@ -137,7 +138,7 @@ define Package/gnunet/install
                $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gnunet-$$$$bin $(1)/usr/bin/ ; \
        done )
 
-       ( for lib in arm ats block cadet core datacache dht \
+       ( for lib in arm ats block blockgroup cadet core datacache dht \
            dns dnsparser fragmentation friends hello identity natauto natnew nse \
            peerinfo regexblock regex revocation scalarproduct set \
            statistics transport util; do \
@@ -206,7 +207,6 @@ LIBEXEC_transport-wlan:=helper-transport-wlan
 
 DEPENDS_experiments:=+libglpk
 PLUGIN_experiments:=ats_mlp ats_ril
-LIBEXEC_experiments:=service-dht-whanau service-dht-xvine
 
 # BIN_dv:=dv
 LIB_dv:=dv
@@ -306,21 +306,24 @@ DEPENDS_social-pgsql:=+gnunet-pgsql +gnunet-social
 PLUGIN_social-pgsql:=psycstore_postgres
 CONFLICTS_social-pgsql:=gnunet-social-sqlite gnunet-social-mysql
 
-DEPENDS_gns-sqlite:=+libsqlite3 +gnunet-gns
+DEPENDS_sqlite:=+libsqlite3
+LIB_sqlite:=sq
+
+DEPENDS_gns-sqlite:=+gnunet-gns +gnunet-sqlite
 PLUGIN_gns-sqlite:=namecache_sqlite namestore_sqlite
 CONFLICTS_gns-sqlite:=gnunet-gns-flat
 
-DEPENDS_peerstore-sqlite:=+libsqlite3 +gnunet-peerstore
+DEPENDS_peerstore-sqlite:=+gnunet-peerstore +gnunet-sqlite
 PLUGIN_peerstore-sqlite:=peerstore_sqlite
 CONFLICTS_peerstore-sqlite:=gnunet-peerstore-flat
 
-DEPENDS_dhtcache-sqlite:=+libsqlite3
+DEPENDS_dhtcache-sqlite:=+gnunet-sqlite
 PLUGIN_dhtcache-sqlite:=datacache_sqlite
 
-DEPENDS_fs-sqlite:=+libsqlite3 +gnunet-datastore
+DEPENDS_fs-sqlite:=+gnunet-datastore +gnunet-sqlite
 PLUGIN_fs-sqlite:=datastore_sqlite
 
-DEPENDS_social-sqlite:=+libsqlite3 +gnunet-social
+DEPENDS_social-sqlite:=+gnunet-social  +gnunet-sqlite
 PLUGIN_social-sqlite:=psycstore_sqlite
 
 DEPENDS_transport-bluetooth:=+bluez-libs
@@ -399,14 +402,15 @@ $(eval $(call BuildComponent,dhtcache-heap,heap-based dhtcache plugin,y))
 $(eval $(call BuildComponent,fs-heap,heap-based filesharing plugin,))
 $(eval $(call BuildComponent,gns-flat,flat storage GNS plugins,y))
 $(eval $(call BuildComponent,peerstore-flat,flat storage peerstore plugin,))
-$(eval $(call BuildComponent,mysql,mySQL datastore backend,))
+$(eval $(call BuildComponent,mysql,mySQL backend,))
 $(eval $(call BuildComponent,fs-mysql,mySQL filesharing plugins,))
 $(eval $(call BuildComponent,social-mysql,mySQL social plugins,))
-$(eval $(call BuildComponent,pgsql,PostgreSQL storage backends,))
+$(eval $(call BuildComponent,pgsql,PostgreSQL backend,))
 $(eval $(call BuildComponent,dhtcache-pgsql,PostgreSQL dhtcache plugin,))
 $(eval $(call BuildComponent,fs-pgsql,PostgreSQL filesharing plugin,))
 $(eval $(call BuildComponent,gns-pgsql,PostgreSQL GNS plugins,))
 $(eval $(call BuildComponent,social-pgsql,PostgreSQL social plugin,))
+$(eval $(call BuildComponent,sqlite,libsqlite3 backend,))
 $(eval $(call BuildComponent,dhtcache-sqlite,libsqlite3 dhtcache plugin,))
 $(eval $(call BuildComponent,fs-sqlite,libsqlite3 filesharing plugin,))
 $(eval $(call BuildComponent,gns-sqlite,libsqlite3 gns plugins,))
index f15174e455149d5dc6f6cc21ef188a28a5b98ed9..5c02fb25d112b6ea0757253cbd9325382b9870d7 100644 (file)
@@ -8,15 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gnurl
-PKG_VERSION:=7.51.0
+PKG_VERSION:=7.53.1
 PKG_RELEASE:=1
 
-PKG_DIST_VERSION:=$(subst .,_,$(strip $(PKG_VERSION)))
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_DIST_VERSION).tar.bz2
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=https://gnunet.org/sites/default/files
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_DIST_VERSION)
 
-PKG_MD5SUM:=2f0200d38eca6c9567447d2b8ac4676911ec73b9613a15bef31bbe9f9f22f4e5
+PKG_HASH:=cdac891a3253022b7fd75f6c71b279b5f35cc109f0b61d8068c79bca081802aa
 
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=COPYING
index 6b6820d023cbafa65c2edd9f4c54520767734c3d..14a4c1e6361f81b4d2284ca4fa6adbd921750069 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=irssi
-PKG_VERSION:=0.8.21
+PKG_VERSION:=1.0.2
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=https://github.com/irssi/irssi/releases/download/0.8.21/
-PKG_MD5SUM:=b820760c3b4f3b0c24abe4db82b6366a
+PKG_SOURCE_URL:=https://github.com/irssi/irssi/releases/download/1.0.2/
+PKG_HASH:=5c1c3cc2caf103aad073fadeb000e0f8cb3b416833a7f43ceb8bd9fcf275fbe9
 
 PKG_FIXUP:=autoreconf
 PKG_INSTALL:=1
index aa0e1b97703f61e91f2bfdb4cba6b00d1ad39ebb..6db5161453847de15b07d00d0a3adf170d8eef12 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2016 Dan Luedtke <mail@danrl.com>
+# Copyright (C) 2016-2017 Dan Luedtke <mail@danrl.com>
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=jool
-PKG_VERSION:=2016.12.17
+PKG_VERSION:=2017.03.09
 PKG_RELEASE:=1
 
 PKG_LICENSE:=GPL-3.0
@@ -15,7 +15,7 @@ PKG_LICENSE_FILES:=COPYING
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/NICMx/Jool.git
-PKG_SOURCE_VERSION:=66a791c90751d7941b08c142babe1deec73d0996
+PKG_SOURCE_VERSION:=997a81bb5f5e9d82aa122fd37b7c890e44a245dd
 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.xz
 
index 920122a2fe577a84a222456de7e24ccd2a7c263b..b537585d00b6b793f4f6c0473d443456366a278f 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2014-2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+# Copyright (C) 2014-2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=knot
-PKG_VERSION:=2.3.0
+PKG_VERSION:=2.3.3
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://secure.nic.cz/files/knot-dns/
-PKG_MD5SUM:=7ca754f972fb07faa4f30e50d8a4385b
+PKG_HASH:=a929bce3b957a81776b1db7b43b0e4473339bf16be8dbba5abb4b0593bf43c94
 
 PKG_MAINTAINER:=Daniel Salzman <daniel.salzman@nic.cz>
 PKG_LICENSE:=GPL-3.0 LGPL-2.0 0BSD MIT OLDAP-2.8
@@ -242,7 +242,7 @@ endef
 
 define Package/knot-zonecheck/install
        $(INSTALL_DIR)                                          $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kzonecheck   $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kzonecheck    $(1)/usr/bin/
 endef
 
 define Package/knot-keymgr/install
diff --git a/net/knot/patches/04_cookies_big_endian.patch b/net/knot/patches/04_cookies_big_endian.patch
deleted file mode 100644 (file)
index 6838495..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-From 84849be189c49ef9556bd84d5e5103317372e8a7 Mon Sep 17 00:00:00 2001
-From: Karel Slany <karel.slany@nic.cz>
-Date: Thu, 11 Aug 2016 11:39:39 +0200
-Subject: [PATCH] Added conversion to wire format when writing FNV64 hash
- values.
-
-Test on big-endian machines have been failing.
----
- src/libknot/cookies/alg-fnv64.c     |  6 +++---
- tests/libknot/test_cookies-client.c | 20 ++++++++++----------
- tests/libknot/test_cookies-server.c | 20 ++++++++++----------
- 3 files changed, 23 insertions(+), 23 deletions(-)
-
-diff --git a/src/libknot/cookies/alg-fnv64.c b/src/libknot/cookies/alg-fnv64.c
-index 9989a4f..5e263c1 100644
---- a/src/libknot/cookies/alg-fnv64.c
-+++ b/src/libknot/cookies/alg-fnv64.c
-@@ -17,10 +17,10 @@
- #include <assert.h>
- #include <stdint.h>
- #include <stdlib.h>
--#include <string.h>
- #include "contrib/fnv/fnv.h"
- #include "contrib/sockaddr.h"
-+#include "contrib/wire.h"
- #include "libknot/attribute.h"
- #include "libknot/cookies/alg-fnv64.h"
- #include "libknot/rrtype/opt-cookie.h"
-@@ -80,7 +80,7 @@ static uint16_t cc_gen_fnv64(const struct knot_cc_input *input,
-       assert(KNOT_OPT_COOKIE_CLNT == sizeof(hash_val));
-       cc_len = sizeof(hash_val);
--      memcpy(cc_out, &hash_val, cc_len);
-+      wire_write_u64(cc_out, hash_val);
-       return cc_len;
- }
-@@ -127,7 +127,7 @@ static uint16_t sc_gen_fnv64(const struct knot_sc_input *input,
-       assert(SRVR_FNV64_HASH_SIZE == sizeof(hash_val));
-       hash_len = sizeof(hash_val);
--      memcpy(hash_out, &hash_val, hash_len);
-+      wire_write_u64(hash_out, hash_val);
-       return hash_len;
- }
-diff --git a/tests/libknot/test_cookies-client.c b/tests/libknot/test_cookies-client.c
-index 44be903..712dbba 100644
---- a/tests/libknot/test_cookies-client.c
-+++ b/tests/libknot/test_cookies-client.c
-@@ -110,7 +110,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_cc_alg_fnv64.gen_func(&cc_in, hash, hash_len);
-       ok(hash_len != 0 && hash_len == knot_cc_alg_fnv64.cc_size, "cookies: FNV64 client cookie output");
-       {
--              uint8_t expected[] = { 0x74, 0x31, 0xf9, 0xa8, 0x03, 0xef, 0x15, 0xb1 };
-+              uint8_t expected[] = { 0xb1, 0x15, 0xef, 0x03, 0xa8, 0xf9, 0x31, 0x74 };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 client cookie content");
-       }
-@@ -123,7 +123,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_cc_alg_fnv64.gen_func(&cc_in, hash, hash_len);
-       ok(hash_len != 0 && hash_len == knot_cc_alg_fnv64.cc_size, "cookies: FNV64 client cookie output");
-       {
--              uint8_t expected[] = { 0x7c, 0x62, 0x25, 0xd2, 0x43, 0xdd, 0x09, 0xe7 };
-+              uint8_t expected[] = { 0xe7, 0x09, 0xdd, 0x43, 0xd2, 0x25, 0x62, 0x7c };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 client cookie content");
-       }
-@@ -136,7 +136,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_cc_alg_fnv64.gen_func(&cc_in, hash, hash_len);
-       ok(hash_len != 0 && hash_len == knot_cc_alg_fnv64.cc_size, "cookies: FNV64 client cookie output");
-       {
--              uint8_t expected[] = { 0x7c, 0x62, 0x25, 0xd2, 0x43, 0xdd, 0x09, 0xe7 };
-+              uint8_t expected[] = { 0xe7, 0x09, 0xdd, 0x43, 0xd2, 0x25, 0x62, 0x7c };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 client cookie content");
-       }
-@@ -149,7 +149,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_cc_alg_fnv64.gen_func(&cc_in, hash, hash_len);
-       ok(hash_len != 0 && hash_len == knot_cc_alg_fnv64.cc_size, "cookies: FNV64 client cookie output");
-       {
--              uint8_t expected[] = { 0x05, 0xa9, 0xd1, 0x08, 0x1b, 0x98, 0xe0, 0xaa };
-+              uint8_t expected[] = { 0xaa, 0xe0, 0x98, 0x1b, 0x08, 0xd1, 0xa9, 0x05 };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 client cookie content");
-       }
-@@ -162,7 +162,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_cc_alg_fnv64.gen_func(&cc_in, hash, hash_len);
-       ok(hash_len != 0 && hash_len == knot_cc_alg_fnv64.cc_size, "cookies: FNV64 client cookie output");
-       {
--              uint8_t expected[] = { 0x05, 0xa9, 0xd1, 0x08, 0x1b, 0x98, 0xe0, 0xaa };
-+              uint8_t expected[] = { 0xaa, 0xe0, 0x98, 0x1b, 0x08, 0xd1, 0xa9, 0x05 };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 client cookie content");
-       }
-@@ -179,7 +179,7 @@ int main(int argc, char *argv[])
-       }
-       {
--              uint8_t cookie[] = { 0x33, 0x0c, 0xa6, 0x80, 0x94, 0x17, 0xe5, 0xaf };
-+              uint8_t cookie[] = { 0xaf, 0xe5, 0x17, 0x94, 0x80, 0xa6, 0x0c, 0x33 };
-               ret = knot_cc_check(cookie, sizeof(cookie), NULL, &knot_cc_alg_fnv64);
-               ok(ret == KNOT_EINVAL, "cookies: FNV64 client cookie check no input");
-       }
-@@ -190,7 +190,7 @@ int main(int argc, char *argv[])
-       cc_in.secret_data = secret;
-       cc_in.secret_len = sizeof(secret);
-       {
--              uint8_t cookie[] = { 0x33, 0x0c, 0xa6, 0x80, 0x94, 0x17, 0xe5, 0xaf };
-+              uint8_t cookie[] = { 0xaf, 0xe5, 0x17, 0x94, 0x80, 0xa6, 0x0c, 0x33 };
-               ret = knot_cc_check(cookie, sizeof(cookie), &cc_in, NULL);
-               ok(ret == KNOT_EINVAL, "cookies: FNV64 client cookie check no algorithm");
-       }
-@@ -201,7 +201,7 @@ int main(int argc, char *argv[])
-       cc_in.secret_data = secret;
-       cc_in.secret_len = sizeof(secret);
-       {
--              uint8_t cookie[] = { 0x33, 0x0c, 0xa6, 0x80, 0x94, 0x17, 0xe5, 0xaf };
-+              uint8_t cookie[] = { 0xaf, 0xe5, 0x17, 0x94, 0x80, 0xa6, 0x0c, 0x33 };
-               ret = knot_cc_check(cookie, sizeof(cookie), &cc_in, &knot_cc_alg_fnv64);
-               ok(ret == KNOT_EOK, "cookies: FNV64 client good cookie check");
-       }
-@@ -212,7 +212,7 @@ int main(int argc, char *argv[])
-       cc_in.secret_data = secret;
-       cc_in.secret_len = sizeof(secret);
-       {
--              uint8_t cookie[] = { 0x33, 0x0c, 0xa6, 0x80, 0x94, 0x17, 0xe5, 0xaf };
-+              uint8_t cookie[] = { 0xaf, 0xe5, 0x17, 0x94, 0x80, 0xa6, 0x0c, 0x33 };
-               ret = knot_cc_check(cookie, sizeof(cookie) - 1, &cc_in, &knot_cc_alg_fnv64);
-               ok(ret == KNOT_EINVAL, "cookies: FNV64 client cookie check invalid length");
-       }
-@@ -223,7 +223,7 @@ int main(int argc, char *argv[])
-       cc_in.secret_data = secret;
-       cc_in.secret_len = sizeof(secret);
-       {
--              uint8_t cookie[] = { 0x33, 0x0c, 0xa6, 0x80, 0x94, 0x17, 0xe5, 0xae };
-+              uint8_t cookie[] = { 0xaf, 0xe5, 0x17, 0x94, 0x80, 0xa6, 0x0c, 0x32 };
-               ret = knot_cc_check(cookie, sizeof(cookie), &cc_in, &knot_cc_alg_fnv64);
-               ok(ret == KNOT_EINVAL, "cookies: FNV64 client cookie check invalid cookie");
-       }
-diff --git a/tests/libknot/test_cookies-server.c b/tests/libknot/test_cookies-server.c
-index 32001c1..66a54ba 100644
---- a/tests/libknot/test_cookies-server.c
-+++ b/tests/libknot/test_cookies-server.c
-@@ -28,10 +28,10 @@
- #include "libknot/rrtype/opt-cookie.h"
- const char *cookie_opts[] = {
--      "\x00\x0a" "\x00\x10" "\x00\x01\x02\x03\x04\x05\x06\x07" "\xe0\xd9\x95\x4e\xbc\xc3\x99\x18", /* 8 octets long wrong server cookie. */
--      "\x00\x0a" "\x00\x10" "\x00\x01\x02\x03\x04\x05\x06\x07" "\xe0\xd9\x95\x4e\xbc\xc3\x99\x19", /* 8 octets long OK server cookie. */
--      "\x00\x0a" "\x00\x18" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\xc0\xbd\xdb\xec\x19\x78\x88\x38", /* 8B nonce 8B hash long wrong server cookie. */
--      "\x00\x0a" "\x00\x18" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\xc0\xbd\xdb\xec\x19\x78\x88\x39" /* 8B nonce 8B hash long OK server cookie. */
-+      "\x00\x0a" "\x00\x10" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x19\x99\xc3\xbc\x4e\x95\xd9\xdf", /* 8 octets long wrong server cookie. */
-+      "\x00\x0a" "\x00\x10" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x19\x99\xc3\xbc\x4e\x95\xd9\xe0", /* 8 octets long OK server cookie. */
-+      "\x00\x0a" "\x00\x18" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x39\x88\x78\x19\xec\xdb\xbd\xbf", /* 8B nonce 8B hash long wrong server cookie. */
-+      "\x00\x0a" "\x00\x18" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x39\x88\x78\x19\xec\xdb\xbd\xc0"/* 8B nonce 8B hash long OK server cookie. */
- };
- #define ROPT(i) ((const uint8_t *)cookie_opts[(i)])
-@@ -193,7 +193,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
-       ok(hash_len != 0, "cookies: FNV64 server cookie output");
-       {
--              uint8_t expected[] = { 0x75, 0x45, 0x7c, 0x9a, 0xe0, 0x13, 0xa8, 0xea };
-+              uint8_t expected[] = { 0xea, 0xa8, 0x13, 0xe0, 0x9a, 0x7c, 0x45, 0x75 };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
-       }
-@@ -210,7 +210,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
-       ok(hash_len != 0, "cookies: FNV64 server cookie output");
-       {
--              uint8_t expected[] = { 0xc0, 0xbd, 0xdb, 0xec, 0x19, 0x78, 0x88, 0x39 };
-+              uint8_t expected[] = { 0x39, 0x88, 0x78, 0x19, 0xec, 0xdb, 0xbd, 0xc0 };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
-       }
-@@ -227,7 +227,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
-       ok(hash_len != 0, "cookies: FNV64 server cookie output");
-       {
--              uint8_t expected[] = { 0xe0, 0xd9, 0x95, 0x4e, 0xbc, 0xc3, 0x99, 0x19 };
-+              uint8_t expected[] = { 0x19, 0x99, 0xc3, 0xbc, 0x4e, 0x95, 0xd9, 0xe0 };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
-       }
-@@ -244,7 +244,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
-       ok(hash_len != 0, "cookies: FNV64 server cookie output");
-       {
--              uint8_t expected[] = { 0x4d, 0xde, 0xfa, 0x22, 0xb9, 0x0a, 0xcc, 0xd8 };
-+              uint8_t expected[] = { 0xd8, 0xcc, 0x0a, 0xb9, 0x22, 0xfa, 0xde, 0x4d };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
-       }
-@@ -261,7 +261,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
-       ok(hash_len != 0, "cookies: FNV64 server cookie output");
-       {
--              uint8_t expected[] = { 0xa0, 0x35, 0xe3, 0xe0, 0x78, 0x7a, 0x91, 0xaf };
-+              uint8_t expected[] = { 0xaf, 0x91, 0x7a, 0x78, 0xe0, 0xe3, 0x35, 0xa0 };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
-       }
-@@ -278,7 +278,7 @@ int main(int argc, char *argv[])
-       hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
-       ok(hash_len != 0, "cookies: FNV64 server cookie output");
-       {
--              uint8_t expected[] = { 0x8e, 0xa3, 0xf8, 0x97, 0x84, 0x0a, 0x3d, 0x8b };
-+              uint8_t expected[] = { 0x8b, 0x3d, 0x0a, 0x84, 0x97, 0xf8, 0xa3, 0x8e };
-               ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
-       }
--- 
-2.7.4
-
index 1c17cefbe5742e175251797ed2e256c125c427bc..870fe80c8532e5701f14dbb7cd079be26b7ee396 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=lighttpd
-PKG_VERSION:=1.4.42
+PKG_VERSION:=1.4.45
 PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://download.lighttpd.net/lighttpd/releases-1.4.x
-PKG_MD5SUM:=53c55d7e1dac7adec161cd5490491f6d
+PKG_MD5SUM:=a128e1eda76899ce3fd115efae5fe631
 
 PKG_LICENSE:=BSD-3c
 PKG_LICENSE_FILES:=COPYING
diff --git a/net/lighttpd/patches/0001-mod_cgi-fix-CGI-local-redir-w-url.rewrite-once-fixes.patch b/net/lighttpd/patches/0001-mod_cgi-fix-CGI-local-redir-w-url.rewrite-once-fixes.patch
new file mode 100644 (file)
index 0000000..a6bbcbe
--- /dev/null
@@ -0,0 +1,32 @@
+From: Glenn Strauss <gstrauss@gluelogic.com>
+Subject: [PATCH] [mod_cgi] fix CGI local-redir w/ url.rewrite-once (fixes
+ #2793)
+
+x-ref:
+  "1.4.40 regression: broken redirect (using Location) between url.rewrite-once URLs"
+  https://redmine.lighttpd.net/issues/2793
+---
+ src/mod_cgi.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+--- a/src/mod_cgi.c
++++ b/src/mod_cgi.c
+@@ -560,8 +560,7 @@ static int cgi_demux_response(server *sr
+                                                       }
+                                                       connection_response_reset(srv, con); /*(includes con->http_status = 0)*/
+-
+-                                                      con->mode = DIRECT;
++                                                      plugins_call_connection_reset(srv, con);
+                                                       return FDEVENT_HANDLED_COMEBACK;
+                                               }
+                                       }
+@@ -780,7 +779,7 @@ static int cgi_recv_response(server *srv
+                       /* if we get a IN|HUP and have read everything don't exec the close twice */
+                       return HANDLER_FINISHED;
+               case FDEVENT_HANDLED_COMEBACK:
+-                      cgi_connection_close(srv, hctx);
++                      /*cgi_connection_close(srv, hctx);*//*(already cleaned up and hctx is now invalid)*/
+                       return HANDLER_COMEBACK;
+               case FDEVENT_HANDLED_ERROR:
+                       log_error_write(srv, __FILE__, __LINE__, "s", "demuxer failed: ");
index 01f9e07f65389bd001ffeb6e745db9a8120e26d0..328c2d0e957e7a253235695af580e5c954c018d8 100644 (file)
@@ -9,8 +9,9 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mwan3
 PKG_VERSION:=2.0
-PKG_RELEASE:=3
-PKG_MAINTAINER:=Jeroen Louwes <jeroen.louwes@gmail.com>
+PKG_RELEASE:=4
+PKG_MAINTAINER:=Jeroen Louwes <jeroen.louwes@gmail.com>, \
+               Florian Eckert <fe@dev.tdt.de>
 PKG_LICENSE:=GPLv2
 
 include $(INCLUDE_DIR)/package.mk
@@ -21,7 +22,8 @@ define Package/mwan3
    SUBMENU:=Routing and Redirection
    DEPENDS:=+ip +ipset +iptables +iptables-mod-conntrack-extra +iptables-mod-ipopt
    TITLE:=Multiwan hotplug script with connection tracking support
-   MAINTAINER:=Jeroen Louwes <jeroen.louwes@gmail.com>
+   MAINTAINER:=Jeroen Louwes <jeroen.louwes@gmail.com>, \
+   Florian Eckert <fe@dev.tdt.de>
    PKGARCH:=all
 endef
 
index 3446d151426291a5c2dc4929a6d15099ace0f072..edc2c8a571fe2a335538003d8475d03b79c1a8c7 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=net-snmp
 PKG_VERSION:=5.7.3
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/net-snmp
@@ -98,6 +98,7 @@ endef
 
 
 SNMP_MIB_MODULES_INCLUDED = \
+       agent/extend \
        agentx \
        host/hr_device \
        host/hr_disk \
index f1e57ad4ffa74ed40015651b749ba5d4e7a00131..98db1ae6f3998e9085cbb63926ed1c8af14c688b 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ntp
 PKG_VERSION:=4.2.8p9
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/
index 975be751ec78a189091eaaa7d7c630b09303e5ea..67a4d6aaa35190ee2f0911d03a3673b0922a9e22 100644 (file)
@@ -1,10 +1,10 @@
+#!/bin/sh
+
 NAME=ntpd
-CONFIG=/etc/ntp.conf
-COMMAND=/sbin/$NAME
+COMMAND=/etc/init.d/$NAME
 
 [ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && {
-        [ -x $COMMAND ] && [ -r $CONFIG ] && {
-               killall ntpd
-               /etc/init.d/ntpd start
-        } &
+       $COMMAND enabled && {
+               $COMMAND restart
+        }
 }
index b6881c2b1d33e1b63f97ba108458ae2c4ba6b49b..e4076cd7e823cf45ec18a3a636974cab15af5bc6 100644 (file)
@@ -175,7 +175,7 @@ CONFIGURE_ARGS += \
        --without-pam
 endif
 
-ifeq ($(CONFIG_OPENSSL_ENGINE),y)
+ifeq ($(CONFIG_OPENSSL_ENGINE_CRYPTO),y)
 CONFIGURE_ARGS+= \
        --with-ssl-engine
 endif
index 0d18aa1276f3c74fa64934ab283769891c549947..294b00f4d7e542355ffae072b3b87a68415691ca 100644 (file)
@@ -67,6 +67,6 @@ start_service() {
        ln -sfn $CHAP_SECRETS /etc/ppp/chap-secrets
 
        procd_open_instance
-       procd_set_param command $BIN -c $CONFIG -o $OPTIONS_PPTP
+       procd_set_param command $BIN -c $CONFIG --fg -o $OPTIONS_PPTP
        procd_close_instance
 }
index 8d482089b779033d2217f24ec824bc2b4fbc44a8..74fae22616e20e683e7bc95144be3ae7ad62491e 100644 (file)
@@ -49,7 +49,7 @@ PKG_CONFIG_DEPENDS:= \
 
 include $(INCLUDE_DIR)/package.mk
 
-define Package/$(PKG_NAME)
+define Package/privoxy
   SECTION:=net
   CATEGORY:=Network
   SUBMENU:=Web Servers/Proxies
@@ -61,12 +61,12 @@ define Package/$(PKG_NAME)
 endef
 
 # shown in LuCI package description
-define Package/$(PKG_NAME)/description
+define Package/privoxy/description
 $(TITLE) - Homepage: www.privoxy.org
 endef
 
 # shown in make menuconfig <Help>
-define Package/$(PKG_NAME)/config
+define Package/privoxy/config
        help
                Privoxy is a web proxy with advanced filtering capabilities for protecting
                privacy, modifying web page content, managing cookies, controlling access,
@@ -110,14 +110,14 @@ CONFIGURE_ARGS += \
 # needed otherwise errors during compile
 MAKE_FLAGS:=
 
-define Package/$(PKG_NAME)/conffiles
+define Package/privoxy/conffiles
 /etc/config/privoxy
 /etc/privoxy/user.action
 /etc/privoxy/user.filter
 /etc/privoxy/user.trust
 endef
 
-define Package/$(PKG_NAME)/preinst
+define Package/privoxy/preinst
        #!/bin/sh
        [ -n "$${IPKG_INSTROOT}" ] && exit 0    # if run within buildroot exit
 
@@ -127,7 +127,7 @@ define Package/$(PKG_NAME)/preinst
        exit 0  # suppress errors from stop command
 endef
 
-define Package/$(PKG_NAME)/install
+define Package/privoxy/install
        if [ -f $(PKG_INSTALL_DIR)/etc/privoxy/trust ]; then \
                mv -f $(PKG_INSTALL_DIR)/etc/privoxy/trust $(PKG_INSTALL_DIR)/etc/privoxy/user.trust; \
        fi
@@ -155,10 +155,10 @@ define Package/$(PKG_NAME)/install
        $(INSTALL_CONF) ./files/privoxy.config $(1)/etc/config/privoxy
 endef
 
-define Package/$(PKG_NAME)/postinst
+define Package/privoxy/postinst
        #!/bin/sh
        grep -i privoxy $${IPKG_INSTROOT}/etc/services >/dev/null 2>&1 || \
                echo -e "privoxy\t8118" >> $${IPKG_INSTROOT}/etc/services
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,privoxy))
index 26cacd7770c3665ad2969b6fa396238f4e6f7989..b4dd69b7207b98ac3c42dde329ff57d3030eb117 100644 (file)
@@ -28,7 +28,7 @@ $(call include_mk, python3-package.mk)
 # no default dependencies
 PKG_DEFAULT_DEPENDS:=
 
-define Package/$(PKG_NAME)/Default
+define Package/radicale/Default
   SECTION:=net
   CATEGORY:=Network
   SUBMENU:=Web Servers/Proxies
@@ -37,29 +37,29 @@ define Package/$(PKG_NAME)/Default
   PKGARCH:=all
   USERID:=radicale=5232:radicale=5232
 endef
-define Package/$(PKG_NAME)-py2
-  $(call Package/$(PKG_NAME)/Default)
+define Package/radicale-py2
+  $(call Package/radicale/Default)
   TITLE+= (Python 2)
   VARIANT:=2
   DEPENDS:=+python-logging +python-openssl +python-xml +python-codecs
 endef
-define Package/$(PKG_NAME)-py3
-  $(call Package/$(PKG_NAME)/Default)
+define Package/radicale-py3
+  $(call Package/radicale/Default)
   TITLE+= (Python 3)
   VARIANT:=3
   DEPENDS:=+python3-logging +python3-openssl +python3-xml +python3-codecs +python3-email
 endef
 
 # shown in LuCI package description
-define Package/$(PKG_NAME)-py2/description
+define Package/radicale-py2/description
 Radicale CalDAV/CardDAV server (Python 2) - Homepage: http://radicale.org/
 endef
-define Package/$(PKG_NAME)-py3/description
+define Package/radicale-py3/description
 Radicale CalDAV/CardDAV server (Python 3) - Homepage: http://radicale.org/
 endef
 
 # shown in make menuconfig <Help>
-define Package/$(PKG_NAME)-py2/config
+define Package/radicale-py2/config
     help
        The Radicale Project is a CalDAV (calendar) and CardDAV (contact) server.
        It aims to be a light solution, easy to use, easy to install, easy to configure.
@@ -69,14 +69,14 @@ define Package/$(PKG_NAME)-py2/config
        Version : $(PKG_VERSION)
        Homepage: http://radicale.org/
 endef
-Package/$(PKG_NAME)-py3/config = $(Package/$(PKG_NAME)-py2/config)
+Package/radicale-py3/config = $(Package/radicale-py2/config)
 
-define Package/$(PKG_NAME)-py2/conffiles
+define Package/radicale-py2/conffiles
 /etc/config/radicale
 /etc/radicale/users
 /etc/radicale/rights
 endef
-Package/$(PKG_NAME)-py3/conffiles = $(Package/$(PKG_NAME)-py2/conffiles)
+Package/radicale-py3/conffiles = $(Package/radicale-py2/conffiles)
 
 define Build/Configure
        # nothing to configure
@@ -85,7 +85,7 @@ define Build/Compile
        # nothing to compile
 endef
 
-define Package/$(PKG_NAME)-py2/preinst
+define Package/radicale-py2/preinst
        #!/bin/sh
        [ -n "$${IPKG_INSTROOT}" ] && exit 0    # if run within buildroot exit
 
@@ -94,11 +94,11 @@ define Package/$(PKG_NAME)-py2/preinst
 
        exit 0  # suppress errors from stop command
 endef
-define Package/$(PKG_NAME)-py3/preinst
-$(call Package/$(PKG_NAME)-py2/preinst)
+define Package/radicale-py3/preinst
+$(call Package/radicale-py2/preinst)
 endef
 
-define Package/$(PKG_NAME)/inst_all
+define Package/radicale/inst_all
        $(INSTALL_DIR)  $(1)/etc/init.d
        $(INSTALL_BIN)  ./files/radicale.init    $(1)/etc/init.d/radicale
 
@@ -120,27 +120,27 @@ define Package/$(PKG_NAME)/inst_all
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/radicale $(1)/usr/bin/
 endef
-define Package/$(PKG_NAME)-py2/install
-       $(call Package/$(PKG_NAME)/inst_all, $(1))
+define Package/radicale-py2/install
+       $(call Package/radicale/inst_all, $(1))
        $(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR)/radicale
        $(CP) $(PKG_BUILD_DIR)/radicale/* $(1)$(PYTHON_PKG_DIR)/radicale
 endef
-define Package/$(PKG_NAME)-py3/install
-       $(call Package/$(PKG_NAME)/inst_all, $(1))
+define Package/radicale-py3/install
+       $(call Package/radicale/inst_all, $(1))
        $(INSTALL_DIR) $(1)$(PYTHON3_PKG_DIR)/radicale
        $(CP) $(PKG_BUILD_DIR)/radicale/* $(1)$(PYTHON3_PKG_DIR)/radicale
 endef
 
-define Package/$(PKG_NAME)-py2/postinst
+define Package/radicale-py2/postinst
        #!/bin/sh
        # patch /usr/bin/radicale force run using python2
        /bin/sed -i 's/python/python2/' $${IPKG_INSTROOT}/usr/bin/radicale
 endef
-define Package/$(PKG_NAME)-py3/postinst
+define Package/radicale-py3/postinst
        #!/bin/sh
        # patch /usr/bin/radicale force run using python3
        /bin/sed -i 's/python/python3/' $${IPKG_INSTROOT}/usr/bin/radicale
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)-py2))
-$(eval $(call BuildPackage,$(PKG_NAME)-py3))
+$(eval $(call BuildPackage,radicale-py2))
+$(eval $(call BuildPackage,radicale-py3))
index 61def0e0725e6de6171bd330b57e17da547d1553..793ff13f3ba672a3782d0dc7049bc85288d4c6c0 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ser2net
-PKG_VERSION:=3.3
+PKG_VERSION:=3.4
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/ser2net
-PKG_MD5SUM:=8daf1cfd70d2b220b184c412c64faf2c
-PKG_HASH:=3d1cef5f48df8291e57d4d7d4eac2fc809ae644a5524ffca4aebef0f4e4153dc
+PKG_MD5SUM:=562274d783534276a9feac913b7d8c4e
+PKG_HASH:=d846066e27c3072565990745d030357aa0c278f96b7d1d4f59023347c1db8824
 
 PKG_LICENSE:=GPL-2.0+
 PKG_LICENSE_FILES:=COPYING
index 5289d3f9740d062735d76ce2aa9aa56b2f487385..b950122c0881bd8c99c83397bd970d09a561fe6a 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=strongswan
 PKG_VERSION:=5.5.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://download.strongswan.org/ http://download2.strongswan.org/
index 391a2ae8c712d617914c363611baba64df8d46ff..4635eae9cfe092911d83c7ccb480ad564a41c843 100644 (file)
@@ -3,8 +3,327 @@
 START=90
 STOP=10
 
+. $IPKG_INSTROOT/lib/functions.sh
+
+UCI_IPSEC_CONFIG=/etc/config/ipsec
+
+IPSEC_SECRETS_FILE=/etc/ipsec.secrets
+IPSEC_CONN_FILE=/etc/ipsec.conf
+STRONGSWAN_CONF_FILE=/etc/strongswan.conf
+
+IPSEC_VAR_SECRETS_FILE=/var/ipsec/ipsec.secrets
+IPSEC_VAR_CONN_FILE=/var/ipsec/ipsec.conf
+STRONGSWAN_VAR_CONF_FILE=/var/ipsec/strongswan.conf
+
+ENABLED_REMOTE_PEERS=0
+
+file_reset() {
+       : > "$1"
+}
+
+xappend() {
+       local file="$1"
+       shift
+
+       echo "${@}" >> "${file}"
+}
+
+remove_include() {
+       local file="$1"
+       local include="$2"
+
+       sed -i "\_${include}_d" "${file}"
+}
+
+remove_includes() {
+       remove_include "${IPSEC_CONN_FILE}" "${IPSEC_VAR_CONN_FILE}"
+       remove_include "${IPSEC_SECRETS_FILE}" "${IPSEC_VAR_SECRETS_FILE}"
+       remove_include "${STRONGSWAN_CONF_FILE}" "${STRONGSWAN_VAR_CONF_FILE}"
+}
+
+do_include() {
+       local conf="$1"
+       local uciconf="$2"
+       local backup=`mktemp -t -p /tmp/ ipsec-init-XXXXXX`
+
+       [ ! -f "${conf}" ] && rm -rf "${conf}"
+       touch "${conf}"
+
+       cat "${conf}" | grep -v "${uciconf}" > "${backup}"
+       mv "${backup}" "${conf}"
+       xappend "${conf}" "include ${uciconf}"
+       file_reset "${uciconf}"
+}
+
+ipsec_reset() {
+       do_include "${IPSEC_CONN_FILE}" "${IPSEC_VAR_CONN_FILE}"
+}
+
+ipsec_xappend() {
+       xappend "${IPSEC_VAR_CONN_FILE}" "$@"
+}
+
+swan_reset() {
+       do_include "${STRONGSWAN_CONF_FILE}" "${STRONGSWAN_VAR_CONF_FILE}"
+}
+
+swan_xappend() {
+       xappend "${STRONGSWAN_VAR_CONF_FILE}" "$@"
+}
+
+secret_reset() {
+       do_include "${IPSEC_SECRETS_FILE}" "${IPSEC_VAR_SECRETS_FILE}"
+}
+
+secret_xappend() {
+       xappend "${IPSEC_VAR_SECRETS_FILE}" "$@"
+}
+
+warning() {
+       echo "WARNING: $@" >&2
+}
+
+add_crypto_proposal() {
+       local encryption_algorithm
+       local hash_algorithm
+       local dh_group
+
+       config_get encryption_algorithm  "$1" encryption_algorithm
+       config_get hash_algorithm        "$1" hash_algorithm
+       config_get dh_group              "$1" dh_group
+
+       [ -n "${encryption_algorithm}" ] && \
+               crypto="${crypto:+${crypto},}${encryption_algorithm}${hash_algorithm:+-${hash_algorithm}}${dh_group:+-${dh_group}}"
+}
+
+set_crypto_proposal() {
+       local conf="$1"
+       local proposal
+
+       crypto=""
+
+       config_get crypto_proposal "$conf" crypto_proposal ""
+       for proposal in $crypto_proposal; do
+               add_crypto_proposal "$proposal"
+       done
+
+       [ -n "${crypto}" ] && {
+               local force_crypto_proposal
+
+               config_get_bool force_crypto_proposal "$conf" force_crypto_proposal
+
+               [ "${force_crypto_proposal}" = "1" ] && crypto="${crypto}!"
+       }
+
+       crypto_proposal="${crypto}"
+}
+
+config_conn() {
+       # Generic ipsec conn section shared by tunnel and transport
+       local mode
+       local local_subnet
+       local local_nat
+       local local_sourceip
+       local local_updown
+       local local_firewall
+       local remote_subnet
+       local remote_sourceip
+       local remote_updown
+       local remote_firewall
+       local ikelifetime
+       local lifetime
+       local margintime
+       local keyingtries
+       local dpdaction
+       local dpddelay
+       local inactivity
+       local keyexchange
+
+       config_get mode                     "$1"           mode "route"
+       config_get local_subnet             "$1"           local_subnet ""
+       config_get local_nat                "$1"           local_nat ""
+       config_get local_sourceip           "$1"           local_sourceip ""
+       config_get local_updown             "$1"           local_updown ""
+       config_get local_firewall           "$1"           local_firewall ""
+       config_get remote_subnet            "$1"           remote_subnet ""
+       config_get remote_sourceip          "$1"           remote_sourceip ""
+       config_get remote_updown            "$1"           remote_updown ""
+       config_get remote_firewall          "$1"           remote_firewall ""
+       config_get ikelifetime              "$1"           ikelifetime "3h"
+       config_get lifetime                 "$1"           lifetime "1h"
+       config_get margintime               "$1"           margintime "9m"
+       config_get keyingtries              "$1"           keyingtries "3"
+       config_get dpdaction                "$1"           dpdaction "none"
+       config_get dpddelay                 "$1"           dpddelay "30s"
+       config_get inactivity               "$1"           inactivity
+       config_get keyexchange              "$1"           keyexchange "ikev2"
+
+       [ -n "$local_nat" ] && local_subnet=$local_nat
+
+       ipsec_xappend "conn $config_name-$1"
+       ipsec_xappend "  left=%any"
+       ipsec_xappend "  right=$remote_gateway"
+
+       [ -n "$local_sourceip" ] && ipsec_xappend "  leftsourceip=$local_sourceip"
+       [ -n "$local_subnet" ] && ipsec_xappend "  leftsubnet=$local_subnet"
+
+       [ -n "$local_firewall" ] && ipsec_xappend "  leftfirewall=$local_firewall"
+       [ -n "$remote_firewall" ] && ipsec_xappend "  rightfirewall=$remote_firewall"
+
+       ipsec_xappend "  ikelifetime=$ikelifetime"
+       ipsec_xappend "  lifetime=$lifetime"
+       ipsec_xappend "  margintime=$margintime"
+       ipsec_xappend "  keyingtries=$keyingtries"
+       ipsec_xappend "  dpdaction=$dpdaction"
+       ipsec_xappend "  dpddelay=$dpddelay"
+
+       [ -n "$inactivity" ] && ipsec_xappend "  inactivity=$inactivity"
+
+       if [ "$auth_method" = "psk" ]; then
+               ipsec_xappend "  leftauth=psk"
+               ipsec_xappend "  rightauth=psk"
+
+               [ "$remote_sourceip" != "" ] && ipsec_xappend "  rightsourceip=$remote_sourceip"
+               [ "$remote_subnet" != "" ] && ipsec_xappend "  rightsubnet=$remote_subnet"
+
+               ipsec_xappend "  auto=$mode"
+       else
+               warning "AuthenticationMethod $auth_method not supported"
+       fi
+
+       [ -n "$local_identifier" ] && ipsec_xappend "  leftid=$local_identifier"
+       [ -n "$remote_identifier" ] && ipsec_xappend "  rightid=$remote_identifier"
+       [ -n "$local_updown" ] && ipsec_xappend "  leftupdown=$local_updown"
+       [ -n "$remote_updown" ] && ipsec_xappend "  rightupdown=$remote_updown"
+       ipsec_xappend "  keyexchange=$keyexchange"
+
+       set_crypto_proposal "$1"
+       [ -n "${crypto_proposal}" ] && ipsec_xappend "  esp=$crypto_proposal"
+       [ -n "${ike_proposal}" ] && ipsec_xappend "  ike=$ike_proposal"
+}
+
+config_tunnel() {
+       config_conn "$1"
+
+       # Specific for the tunnel part
+       ipsec_xappend "  type=tunnel"
+}
+
+config_transport() {
+       config_conn "$1"
+
+       # Specific for the transport part
+       ipsec_xappend "  type=transport"
+}
+
+config_remote() {
+       local enabled
+       local gateway
+       local pre_shared_key
+       local auth_method
+
+       config_name=$1
+
+       config_get_bool enabled "$1" enabled 0
+       [ "$enabled" = "0" ] && return
+
+       ENABLED_REMOTE_PEERS=$((ENABLED_REMOTE_PEERS + 1))
+
+       config_get gateway           "$1" gateway
+       config_get pre_shared_key    "$1" pre_shared_key
+       config_get auth_method       "$1" authentication_method
+       config_get local_identifier  "$1" local_identifier ""
+       config_get remote_identifier "$1" remote_identifier ""
+
+       [ "$gateway" = "any" ] && remote_gateway="%any" || remote_gateway="$gateway"
+
+       [ -z "$local_identifier" ] && {
+               local ipdest
+
+               [ "$remote_gateway" = "%any" ] && ipdest="1.1.1.1" || ipdest="$remote_gateway"
+               local_gateway=`ip route get $ipdest | awk -F"src" '/src/{gsub(/ /,"");print $2}'`
+       }
+
+       [ -n "$local_identifier" ] && secret_xappend -n "$local_identifier " || secret_xappend -n "$local_gateway "
+       [ -n "$remote_identifier" ] && secret_xappend -n "$remote_identifier " || secret_xappend -n "$remote_gateway "
+
+       secret_xappend ": PSK \"$pre_shared_key\""
+
+       set_crypto_proposal "$1"
+       ike_proposal="$crypto_proposal"
+
+       config_list_foreach "$1" tunnel config_tunnel
+
+       config_list_foreach "$1" transport config_transport
+
+       ipsec_xappend ""
+}
+
+config_ipsec() {
+       local debug
+       local rtinstall_enabled
+       local routing_tables_ignored
+       local routing_table
+       local routing_table_id
+       local interface
+       local device_list
+
+       ipsec_reset
+       secret_reset
+       swan_reset
+
+       ipsec_xappend "# generated by /etc/init.d/ipsec"
+       ipsec_xappend "version 2"
+       ipsec_xappend ""
+
+       secret_xappend "# generated by /etc/init.d/ipsec"
+
+       config_get debug "$1" debug 0
+       config_get_bool rtinstall_enabled "$1" rtinstall_enabled 1
+       [ $rtinstall_enabled = "1" ] && install_routes=yes || install_routes=no
+
+       # prepare extra charon config option ignore_routing_tables
+       for routing_table in $(config_get "$1" "ignore_routing_tables"); do
+               if [ "$routing_table" -ge 0 ] 2>/dev/null; then
+                       routing_table_id=$routing_table
+               else
+                       routing_table_id=$(sed -n '/[ \t]*[0-9]\+[ \t]\+'$routing_table'[ \t]*$/s/[ \t]*\([0-9]\+\).*/\1/p' /etc/iproute2/rt_tables)
+               fi
+
+               [ -n "$routing_table_id" ] && append routing_tables_ignored "$routing_table_id"
+       done
+
+       swan_xappend "# generated by /etc/init.d/ipsec"
+       swan_xappend "charon {"
+       swan_xappend "  load_modular = yes"
+       swan_xappend "  install_routes = $install_routes"
+       [ -n "$routing_tables_ignored" ] && swan_xappend "  ignore_routing_tables = $routing_tables_ignored"
+       swan_xappend "    plugins {"
+       swan_xappend "      include /etc/strongswan.d/charon/*.conf"
+       swan_xappend "    }"
+       swan_xappend "  syslog {"
+       swan_xappend "    identifier = ipsec"
+       swan_xappend "    daemon {"
+       swan_xappend "      default = $debug"
+       swan_xappend "    }"
+       swan_xappend "    auth {"
+       swan_xappend "      default = $debug"
+       swan_xappend "    }"
+       swan_xappend "  }"
+       swan_xappend "}"
+}
+
+prepare_env() {
+       mkdir -p /var/ipsec
+       remove_includes
+       config_load ipsec
+       config_foreach config_ipsec ipsec
+       config_foreach config_remote remote
+}
+
 start() {
-       ipsec start
+       prepare_env
+       [ $ENABLED_REMOTE_PEERS != 0 -o ! -f $UCI_IPSEC_CONFIG ] && ipsec start
 }
 
 stop() {
@@ -12,9 +331,18 @@ stop() {
 }
 
 restart() {
-       ipsec restart
+       prepare_env
+       [ $ENABLED_REMOTE_PEERS != 0 -o ! -f $UCI_IPSEC_CONFIG ] && ipsec restart || ipsec stop
 }
 
 reload() {
-       ipsec update
+       prepare_env
+       [ $ENABLED_REMOTE_PEERS != 0 -o ! -f $UCI_IPSEC_CONFIG ] && {
+               ipsec secrets
+               if [[ ! -z "$(ipsec status)" ]]; then
+                       ipsec reload
+               else
+                       ipsec start
+               fi
+       } || ipsec stop
 }
index b6ab886c2a6453f96ec3553ebc2306327695178b..ad110b2ac028407fb56aa8fee046a78ed461a81c 100644 (file)
@@ -8,13 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=tor
-PKG_VERSION:=0.2.9.9
+PKG_VERSION:=0.2.9.10
 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_MD5SUM:=33325d2b250fd047ba2ddc5d11c2190c4e2951f4b03ec48ebd8bf0666e990d43
+PKG_MD5SUM:=6760a646a096b61e307b84fb5ae93cc7
+PKG_HASH:=d611283e1fb284b5f884f8c07e7d3151016851848304f56cfdf3be2a88bd1341
 PKG_MAINTAINER:=Hauke Mehrtens <hauke@hauke-m.de>
 PKG_LICENSE_FILES:=LICENSE
 
index 6f2d2a0d2cec69562ccd373e3805bdccd0e6e5cb..8df09db7d3479f32059bf8859d201e992159e921 100644 (file)
@@ -6,27 +6,27 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=travelmate
-PKG_VERSION:=0.3.2
+PKG_VERSION:=0.4.2
 PKG_RELEASE:=1
 PKG_LICENSE:=GPL-3.0+
 PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
 
 include $(INCLUDE_DIR)/package.mk
 
-define Package/$(PKG_NAME)
+define Package/travelmate
        SECTION:=net
        CATEGORY:=Network
        TITLE:=A wlan connection manager for travel router
        PKGARCH:=all
 endef
 
-define Package/$(PKG_NAME)/description
+define Package/travelmate/description
 A wlan connection manager for travel router.
 Please see https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md for further information.
 
 endef
 
-define Package/$(PKG_NAME)/conffiles
+define Package/travelmate/conffiles
 /etc/config/travelmate
 endef
 
@@ -39,7 +39,7 @@ endef
 define Build/Compile
 endef
 
-define Package/$(PKG_NAME)/install
+define Package/travelmate/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) ./files/travelmate.sh $(1)/usr/bin/
 
@@ -50,4 +50,4 @@ define Package/$(PKG_NAME)/install
        $(INSTALL_CONF) ./files/travelmate.conf $(1)/etc/config/travelmate
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,travelmate))
index 4cd39d60d285fdbff831b6a9baac6d3fdb414fea..5671e78d9bcd7eeb3569a375523e09c0feaeacdc 100644 (file)
@@ -9,6 +9,8 @@ To avoid these kind of deadlocks, travelmate set all station interfaces in an "a
 * STA interfaces operating in an "always off" mode, to make sure that the AP is always accessible
 * easy setup within normal OpenWrt/LEDE environment
 * fast uplink connections
+* "active mode" support, where travelmate will be restarted every n seconds (default 60) and checks the existing uplink connection regardless of ifdown event trigger
+* support of devices with multiple radios
 * procd init system support
 * procd based hotplug support, the travelmate start will be triggered by interface triggers
 * status & debug logging to syslog
@@ -20,7 +22,7 @@ To avoid these kind of deadlocks, travelmate set all station interfaces in an "a
 ## OpenWrt / LEDE trunk Installation & Usage
 * download the package [here](https://downloads.lede-project.org/snapshots/packages/x86_64/packages)
 * install 'travelmate' (_opkg install travelmate_)
-* configure your network to support (multiple) wlan uplinks and set travelmate config options (details see below)
+* configure your network to support (multiple) wlan uplinks and set travelmate config options (see below)
 * set 'trm\_enabled' option in travelmate config to '1'
 * travelmate starts automatically during boot and will be triggered by procd interface triggers
 
@@ -40,9 +42,12 @@ To avoid these kind of deadlocks, travelmate set all station interfaces in an "a
 * travelmate config options:
     * trm\_enabled => main switch to enable/disable the travelmate service (default: '0', disabled)
     * trm\_debug => enable/disable debug logging (default: '0', disabled)
+    * trm\_active => keep travelmate in an active state (default: '0', disabled)
     * trm\_maxwait => how long (in seconds) should travelmate wait for wlan interface reload action (default: '20')
     * trm\_maxretry => how many times should travelmate try to find an uplink after a trigger event (default: '3')
+    * trm\_timeout => timeout in seconds for "active mode" (default: '60')
     * trm\_iw => set this option to '0' to use iwinfo for wlan scanning (default: '1', use iw)
+    * trm\_radio => limit travelmate to a dedicated radio, e.g. 'radio0' (default: not set, use all radios)
     * trm\_iface => restrict the procd interface trigger to a (list of) certain wan interface(s) or disable it at all (default: not set, disabled)
 
 ## Setup
@@ -59,11 +64,6 @@ config interface 'wwan'
 [...]
 config zone
         option name 'wan'
-        option input 'REJECT'
-        option output 'ACCEPT'
-        option forward 'REJECT'
-        option masq '1'
-        option mtu_fix '1'
         option network 'wan wan6 wwan'
 [...]
 </code></pre>
@@ -74,7 +74,6 @@ config zone
 config wifi-iface
         option device 'radio0'
         option network 'lan'
-        option ifname 'wlan0'
         option mode 'ap'
         option ssid 'example_ap'
         option encryption 'psk2+ccmp'
@@ -86,7 +85,6 @@ config wifi-iface
         option network 'wwan'
         option mode 'sta'
         option ssid 'example_01'
-        option ifname 'wwan01'
         option encryption 'psk2+ccmp'
         option key 'abc'
         option disabled '1'
@@ -95,7 +93,6 @@ config wifi-iface
         option network 'wwan'
         option mode 'sta'
         option ssid 'example_02'
-        option ifname 'wwan02'
         option encryption 'psk2+ccmp'
         option key 'xyz'
         option disabled '1'
@@ -104,7 +101,6 @@ config wifi-iface
         option network 'wwan'
         option mode 'sta'
         option ssid 'example_03'
-        option ifname 'wwan03'
         option encryption 'none'
         option disabled '1'
 [...]
index c63000f3806b7969a8beab630ea6e23b8ffb4419..d02fffba9a070bac5264fe729224ca861058e287 100644 (file)
@@ -4,6 +4,8 @@
 config travelmate 'global'
        option trm_enabled '0'
        option trm_debug '0'
-       option trm_maxwait '20'
+       option trm_active '0'
+       option trm_maxwait '30'
        option trm_maxretry '3'
+       option trm_timeout '60'
        option trm_iw '1'
index 255a641879611dc136843b21aef8a37f345cb80b..90b8071e81e97d5fdcc63b4b5f861d4b0232c7ed 100755 (executable)
@@ -13,12 +13,14 @@ boot()
 
 start_service()
 {
-    procd_open_instance "travelmate"
-    procd_set_param env trm_procd="true"
-    procd_set_param command "${trm_script}" "${@}"
-    procd_set_param stdout 1
-    procd_set_param stderr 1
-    procd_close_instance
+    if [ $(/etc/init.d/travelmate enabled; printf ${?}) -eq 0 ]
+    then
+        procd_open_instance "travelmate"
+        procd_set_param command "${trm_script}" "${@}"
+        procd_set_param stdout 1
+        procd_set_param stderr 1
+        procd_close_instance
+    fi
 }
 
 service_triggers()
@@ -34,6 +36,5 @@ service_triggers()
             procd_add_interface_trigger "interface.*.down" "${name}" /etc/init.d/travelmate start
         done
     fi
-
     procd_add_config_trigger "config.change" "travelmate" /etc/init.d/travelmate start
 }
index f626f390c01a85ee343e78427439916904dd5372..78bc5df8b8f097d7391aa9ea34c7cd5df149aa47 100755 (executable)
@@ -6,17 +6,22 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-# prepare environment
+# set initial defaults
 #
 LC_ALL=C
 PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-trm_ver="0.3.2"
+trm_ver="0.4.2"
+trm_sysver="$(ubus -S call system board | jsonfilter -e '@.release.description')"
 trm_enabled=1
 trm_debug=0
-trm_maxwait=20
+trm_active=0
+trm_maxwait=30
 trm_maxretry=3
+trm_timeout=60
 trm_iw=1
 
+# f_envload: load travelmate environment
+#
 f_envload()
 {
     # source required system libraries
@@ -25,7 +30,7 @@ f_envload()
     then
         . "/lib/functions.sh"
     else
-        f_log "error" "status  ::: required system library not found"
+        f_log "error" "required system library not found"
     fi
 
     # load uci config and check 'enabled' option
@@ -40,7 +45,7 @@ f_envload()
 
     if [ ${trm_enabled} -ne 1 ]
     then
-        f_log "info " "status  ::: travelmate is currently disabled, please set 'trm_enabled' to '1' to use this service"
+        f_log "info " "travelmate is currently disabled, please set 'trm_enabled' to '1' to use this service"
         exit 0
     fi
 
@@ -54,40 +59,58 @@ f_envload()
     fi
     if [ -z "${trm_scanner}" ]
     then
-        f_log "error" "status  ::: no wireless tool for wlan scanning found, please install 'iw' or 'iwinfo'"
+        f_log "error" "no wireless tool for wlan scanning found, please install 'iw' or 'iwinfo'"
     fi
 }
 
-# function to bring down all STA interfaces
+# f_prepare: gather radio information & bring down all STA interfaces
 #
 f_prepare()
 {
     local config="${1}"
     local mode="$(uci -q get wireless."${config}".mode)"
-    local network="$(uci -q get wireless."${config}".network)"
+    local radio="$(uci -q get wireless."${config}".device)"
     local disabled="$(uci -q get wireless."${config}".disabled)"
 
-    if [ "${mode}" = "sta" ] && [ -n "${network}" ]
+    if [ "${mode}" = "ap" ] && ([ -z "${disabled}" ] || [ "${disabled}" = "0" ]) && \
+        ([ -z "${trm_radio}" ] || [ "${trm_radio}" = "${radio}" ])
+    then
+        trm_radiolist="${trm_radiolist} ${radio}"
+    elif [ "${mode}" = "sta" ]
     then
-        trm_stalist="${trm_stalist} ${config}_${network}"
+        trm_stalist="${trm_stalist} ${config}_${radio}"
         if [ -z "${disabled}" ] || [ "${disabled}" = "0" ]
         then
             uci -q set wireless."${config}".disabled=1
-            f_log "debug" "prepare ::: config: ${config}, interface: ${network}"
         fi
     fi
+    f_log "debug" "mode: ${mode}, radio: ${radio}, config: ${config}, disabled: ${disabled}"
 }
 
+# f_check: check interface status
+#
 f_check()
 {
-    local ifname cnt=1 mode="${1}"
+    local ifname radio cnt=1 mode="${1}"
     trm_ifstatus="false"
 
     while [ ${cnt} -le ${trm_maxwait} ]
     do
         if [ "${mode}" = "ap" ]
         then
-            trm_ifstatus="$(ubus -S call network.wireless status | jsonfilter -l1 -e '@.*.up')"
+            for radio in ${trm_radiolist}
+            do
+                trm_ifstatus="$(ubus -S call network.wireless status | jsonfilter -e "@.${radio}.up")"
+                if [ "${trm_ifstatus}" = "true" ]
+                then
+                    trm_aplist="${trm_aplist} $(ubus -S call network.wireless status | jsonfilter -e "@.${radio}.interfaces[@.config.mode=\"ap\"].ifname")_${radio}"
+                    ifname="${trm_aplist}"
+                else
+                    trm_aplist=""
+                    trm_ifstatus="false"
+                    break
+                fi
+            done
         else
             ifname="$(ubus -S call network.wireless status | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].ifname')"
             if [ -n "${ifname}" ]
@@ -102,10 +125,20 @@ f_check()
         cnt=$((cnt+1))
         sleep 1
     done
-    f_log "debug" "check   ::: mode: ${mode}, name: ${ifname}, status: ${trm_ifstatus}, count: ${cnt}, max-wait: ${trm_maxwait}"
+    f_log "debug" "mode: ${mode}, name: ${ifname}, status: ${trm_ifstatus}, count: ${cnt}, max-wait: ${trm_maxwait}"
 }
 
-# function to write to syslog
+# f_active: keep travelmate in an active state
+#
+f_active()
+{
+    if [ ${trm_active} -eq 1 ]
+    then
+        (sleep ${trm_timeout}; /etc/init.d/travelmate start >/dev/null 2>&1) &
+    fi
+}
+
+# f_log: function to write to syslog
 #
 f_log()
 {
@@ -117,15 +150,18 @@ f_log()
         logger -t "travelmate-[${trm_ver}] ${class}" "${log_msg}"
         if [ "${class}" = "error" ]
         then
+            logger -t "travelmate-[${trm_ver}] ${class}" "Please check 'https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md' (${trm_sysver})"
+            f_active
             exit 255
         fi
     fi
 }
 
+# f_main: main function for connection handling
+#
 f_main()
 {
-    local ap_list ssid_list config network ssid cnt=1
-    local sysver="$(ubus -S call system board | jsonfilter -e '@.release.description')"
+    local ssid_list config ap_radio sta_radio ssid cnt=1
 
     f_check "initial"
     if [ "${trm_ifstatus}" != "true" ]
@@ -138,14 +174,20 @@ f_main()
             ubus call network reload
         fi
         f_check "ap"
-        ap_list="$(ubus -S call network.wireless status | jsonfilter -e '@.*.interfaces[@.config.mode="ap"].ifname')"
-        f_log "debug" "main    ::: ap-list: ${ap_list}, sta-list: ${trm_stalist}"
-        if [ -z "${ap_list}" ] || [ -z "${trm_stalist}" ]
+        f_log "debug" "ap-list: ${trm_aplist}, sta-list: ${trm_stalist}"
+        if [ -z "${trm_aplist}" ] || [ -z "${trm_stalist}" ]
         then
-            f_log "error" "status  ::: no usable AP/STA configuration found"
+            f_log "error" "no usable AP/STA configuration found"
         fi
-        for ap in ${ap_list}
+        for ap in ${trm_aplist}
         do
+            cnt=1
+            ap_radio="${ap##*_}"
+            ap="${ap%%_*}"
+            if [ -z "$(printf "${trm_stalist}" | grep -Fo "_${ap_radio}")" ]
+            then
+                continue
+            fi
             while [ ${cnt} -le ${trm_maxretry} ]
             do
                 if [ ${trm_iw} -eq 1 ]
@@ -156,49 +198,41 @@ f_main()
                     ssid_list="$(${trm_scanner} "${ap}" scan | \
                         awk '/ESSID: ".*"/{ORS=" ";if (!seen[$0]++) for(i=2; i<=NF; i++) print $i}')"
                 fi
-                f_log "debug" "main    ::: scan-tool: ${trm_scanner}, ssidlist: ${ssid_list}"
+                f_log "debug" "scanner: ${trm_scanner}, ap: ${ap}, ssids: ${ssid_list}"
                 if [ -n "${ssid_list}" ]
                 then
                     for sta in ${trm_stalist}
                     do
                         config="${sta%%_*}"
-                        network="${sta##*_}"
+                        sta_radio="${sta##*_}"
                         ssid="\"$(uci -q get wireless."${config}".ssid)\""
-                        if [ -n "$(printf "${ssid_list}" | grep -Fo "${ssid}")" ]
+                        if [ -n "$(printf "${ssid_list}" | grep -Fo "${ssid}")" ] && [ "${ap_radio}" = "${sta_radio}" ]
                         then
                             uci -q set wireless."${config}".disabled=0
-                            uci -q commit wireless
                             ubus call network reload
                             f_check "sta"
                             if [ "${trm_ifstatus}" = "true" ]
                             then
-                                f_log "info " "status  ::: wwan interface connected to uplink ${ssid} (${cnt}/${trm_maxretry}, ${sysver})"
+                                uci -q commit wireless
+                                f_log "info " "wwan interface connected to uplink ${ssid} (${trm_sysver})"
                                 sleep 5
                                 return 0
                             else
-                                uci -q set wireless."${config}".disabled=1
-                                uci -q commit wireless
+                                uci -q revert wireless
                                 ubus call network reload
-                                f_log "info " "status  ::: wwan interface can't connect to uplink ${ssid} (${cnt}/${trm_maxretry}, ${sysver})"
+                                f_log "info " "wwan interface can't connect to uplink ${ssid} (${trm_sysver})"
                             fi
                         fi
                     done
-                else
-                    f_log "info " "status  ::: empty uplink list (${cnt}/${trm_maxretry}, ${sysver})"
                 fi
                 cnt=$((cnt+1))
                 sleep 5
             done
         done
-        f_log "info " "status  ::: no wwan uplink found (${sysver})"
-    else
-        f_log "info " "status  ::: wwan uplink still connected (${sysver})"
     fi
 }
 
-if [ "${trm_procd}" = "true" ]
-then
-    f_envload
-    f_main
-fi
-exit 0
\ No newline at end of file
+f_envload
+f_main
+f_active
+exit 0
index 498700a3da84ce3542b9766437915ce3c76bd1a4..fc783ebfb92df37fca36444fbc9fd52a1f672b4d 100644 (file)
@@ -8,8 +8,8 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=unbound
-PKG_VERSION:=1.6.0
-PKG_RELEASE:=5
+PKG_VERSION:=1.6.1
+PKG_RELEASE:=3
 
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE
@@ -17,7 +17,7 @@ PKG_MAINTAINER:=Eric Luehrsen <ericluehrsen@hotmail.com>
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.unbound.net/downloads
-PKG_MD5SUM:=78409eccf7260d260b6463f85e59c66b
+PKG_HASH:=42df63f743c0fe8424aeafcf003ad4b880b46c14149d696057313f5c1ef51400
 
 PKG_BUILD_DEPENDS:=libexpat
 PKG_BUILD_PARALLEL:=1
index 53f8a14129d31ad597f637ccdcd33b69515c56f8..d8bdf958fbc1ef31fcadeb16dac1907981f839c3 100644 (file)
@@ -1,15 +1,15 @@
 # Unbound Recursive DNS Server with UCI
 
 ## Unbound Description
-Unbound is a validating, recursive, and caching DNS resolver. The C implementation of Unbound is developed and maintained by [NLnet Labs](https://www.unbound.net/). It is based on ideas and algorithms taken from a java prototype developed by Verisign labs, Nominet, Kirei and ep.net. Unbound is designed as a set of modular components, so that also DNSSEC (secure DNS) validation and stub-resolvers (that do not run as a server, but are linked into an application) are easily possible.
+[Unbound](https://www.unbound.net/) is a validating, recursive, and caching DNS resolver. The C implementation of Unbound is developed and maintained by [NLnet Labs](https://www.nlnetlabs.nl/). It is based on ideas and algorithms taken from a java prototype developed by Verisign labs, Nominet, Kirei and ep.net. Unbound is designed as a set of modular components, so that also DNSSEC (secure DNS) validation and stub-resolvers (that do not run as a server, but are linked into an application) are easily possible.
 
 ## Package Overview
-Unbound may be useful on consumer grade embedded hardware. It is *intended* to be a recursive resolver only. [NLnet Labs NSD](https://www.nlnetlabs.nl/projects/nsd/) is *intended* for the authoritative task. This is different than [ISC Bind](https://www.isc.org/downloads/bind/) and its inclusive functions. Unbound configuration effort and memory consumption may be easier to control. A consumer could have their own recursive resolver, and remove potential issues from forwarding resolvers outside of their control.
+Unbound may be useful on consumer grade embedded hardware. It is _intended_ to be a recursive resolver only. [NLnet Labs NSD](https://www.nlnetlabs.nl/projects/nsd/) is _intended_ for the authoritative task. This is different than [ISC Bind](https://www.isc.org/downloads/bind/) and its inclusive functions. Unbound configuration effort and memory consumption may be easier to control. A consumer could have their own recursive resolver with 8/64 MB router, and remove potential issues from forwarding resolvers outside of their control.
 
 This package builds on Unbounds capabilities with OpenWrt UCI. Not every Unbound option is in UCI, but rather, UCI simplifies the combination of related options. Unbounds native options are bundled and balanced within a smaller set of choices. Options include resources, DNSSEC, access control, and some TTL tweaking. The UCI also provides an escape option and work at the raw "unbound.conf" level.
 
-## Adblocking
-The UCI scripts will work with OpenWrt/pacakages/net/adblock (2.3.0 and above) if it is installed and enabled. Its all detected and integrated automatically. In brief, the adblock scripts create distinct local-zone files that are simply included in the unbound conf file during UCI generation. If you don't want this, then disable adblock or reconfigure adblock to not send these files to Unbound.
+## HOW TO Adblocking
+The UCI scripts will work with [net/adblock 2.3+](https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md), if it is installed and enabled. Its all detected and integrated automatically. In brief, the adblock scripts create distinct local-zone files that are simply included in the unbound conf file during UCI generation. If you don't want this, then disable adblock or reconfigure adblock to not send these files to Unbound.
 
 ## HOW TO Integrate with DHCP
 Some UCI options and scripts help Unbound to work with DHCP servers to load the local DNS. The examples provided here are serial dnsmasq-unbound, parallel dnsmasq-unbound, and unbound scripted with odhcpd.
@@ -19,93 +19,105 @@ In this case, dnsmasq is not changed *much* with respect to the default OpenWRT/
 
 **/etc/config/unbound**:
 
-       config unbound
-               option add_local_fqdn '0'
-               option add_wan_fqdn '0'
-               option dhcp_link 'none'
-               # dnsmasq should not forward your domain to unbound, but if...
-               option domain 'yourdomain'
-               option domain_type 'refuse'
-               option listen_port '1053'
-               ...
+```
+config unbound
+  option add_local_fqdn '0'
+  option add_wan_fqdn '0'
+  option dhcp_link 'none'
+  # dnsmasq should not forward your domain to unbound, but if...
+  option domain 'yourdomain'
+  option domain_type 'refuse'
+  option listen_port '1053'
+  ...
+```
 
 **/etc/config/dhcp**:
 
-       config dnsmasq
-               option domain 'yourdomain'
-               option noresolv '1'
-               option resolvfile '/tmp/resolv.conf.auto'
-               option port '53'
-               list server '127.0.0.1#1053'
-               list server '::1#1053'
-               ...
+```
+config dnsmasq
+  option domain 'yourdomain'
+  option noresolv '1'
+  option resolvfile '/tmp/resolv.conf.auto'
+  option port '53'
+  list server '127.0.0.1#1053'
+  list server '::1#1053'
+  ...
+```
 
 ### Parallel dnsmasq
 In this case, Unbound serves your local network directly for all purposes. It will look over to dnsmasq for DHCP-DNS resolution. Unbound is generally accessible on port 53, and dnsmasq is only accessed at 127.0.0.1:1053 by Unbound. Although you can dig/drill/nslookup remotely with the proper directives.
 
 **/etc/config/unbound**:
 
-       config unbound
-               option dhcp_link 'dnsmasq'
-               option listen_port '53'
-               ...
+```
+config unbound
+  option dhcp_link 'dnsmasq'
+  option listen_port '53'
+  ...
+```
 
 **/etc/config/dhcp**:
 
-       config dnsmasq
-               option domain 'yourdomain'
-               option noresolv '1'
-               option resolvfile '/tmp/resolv.conf.auto'
-               option port '1053'
-               ...
+```
+config dnsmasq
+  option domain 'yourdomain'
+  option noresolv '1'
+  option resolvfile '/tmp/resolv.conf.auto'
+  option port '1053'
+  ...
 
-       config dhcp 'lan'
-               # dnsmasq may not issue DNS option if not std. configuration 
-               list dhcp_option 'option:dns-server,0.0.0.0'
-               ...
+config dhcp 'lan'
+  # dnsmasq may not issue DNS option if not std. configuration
+  list dhcp_option 'option:dns-server,0.0.0.0'
+  ...
+```
 
-### Only odhcpd
-Why use dnsmasq you might ask? Well test, try, and review. You can have Unbound and odhcpd only. When odhcpd configures each DHCP lease, it will call a script. The script provided with Unbound will read the lease file and enter DHCP-DNS records as much as dnsmasq once did. You **must install** `unbound-control`, because the lease records are added and removed without starting, stopping, flushing cache, or re-writing conf files.
+### Unbound and odhcpd
+You may ask can Unbound replace dnsmasq? You can have DHCP-DNS records with Unbound and odhcpd only. The UCI scripts will allow Unbound to act like dnsmasq. When odhcpd configures each DHCP lease, it will call a script. The script provided with Unbound will read the lease file for DHCP-DNS records. You **must install** `unbound-control`, because the lease records are added and removed without starting, stopping, flushing cache, or re-writing conf files. (_restart overhead can be excessive with even a few mobile devices._)
 
-*note: if you run the default LEDE/OpenWrt setup with dnsmasq and odhcpd, then use the link to dnsmasq. Unbound will pole dnsmasq. dnsmasq merges its lease file and odhcpd lease file.*
+Don't forget to disable or uninstall dnsmasq when you don't intend to use it. Strange results may occur. If you want to use default dnsmasq+odhcpd and add Unbound on top, then use the dnsmasq-serial or dnsmasq-parallel methods above.
 
 **/etc/config/unbound**:
 
-       config unbound
-               # name your router in DNS
-               option add_local_fqdn '1'
-               option add_wan_fqdn '1'
-               option dhcp_link 'odhcpd'
-               # add SLAAC inferred from DHCPv4
-               option dhcp4_slaac6 '1'
-               option domain 'lan'
-               option domain_type 'static'
-               option listen_port '53'
-               option rebind_protection '1'
-               # install unbound-control and set this
-               option unbound_control '1'
-               ...
+```
+config unbound
+  # name your router in DNS
+  option add_local_fqdn '1'
+  option add_wan_fqdn '1'
+  option dhcp_link 'odhcpd'
+  # add SLAAC inferred from DHCPv4
+  option dhcp4_slaac6 '1'
+  option domain 'lan'
+  option domain_type 'static'
+  option listen_port '53'
+  option rebind_protection '1'
+  # install unbound-control and set this
+  option unbound_control '1'
+  ...
+```
 
 **/etc/config/dhcp**:
 
-       config dhcp 'lan'
-               option dhcpv4 'server'
-               option dhcpv6 'server'
-               option interface 'lan'
-               # short times help renew events to refresh dns
-               option leasetime '4h'
-               option ra 'server'
-               option ra_management '1'
-               # issue your ULA and avoid default [fe80::]
-               list dns 'fdxx:xxxx:xxxx::1'
-
-       config odhcpd 'odhcpd'
-               option maindhcp '1'
-               option leasefile '/var/lib/odhcpd/dhcp.leases'
-               # this is where the magic happens
-               option leasetrigger '/usr/lib/unbound/odhcpd.sh'
-
-## Back to Manual Configuration
+```
+config dhcp 'lan'
+  option dhcpv4 'server'
+  option dhcpv6 'server'
+  option interface 'lan'
+  option leasetime '12h'
+  option ra 'server'
+  option ra_management '1'
+  # issue your ULA and avoid default [fe80::]
+  list dns 'fdxx:xxxx:xxxx::1'
+  ...
+
+config odhcpd 'odhcpd'
+  option maindhcp '1'
+  option leasefile '/var/lib/odhcpd/dhcp.leases'
+  # this is where the magic happens
+  option leasetrigger '/usr/lib/unbound/odhcpd.sh'
+```
+
+## HOW TO Manual Override
 Yes, there is a UCI to disable the rest of Unbound UCI. However, OpenWrt or LEDE are targeted at embedded machines with flash ROM. The initialization scripts do a few things to protect flash ROM.
 
 ### Completely Manual (almost)
@@ -115,150 +127,153 @@ Keep the DNSKEY updated with your choice of flash activity. `root.key` maintenan
 
 **/etc/config/unbound**:
 
-       config unbound
-               option manual_conf '1'
-               option root_age '30'
+```
+config unbound
+  option manual_conf '1'
+  option root_age '9'
+  # end
+```
 
 ### Hybrid Manual/UCI
-You like the UCI. Yet, you need to add some difficult to standardize options, or just are not ready to make a UCI request yet. The files `/etc/unbound/unbound_srv.conf` and `/etc/unbound/unbound_ext.conf` will be copied to Unbounds chroot directory and included during auto generation. 
+You like the UCI. Yet, you need to add some difficult to standardize options, or just are not ready to make a UCI request yet. The files `/etc/unbound/unbound_srv.conf` and `/etc/unbound/unbound_ext.conf` will be copied to Unbounds chroot directory and included during auto generation.
 
 The former will be added to the end of the `server:` clause. The later will be added to the end of the file for extended `forward:` and `view:` clauses. You can also disable unbound-control in the UCI which only allows "localhost" connections unencrypted, and then add an encrypted remote `control:` clause.
 
 ## Complete List of UCI Options
 **/etc/config/unbound**:
 
-       config unbound
-               Currently only one instance is supported.
-
-       option add_local_fqdn '0'
-               Level. This puts your routers host name in the LAN (local) DNS.
-               Each level is more detailed and comprehensive.
-               0 - Disabled
-               1 - Host Name on only the primary address
-               2 - Host Name on all addresses found (except link)
-               3 - FQDN and host name on all addresses (except link)
-               4 - Above and interfaces named <iface>.<hostname>.<domain>
-
-       option add_wan_fqdn '0'
-               Level. Same as previous option only this applies to the WAN. WAN
-               are inferred by a UCI `config dhcp` entry that contains the line
-               option ignore '1'.
-
-       option dns64 '0'
-               Boolean. Enable DNS64 through Unbound in order to bridge networks
-               that are IPV6 only and IPV4 only (see RFC6052).
-
-       option dns64_prefix '64:ff9b::/96'
-               IPV6 Prefix. The IPV6 prefix wrapped on the IPV4 address for DNS64.
-               You should use RFC6052 "well known" address, unless you also
-               redirect to a proxy or gateway for your NAT64.
-
-       option dhcp_link 'none'
-               Program Name. Link to one of the supported programs we have scripts
-               for. You may also need to install a trigger script in the DHCP
-               servers configuration. See HOW TO above.
-
-       option dhcp4_slaac6 '0'
-               Boolean. Some DHCP servers do this natively (dnsmasq). Otherwise
-               the script provided with this package will try to fabricate SLAAC
-               IP6 addresses from DHCPv4 MAC records.
-
-       option domain 'lan'
-               Unbound local-zone: <domain> <type>. This is used to suffix all
-               host records, and maintain a local zone. When dnsmasq is dhcp_link
-               however, then this option is ignored (dnsmasq does it all).
-
-       option domain_type 'static'
-               Unbound local-zone: <domain> <type>. This allows you to lock
-               down or allow forwarding of your domain, your router host name
-               without suffix, and leakage of RFC6762 "local."
-
-       option edns_size '1280'
-               Bytes. Extended DNS is necessary for DNSSEC. However, it can run
-               into MTU issues. Use this size in bytes to manage drop outs.
-
-       option hide_binddata '1'
-               Boolean. If enabled version.server, version.bind, id.server, and
-               hostname.bind queries are refused.
-
-       option listen_port '53'
-               Port. Incoming. Where Unbound will listen for queries.
-
-       option localservice '1'
-               Boolean. Prevent DNS amplification attacks. Only provide access to
-               Unbound from subnets this machine has interfaces on.
-
-       option manual_conf '0'
-               Boolean. Skip all this UCI nonsense. Manually edit the
-               configuration. Make changes to /etc/unbound/unbound.conf.
-
-       option protocol 'mixed'
-               Unbound can limit its protocol used for recursive queries. 
-               Set 'ip4_only' to avoid issues if you do not have native IP6.
-               Set 'ip6_prefer' to possibly improve performance as well as
-               not consume NAT paths for the client computers.
-               Do not use 'ip6_only' unless testing.
-
-       option query_minimize '0'
-               Boolean. Enable a minor privacy option. Don't let each server know
-               the next recursion. Query one piece at a time.
-
-       option query_min_strict '0'
-               Boolean. Query minimize is best effort and will fall back to normal
-               when it must. This option prevents the fall back, but less than
-               standard name servers will fail to resolve their domains.
-
-       option rebind_localhost '0'
-               Boolean. Prevent loopback "127.0.0.0/8" or "::1/128" responses.
-               These may used by black hole servers for good purposes like
-               ad-blocking or parental access control. Obviously these responses
-               also can be used to for bad purposes.
-
-       option rebind_protection '1'
-               Boolean. Prevent RFC 1918 Reponses from global DNS. Example a
-               poisoned reponse within "192.168.0.0/24" could be used to turn a
-               local browser into an external attack proxy server.
-
-       option recursion 'passive'
-               Unbound has numerous options for how it recurses. This UCI combines
-               them into "passive," "aggressive," or Unbound's own "default."
-               Passive is easy on resources, but slower until cache fills.
-
-       option resource 'small'
-               Unbound has numerous options for resources. This UCI gives "tiny,"
-               "small," "medium," and "large." Medium is most like the compiled
-               defaults with a bit of balancing. Tiny is close to the published
-               memory restricted configuration. Small 1/2 medium, and large 2x.
-
-       option root_age '30'
-               Days. >90 Disables. Age limit for Unbound root data like root
-               DNSSEC key. Unbound uses RFC 5011 to manage root key. This could
-               harm flash ROM. This activity is mapped to "tmpfs," but every so
-               often it needs to be copied back to flash for the next reboot.
-
-       option ttl_min '120'
-               Seconds. Minimum TTL in cache. Recursion can be expensive without
-               cache. A low TTL is normal for server migration. A low TTL can be
-               abused for snoop-vertising (DNS hit counts; recording query IP).
-               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.
-
-       option validator '0'
-               Boolean. Enable DNSSEC. Unbound names this the "validator" module.
-
-       option validator_ntp '1'
-               Boolean. Disable DNSSEC time checks at boot. Once NTP confirms
-               global real time, then DNSSEC is restarted at full strength. Many
-               embedded devices don't have a real time power off clock. NTP needs
-               DNS to resolve servers. This works around the chicken-and-egg.
-
-       list domain_insecure
-               List. Domains or pointers that you wish to skip DNSSEC. Your DHCP
-               domains and pointers in dnsmasq will get this automatically.
-
-## Deprecated UCI
-The dnsmasq specific UCI will still work as well as they did, but please use `option dhcp_link 'dnsmasq'` above. Local host name and WAN host name will be lifted and configured from DHCP UCI subpart dnsmasq. (`dnsmasq_gate_name`, `dnsmasq_link_dns`, `dnsmasq_only_local`)
+```
+config unbound
+  Currently only one instance is supported.
+
+  option add_local_fqdn '0'
+    Level. This puts your routers host name in the LAN (local) DNS.
+    Each level is more detailed and comprehensive.
+    0 - Disabled
+    1 - Host Name on only the primary address
+    2 - Host Name on all addresses found (except link)
+    3 - FQDN and host name on all addresses (except link)
+    4 - Above and interfaces named <iface>.<hostname>.<domain>
+
+  option add_wan_fqdn '0'
+    Level. Same as previous option only this applies to the WAN. WAN
+    are inferred by a UCI `config dhcp` entry that contains the line
+    option ignore '1'.
+
+  option dns64 '0'
+    Boolean. Enable DNS64 through Unbound in order to bridge networks
+    that are IPV6 only and IPV4 only (see RFC6052).
+
+  option dns64_prefix '64:ff9b::/96'
+    IPV6 Prefix. The IPV6 prefix wrapped on the IPV4 address for DNS64.
+    You should use RFC6052 "well known" address, unless you also
+    redirect to a proxy or gateway for your NAT64.
+
+  option dhcp_link 'none'
+    Program Name. Link to one of the supported programs we have scripts
+    for. You may also need to install a trigger script in the DHCP
+    servers configuration. See HOW TO above.
+
+  option dhcp4_slaac6 '0'
+    Boolean. Some DHCP servers do this natively (dnsmasq). Otherwise
+    the script provided with this package will try to fabricate SLAAC
+    IP6 addresses from DHCPv4 MAC records.
+
+  option domain 'lan'
+    Unbound local-zone: <domain> <type>. This is used to suffix all
+    host records, and maintain a local zone. When dnsmasq is dhcp_link
+    however, then this option is ignored (dnsmasq does it all).
+
+  option domain_type 'static'
+    Unbound local-zone: <domain> <type>. This allows you to lock
+    down or allow forwarding of your domain, your router host name
+    without suffix, and leakage of RFC6762 "local."
+
+  option edns_size '1280'
+    Bytes. Extended DNS is necessary for DNSSEC. However, it can run
+    into MTU issues. Use this size in bytes to manage drop outs.
+
+  option hide_binddata '1'
+    Boolean. If enabled version.server, version.bind, id.server, and
+    hostname.bind queries are refused.
+
+  option listen_port '53'
+    Port. Incoming. Where Unbound will listen for queries.
+
+  option localservice '1'
+    Boolean. Prevent DNS amplification attacks. Only provide access to
+    Unbound from subnets this machine has interfaces on.
+
+  option manual_conf '0'
+    Boolean. Skip all this UCI nonsense. Manually edit the
+    configuration. Make changes to /etc/unbound/unbound.conf.
+
+  option protocol 'mixed'
+    Unbound can limit its protocol used for recursive queries.
+    Set 'ip4_only' to avoid issues if you do not have native IP6.
+    Set 'ip6_prefer' to possibly improve performance as well as
+    not consume NAT paths for the client computers.
+    Do not use 'ip6_only' unless testing.
+
+  option query_minimize '0'
+    Boolean. Enable a minor privacy option. Don't let each server know
+    the next recursion. Query one piece at a time.
+
+  option query_min_strict '0'
+    Boolean. Query minimize is best effort and will fall back to normal
+    when it must. This option prevents the fall back, but less than
+    standard name servers will fail to resolve their domains.
+
+  option rebind_localhost '0'
+    Boolean. Prevent loopback "127.0.0.0/8" or "::1/128" responses.
+    These may used by black hole servers for good purposes like
+    ad-blocking or parental access control. Obviously these responses
+    also can be used to for bad purposes.
+
+  option rebind_protection '1'
+    Boolean. Prevent RFC 1918 Reponses from global DNS. Example a
+    poisoned reponse within "192.168.0.0/24" could be used to turn a
+    local browser into an external attack proxy server.
+
+  option recursion 'passive'
+    Unbound has numerous options for how it recurses. This UCI combines
+    them into "passive," "aggressive," or Unbound's own "default."
+    Passive is easy on resources, but slower until cache fills.
+
+  option resource 'small'
+    Unbound has numerous options for resources. This UCI gives "tiny,"
+    "small," "medium," and "large." Medium is most like the compiled
+    defaults with a bit of balancing. Tiny is close to the published
+    memory restricted configuration. Small 1/2 medium, and large 2x.
+
+  option root_age '9'
+    Days. >90 Disables. Age limit for Unbound root data like root
+    DNSSEC key. Unbound uses RFC 5011 to manage root key. This could
+    harm flash ROM. This activity is mapped to "tmpfs," but every so
+    often it needs to be copied back to flash for the next reboot.
+
+  option ttl_min '120'
+    Seconds. Minimum TTL in cache. Recursion can be expensive without
+    cache. A low TTL is normal for server migration. A low TTL can be
+    abused for snoop-vertising (DNS hit counts; recording query IP).
+    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.
+
+  option validator '0'
+    Boolean. Enable DNSSEC. Unbound names this the "validator" module.
+
+  option validator_ntp '1'
+    Boolean. Disable DNSSEC time checks at boot. Once NTP confirms
+    global real time, then DNSSEC is restarted at full strength. Many
+    embedded devices don't have a real time power off clock. NTP needs
+    DNS to resolve servers. This works around the chicken-and-egg.
+
+  list domain_insecure
+    List. Domains or pointers that you wish to skip DNSSEC. Your DHCP
+    domains and pointers in dnsmasq will get this automatically.
+```
+
 
index 2fc64ab4055950985a06f6ab890a8e85bb7e2bb3..22a470b4cd6f2c970c42d2d3a09a95f82690c337 100644 (file)
@@ -33,6 +33,7 @@ odhcpd_settings() {
   local cfg="$1"
   config_get UNBOUND_D_DHCP_LINK  "$cfg" dhcp_link none
   config_get_bool UNBOUND_B_SLAAC6_MAC "$cfg" dhcp4_slaac6 0
+  config_get UNBOUND_TXT_DOMAIN "$cfg" domain lan
 }
 
 ##############################################################################
index 2ad6641345273ada29b584f5fcdd061c3e99e207..2de0b624605012b5dc3b45e1d17de18ab0c692b9 100644 (file)
@@ -1 +1,3 @@
 . IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
+. IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
+
index 143c0560f65715cf5e5f786e9b8752ce807613a9..d085fed4eafcc8ff7c3109ef0bfdec65d9b4662a 100644 (file)
@@ -26,7 +26,7 @@ rootzone_uci() {
   # This will likely be called outside of "start_service()" context
   config_get_bool UNBOUND_B_DNSSEC "$cfg" validator 0
   config_get_bool UNBOUND_B_NTP_BOOT "$cfg" validator_ntp 1
-  config_get UNBOUND_N_ROOT_AGE "$cfg" root_age 30
+  config_get UNBOUND_N_ROOT_AGE "$cfg" root_age 9
 }
 
 ##############################################################################
index 44eeb6fccd07de8df4637e1de6faeb01540685b5..68d01a47b5b02c2f6346133ffd32d7d4b0734fbc 100644 (file)
@@ -47,7 +47,7 @@ UNBOUND_IP_DNS64="64:ff9b::/96"
 UNBOUND_N_EDNS_SIZE=1280
 UNBOUND_N_FWD_PORTS=""
 UNBOUND_N_RX_PORT=53
-UNBOUND_N_ROOT_AGE=28
+UNBOUND_N_ROOT_AGE=9
 
 UNBOUND_TTL_MIN=120
 
@@ -107,9 +107,14 @@ create_interface_dns() {
   if_fqdn="$ifdashname.$host_fqdn"
 
 
+  if [ -z "${ulaprefix%%:/*}" ] ; then
+    # Nonsense so this option isn't globbed below
+    ulaprefix="fdno:such:addr::/48"
+  fi
+
+
   if [ "$ignore" -gt 0 ] ; then
     mode="$UNBOUND_D_WAN_FQDN"
-
   else
     mode="$UNBOUND_D_LAN_FQDN"
   fi
@@ -122,8 +127,15 @@ create_interface_dns() {
     ;;
 
   4)
-    mode_ptr="$if_fqdn"
-    names="$if_fqdn  $host_fqdn  $UNBOUND_TXT_HOSTNAME"
+    if [ -z "$ifdashname" ] ; then
+      # race conditions at init can rarely cause a blank device return
+      # the record format is invalid and Unbound won't load the conf file
+      mode_ptr="$host_fqdn"
+      names="$host_fqdn  $UNBOUND_TXT_HOSTNAME"
+    else
+      mode_ptr="$if_fqdn"
+      names="$if_fqdn  $host_fqdn  $UNBOUND_TXT_HOSTNAME"
+    fi
     ;;
 
   *)
@@ -252,6 +264,13 @@ unbound_mkdir() {
   fi
 
 
+  if [ -f $UNBOUND_KEYFILE ] ; then
+    # Lets not lose RFC 5011 tracking if we don't have to
+    cp -p $UNBOUND_KEYFILE $UNBOUND_KEYFILE.keep
+  fi
+
+
+  # Blind copy /etc/ to /var/lib/
   mkdir -p $UNBOUND_VARDIR
   rm -f $UNBOUND_VARDIR/dhcp_*
   touch $UNBOUND_CONFFILE
@@ -276,7 +295,7 @@ unbound_mkdir() {
       # Debian-like package dns-root-data
       cp -p /usr/share/dns/root.key $UNBOUND_KEYFILE
 
-    elif [ -x "$UNBOUND_ANCHOR" ] ; then
+    elif [ -x $UNBOUND_ANCHOR ] ; then
       $UNBOUND_ANCHOR -a $UNBOUND_KEYFILE
 
     else
@@ -285,6 +304,13 @@ unbound_mkdir() {
   fi
 
 
+  if [ -f $UNBOUND_KEYFILE.keep ] ; then
+    # root.key.keep is reused if newest
+    cp -u $UNBOUND_KEYFILE.keep $UNBOUND_KEYFILE
+    rm -f $UNBOUND_KEYFILE.keep
+  fi
+
+
   # Ensure access and prepare to jail
   chown -R unbound:unbound $UNBOUND_VARDIR
   chmod 775 $UNBOUND_VARDIR
@@ -749,7 +775,7 @@ unbound_uci() {
 
   config_get UNBOUND_N_EDNS_SIZE "$cfg" edns_size 1280
   config_get UNBOUND_N_RX_PORT   "$cfg" listen_port 53
-  config_get UNBOUND_N_ROOT_AGE  "$cfg" root_age 7
+  config_get UNBOUND_N_ROOT_AGE  "$cfg" root_age 9
 
   config_get UNBOUND_D_DOMAIN_TYPE "$cfg" domain_type static
   config_get UNBOUND_D_DHCP_LINK   "$cfg" dhcp_link none
index 7794e976547cbabf75a143adc730d494dd3d4596..9e58ac799bb69c72f17f61d97b828a89057ceea2 100644 (file)
@@ -19,7 +19,7 @@ config unbound
        option rebind_protection '1'
        option recursion 'passive'
        option resource 'small'
-       option root_age '28'
+       option root_age '9'
        option ttl_min '120'
        option unbound_control '0'
        option validator '0'
index d1c1ca3d24b0e163f35b97df7a07ee00d659553b..8aa0502024aa70fef632b32996e04d7bf431bed9 100644 (file)
@@ -1,12 +1,12 @@
 diff --git a/doc/example.conf.in b/doc/example.conf.in
-index 55bbc32..14452fa 100644
+index 83e7c5c..3ea2b28 100644
 --- a/doc/example.conf.in
 +++ b/doc/example.conf.in
-@@ -1,20 +1,82 @@
+@@ -1,9 +1,10 @@
 -#
 -# Example configuration file.
 -#
--# See unbound.conf(5) man page, version 1.6.0.
+-# See unbound.conf(5) man page, version 1.6.1.
 -#
 -# this is a comment.
 +##############################################################################
@@ -19,10 +19,9 @@ index 55bbc32..14452fa 100644
  
  #Use this to include other text into the file.
  #include: "otherfile.conf"
- # The server clause sets the main parameters.
+@@ -12,9 +13,71 @@
  server:
--      # whitespace is not necessary, but looks cleaner.
+       # whitespace is not necessary, but looks cleaner.
  
 -      # verbosity number, 0 is least verbose. 1 is default.
 +      # verbosity 1 is default
@@ -51,7 +50,7 @@ index 55bbc32..14452fa 100644
 +      access-control: ::0/0 allow
 +
 +      # this limits TCP service but uses less buffers
-+      outgoing-num-tcp: 1 
++      outgoing-num-tcp: 1
 +      incoming-num-tcp: 1
 +
 +      # use somewhat higher port numbers versus possible NAT issue
index a7c8cc81c9563ae0863ce01eeeaec95db7db2247..44870747e874ba9f255e7d79f94bb6888740274d 100644 (file)
@@ -4,14 +4,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=vpnbypass
-PKG_VERSION:=1.1.1
-PKG_RELEASE:=4
+PKG_VERSION:=1.3.0
+PKG_RELEASE:=3
 PKG_LICENSE:=GPL-3.0+
 PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
 
 include $(INCLUDE_DIR)/package.mk
 
-define Package/$(PKG_NAME)
+define Package/vpnbypass
        SECTION:=net
        CATEGORY:=Network
        DEPENDS:=+ip-full +ipset +iptables +ubox +dnsmasq-full
@@ -20,14 +20,14 @@ define Package/$(PKG_NAME)
        PKGARCH:=all
 endef
 
-define Package/$(PKG_NAME)/description
+define Package/vpnbypass/description
 This service can be used to enable simple VPN split tunnelling.
 Supports accessing domains, IP ranges outside of your VPN tunnel.
 Also supports dedicating local ports/IP ranges for direct internet access (outside of your VPN tunnel).
 Please see the README for further information.
 endef
 
-define Package/$(PKG_NAME)/conffiles
+define Package/vpnbypass/conffiles
 /etc/config/vpnbypass
 endef
 
@@ -43,7 +43,7 @@ endef
 define Build/Compile
 endef
 
-define Package/$(PKG_NAME)/install
+define Package/vpnbypass/install
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/vpnbypass.init $(1)/etc/init.d/vpnbypass
        $(INSTALL_DIR) $(1)/etc/config
@@ -52,4 +52,4 @@ define Package/$(PKG_NAME)/install
        $(INSTALL_DATA) ./files/vpnbypass.hotplug $(1)/etc/hotplug.d/firewall/94-vpnbypass
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,vpnbypass))
index 7867ba76d514ad44876d277f18c45443861a0326..93570355aeb1c0c4729bedc112a2c6c526660c35 100644 (file)
@@ -11,7 +11,7 @@ A simple PROCD-based vpnbypass service for OpenWrt/LEDE Project. Useful if your
 - Proudly made in Canada, using locally-sourced electrons.
 
 ## Screenshot (luci-app-vpnbypass)
-![screenshot](https://raw.githubusercontent.com/stangri/screenshots/master/vpnbypass/screenshot01.png "screenshot")
+![screenshot](https://raw.githubusercontent.com/stangri/screenshots/master/vpnbypass/screenshot02.png "screenshot")
 
 ## Requirements
 This service requires following packages to be installed on your router: ```ip-full ipset iptables dnsmasq-full``` (```ip-full``` requires you uninstall ```ip``` first; ```dnsmasq-full``` requires you uninstall ```dnsmasq``` first). Run the following commands to satisfy the requirements:
@@ -26,7 +26,26 @@ opkg install ip-full ipset iptables dnsmasq-full
 opkg update
 opkg install vpnbypass luci-app-vpnbypass
 ```
-Default install routes Plex Media Server traffic (port 32400) outside of the VPN tunnel, routes LogmeIn Hamachi traffic (25.0.0.0/8) outside of the VPN tunnel and also routes internet traffic from local IPs 192.168.1.81-192.168.1.87 outside of the VPN tunnel. You can safely delete these example rules if they do not apply to you.
+
+Until the packages are in the official feed/repo for your version, you can install them with:
+- OpenWrt
+```sh
+opkg update; opkg install wget libopenssl
+wget --no-check-certificate https://github.com/stangri/Files/raw/master/vpnbypass.ipk -O /tmp/vpnbypass.ipk
+wget --no-check-certificate https://github.com/stangri/Files/raw/master/luci-app-vpnbypass.ipk -O /tmp/luci-app-vpnbypass.ipk
+opkg install /tmp/vpnbypass.ipk /tmp/luci-app-vpnbypass.ipk
+```
+
+- LEDE Project
+```sh
+opkg update; opkg install uclient-fetch libustream-mbedtls
+wget --no-check-certificate https://github.com/stangri/Files/raw/master/vpnbypass.ipk -O /tmp/vpnbypass.ipk
+wget --no-check-certificate https://github.com/stangri/Files/raw/master/luci-app-vpnbypass.ipk -O /tmp/luci-app-vpnbypass.ipk
+opkg install /tmp/vpnbypass.ipk /tmp/luci-app-vpnbypass.ipk
+```
+
+### Default Settings
+Default configuration has service disabled (use Web UI to enable/start service or run ```uci set vpnbypass.config.enabled=1```) and routes Plex Media Server traffic (port 32400) outside of the VPN tunnel, routes LogmeIn Hamachi traffic (25.0.0.0/8) outside of the VPN tunnel and also routes internet traffic from local IPs 192.168.1.81-192.168.1.87 outside of the VPN tunnel. You can safely delete these example rules if they do not apply to you.
 
 ## Documentation / Discussion
 Please head to [LEDE Project Forum](https://forum.lede-project.org/t/vpn-bypass-split-tunneling-service-luci-ui/1106) for discussions of this service.
@@ -35,8 +54,19 @@ Please head to [LEDE Project Forum](https://forum.lede-project.org/t/vpn-bypass-
 Domain lists should be in following format/syntax: ```/domain1.com/domain2.com/vpnbypass```. Please don't forget the leading ```/``` and trailing ```/vpnbypass```. There's no validation if you enter something incorrectly -- it just won't work. Please see [Notes/Known Issues](#notesknown-issues) if you want to edit this setting manually, without Web UI.
 
 ## What's New
+1.3.0
+- No longer depends on hardcoded WAN interface name (```wan```) works with other interface names (like ```wwan```).
+- Table ID, IPSET name and FW_MARK as well as FW_MASK can be defined in config file.
+- Uses iptables, not ip rules for handling local IPs/ranges.
+- More reliable creation/destruction of VPNBYPASS iptables chain.
+- Updated Web UI enables/start and stops service.
+- Beautified output.
+
+1.2.0
+- More elegant handling of iptables (thanks [@hnyman](https://github.com/hnyman) and [@tohojo](https://github.com/tohojo)!).
+
 1.1.1
-- More reliable way of obtaining WAN gateway on boot (thanks @dibdot for the hint!).
+- More reliable way of obtaining WAN gateway on boot (thanks [@dibdot](https://github.com/dibdot) for the hint!).
 
 1.1.0:
 - Detects individual IP addresses in the config and converts them to subnet automatically.
@@ -55,7 +85,7 @@ Domain lists should be in following format/syntax: ```/domain1.com/domain2.com/v
 - Initial release.
 
 ## Notes/Known Issues
-Domains to be accessed outside of VPN tunnel are not defined in ```/etc/config/vpnpass```, but rather in ```/etc/config/dhcp```. To add/delete/edit domains you can use VPN Bypass Web UI or you can edit ```/etc/config/dhcp``` manually or run following commands:
+Domains to be accessed outside of VPN tunnel are handled by dnsmasq and thus are not defined in ```/etc/config/vpnpass```, but rather in ```/etc/config/dhcp```. To add/delete/edit domains you can use VPN Bypass Web UI or you can edit ```/etc/config/dhcp``` manually or run following commands:
 ```sh
 uci add_list dhcp.@dnsmasq[-1].ipset='/github.com/plex.tv/google.com/vpnbypass'
 uci add_list dhcp.@dnsmasq[-1].ipset='/hulu.com/netflix.com/nhl.com/vpnbypass'
index b48d45e72fd1115b660b2c8004bec1815fe11af9..0768e865c925228338ded041fa5c181280f2850d 100644 (file)
@@ -1,5 +1,5 @@
 config vpnbypass 'config'
-       option enabled '1'
-       list localport '32400'
-       list localsubnet '192.168.1.81/29'
-       list remotesubnet '25.0.0.0/8'
+       option enabled          '0'
+       list localport          '32400'
+       list localsubnet        '192.168.1.81/29'
+       list remotesubnet       '25.0.0.0/8'
index c64b83c000f1f1f5d9c312ad59b2f272ce55e77e..55789f819de8fe6c15e2c9ce6145330165169042 100644 (file)
@@ -4,36 +4,52 @@ PKG_VERSION=
 START=94
 USE_PROCD=1
 
-readonly TID="200" FW_MARK="0x010000" IPSET="vpnbypass"
+readonly __ok__='\033[0;32m[\xe2\x9c\x93]\033[0m'
+readonly __fail__='\033[0;31m[\xe2\x9c\x97]\033[0m'
+readonly __pass__='\033[0;33m[-]\033[0m'
+readonly __error__='\033[0;31mERROR\033[0m'
 
-output() {
-       [ -n "$2" ] && [ ! $(($verbosity & $2)) -gt 0 ] && return 0;
-       [ -t 1 ] && echo -e -n "$1"
-       [ $(echo -e -n "$1" | wc -l) -gt 0 ] && logger -t "${PKG_NAME:-service} [$$]" "$(echo -e -n ${logmsg}${1})" && logmsg='' || logmsg=${logmsg}${1}
-}
+output() { local msg=$(echo -n "${1/$p_name /service }" | sed 's|\\033\[[0-9]\?;\?[0-9]\?[0-9]\?m||g'); [ -n "$2" ] && [ ! $(($verbosity & $2)) -gt 0 ] && return 0; [ -t 1 ] && echo -e -n "$1"; [ $(echo -e -n "$msg" | wc -l) -gt 0 ] && logger -t "${PKG_NAME:-service} [$$]" "$(echo -e -n ${logmsg}${msg})" && logmsg='' || logmsg=${logmsg}${msg}; }
+PKG_NAME="${PKG_NAME:-vpnbypass}"; p_name="${PKG_NAME} ${PKG_VERSION}"
 
-vpnbypass_enabled() {
-       config_load vpnbypass
-       config_get_bool enabled 'config' 'enabled' 0
+is_enabled() {
+       local c=1 enabled
+       config_load $PKG_NAME
+       config_get_bool enabled 'config' 'enabled' 1
        config_get verbosity    'config' 'verbosity' '2'
-       PKG_NAME="${PKG_NAME:-vpnbypass}"
-       [ -n "$PKG_VERSION" ] && p_name="$PKG_NAME $PKG_VERSION" || p_name="$PKG_NAME"
-       [ -t 1 ] || p_name='service'
+       config_get TID          'config' 'table_number' '200'
+       config_get IPSET        'config' 'ipset'  'vpnbypass'
+       config_get FW_MARK      'config' 'fw_mark' '0x010000'
+       config_get FW_MASK      'config' 'fw_mask' '0xff0000'
        source /lib/functions/network.sh
-       [ "$enabled" -ne "0" ] && return 0
-       output "$p_name is not enabled in the config file!\n"
-       output "To enable, run 'uci set $PKG_NAME.config.enabled=1; uci commit $PKG_NAME'\n"
-       return 1
+       [ "$enabled" -gt 0 ] || { output "$__error__: $p_name is not enabled.\n"; return 1; }
+       source  /lib/functions/network.sh
+       while : ; do
+               network_find_wan wan_if4
+               [ -n "$wan_if4" ] && network_get_gateway wan_gw $wan_if4
+               [ "$c" -ge 25 -o -n "$wan_gw" ] && break
+               output "$p_name waiting for wan gateway...\n"
+               sleep 2; network_flush_cache; let "c+=1";
+       done
+       [ -n "$wan_gw" ] && return 0 || { output "$__error__: $p_name failed to discover WAN gateway.\n"; return 1; }
 }
 
-iptables_reset(){ [ -z "$PKG_NAME" ] && return 1; iptables-save | grep -Fv -- "$PKG_NAME" | iptables-restore; lsmod | grep -q ip6table_nat && ip6tables-save | grep -Fv -- "$PKG_NAME" | ip6tables-restore; }
+ipt() {
+    local d=$(echo $* | sed s/-A/-D/g)
+    [ "$d" != "$*" ] && iptables $d >/dev/null 2>&1
+    d=$(echo $* | sed s/-I/-D/g)
+    [ "$d" != "$*" ] && iptables $d >/dev/null 2>&1
+               d=$(echo $* | sed s/-N/-F/g)
+    [ "$d" != "$*" ] && iptables $d >/dev/null 2>&1
+               d=$(echo $* | sed s/-N/-X/g)
+    [ "$d" != "$*" ] && iptables $d >/dev/null 2>&1
 
-boot() { ubus -t 30 wait_for network.interface.wan && { rc_procd start_service; rc_procd service_triggers; } || output "ERROR: $p_name failed to settle network interface!\n"; }
+               iptables $* >/dev/null 2>&1
+}
 
 start_service() {
-       local ll c=1
-  config_load vpnbypass
-  vpnbypass_enabled || return 1
+       local ll
+  is_enabled || return 1
   config_get lports   'config' 'localport'
   config_get rports   'config' 'remoteport'
   config_get routes   'config' 'remotesubnet'
@@ -45,40 +61,41 @@ start_service() {
        procd_set_param stderr 1
        procd_close_instance
 
-       while : ; do network_get_ipaddr wanip wan; network_get_gateway gwip wan; [ $c -ge 15 ] && break || let "c+=1"; [ -n "$wanip" -a -n "$gwip" ] && break || output "$p_name waiting for wan gateway...\n"; sleep 2; network_flush_cache; done
-       [ -z "$wanip" -o -z "$gwip" ] && output "ERROR: $p_name could not get wan interface IP: $wanip or gateway: $gwip!\n" && exit 0
-
-       for ll in ${routes}; do ip route del $ll; ip route add $ll via $gwip; done
-       ip rule del fwmark "$FW_MARK" table "$TID" >/dev/null 2>&1; iptables_reset; ipset -q flush "$IPSET"; ipset -q destroy "$IPSET";
+       ipt -t mangle -N VPNBYPASS; ipt -t mangle -A PREROUTING -m mark --mark 0x00/${FW_MASK} -g VPNBYPASS;
+       ipt -t mangle -A VPNBYPASS -m set --match-set $IPSET dst -j MARK --set-mark ${FW_MARK}/${FW_MASK}
+       ip rule del fwmark "$FW_MARK" table "$TID" >/dev/null 2>&1; ipset -q flush "$IPSET"; ipset -q destroy "$IPSET";
        ip route flush table "$TID"; ip route flush cache;
-       ip route add default via "$gwip" table "$TID"; ip route flush cache;
-       { modprobe xt_set; modprobe ip_set; modprobe ip_set_hash_ip; } >/dev/null 2>&1
+       ip route add default via "$wan_gw" table "$TID"; ip route flush cache;
        ipset -q -exist create "$IPSET" hash:ip; ipset -q flush "$IPSET"
-       for ll in ${lports}; do iptables -t mangle -A PREROUTING -p tcp -m multiport --sport "${ll//-/:}" -j MARK --set-mark "$FW_MARK/$FW_MARK" -m comment --comment "$PKG_NAME"; done
-       for ll in ${rports}; do iptables -t mangle -A PREROUTING -p tcp -m multiport --dport "${ll//-/:}" -j MARK --set-mark "$FW_MARK/$FW_MARK" -m comment --comment "$PKG_NAME"; done
-       for ll in ${ranges}; do iptables -t mangle -I PREROUTING -s "$ll" -j MARK --set-mark "$FW_MARK/$FW_MARK" -m comment --comment "$PKG_NAME"; done
-       iptables -t mangle -A PREROUTING -m set --match-set "$IPSET" dst -j MARK --set-mark "$FW_MARK/$FW_MARK" -m comment --comment "$PKG_NAME"
        ip rule add fwmark "$FW_MARK" table "$TID"
+       { modprobe xt_set; modprobe ip_set; modprobe ip_set_hash_ip; } >/dev/null 2>&1
+       for ll in ${ranges}; do ipt -t mangle -I VPNBYPASS 1 -j MARK --set-mark ${FW_MARK}/${FW_MASK} -s "$ll"; done
+       for ll in ${lports}; do ipt -t mangle -I VPNBYPASS 1 -j MARK --set-mark ${FW_MARK}/${FW_MASK} -p tcp -m multiport --sport "${ll//-/:}"; done
+       for ll in ${routes}; do ipt -t mangle -I VPNBYPASS 1 -j MARK --set-mark ${FW_MARK}/${FW_MASK} -d "$ll"; done
+       for ll in ${rports}; do ipt -t mangle -I VPNBYPASS 1 -j MARK --set-mark ${FW_MARK}/${FW_MASK} -p tcp -m multiport --dport "${ll//-/:}"; done
        output "$p_name started with TID: $TID; FW_MARK: $FW_MARK\n"
 }
 
 stop_service() {
-       local ll
-  vpnbypass_enabled || return 1
-  config_get routes   'config' 'remotesubnet'
+  is_enabled || return 1
 
-       for ll in ${routes}; do ip route del "$ll"; done
-       ip rule del fwmark "$FW_MARK" table "$TID" >/dev/null 2>&1; iptables_reset; ipset -q flush "$IPSET"; ipset -q destroy "$IPSET";
+       ip rule del fwmark "$FW_MARK" table "$TID" >/dev/null 2>&1; ipset -q flush "$IPSET"; ipset -q destroy "$IPSET";
        ip route flush table "$TID"; ip route flush cache;
+       ipt -t mangle -D PREROUTING -m mark --mark 0x00/${FW_MASK} -g VPNBYPASS
+       ipt -t mangle -F VPNBYPASS; ipt -t mangle -X VPNBYPASS;
        output "$p_name stopped\n"
 }
 
-reload_service() { start_service; }
+reload_service(){
+       start_service
+}
 
+st_load_interfaces(){ local d; config_get d $1 ifname; [ "$1" == "$wan_if4" -o "$d" != "${d/tun}" -o "$d" != "${d/tap}" ] && ifaces=" ${1} ${ifaces}"; }
 service_triggers() {
+               local ifaces n
                procd_add_reload_trigger 'vpnbypass'
                procd_open_trigger
                procd_add_config_trigger "config.change" "vpnbypass" /etc/init.d/vpnbypass reload
-               procd_add_interface_trigger "interface.*" "wan" /etc/init.d/vpnbypass reload
+               for n in $ifaces; do procd_add_interface_trigger "interface.*" "$n" /etc/init.d/openvpn-policy-routing reload; done;
                procd_close_trigger
 }
index 514ad1832131f1d40223363734b5865f9797c1bd..ed4be9f2b2da5813f1e71537a430d97b0582d46b 100644 (file)
@@ -8,14 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=webui-aria2
-PKG_VERSION:=2016-10-11
 PKG_RELEASE:=1
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/ziahamza/webui-aria2.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=6a29c1b1d0224e1daa88906e88bc2e177ca2ad76
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
+PKG_SOURCE_DATE:=2017-02-12
+PKG_SOURCE_VERSION:=68c8ad4f86b87a8b713e13f70b4a3a3c7b86c83e
 
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=LICENSE
@@ -41,16 +39,18 @@ define Build/Compile
 endef
 
 define Package/webui-aria2/install
-       $(INSTALL_DIR) $(1)/www/webui-aria2
-
-       $(CP) $(PKG_BUILD_DIR)/fonts $(1)/www/webui-aria2
-       $(CP) $(PKG_BUILD_DIR)/flags $(1)/www/webui-aria2
-       $(CP) $(PKG_BUILD_DIR)/js $(1)/www/webui-aria2
-       $(CP) $(PKG_BUILD_DIR)/img $(1)/www/webui-aria2
-       $(CP) $(PKG_BUILD_DIR)/css $(1)/www/webui-aria2
-       $(CP) $(PKG_BUILD_DIR)/index.html $(1)/www/webui-aria2
-       $(CP) $(PKG_BUILD_DIR)/favicon.ico $(1)/www/webui-aria2
-       $(CP) $(PKG_BUILD_DIR)/configuration.js $(1)/www/webui-aria2
+       $(INSTALL_DIR) \
+               $(1)/www/webui-aria2 \
+               $(1)/www/webui-aria2/flags/4x3
+
+       $(CP) \
+               $(PKG_BUILD_DIR)/{css,fonts,js} \
+               $(PKG_BUILD_DIR)/{LICENSE,configuration.js,favicon.ico,index.html} \
+               $(1)/www/webui-aria2
+
+       $(CP) \
+               $(PKG_BUILD_DIR)/flags/4x3/{cn,de,es,fr,it,nl,pl,ru,th,tr,tw,us}.svg \
+               $(1)/www/webui-aria2/flags/4x3
 endef
 
 $(eval $(call BuildPackage,webui-aria2))
diff --git a/net/webui-aria2/patches/001-simplify-flag-icon-css.patch b/net/webui-aria2/patches/001-simplify-flag-icon-css.patch
new file mode 100644 (file)
index 0000000..c8145c4
--- /dev/null
@@ -0,0 +1,9 @@
+diff --git a/css/flag-icon.min.css b/css/flag-icon.min.css
+index 9480741..00ee213 100644
+--- a/css/flag-icon.min.css
++++ b/css/flag-icon.min.css
+@@ -1 +1 @@
+-.flag-icon,.flag-icon-background{background-repeat:no-repeat;background-size:contain;background-position:50%}.flag-icon{position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:"\00a0"}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(../flags/4x3/ad.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(../flags/1x1/ad.svg)}.flag-icon-ae{background-image:url(../flags/4x3/ae.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(../flags/1x1/ae.svg)}.flag-icon-af{background-image:url(../flags/4x3/af.svg)}.flag-icon-af.flag-icon-squared{background-image:url(../flags/1x1/af.svg)}.flag-icon-ag{background-image:url(../flags/4x3/ag.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(../flags/1x1/ag.svg)}.flag-icon-ai{background-image:url(../flags/4x3/ai.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(../flags/1x1/ai.svg)}.flag-icon-al{background-image:url(../flags/4x3/al.svg)}.flag-icon-al.flag-icon-squared{background-image:url(../flags/1x1/al.svg)}.flag-icon-am{background-image:url(../flags/4x3/am.svg)}.flag-icon-am.flag-icon-squared{background-image:url(../flags/1x1/am.svg)}.flag-icon-ao{background-image:url(../flags/4x3/ao.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(../flags/1x1/ao.svg)}.flag-icon-aq{background-image:url(../flags/4x3/aq.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(../flags/1x1/aq.svg)}.flag-icon-ar{background-image:url(../flags/4x3/ar.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(../flags/1x1/ar.svg)}.flag-icon-as{background-image:url(../flags/4x3/as.svg)}.flag-icon-as.flag-icon-squared{background-image:url(../flags/1x1/as.svg)}.flag-icon-at{background-image:url(../flags/4x3/at.svg)}.flag-icon-at.flag-icon-squared{background-image:url(../flags/1x1/at.svg)}.flag-icon-au{background-image:url(../flags/4x3/au.svg)}.flag-icon-au.flag-icon-squared{background-image:url(../flags/1x1/au.svg)}.flag-icon-aw{background-image:url(../flags/4x3/aw.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(../flags/1x1/aw.svg)}.flag-icon-ax{background-image:url(../flags/4x3/ax.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(../flags/1x1/ax.svg)}.flag-icon-az{background-image:url(../flags/4x3/az.svg)}.flag-icon-az.flag-icon-squared{background-image:url(../flags/1x1/az.svg)}.flag-icon-ba{background-image:url(../flags/4x3/ba.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(../flags/1x1/ba.svg)}.flag-icon-bb{background-image:url(../flags/4x3/bb.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(../flags/1x1/bb.svg)}.flag-icon-bd{background-image:url(../flags/4x3/bd.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(../flags/1x1/bd.svg)}.flag-icon-be{background-image:url(../flags/4x3/be.svg)}.flag-icon-be.flag-icon-squared{background-image:url(../flags/1x1/be.svg)}.flag-icon-bf{background-image:url(../flags/4x3/bf.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(../flags/1x1/bf.svg)}.flag-icon-bg{background-image:url(../flags/4x3/bg.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(../flags/1x1/bg.svg)}.flag-icon-bh{background-image:url(../flags/4x3/bh.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(../flags/1x1/bh.svg)}.flag-icon-bi{background-image:url(../flags/4x3/bi.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(../flags/1x1/bi.svg)}.flag-icon-bj{background-image:url(../flags/4x3/bj.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(../flags/1x1/bj.svg)}.flag-icon-bl{background-image:url(../flags/4x3/bl.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(../flags/1x1/bl.svg)}.flag-icon-bm{background-image:url(../flags/4x3/bm.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(../flags/1x1/bm.svg)}.flag-icon-bn{background-image:url(../flags/4x3/bn.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(../flags/1x1/bn.svg)}.flag-icon-bo{background-image:url(../flags/4x3/bo.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(../flags/1x1/bo.svg)}.flag-icon-bq{background-image:url(../flags/4x3/bq.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(../flags/1x1/bq.svg)}.flag-icon-br{background-image:url(../flags/4x3/br.svg)}.flag-icon-br.flag-icon-squared{background-image:url(../flags/1x1/br.svg)}.flag-icon-bs{background-image:url(../flags/4x3/bs.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(../flags/1x1/bs.svg)}.flag-icon-bt{background-image:url(../flags/4x3/bt.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(../flags/1x1/bt.svg)}.flag-icon-bv{background-image:url(../flags/4x3/bv.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(../flags/1x1/bv.svg)}.flag-icon-bw{background-image:url(../flags/4x3/bw.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(../flags/1x1/bw.svg)}.flag-icon-by{background-image:url(../flags/4x3/by.svg)}.flag-icon-by.flag-icon-squared{background-image:url(../flags/1x1/by.svg)}.flag-icon-bz{background-image:url(../flags/4x3/bz.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(../flags/1x1/bz.svg)}.flag-icon-ca{background-image:url(../flags/4x3/ca.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(../flags/1x1/ca.svg)}.flag-icon-cc{background-image:url(../flags/4x3/cc.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(../flags/1x1/cc.svg)}.flag-icon-cd{background-image:url(../flags/4x3/cd.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(../flags/1x1/cd.svg)}.flag-icon-cf{background-image:url(../flags/4x3/cf.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(../flags/1x1/cf.svg)}.flag-icon-cg{background-image:url(../flags/4x3/cg.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(../flags/1x1/cg.svg)}.flag-icon-ch{background-image:url(../flags/4x3/ch.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(../flags/1x1/ch.svg)}.flag-icon-ci{background-image:url(../flags/4x3/ci.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(../flags/1x1/ci.svg)}.flag-icon-ck{background-image:url(../flags/4x3/ck.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(../flags/1x1/ck.svg)}.flag-icon-cl{background-image:url(../flags/4x3/cl.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(../flags/1x1/cl.svg)}.flag-icon-cm{background-image:url(../flags/4x3/cm.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(../flags/1x1/cm.svg)}.flag-icon-cn{background-image:url(../flags/4x3/cn.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(../flags/1x1/cn.svg)}.flag-icon-co{background-image:url(../flags/4x3/co.svg)}.flag-icon-co.flag-icon-squared{background-image:url(../flags/1x1/co.svg)}.flag-icon-cr{background-image:url(../flags/4x3/cr.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(../flags/1x1/cr.svg)}.flag-icon-cu{background-image:url(../flags/4x3/cu.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(../flags/1x1/cu.svg)}.flag-icon-cv{background-image:url(../flags/4x3/cv.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(../flags/1x1/cv.svg)}.flag-icon-cw{background-image:url(../flags/4x3/cw.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(../flags/1x1/cw.svg)}.flag-icon-cx{background-image:url(../flags/4x3/cx.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(../flags/1x1/cx.svg)}.flag-icon-cy{background-image:url(../flags/4x3/cy.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(../flags/1x1/cy.svg)}.flag-icon-cz{background-image:url(../flags/4x3/cz.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(../flags/1x1/cz.svg)}.flag-icon-de{background-image:url(../flags/4x3/de.svg)}.flag-icon-de.flag-icon-squared{background-image:url(../flags/1x1/de.svg)}.flag-icon-dj{background-image:url(../flags/4x3/dj.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(../flags/1x1/dj.svg)}.flag-icon-dk{background-image:url(../flags/4x3/dk.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(../flags/1x1/dk.svg)}.flag-icon-dm{background-image:url(../flags/4x3/dm.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(../flags/1x1/dm.svg)}.flag-icon-do{background-image:url(../flags/4x3/do.svg)}.flag-icon-do.flag-icon-squared{background-image:url(../flags/1x1/do.svg)}.flag-icon-dz{background-image:url(../flags/4x3/dz.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(../flags/1x1/dz.svg)}.flag-icon-ec{background-image:url(../flags/4x3/ec.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(../flags/1x1/ec.svg)}.flag-icon-ee{background-image:url(../flags/4x3/ee.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(../flags/1x1/ee.svg)}.flag-icon-eg{background-image:url(../flags/4x3/eg.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(../flags/1x1/eg.svg)}.flag-icon-eh{background-image:url(../flags/4x3/eh.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(../flags/1x1/eh.svg)}.flag-icon-er{background-image:url(../flags/4x3/er.svg)}.flag-icon-er.flag-icon-squared{background-image:url(../flags/1x1/er.svg)}.flag-icon-es{background-image:url(../flags/4x3/es.svg)}.flag-icon-es.flag-icon-squared{background-image:url(../flags/1x1/es.svg)}.flag-icon-et{background-image:url(../flags/4x3/et.svg)}.flag-icon-et.flag-icon-squared{background-image:url(../flags/1x1/et.svg)}.flag-icon-fi{background-image:url(../flags/4x3/fi.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(../flags/1x1/fi.svg)}.flag-icon-fj{background-image:url(../flags/4x3/fj.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(../flags/1x1/fj.svg)}.flag-icon-fk{background-image:url(../flags/4x3/fk.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(../flags/1x1/fk.svg)}.flag-icon-fm{background-image:url(../flags/4x3/fm.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(../flags/1x1/fm.svg)}.flag-icon-fo{background-image:url(../flags/4x3/fo.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(../flags/1x1/fo.svg)}.flag-icon-fr{background-image:url(../flags/4x3/fr.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(../flags/1x1/fr.svg)}.flag-icon-ga{background-image:url(../flags/4x3/ga.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(../flags/1x1/ga.svg)}.flag-icon-gb{background-image:url(../flags/4x3/gb.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(../flags/1x1/gb.svg)}.flag-icon-gd{background-image:url(../flags/4x3/gd.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(../flags/1x1/gd.svg)}.flag-icon-ge{background-image:url(../flags/4x3/ge.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(../flags/1x1/ge.svg)}.flag-icon-gf{background-image:url(../flags/4x3/gf.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(../flags/1x1/gf.svg)}.flag-icon-gg{background-image:url(../flags/4x3/gg.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(../flags/1x1/gg.svg)}.flag-icon-gh{background-image:url(../flags/4x3/gh.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(../flags/1x1/gh.svg)}.flag-icon-gi{background-image:url(../flags/4x3/gi.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(../flags/1x1/gi.svg)}.flag-icon-gl{background-image:url(../flags/4x3/gl.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(../flags/1x1/gl.svg)}.flag-icon-gm{background-image:url(../flags/4x3/gm.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(../flags/1x1/gm.svg)}.flag-icon-gn{background-image:url(../flags/4x3/gn.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(../flags/1x1/gn.svg)}.flag-icon-gp{background-image:url(../flags/4x3/gp.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(../flags/1x1/gp.svg)}.flag-icon-gq{background-image:url(../flags/4x3/gq.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(../flags/1x1/gq.svg)}.flag-icon-gr{background-image:url(../flags/4x3/gr.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(../flags/1x1/gr.svg)}.flag-icon-gs{background-image:url(../flags/4x3/gs.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(../flags/1x1/gs.svg)}.flag-icon-gt{background-image:url(../flags/4x3/gt.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(../flags/1x1/gt.svg)}.flag-icon-gu{background-image:url(../flags/4x3/gu.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(../flags/1x1/gu.svg)}.flag-icon-gw{background-image:url(../flags/4x3/gw.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(../flags/1x1/gw.svg)}.flag-icon-gy{background-image:url(../flags/4x3/gy.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(../flags/1x1/gy.svg)}.flag-icon-hk{background-image:url(../flags/4x3/hk.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(../flags/1x1/hk.svg)}.flag-icon-hm{background-image:url(../flags/4x3/hm.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(../flags/1x1/hm.svg)}.flag-icon-hn{background-image:url(../flags/4x3/hn.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(../flags/1x1/hn.svg)}.flag-icon-hr{background-image:url(../flags/4x3/hr.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(../flags/1x1/hr.svg)}.flag-icon-ht{background-image:url(../flags/4x3/ht.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(../flags/1x1/ht.svg)}.flag-icon-hu{background-image:url(../flags/4x3/hu.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(../flags/1x1/hu.svg)}.flag-icon-id{background-image:url(../flags/4x3/id.svg)}.flag-icon-id.flag-icon-squared{background-image:url(../flags/1x1/id.svg)}.flag-icon-ie{background-image:url(../flags/4x3/ie.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(../flags/1x1/ie.svg)}.flag-icon-il{background-image:url(../flags/4x3/il.svg)}.flag-icon-il.flag-icon-squared{background-image:url(../flags/1x1/il.svg)}.flag-icon-im{background-image:url(../flags/4x3/im.svg)}.flag-icon-im.flag-icon-squared{background-image:url(../flags/1x1/im.svg)}.flag-icon-in{background-image:url(../flags/4x3/in.svg)}.flag-icon-in.flag-icon-squared{background-image:url(../flags/1x1/in.svg)}.flag-icon-io{background-image:url(../flags/4x3/io.svg)}.flag-icon-io.flag-icon-squared{background-image:url(../flags/1x1/io.svg)}.flag-icon-iq{background-image:url(../flags/4x3/iq.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(../flags/1x1/iq.svg)}.flag-icon-ir{background-image:url(../flags/4x3/ir.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(../flags/1x1/ir.svg)}.flag-icon-is{background-image:url(../flags/4x3/is.svg)}.flag-icon-is.flag-icon-squared{background-image:url(../flags/1x1/is.svg)}.flag-icon-it{background-image:url(../flags/4x3/it.svg)}.flag-icon-it.flag-icon-squared{background-image:url(../flags/1x1/it.svg)}.flag-icon-je{background-image:url(../flags/4x3/je.svg)}.flag-icon-je.flag-icon-squared{background-image:url(../flags/1x1/je.svg)}.flag-icon-jm{background-image:url(../flags/4x3/jm.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(../flags/1x1/jm.svg)}.flag-icon-jo{background-image:url(../flags/4x3/jo.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(../flags/1x1/jo.svg)}.flag-icon-jp{background-image:url(../flags/4x3/jp.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(../flags/1x1/jp.svg)}.flag-icon-ke{background-image:url(../flags/4x3/ke.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(../flags/1x1/ke.svg)}.flag-icon-kg{background-image:url(../flags/4x3/kg.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(../flags/1x1/kg.svg)}.flag-icon-kh{background-image:url(../flags/4x3/kh.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(../flags/1x1/kh.svg)}.flag-icon-ki{background-image:url(../flags/4x3/ki.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(../flags/1x1/ki.svg)}.flag-icon-km{background-image:url(../flags/4x3/km.svg)}.flag-icon-km.flag-icon-squared{background-image:url(../flags/1x1/km.svg)}.flag-icon-kn{background-image:url(../flags/4x3/kn.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(../flags/1x1/kn.svg)}.flag-icon-kp{background-image:url(../flags/4x3/kp.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(../flags/1x1/kp.svg)}.flag-icon-kr{background-image:url(../flags/4x3/kr.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(../flags/1x1/kr.svg)}.flag-icon-kw{background-image:url(../flags/4x3/kw.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(../flags/1x1/kw.svg)}.flag-icon-ky{background-image:url(../flags/4x3/ky.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(../flags/1x1/ky.svg)}.flag-icon-kz{background-image:url(../flags/4x3/kz.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(../flags/1x1/kz.svg)}.flag-icon-la{background-image:url(../flags/4x3/la.svg)}.flag-icon-la.flag-icon-squared{background-image:url(../flags/1x1/la.svg)}.flag-icon-lb{background-image:url(../flags/4x3/lb.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(../flags/1x1/lb.svg)}.flag-icon-lc{background-image:url(../flags/4x3/lc.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(../flags/1x1/lc.svg)}.flag-icon-li{background-image:url(../flags/4x3/li.svg)}.flag-icon-li.flag-icon-squared{background-image:url(../flags/1x1/li.svg)}.flag-icon-lk{background-image:url(../flags/4x3/lk.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(../flags/1x1/lk.svg)}.flag-icon-lr{background-image:url(../flags/4x3/lr.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(../flags/1x1/lr.svg)}.flag-icon-ls{background-image:url(../flags/4x3/ls.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(../flags/1x1/ls.svg)}.flag-icon-lt{background-image:url(../flags/4x3/lt.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(../flags/1x1/lt.svg)}.flag-icon-lu{background-image:url(../flags/4x3/lu.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(../flags/1x1/lu.svg)}.flag-icon-lv{background-image:url(../flags/4x3/lv.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(../flags/1x1/lv.svg)}.flag-icon-ly{background-image:url(../flags/4x3/ly.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(../flags/1x1/ly.svg)}.flag-icon-ma{background-image:url(../flags/4x3/ma.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(../flags/1x1/ma.svg)}.flag-icon-mc{background-image:url(../flags/4x3/mc.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(../flags/1x1/mc.svg)}.flag-icon-md{background-image:url(../flags/4x3/md.svg)}.flag-icon-md.flag-icon-squared{background-image:url(../flags/1x1/md.svg)}.flag-icon-me{background-image:url(../flags/4x3/me.svg)}.flag-icon-me.flag-icon-squared{background-image:url(../flags/1x1/me.svg)}.flag-icon-mf{background-image:url(../flags/4x3/mf.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(../flags/1x1/mf.svg)}.flag-icon-mg{background-image:url(../flags/4x3/mg.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(../flags/1x1/mg.svg)}.flag-icon-mh{background-image:url(../flags/4x3/mh.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(../flags/1x1/mh.svg)}.flag-icon-mk{background-image:url(../flags/4x3/mk.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(../flags/1x1/mk.svg)}.flag-icon-ml{background-image:url(../flags/4x3/ml.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(../flags/1x1/ml.svg)}.flag-icon-mm{background-image:url(../flags/4x3/mm.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(../flags/1x1/mm.svg)}.flag-icon-mn{background-image:url(../flags/4x3/mn.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(../flags/1x1/mn.svg)}.flag-icon-mo{background-image:url(../flags/4x3/mo.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(../flags/1x1/mo.svg)}.flag-icon-mp{background-image:url(../flags/4x3/mp.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(../flags/1x1/mp.svg)}.flag-icon-mq{background-image:url(../flags/4x3/mq.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(../flags/1x1/mq.svg)}.flag-icon-mr{background-image:url(../flags/4x3/mr.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(../flags/1x1/mr.svg)}.flag-icon-ms{background-image:url(../flags/4x3/ms.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(../flags/1x1/ms.svg)}.flag-icon-mt{background-image:url(../flags/4x3/mt.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(../flags/1x1/mt.svg)}.flag-icon-mu{background-image:url(../flags/4x3/mu.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(../flags/1x1/mu.svg)}.flag-icon-mv{background-image:url(../flags/4x3/mv.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(../flags/1x1/mv.svg)}.flag-icon-mw{background-image:url(../flags/4x3/mw.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(../flags/1x1/mw.svg)}.flag-icon-mx{background-image:url(../flags/4x3/mx.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(../flags/1x1/mx.svg)}.flag-icon-my{background-image:url(../flags/4x3/my.svg)}.flag-icon-my.flag-icon-squared{background-image:url(../flags/1x1/my.svg)}.flag-icon-mz{background-image:url(../flags/4x3/mz.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(../flags/1x1/mz.svg)}.flag-icon-na{background-image:url(../flags/4x3/na.svg)}.flag-icon-na.flag-icon-squared{background-image:url(../flags/1x1/na.svg)}.flag-icon-nc{background-image:url(../flags/4x3/nc.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(../flags/1x1/nc.svg)}.flag-icon-ne{background-image:url(../flags/4x3/ne.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(../flags/1x1/ne.svg)}.flag-icon-nf{background-image:url(../flags/4x3/nf.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(../flags/1x1/nf.svg)}.flag-icon-ng{background-image:url(../flags/4x3/ng.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(../flags/1x1/ng.svg)}.flag-icon-ni{background-image:url(../flags/4x3/ni.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(../flags/1x1/ni.svg)}.flag-icon-nl{background-image:url(../flags/4x3/nl.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(../flags/1x1/nl.svg)}.flag-icon-no{background-image:url(../flags/4x3/no.svg)}.flag-icon-no.flag-icon-squared{background-image:url(../flags/1x1/no.svg)}.flag-icon-np{background-image:url(../flags/4x3/np.svg)}.flag-icon-np.flag-icon-squared{background-image:url(../flags/1x1/np.svg)}.flag-icon-nr{background-image:url(../flags/4x3/nr.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(../flags/1x1/nr.svg)}.flag-icon-nu{background-image:url(../flags/4x3/nu.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(../flags/1x1/nu.svg)}.flag-icon-nz{background-image:url(../flags/4x3/nz.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(../flags/1x1/nz.svg)}.flag-icon-om{background-image:url(../flags/4x3/om.svg)}.flag-icon-om.flag-icon-squared{background-image:url(../flags/1x1/om.svg)}.flag-icon-pa{background-image:url(../flags/4x3/pa.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(../flags/1x1/pa.svg)}.flag-icon-pe{background-image:url(../flags/4x3/pe.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(../flags/1x1/pe.svg)}.flag-icon-pf{background-image:url(../flags/4x3/pf.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(../flags/1x1/pf.svg)}.flag-icon-pg{background-image:url(../flags/4x3/pg.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(../flags/1x1/pg.svg)}.flag-icon-ph{background-image:url(../flags/4x3/ph.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(../flags/1x1/ph.svg)}.flag-icon-pk{background-image:url(../flags/4x3/pk.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(../flags/1x1/pk.svg)}.flag-icon-pl{background-image:url(../flags/4x3/pl.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(../flags/1x1/pl.svg)}.flag-icon-pm{background-image:url(../flags/4x3/pm.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(../flags/1x1/pm.svg)}.flag-icon-pn{background-image:url(../flags/4x3/pn.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(../flags/1x1/pn.svg)}.flag-icon-pr{background-image:url(../flags/4x3/pr.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(../flags/1x1/pr.svg)}.flag-icon-ps{background-image:url(../flags/4x3/ps.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(../flags/1x1/ps.svg)}.flag-icon-pt{background-image:url(../flags/4x3/pt.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(../flags/1x1/pt.svg)}.flag-icon-pw{background-image:url(../flags/4x3/pw.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(../flags/1x1/pw.svg)}.flag-icon-py{background-image:url(../flags/4x3/py.svg)}.flag-icon-py.flag-icon-squared{background-image:url(../flags/1x1/py.svg)}.flag-icon-qa{background-image:url(../flags/4x3/qa.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(../flags/1x1/qa.svg)}.flag-icon-re{background-image:url(../flags/4x3/re.svg)}.flag-icon-re.flag-icon-squared{background-image:url(../flags/1x1/re.svg)}.flag-icon-ro{background-image:url(../flags/4x3/ro.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(../flags/1x1/ro.svg)}.flag-icon-rs{background-image:url(../flags/4x3/rs.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(../flags/1x1/rs.svg)}.flag-icon-ru{background-image:url(../flags/4x3/ru.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(../flags/1x1/ru.svg)}.flag-icon-rw{background-image:url(../flags/4x3/rw.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(../flags/1x1/rw.svg)}.flag-icon-sa{background-image:url(../flags/4x3/sa.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(../flags/1x1/sa.svg)}.flag-icon-sb{background-image:url(../flags/4x3/sb.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(../flags/1x1/sb.svg)}.flag-icon-sc{background-image:url(../flags/4x3/sc.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(../flags/1x1/sc.svg)}.flag-icon-sd{background-image:url(../flags/4x3/sd.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(../flags/1x1/sd.svg)}.flag-icon-se{background-image:url(../flags/4x3/se.svg)}.flag-icon-se.flag-icon-squared{background-image:url(../flags/1x1/se.svg)}.flag-icon-sg{background-image:url(../flags/4x3/sg.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(../flags/1x1/sg.svg)}.flag-icon-sh{background-image:url(../flags/4x3/sh.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(../flags/1x1/sh.svg)}.flag-icon-si{background-image:url(../flags/4x3/si.svg)}.flag-icon-si.flag-icon-squared{background-image:url(../flags/1x1/si.svg)}.flag-icon-sj{background-image:url(../flags/4x3/sj.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(../flags/1x1/sj.svg)}.flag-icon-sk{background-image:url(../flags/4x3/sk.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(../flags/1x1/sk.svg)}.flag-icon-sl{background-image:url(../flags/4x3/sl.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(../flags/1x1/sl.svg)}.flag-icon-sm{background-image:url(../flags/4x3/sm.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(../flags/1x1/sm.svg)}.flag-icon-sn{background-image:url(../flags/4x3/sn.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(../flags/1x1/sn.svg)}.flag-icon-so{background-image:url(../flags/4x3/so.svg)}.flag-icon-so.flag-icon-squared{background-image:url(../flags/1x1/so.svg)}.flag-icon-sr{background-image:url(../flags/4x3/sr.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(../flags/1x1/sr.svg)}.flag-icon-ss{background-image:url(../flags/4x3/ss.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(../flags/1x1/ss.svg)}.flag-icon-st{background-image:url(../flags/4x3/st.svg)}.flag-icon-st.flag-icon-squared{background-image:url(../flags/1x1/st.svg)}.flag-icon-sv{background-image:url(../flags/4x3/sv.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(../flags/1x1/sv.svg)}.flag-icon-sx{background-image:url(../flags/4x3/sx.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(../flags/1x1/sx.svg)}.flag-icon-sy{background-image:url(../flags/4x3/sy.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(../flags/1x1/sy.svg)}.flag-icon-sz{background-image:url(../flags/4x3/sz.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(../flags/1x1/sz.svg)}.flag-icon-tc{background-image:url(../flags/4x3/tc.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(../flags/1x1/tc.svg)}.flag-icon-td{background-image:url(../flags/4x3/td.svg)}.flag-icon-td.flag-icon-squared{background-image:url(../flags/1x1/td.svg)}.flag-icon-tf{background-image:url(../flags/4x3/tf.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(../flags/1x1/tf.svg)}.flag-icon-tg{background-image:url(../flags/4x3/tg.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(../flags/1x1/tg.svg)}.flag-icon-th{background-image:url(../flags/4x3/th.svg)}.flag-icon-th.flag-icon-squared{background-image:url(../flags/1x1/th.svg)}.flag-icon-tj{background-image:url(../flags/4x3/tj.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(../flags/1x1/tj.svg)}.flag-icon-tk{background-image:url(../flags/4x3/tk.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(../flags/1x1/tk.svg)}.flag-icon-tl{background-image:url(../flags/4x3/tl.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(../flags/1x1/tl.svg)}.flag-icon-tm{background-image:url(../flags/4x3/tm.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(../flags/1x1/tm.svg)}.flag-icon-tn{background-image:url(../flags/4x3/tn.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(../flags/1x1/tn.svg)}.flag-icon-to{background-image:url(../flags/4x3/to.svg)}.flag-icon-to.flag-icon-squared{background-image:url(../flags/1x1/to.svg)}.flag-icon-tr{background-image:url(../flags/4x3/tr.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(../flags/1x1/tr.svg)}.flag-icon-tt{background-image:url(../flags/4x3/tt.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(../flags/1x1/tt.svg)}.flag-icon-tv{background-image:url(../flags/4x3/tv.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(../flags/1x1/tv.svg)}.flag-icon-tw{background-image:url(../flags/4x3/tw.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(../flags/1x1/tw.svg)}.flag-icon-tz{background-image:url(../flags/4x3/tz.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(../flags/1x1/tz.svg)}.flag-icon-ua{background-image:url(../flags/4x3/ua.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(../flags/1x1/ua.svg)}.flag-icon-ug{background-image:url(../flags/4x3/ug.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(../flags/1x1/ug.svg)}.flag-icon-um{background-image:url(../flags/4x3/um.svg)}.flag-icon-um.flag-icon-squared{background-image:url(../flags/1x1/um.svg)}.flag-icon-us{background-image:url(../flags/4x3/us.svg)}.flag-icon-us.flag-icon-squared{background-image:url(../flags/1x1/us.svg)}.flag-icon-uy{background-image:url(../flags/4x3/uy.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(../flags/1x1/uy.svg)}.flag-icon-uz{background-image:url(../flags/4x3/uz.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(../flags/1x1/uz.svg)}.flag-icon-va{background-image:url(../flags/4x3/va.svg)}.flag-icon-va.flag-icon-squared{background-image:url(../flags/1x1/va.svg)}.flag-icon-vc{background-image:url(../flags/4x3/vc.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(../flags/1x1/vc.svg)}.flag-icon-ve{background-image:url(../flags/4x3/ve.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(../flags/1x1/ve.svg)}.flag-icon-vg{background-image:url(../flags/4x3/vg.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(../flags/1x1/vg.svg)}.flag-icon-vi{background-image:url(../flags/4x3/vi.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(../flags/1x1/vi.svg)}.flag-icon-vn{background-image:url(../flags/4x3/vn.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(../flags/1x1/vn.svg)}.flag-icon-vu{background-image:url(../flags/4x3/vu.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(../flags/1x1/vu.svg)}.flag-icon-wf{background-image:url(../flags/4x3/wf.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(../flags/1x1/wf.svg)}.flag-icon-ws{background-image:url(../flags/4x3/ws.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(../flags/1x1/ws.svg)}.flag-icon-ye{background-image:url(../flags/4x3/ye.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(../flags/1x1/ye.svg)}.flag-icon-yt{background-image:url(../flags/4x3/yt.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(../flags/1x1/yt.svg)}.flag-icon-za{background-image:url(../flags/4x3/za.svg)}.flag-icon-za.flag-icon-squared{background-image:url(../flags/1x1/za.svg)}.flag-icon-zm{background-image:url(../flags/4x3/zm.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(../flags/1x1/zm.svg)}.flag-icon-zw{background-image:url(../flags/4x3/zw.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(../flags/1x1/zw.svg)}
+\ No newline at end of file
++.flag-icon,.flag-icon-background{background-repeat:no-repeat;background-size:contain;background-position:50%}.flag-icon{position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:"\00a0"}.flag-icon-cn{background-image:url(../flags/4x3/cn.svg)}.flag-icon-de{background-image:url(../flags/4x3/de.svg)}.flag-icon-es{background-image:url(../flags/4x3/es.svg)}.flag-icon-fr{background-image:url(../flags/4x3/fr.svg)}.flag-icon-it{background-image:url(../flags/4x3/it.svg)}.flag-icon-nl{background-image:url(../flags/4x3/nl.svg)}.flag-icon-pl{background-image:url(../flags/4x3/pl.svg)}.flag-icon-ru{background-image:url(../flags/4x3/ru.svg)}.flag-icon-th{background-image:url(../flags/4x3/th.svg)}.flag-icon-tr{background-image:url(../flags/4x3/tr.svg)}.flag-icon-tw{background-image:url(../flags/4x3/tw.svg)}.flag-icon-us{background-image:url(../flags/4x3/us.svg)}
+\ No newline at end of file
index d50d4107f83afd146aebb7f2a64d0a4f6298a063..7802d7e71622d126a40d963cc0797b95d872c8c3 100644 (file)
@@ -11,12 +11,12 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=wireguard
 
-PKG_VERSION:=0.0.20170214
-PKG_RELEASE:=1
+PKG_VERSION:=0.0.20170223
+PKG_RELEASE:=2
 
 PKG_SOURCE:=WireGuard-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://git.zx2c4.com/WireGuard/snapshot/
-PKG_HASH:=1e4ee213d2a5ac672c952c59e9c64d6d7d5dc3e21c003aee30d75208237e8bf5
+PKG_HASH:=6d2c8cd29c4f9fb404546a4749ec050739a26b4a49b5864f1dec531377c3c50d
 
 PKG_LICENSE:=GPL-2.0
 PKG_LICENSE_FILES:=COPYING
@@ -33,6 +33,7 @@ include $(INCLUDE_DIR)/package.mk
 define Package/wireguard/Default
   SECTION:=net
   CATEGORY:=Network
+  SUBMENU:=VPN
   URL:=https://www.wireguard.io
   MAINTAINER:=Baptiste Jonglez <openwrt@bitsofnetworks.org>, \
               Dan Luedtke <mail@danrl.com>, \
@@ -66,6 +67,10 @@ define Build/Compile
        $(call Build/Compile/Default)
 endef
 
+define Package/wireguard/install
+  true
+endef
+
 define Package/wireguard/description
   $(call Package/wireguard/Default/description)
 endef
index 2eb30242a664128a595c0b3d9bf5b7308715ce9e..638ddd922199c68727df3f6f86ac3c8864d842e1 100644 (file)
@@ -22,6 +22,7 @@ proto_wireguard_init_config() {
   proto_config_add_int    "listen_port"
   proto_config_add_int    "mtu"
   proto_config_add_string "preshared_key"
+  proto_config_add_string "fwmark"
   available=1
   no_proto_task=1
 }
@@ -103,6 +104,7 @@ proto_wireguard_setup() {
   config_get addresses     "${config}" "addresses"
   config_get mtu           "${config}" "mtu"
   config_get preshared_key "${config}" "preshared_key"
+  config_get fwmark        "${config}" "fwmark"
 
   # create interface
   ip link del dev "${config}" 2>/dev/null
@@ -125,6 +127,9 @@ proto_wireguard_setup() {
   if [ "${preshared_key}" ]; then
     echo "PresharedKey=${preshared_key}" >> "${wg_cfg}"
   fi
+  if [ "${fwmark}" ]; then
+    echo "FwMark=${fwmark}" >> "${wg_cfg}"
+  fi
   config_foreach proto_wireguard_setup_peer "wireguard_${config}"
 
   # apply configuration file
index c1586b725b0c1dcb83a2f83d23cd97bb55c5af3b..4c85fc3726bb1b4d02d74c6174a8a70e4570817d 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=xinetd
 PKG_VERSION:=2.3.15
-PKG_RELEASE:=4
+PKG_RELEASE:=5
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.xinetd.org
@@ -39,6 +39,7 @@ endef
 
 define Package/xinetd/conffiles
 /etc/xinetd.conf
+/etc/xinetd.d/
 endef
 
 TARGET_CFLAGS += -DNO_RPC
index 224867670b6173261e7c6157abbcfa11e9cc9f9f..e5e625e88993d0c41e2cc213243f267513db027f 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=collectd
 PKG_VERSION:=5.7.1
-PKG_RELEASE:=2
+PKG_RELEASE:=4
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=https://collectd.org/files/ \
@@ -32,7 +32,6 @@ COLLECTD_PLUGINS_DISABLED:= \
        battery \
        ceph \
        cgroups \
-       chrony \
        cpusleep \
        curl_json \
        curl_xml \
@@ -56,6 +55,7 @@ COLLECTD_PLUGINS_DISABLED:= \
        lua \
        lvm \
        lpar \
+       madwifi \
        mbmon \
        md \
        memcachec \
@@ -111,6 +111,7 @@ COLLECTD_PLUGINS_SELECTED:= \
        apcups \
        ascent \
        bind \
+       chrony \
        conntrack \
        contextswitch \
        cpu \
@@ -131,7 +132,11 @@ COLLECTD_PLUGINS_SELECTED:= \
        iwinfo \
        load \
        logfile \
-       madwifi \
+       match_empty_counter \
+       match_hashed \
+       match_regex \
+       match_timediff \
+       match_value \
        memory \
        modbus \
        mysql \
@@ -310,6 +315,7 @@ $(eval $(call BuildPlugin,apache,apache status input,apache,+PACKAGE_collectd-mo
 $(eval $(call BuildPlugin,apcups,apcups status input,apcups,))
 $(eval $(call BuildPlugin,ascent,ascent status input,ascent,+PACKAGE_collectd-mod-ascent:libcurl +PACKAGE_collectd-mod-ascent:libxml2))
 $(eval $(call BuildPlugin,bind,BIND server/zone input,bind,+PACKAGE_collectd-mod-bind:libcurl +PACKAGE_collectd-mod-bind:libxml2))
+$(eval $(call BuildPlugin,chrony,chrony status input,chrony,))
 $(eval $(call BuildPlugin,conntrack,connection tracking table size input,conntrack,))
 $(eval $(call BuildPlugin,contextswitch,context switch input,contextswitch,))
 $(eval $(call BuildPlugin,cpu,CPU input,cpu,))
@@ -331,7 +337,11 @@ $(eval $(call BuildPlugin,irq,interrupt usage input,irq,))
 $(eval $(call BuildPlugin,iwinfo,libiwinfo wireless statistics,iwinfo,+PACKAGE_collectd-mod-iwinfo:libiwinfo))
 $(eval $(call BuildPlugin,load,system load input,load,))
 $(eval $(call BuildPlugin,logfile,log files output,logfile,))
-$(eval $(call BuildPlugin,madwifi,MadWifi status input,madwifi,))
+$(eval $(call BuildPlugin,match-empty-counter,empty-counter match,match_empty_counter,))
+$(eval $(call BuildPlugin,match-hashed,hashed match,match_hashed,))
+$(eval $(call BuildPlugin,match-regex,regex match,match_regex,))
+$(eval $(call BuildPlugin,match-timediff,timediff match,match_timediff,))
+$(eval $(call BuildPlugin,match-value,value match,match_value,))
 #$(eval $(call BuildPlugin,mysql,MySQL status input,mysql,+PACKAGE_collectd-mod-mysql:libmysqlclient-r))
 $(eval $(call BuildPlugin,memory,physical memory usage input,memory,))
 $(eval $(call BuildPlugin,modbus,read variables through libmodbus,modbus,+PACKAGE_collectd-mod-modbus:libmodbus))
index 4f187c84c648a38f7ef46f8e02f2186759529d17..45839015cc6df01b939562cfd2ac8af8ee51aa00 100644 (file)
@@ -10,12 +10,15 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=cryptodev-linux
-PKG_VERSION:=1.8
-PKG_RELEASE:=2
+PKG_VERSION:=1.8.git-2017-02-09
+PKG_RELEASE:=1
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://download.gna.org/cryptodev-linux/
-PKG_MD5SUM:=02644cc4cd02301e0b503a332eb2f0b5
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
+PKG_MIRROR_HASH:=627ce96e3ba66ca9c8e14f5d80193061fbe9d45cd8d4b69a1bf4dd5a2d50eed8
+PKG_SOURCE_URL:=https://github.com/cryptodev-linux/cryptodev-linux.git
+PKG_SOURCE_VERSION:=6818263667ca488f9b1c86e36ea624c4ea1c309f
 
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
 
diff --git a/utils/domoticz/Makefile b/utils/domoticz/Makefile
new file mode 100644 (file)
index 0000000..4a350db
--- /dev/null
@@ -0,0 +1,100 @@
+#
+# Copyright (C) 2016 - 2017  Stijn Tintel <stijn@linux-ipv6.be>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=domoticz
+PKG_VERSION_MAJOR:=3
+PKG_VERSION_PATCH:=5877
+PKG_VERSION:=$(PKG_VERSION_MAJOR).$(PKG_VERSION_PATCH)
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://github.com/domoticz/domoticz/archive/$(PKG_VERSION)/$(PKG_SOURCE)
+PKG_HASH:=fb88edbe428851a7a337a85faa93f6da00713b3ad086ff6957031dc9b3b58bba
+
+PKG_LICENSE:=GPL-3.0
+PKG_LICENSE_FILES:=License.txt
+
+PKG_BUILD_PARALLEL:=1
+PKG_USE_MIPS16:=0
+
+CMAKE_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/domoticz
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=Open Source Home Automation System
+  URL:=http://domoticz.com/
+  MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
+  USERID:=domoticz=6144:domoticz=6144
+  DEPENDS:= \
+       +boost \
+       +boost-date_time \
+       +boost-system \
+       +boost-thread \
+       +libcurl \
+       +libmosquittopp \
+       +libopenssl \
+       +libopenzwave \
+       +libsqlite3 \
+       +libstdcpp \
+       +zlib
+endef
+
+define Package/domoticz/description
+  Domoticz is a Home Automation System that lets you monitor and configure various devices like: Lights, Switches, various sensors/meters like Temperature, Rain, Wind, UV, Electra, Gas, Water and much more. Notifications/Alerts can be sent to any mobile device.
+endef
+
+CMAKE_OPTIONS += \
+       -DCMAKE_BUILD_TYPE=Release \
+       -DUSE_BUILTIN_MQTT=no \
+       -DUSE_BUILTIN_SQLITE=no \
+       -DUSE_STATIC_BOOST=no \
+       -DUSE_STATIC_LIBSTDCXX=no \
+       -DUSE_STATIC_OPENZWAVE=no \
+       -DUSE_PYTHON=no
+
+define Build/Prepare
+       $(call Build/Prepare/Default)
+       # Fix APPVERSION to suppress update popup
+       sed -i 's/#define APPVERSION.*/#define APPVERSION $(PKG_VERSION_PATCH)/' \
+                $(PKG_BUILD_DIR)/appversion.default
+       # Remove unwanted scripts
+       cd $(PKG_BUILD_DIR)/scripts && rm -rf \
+               buienradar_rain_example.pl \
+               _domoticz_main.bat \
+               download_update.sh \
+               logrotate/ \
+               python/ \
+               readme.txt \
+               restart_domoticz \
+               templates/All.Python \
+               update_domoticz
+endef
+
+define Package/domoticz/install
+       $(INSTALL_DIR) $(1)/etc/config $(1)/etc/hotplug.d/tty $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/domoticz.hotplug $(1)/etc/hotplug.d/tty/domoticz
+       $(INSTALL_BIN) ./files/domoticz.init $(1)/etc/init.d/domoticz
+       $(INSTALL_CONF) ./files/domoticz.config $(1)/etc/config/domoticz
+       $(INSTALL_DIR) $(1)/usr/share/domoticz $(1)/usr/bin
+       $(CP) $(PKG_INSTALL_DIR)/usr/Config $(1)/usr/share/domoticz/openzwave
+       $(CP) $(PKG_INSTALL_DIR)/usr/scripts $(1)/usr/share/domoticz/
+       $(CP) $(PKG_INSTALL_DIR)/usr/www $(1)/usr/share/domoticz/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/domoticz $(1)/usr/bin/domoticz
+endef
+
+define Package/domoticz/conffiles
+/etc/config/domoticz
+/var/lib/domoticz/
+endef
+
+$(eval $(call BuildPackage,domoticz))
diff --git a/utils/domoticz/files/domoticz.config b/utils/domoticz/files/domoticz.config
new file mode 100644 (file)
index 0000000..b300f3f
--- /dev/null
@@ -0,0 +1,28 @@
+config domoticz
+       option disabled '1'
+       option loglevel '1'
+       option syslog 'daemon'
+       # option sslcert '/path/to/ssl.crt'
+       # option sslkey '/path/to/ssl.key'
+       # option sslpass 'passphrase'
+       option sslwww '0'
+       # CAUTION - by default, /var is not persistent accross reboots
+       # Don't forget the trailing / - domoticz requires it
+       option userdata '/var/lib/domoticz/'
+
+#config device
+#      option product '658/200/0'
+#      option symlink 'ttyACM-aeotec-zstick-g5'
+
+#config device
+#      option serial '526359'
+#      option symlink 'ttyUSB-serial'
+
+#config device
+#      option usbif '2-1:1.0'
+#      option symlink 'ttyUSB-port1'
+
+#config device
+#      option product '67b/2303/202'
+#      option usbif '2-2:1.0'
+#      option symlink 'ttyUSB-port2'
diff --git a/utils/domoticz/files/domoticz.hotplug b/utils/domoticz/files/domoticz.hotplug
new file mode 100644 (file)
index 0000000..7138175
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+[ "$SUBSYSTEM" = "tty" ] || exit 0
+
+add() {
+       local cfg="$1"
+       local product serial symlink usbif
+
+       [ -c "/dev/$DEVICENAME" ] || return
+
+       config_get product "$cfg" product
+       config_get serial "$cfg" serial
+       config_get symlink "$cfg" symlink
+       config_get usbif "$cfg" usbif
+
+       [ -z "$product" -a -z "$serial" -a -z "$usbif" ] && return
+
+       . "/sys/$DEVPATH/device/../uevent"
+       SERIAL="$(cat /sys/$DEVPATH/device/../../serial)" 2>/dev/null
+       USBIF="$(echo $DEVPATH | awk -F/ 'BEGIN {i=3}; /ACM/ {i=2}; END {print $(NF-i)}')"
+
+       [ -n "$product" -a "$product" != "$PRODUCT" ] && return
+       [ -n "$serial" -a "$serial" != "$SERIAL" ] && return
+       [ -n "$usbif" -a "$usbif" != "$USBIF" ] && return
+
+       chgrp domoticz "/dev/$DEVICENAME"
+       chmod g+rw "/dev/$DEVICENAME"
+
+       [ -n "$symlink" ] && ln -s "/dev/$DEVICENAME" "/dev/$symlink"
+}
+
+remove() {
+       local cfg="$1"
+       local symlink
+
+       config_get symlink "$cfg" symlink
+
+       [ "/dev/$DEVICENAME" = "$(readlink /dev/$symlink)" ] && rm "/dev/$symlink"
+}
+
+config_load "domoticz"
+config_foreach "$ACTION" device
diff --git a/utils/domoticz/files/domoticz.init b/utils/domoticz/files/domoticz.init
new file mode 100644 (file)
index 0000000..cbee77b
--- /dev/null
@@ -0,0 +1,54 @@
+#!/bin/sh /etc/rc.common
+
+START=99
+USE_PROCD=1
+PROG=/usr/bin/domoticz
+PIDFILE=/var/run/domoticz.pid
+
+start_domoticz() {
+       local section="$1"
+       local loglevel sslcert sslpass sslwww syslog userdata
+
+       config_get loglevel "$section" "loglevel"
+       config_get sslcert "$section" "sslcert"
+       config_get sslkey "$section" "sslkey"
+       config_get sslpass "$section" "sslpass"
+       config_get sslwww "$section" "sslwww"
+       config_get syslog "$section" "syslog"
+       config_get userdata "$section" "userdata"
+
+       [ -n "$loglevel" ] && procd_append_param command -loglevel "$loglevel"
+       [ -n "$syslog" ] && procd_append_param command -syslog "$syslog"
+       [ -n "$userdata" ] && procd_append_param command -userdata "$userdata"
+       [ -n "$sslcert" -a "${sslwww:-0}" -gt 0 ] && {
+               procd_append_param command -sslcert "$sslcert"
+               procd_append_param command -sslwww "$sslwww"
+               [ -n "$sslkey" ] && procd_append_param command -sslkey "$sslkey"
+               [ -n "$sslpass" ] && procd_append_param command -sslpass "$sslpass"
+       } || procd_append_param command -sslwww 0
+}
+
+start_service() {
+       mkdir -p /var/lib/domoticz
+       chmod 0770 /var/lib/domoticz
+       chown domoticz:domoticz /var/lib/domoticz
+
+       procd_open_instance
+
+       procd_set_param command "$PROG"
+       procd_append_param command -scripts /usr/share/domoticz/scripts/
+       procd_append_param command -wwwroot /usr/share/domoticz/www/
+
+       config_load "domoticz"
+       config_get_bool disabled "$section" "disabled" 0
+       [ "$disabled" -gt 0 ] && return 1
+       config_foreach start_domoticz domoticz
+
+       procd_set_param pidfile "$PIDFILE"
+       procd_set_param respawn
+       procd_set_param stdout 0
+       procd_set_param term_timeout 10
+       procd_set_param user "domoticz"
+
+       procd_close_instance
+}
diff --git a/utils/domoticz/patches/001-Add-sslkey-option-to-allow-separate-cert-key-files-1.patch b/utils/domoticz/patches/001-Add-sslkey-option-to-allow-separate-cert-key-files-1.patch
new file mode 100644 (file)
index 0000000..3e73465
--- /dev/null
@@ -0,0 +1,48 @@
+From 2504f02de752aceb5a3c1d4749032147efde8082 Mon Sep 17 00:00:00 2001
+From: dwmw2 <dwmw2@infradead.org>
+Date: Fri, 3 Feb 2017 07:40:35 +0000
+Subject: [PATCH] Add -sslkey option to allow separate cert/key files (#1195)
+
+---
+ main/domoticz.cpp             | 11 +++++++++++
+ webserver/server_settings.hpp |  2 +-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+--- a/main/domoticz.cpp
++++ b/main/domoticz.cpp
+@@ -76,6 +76,7 @@ const char *szHelp=
+ #ifdef WWW_ENABLE_SSL
+       "\t-sslwww port (for example -sslwww 443, or -sslwww 0 to disable https)\n"
+       "\t-sslcert file_path (for example /opt/domoticz/server_cert.pem)\n"
++      "\t-sslkey file_path (if different from certificate file)\n"
+       "\t-sslpass passphrase (to access to server private key in certificate)\n"
+       "\t-sslmethod method (for SSL method)\n"
+       "\t-ssloptions options (for SSL options, default is 'default_workarounds,no_sslv2,single_dh_use')\n"
+@@ -682,6 +683,16 @@ int main(int argc, char**argv)
+                       return 1;
+               }
+               secure_webserver_settings.cert_file_path = cmdLine.GetSafeArgument("-sslcert", 0, "");
++              secure_webserver_settings.private_key_file_path = secure_webserver_settings.cert_file_path;
++      }
++      if (cmdLine.HasSwitch("-sslkey"))
++      {
++              if (cmdLine.GetArgumentCount("-sslkey") != 1)
++              {
++                      _log.Log(LOG_ERROR, "Please specify a file path for your server SSL key file");
++                      return 1;
++              }
++              secure_webserver_settings.private_key_file_path = cmdLine.GetSafeArgument("-sslkey", 0, "");
+       }
+       if (cmdLine.HasSwitch("-sslpass"))
+       {
+--- a/webserver/server_settings.hpp
++++ b/webserver/server_settings.hpp
+@@ -227,7 +227,7 @@ public:
+                       // use certificate file for all usage by default
+                       certificate_chain_file_path = ssl_settings.cert_file_path;
+                       ca_cert_file_path = ssl_settings.cert_file_path;
+-                      private_key_file_path = ssl_settings.cert_file_path;
++                      private_key_file_path = ssl_settings.private_key_file_path;
+                       tmp_dh_file_path = ssl_settings.cert_file_path;
+                       verify_file_path = ssl_settings.cert_file_path;
+               }
diff --git a/utils/domoticz/patches/002-Evohome-updates-to-6708.patch b/utils/domoticz/patches/002-Evohome-updates-to-6708.patch
new file mode 100644 (file)
index 0000000..bf8d6ae
--- /dev/null
@@ -0,0 +1,68 @@
+diff --git a/hardware/evohome.cpp b/hardware/evohome.cpp
+index fcbee6d..f77291e 100644
+--- a/hardware/evohome.cpp
++++ b/hardware/evohome.cpp
+@@ -423,11 +423,11 @@ void CEvohome::RunScript(const char *pdata, const unsigned char length)
+                       boost::replace_all(OnAction, "{state}", s_strid.str());
+                       boost::replace_all(OnAction, "{until}", CEvohomeDateTime::GetISODate(tsen->EVOHOME2));
+                       //Execute possible script
+-                      std::string scriptname;
+-                      if (OnAction.find("script:///") != std::string::npos)
+-                              scriptname = OnAction.substr(9);
+-                      else
+-                              scriptname = OnAction.substr(8);
++                      std::string scriptname = OnAction.substr(9);
++#if !defined WIN32
++                      if (scriptname.find("/") != 0)
++                              scriptname = szUserDataFolder + "scripts/" + scriptname;
++#endif
+                       std::string scriptparams="";
+                       //Add parameters
+                       int pindex=scriptname.find(' ');
+@@ -439,7 +439,7 @@ void CEvohome::RunScript(const char *pdata, const unsigned char length)
+                       
+                       if (file_exist(scriptname.c_str()))
+                       {
+-                              m_sql.AddTaskItem(_tTaskItem::ExecuteScript(1,scriptname,scriptparams));
++                              m_sql.AddTaskItem(_tTaskItem::ExecuteScript(0.2f,scriptname,scriptparams));
+                       }
+                       else
+                               _log.Log(LOG_ERROR,"evohome: Error script not found '%s'",scriptname.c_str());
+@@ -1321,7 +1321,7 @@ bool CEvohome::DecodeZoneName(CEvohomeMsg &msg)
+       }
+       if(memcmp(&msg.payload[2],m_szNameErr,18)==0)
+       {
+-              Log(true,LOG_STATUS,"evohome: %s: Warning zone name not set: %d", tag, msg.payload[0]);
++              Log(true,LOG_STATUS,"evohome: %s: Warning zone name not set: %d", tag, msg.payload[0]+1);
+               m_bStartup[0]=false;
+               return true;
+       }
+@@ -1606,9 +1606,11 @@ bool CEvohome::DecodeBatteryInfo(CEvohomeMsg &msg)
+       RFX_SETID3(msg.GetID(0),tsen.EVOHOME2.id1,tsen.EVOHOME2.id2,tsen.EVOHOME2.id3)
+       tsen.EVOHOME2.updatetype = updBattery;
+       
+-      double dbCharge=0;
+-      if(nBattery!=0xFF)
+-              dbCharge=(double)nBattery/2.0; //Presumed to be the charge level where sent
++      if (nBattery == 0xFF)
++              nBattery = 100; // recode full battery (0xFF) to 100 for consistency across device types
++      else
++              nBattery = nBattery / 2;  // recode battery level values to 0-100 from original 0-200 values
++
+       if(nLowBat==0)
+               nBattery=0;
+       tsen.EVOHOME2.battery_level=nBattery;
+@@ -1657,9 +1659,11 @@ bool CEvohome::DecodeBatteryInfo(CEvohomeMsg &msg)
+               tsen.EVOHOME2.type=pTypeEvohomeWater;
+               tsen.EVOHOME2.subtype=sTypeEvohomeWater;
+               tsen.EVOHOME2.zone=nDevNo;
+-              sDecodeRXMessage(this, (const unsigned char *)&tsen.EVOHOME2, NULL, nBattery);
++              RFX_SETID3(GetControllerID(), tsen.EVOHOME2.id1, tsen.EVOHOME2.id2, tsen.EVOHOME2.id3); 
++              sDecodeRXMessage(this, (const unsigned char *)&tsen.EVOHOME2, "DHW Temp", nBattery);  // Update DHW Zone sensor
+       }
+-      Log(true,LOG_STATUS,"evohome: %s: %s=%d charge=%d (%.1f %%) level=%d (%s)",tag,szType.c_str(),nDevNo,nBattery,dbCharge,nLowBat,(nLowBat==0)?"Low":"OK");
++      
++      Log(true,LOG_STATUS,"evohome: %s: %s=%d charge=%d(%%) level=%d (%s)",tag,szType.c_str(),nDevNo,nBattery,nLowBat,(nLowBat==0)?"Low":"OK");
+       
+       return true;
+ }
diff --git a/utils/domoticz/patches/900_fix-build.patch b/utils/domoticz/patches/900_fix-build.patch
new file mode 100644 (file)
index 0000000..58e3bbb
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -606,8 +606,6 @@ else()
+   target_link_libraries(domoticz -lrt ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${CURL_LIBRARIES} pthread ${LUA_LIBRARIES} ${MQTT_LIBRARIES} ${SQLite_LIBRARIES} ${CMAKE_DL_LIBS} ${TELLDUS_LIBRARIES} ${EXECINFO_LIBRARIES})
+ ENDIF()
+-ADD_PRECOMPILED_HEADER(domoticz "main/stdafx.h")
+-
+ IF(CMAKE_COMPILER_IS_GNUCXX)
+   option(USE_STATIC_LIBSTDCXX "Build with static libgcc/libstdc++ libraries" YES)
+   IF(USE_STATIC_LIBSTDCXX)
diff --git a/utils/domoticz/patches/901_no-udev.patch b/utils/domoticz/patches/901_no-udev.patch
new file mode 100644 (file)
index 0000000..7ac6b78
--- /dev/null
@@ -0,0 +1,42 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -534,39 +534,6 @@ IF(OpenZWave)
+   target_link_libraries(domoticz ${OpenZWave})
+   include_directories(${CMAKE_SOURCE_DIR}/hardware/openzwave)
+   add_definitions(-DWITH_OPENZWAVE)
+-  # open-zwave needs libudev
+-  IF(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+-    set(IOKIT_LIBRARY "-framework IOKit -framework CoreFoundation" CACHE FILEPATH "IOKit framework" FORCE)
+-    target_link_libraries(domoticz ${IOKIT_LIBRARY})
+-  else()
+-    IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+-      MESSAGE(STATUS "Building on FreeBSD, libudev not needed!")
+-      FIND_PATH(ICONV_INCLUDE_DIR iconv.h)
+-      FIND_LIBRARY(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c)
+-      IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
+-        SET(ICONV_FOUND TRUE)
+-        #target_link_libraries(domoticz ${ICONV_INCLUDE_DIR})
+-        target_link_libraries(domoticz ${ICONV_LIBRARIES} -lrt)
+-        message(STATUS ${ICONV_LIBRARIES})
+-      else()
+-        MESSAGE(FATAL_ERROR "libiconv not found on your system")
+-      ENDIF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
+-    else()
+-      find_library(UDEV NAMES libudev.a)
+-      IF(UDEV)
+-        message(STATUS ${UDEV})
+-        target_link_libraries(domoticz ${UDEV} -lrt)
+-      else()
+-        find_library(UDEV NAMES libudev.so)
+-        IF(UDEV)
+-           message(STATUS ${UDEV})
+-           target_link_libraries(domoticz ${UDEV} -lrt)
+-        else()
+-           MESSAGE(FATAL_ERROR "LIB UDEV not found on your system, see install.txt how to get them installed.\nsudo apt-get install libudev-dev")
+-        ENDIF(UDEV)
+-      ENDIF(UDEV)
+-    ENDIF()
+-  ENDIF()
+ else()
+   MESSAGE(STATUS "==== OpenZWave not found, support disabled!")
+ ENDIF(OpenZWave)
diff --git a/utils/domoticz/patches/902_add-scripts-path.patch b/utils/domoticz/patches/902_add-scripts-path.patch
new file mode 100644 (file)
index 0000000..919cfee
--- /dev/null
@@ -0,0 +1,262 @@
+--- a/hardware/OpenZWave.cpp
++++ b/hardware/OpenZWave.cpp
+@@ -993,7 +993,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
+@@ -44,7 +44,7 @@ extern "C" {
+ using namespace boost::python;
+ #endif
+-extern std::string szUserDataFolder;
++extern std::string szScriptsFolder;
+ CEventSystem::CEventSystem(void)
+ {
+@@ -1086,9 +1086,9 @@ void CEventSystem::EvaluateEvent(const s
+       std::stringstream lua_DirT;
+ #ifdef WIN32
+-      lua_DirT << szUserDataFolder << "scripts\\lua\\";
++      lua_DirT << szScriptsFolder << "lua\\";
+ #else
+-      lua_DirT << szUserDataFolder << "scripts/lua/";
++      lua_DirT << szScriptsFolder << "lua/";
+ #endif
+       std::string lua_Dir = lua_DirT.str();
+@@ -1139,9 +1139,9 @@ void CEventSystem::EvaluateEvent(const s
+       {
+               std::stringstream python_DirT;
+ #ifdef WIN32
+-              python_DirT << szUserDataFolder << "scripts\\python\\";
++              python_DirT << szScriptsFolder << "python\\";
+ #else
+-              python_DirT << szUserDataFolder << "scripts/python/";
++              python_DirT << szScriptsFolder << "python/";
+ #endif
+               std::string python_Dir = python_DirT.str();
+@@ -2021,7 +2021,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(1, sPath, sParam));
+@@ -2133,9 +2133,9 @@ void CEventSystem::EvaluatePython(const
+       std::stringstream python_DirT;
+ #ifdef WIN32
+-      python_DirT << szUserDataFolder << "scripts\\python\\";
++      python_DirT << szScriptsFolder << "python\\";
+ #else
+-      python_DirT << szUserDataFolder << "scripts/python/";
++      python_DirT << szScriptsFolder << "python/";
+ #endif
+       std::string python_Dir = python_DirT.str();
+       if(!Py_IsInitialized()) {
+@@ -3909,9 +3909,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_applyXPath(lua_State* lua_state)
+ {
+@@ -319,9 +319,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
+@@ -612,6 +612,7 @@ const char *sqlCreateMobileDevices =
+ "[LastUpdate] DATETIME DEFAULT(datetime('now', 'localtime'))"
+ ");";
++extern std::string szScriptsFolder;
+ extern std::string szUserDataFolder;
+ CSQLHelper::CSQLHelper(void)
+@@ -3408,9 +3409,9 @@ unsigned long long CSQLHelper::UpdateVal
+                               //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()))
+                               {
+@@ -6460,7 +6461,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
+@@ -6492,7 +6493,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
+@@ -55,6 +55,7 @@
+ #define round(a) ( int ) ( a + .5 )
++extern std::string szScriptsFolder;
+ extern std::string szUserDataFolder;
+ extern std::string szWWWFolder;
+@@ -2614,9 +2615,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
+@@ -135,6 +135,7 @@ static const _facilities facilities[] =
+ }; 
+ std::string logfacname = "user";
+ #endif
++std::string szScriptsFolder;
+ std::string szStartupFolder;
+ std::string szUserDataFolder;
+ std::string szWWWFolder;
+@@ -603,6 +604,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
+@@ -139,6 +139,7 @@
+ #define round(a) ( int ) ( a + .5 )
++extern std::string szScriptsFolder;
+ extern std::string szStartupFolder;
+ extern std::string szUserDataFolder;
+ extern std::string szWWWFolder;
+@@ -1394,8 +1395,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)
+ {
+@@ -97,7 +97,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
+@@ -20,7 +20,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;
+@@ -222,11 +222,11 @@ void CGooglePubSubPush::DoGooglePubSubPu
+ #ifdef ENABLE_PYTHON
+ #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
+                               char * argv[1];
diff --git a/utils/domoticz/patches/903_disable-libusb.patch b/utils/domoticz/patches/903_disable-libusb.patch
new file mode 100644 (file)
index 0000000..4e788f8
--- /dev/null
@@ -0,0 +1,39 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -476,20 +476,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
index b7d9ec3e85c13b75e3fb0a5415c74cff0296d514..c4b709c94d9a4c37a63a83bdd1b3e0807069deb7 100644 (file)
@@ -9,7 +9,7 @@ NAME=gpsd
 validate_section_gpsd()
 {
        uci_validate_section gpsd gpsd "${1}" \
-               'enable:bool:1' \
+               'enabled:bool:1' \
                'device:string' \
                'listen_globally:bool:0' \
                'port:port:2947'
@@ -17,14 +17,14 @@ validate_section_gpsd()
 
 gpsd_instance()
 {
-       local device enable listen_globally port
+       local device enabled listen_globally port
 
        validate_section_gpsd "${1}" || {
                echo "validation failed"
                return 1
        }
 
-       [ "${enable}" = "0" ] && return 1
+       [ "${enabled}" = "0" ] && return 1
 
        procd_open_instance
        procd_set_param command "$PROG" -N -n
diff --git a/utils/luci-app-lxc/Makefile b/utils/luci-app-lxc/Makefile
deleted file mode 100644 (file)
index 026f714..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#
-# 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:=luci-app-lxc
-PKG_RELEASE:=20161030
-
-PKG_LICENSE:=Apache-2.0
-
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/luci-app-lxc
-  SECTION:=luci
-  CATEGORY:=LuCI
-  SUBMENU:=3. Applications
-  TITLE:=LXC management Web UI
-  DEPENDS:=+luci-mod-admin-full +lxc +lxc-create +liblxc +rpcd-mod-lxc +getopt +xz
-  MAINTAINER:=Petar Koretic <petar.koretic@sartura.hr>
-endef
-
-define Package/luci-app-lxc/description
- This package will install LXC management Web UI.
-endef
-
-define Build/Prepare
-endef
-
-define Build/Configure
-endef
-
-define Build/Compile
-endef
-
-define Package/luci-app-lxc/install
-       $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller/
-       $(INSTALL_BIN) \
-               ./files/controller/lxc.lua \
-               $(1)/usr/lib/lua/luci/controller/
-
-       $(INSTALL_DIR) $(1)/usr/lib/lua/luci/view/
-       $(INSTALL_DATA) \
-               ./files/view/lxc.htm \
-               $(1)/usr/lib/lua/luci/view/
-
-       $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/
-       $(INSTALL_BIN) \
-               ./files/model/cbi/lxc.lua \
-               $(1)/usr/lib/lua/luci/model/cbi/
-
-       $(INSTALL_DIR) $(1)/etc/config/
-       $(INSTALL_DATA) \
-               ./files/lxc.config \
-               $(1)/etc/config/lxc
-
-       $(INSTALL_DIR) $(1)/www
-       $(CP) -R \
-               ./files/www/* \
-               $(1)/www
-endef
-
-$(eval $(call BuildPackage,luci-app-lxc))
diff --git a/utils/luci-app-lxc/files/controller/lxc.lua b/utils/luci-app-lxc/files/controller/lxc.lua
deleted file mode 100644 (file)
index ea7adba..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
---[[
-
-LuCI LXC module
-
-Copyright (C) 2014, Cisco Systems, Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-Author: Petar Koretic <petar.koretic@sartura.hr>
-
-]]--
-
-module("luci.controller.lxc", package.seeall)
-
-require "ubus"
-local conn = ubus.connect()
-if not conn then
-    error("Failed to connect to ubus")
-end
-
-
-function fork_exec(command)
-       local pid = nixio.fork()
-       if pid > 0 then
-               return
-       elseif pid == 0 then
-               -- change to root dir
-               nixio.chdir("/")
-
-               -- patch stdin, out, err to /dev/null
-               local null = nixio.open("/dev/null", "w+")
-               if null then
-                       nixio.dup(null, nixio.stderr)
-                       nixio.dup(null, nixio.stdout)
-                       nixio.dup(null, nixio.stdin)
-                       if null:fileno() > 2 then
-                               null:close()
-                       end
-               end
-
-               -- replace with target command
-               nixio.exec("/bin/sh", "-c", command)
-       end
-end
-
-function index()
-       page = node("admin", "services", "lxc")
-       page.target = cbi("lxc")
-       page.title = _("LXC Containers")
-       page.order = 70
-
-       page = entry({"admin", "services", "lxc_create"}, call("lxc_create"), nil)
-       page.leaf = true
-
-       page = entry({"admin", "services", "lxc_action"}, call("lxc_action"), nil)
-       page.leaf = true
-
-       page = entry({"admin", "services", "lxc_get_downloadable"}, call("lxc_get_downloadable"), nil)
-       page.leaf = true
-
-       page = entry({"admin", "services", "lxc_configuration_get"}, call("lxc_configuration_get"), nil)
-       page.leaf = true
-
-       page = entry({"admin", "services", "lxc_configuration_set"}, call("lxc_configuration_set"), nil)
-       page.leaf = true
-
-end
-
-function lxc_get_downloadable()
-       luci.http.prepare_content("application/json")
-
-       local f = io.popen('uname -m', 'r')
-       local target = f:read('*a')
-       f:close()
-       target = target:gsub("^%s*(.-)%s*$", "%1")
-
-       local templates = {}
-
-       local f = io.popen('lxc-create -n just_want_to_list_available_lxc_templates -t download -- --list', 'r')
-
-       for line in f:lines() do
-               local dist,version = line:match("^(%S+)%s+(%S+)%s+" .. target .. "%s+default%s+%S+$")
-               if dist~=nil and version~=nil then templates[#templates + 1] = dist .. ":" .. version end
-       end
-
-       f:close()
-       luci.http.write_json(templates)
-end
-
-function lxc_create(lxc_name, lxc_template)
-       luci.http.prepare_content("text/plain")
-
-       local uci = require("uci").cursor()
-
-       local url = uci:get("lxc", "lxc", "url")
-
-       if not pcall(dofile, "/etc/openwrt_release") then
-               return luci.http.write("1")
-       end
-
-       local f = io.popen('uname -m', 'r')
-       local target = f:read('*a')
-       f:close()
-       target = target:gsub("^%s*(.-)%s*$", "%1")
-
-       local lxc_dist = lxc_template:gsub("(.*):(.*)", '%1')
-       local lxc_release = lxc_template:gsub("(.*):(.*)", '%2')
-
-       local data = conn:call("lxc", "create", { name = lxc_name, template = "download", args = { "--server", url,  "--no-validate", "--dist", lxc_dist, "--release", lxc_release, "--arch", target } } )
-
-       luci.http.write(data)
-end
-
-function lxc_action(lxc_action, lxc_name)
-       luci.http.prepare_content("application/json")
-
-       local data, ec = conn:call("lxc", lxc_action, lxc_name and { name = lxc_name} or {} )
-
-       luci.http.write_json(ec and {} or data)
-end
-
-function lxc_get_config_path()
-       local f = io.open("/etc/lxc/lxc.conf", "r")
-       local content = f:read("*all")
-       f:close()
-       local ret = content:match('^%s*lxc.lxcpath%s*=%s*([^%s]*)')
-       if ret then
-               return ret .. "/"
-       else
-               return "/srv/lxc/"
-       end
-end
-
-function lxc_configuration_get(lxc_name)
-       luci.http.prepare_content("text/plain")
-
-       local f = io.open(lxc_get_config_path() .. lxc_name .. "/config", "r")
-       local content = f:read("*all")
-       f:close()
-
-       luci.http.write(content)
-end
-
-function lxc_configuration_set(lxc_name)
-       luci.http.prepare_content("text/plain")
-
-       local lxc_configuration = luci.http.formvalue("lxc_configuration")
-
-       if lxc_configuration == nil then
-               return luci.http.write("1")
-       end
-
-       local f, err = io.open(lxc_get_config_path() .. lxc_name .. "/config","w+")
-       if not f then
-               return luci.http.write("2")
-       end
-
-       f:write(lxc_configuration)
-       f:close()
-
-       luci.http.write("0")
-end
-
diff --git a/utils/luci-app-lxc/files/lxc.config b/utils/luci-app-lxc/files/lxc.config
deleted file mode 100644 (file)
index 5572c73..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# lxc uci configuration
-#
-
-config lxc 'lxc'
-       option url 'virtualwrt.org/containers/'
diff --git a/utils/luci-app-lxc/files/model/cbi/lxc.lua b/utils/luci-app-lxc/files/model/cbi/lxc.lua
deleted file mode 100644 (file)
index ac0fdff..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
---[[
-
-LuCI LXC module
-
-Copyright (C) 2014, Cisco Systems, Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-Author: Petar Koretic <petar.koretic@sartura.hr>
-
-]]--
-
-local fs = require "nixio.fs"
-
-m = Map("lxc", translate("LXC Containers"))
-
-if fs.access("/etc/config/lxc") then
-       m:section(SimpleSection).template = "lxc"
-
-       s = m:section(TypedSection, "lxc", translate("Options"))
-       s.anonymous = true
-       s.addremove = false
-
-       s:option(Value, "url", translate("Containers URL"))
-end
-
-return m
diff --git a/utils/luci-app-lxc/files/view/lxc.htm b/utils/luci-app-lxc/files/view/lxc.htm
deleted file mode 100644 (file)
index edfff8e..0000000
+++ /dev/null
@@ -1,458 +0,0 @@
-<%#
-
-LuCI LXC module
-
-Copyright (C) 2014, Cisco Systems, Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-Author: Petar Koretic <petar.koretic@sartura.hr>
-
--%>
-
-<fieldset class="cbi-section">
-       <legend><%:Available Containers%></legend>
-       <div class="cbi-section-node">
-               <table id="t_lxc_list" class="cbi-section-table">
-                       <tr class="cbi-section-table-titles">
-                               <th class="cbi-section-table-cell"><%:Name%></th>
-                               <th class="cbi-section-table-cell"><%:Status%></th>
-                               <th class="cbi-section-table-cell"><%:Actions%></th>
-                       </tr>
-               </table>
-       </div>
-</fieldset>
-
-<fieldset class="cbi-section">
-       <span id="lxc-list-output"></span>
-</fieldset>
-
-<hr/>
-<fieldset class="cbi-section">
-       <legend><%:Create New Container%></legend>
-       <div class="cbi-section-node">
-               <table id="t_lxc_create" class="cbi-section-table">
-                       <tr class="cbi-section-table-titles">
-                               <th class="cbi-section-table-cell"><%:Name%></th>
-                               <th class="cbi-section-table-cell"><%:Template%></th>
-                               <th class="cbi-section-table-cell"><%:Actions%></th>
-                       </tr>
-                       <tr id="tr_holder">
-                               <td>
-                                       <input type="text" id="tx_name" placeholder="<%:Enter new name%>" value='' />
-                               </td>
-                               <td>
-                                       <select id="s_template" class="cbi-input-select cbi-button">
-                                       </select>
-                               </td>
-                               <td>
-                                       <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create(tr_holder)" class="cbi-button cbi-button-add" />
-                                       <span id="lxc-add-loader" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
-                               </td>
-                       </tr>
-               </table>
-       </div>
-</fieldset>
-
-<fieldset class="cbi-section">
-       <span id="lxc-add-output"></span>
-</fieldset>
-
-<hr/>
-
-<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
-<script type="text/javascript">//<![CDATA[
-
-       window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" }
-       window.states = {  "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple"}
-
-       var t_lxc_list = document.getElementById('t_lxc_list');
-       var loader_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" /> ';
-       var timeout_msg = 0
-       var output_list = document.getElementById("lxc-list-output")
-       var output_add = document.getElementById("lxc-add-output")
-       var loader_add = document.getElementById("lxc-add-loader")
-
-       function lxc_create(tr)
-       {
-               var lxc_name = tr.querySelector("#tx_name").value.trim()
-               var lxc_template = tr.querySelector("#s_template").value
-               var bt_create = tr.querySelector("#bt_create")
-
-               if (t_lxc_list.querySelector("[data-id='" + lxc_name + "']") != null)
-                       return info_message(output_add, "Container with that name already exists!", 4000)
-
-               bt_create.disabled = true
-               output_add.innerHTML = ''
-
-               if (!lxc_name || !lxc_name.length)
-               {
-                       bt_create.disabled = false
-                       return info_message(output_add, "Name cannot be empty!", 4000)
-               }
-
-               loading(loader_add)
-
-               new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_create/' + '%h/%h'.format(lxc_name, lxc_template) , null,
-               function(x)
-               {
-                       bt_create.disabled = false
-                       loading(loader_add, 0)
-
-                       if (!x)
-                               info_message(output_add, "Container creation failed!")
-               })
-       }
-
-       function lxc_create_template(lxc_name, lxc_state)
-       {
-               var info_row = t_lxc_list.querySelector("#empty")
-               if (info_row)
-                       t_lxc_list.deleteRow(1)
-
-               var actions = ''
-               actions += '<input type="button" onclick="action_handler(this)" data-action="start" value="<%:Start%>" class="cbi-button cbi-button-apply" />'
-               actions+= '<input type="button" onclick="action_handler(this)" data-action="stop" value="<%:Stop%>" class="cbi-button cbi-button-reset" />'
-               actions+= '<input type="button" onclick="action_handler(this)" data-action="destroy" value="<%:Delete%>" class="cbi-button cbi-button-remove" />'
-               actions+= ' <select class="cbi-input-select cbi-button" onchange="action_more_handler(this)">\
-                                               <option selected disabled>more</option>\
-                                               <option>configure</option>\
-                                               <option>freeze</option>\
-                                               <option>unfreeze</option>\
-                                               <option>reboot</option>\
-                                       </select>'
-               actions+= '<span data-loader style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>'
-
-               var row = t_lxc_list.insertRow(-1)
-               var cell = row.insertCell(-1)
-               cell.innerHTML = '%q%h%q'.format("<strong>", lxc_name, "</strong>")
-               cell.width = "30%"
-               cell.setAttribute("data-id", lxc_name)
-
-               cell = row.insertCell(-1)
-               cell.width = "20%"
-               cell.innerHTML = "<img src='"+window.img[lxc_state]+"'/>"
-
-               cell = row.insertCell(-1)
-               cell.width = "50%"
-               cell.innerHTML = actions
-       }
-
-       function action_handler(self)
-       {
-               var action = self.getAttribute("data-action");
-
-               var bt_action = self
-               var lxc_name = self.parentNode.parentNode.children[0].getAttribute('data-id')
-               var status_img = self.parentNode.parentNode.querySelector('img')
-               var loader = self.parentNode.querySelector('[data-loader]')
-
-               bt_action.disabled = true
-
-               if (action == "stop")
-               {
-                       loading(loader)
-
-                       new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null,
-                       function(x, ec)
-                       {
-                               loading(loader, 0)
-                               bt_action.disabled = false
-
-                               if (!x || ec)
-                                       return info_message(output_list,"Action failed!")
-
-                               set_status(status_img, "red")
-
-                       });
-               }
-
-               else if (action == "start")
-               {
-                       loading(loader)
-
-                       new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null,
-                       function(x, data)
-                       {
-                               loading(loader, 0)
-                               bt_action.disabled = false
-
-                               //FIXME: uncomment after fixing 'lxc-start'
-                               if (!x /*|| ec */)
-                                       return info_message(output_list,"Action failed!")
-
-                               //FIXME: uncomment after fixing 'lxc-start'
-                               //set_status(status_img, "green")
-                       });
-               }
-
-               else if (action == "destroy")
-               {
-                       if (!confirm("This will completely remove LXC container from the disk. Are you sure? (container will be stopped if running)"))
-                               return
-
-                       loading(loader)
-
-                       new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null,
-                       function(x, ec)
-                       {
-                               loading(loader, 0)
-                               bt_action.disabled = false
-
-                               if (!x || ec)
-                                       return info_message(output_list,"Action failed!")
-
-                               var row = self.parentNode.parentNode
-                               row.parentNode.removeChild(row)
-
-                       });
-               }
-       }
-
-       function lxc_configure_handler(self)
-       {
-               var td = self.parentNode
-               var textarea = td.querySelector('[data-id]')
-               var lxc_name = textarea.getAttribute('data-id')
-               var lxc_configuration = textarea.value
-
-               new XHR().post('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_set/' + lxc_name, "lxc_configuration=" + encodeURIComponent(lxc_configuration) ,
-               function(x)
-               {
-                       if (!x || x.responseText != "0")
-                               return info_message(output_list,"Action failed!")
-
-                       info_message(output_list,"LXC configuration updated")
-                       var row = td.parentNode
-                       row.parentNode.removeChild(row)
-               })
-       }
-
-       function lxc_rename_template(lxc_name)
-       {
-               var h = '\
-                       <input data-id="'+ lxc_name + '" type="text" placeholder="Enter new name" /> \
-                       <input data-id="bt_confirm" onclick="lxc_rename_handler(this)" type="button" class="cbi-button" value="Confirm" />'
-
-               return h
-       }
-
-       function lxc_configure_template(lxc_name, lxc_configuration)
-       {
-               var h = '\
-                       <textarea data-id="'+ lxc_name + '" rows="20" style="width:100%">'+ lxc_configuration +'</textarea> \
-                       <input data-id="bt_confirm" onclick="lxc_configure_handler(this)" type="button" class="cbi-button" value="Confirm" />'
-
-               return h
-       }
-
-       function action_more_handler(self)
-       {
-               var lxc_name = self.parentNode.parentNode.querySelector('[data-id]').getAttribute('data-id')
-               var loader = self.parentNode.parentNode.querySelector('[data-loader]')
-
-               var option = self.options[self.selectedIndex].text
-
-               self.value = "more"
-
-               switch (option)
-               {
-                       case "configure":
-                               var tr = document.createElement('tr')
-                               var row = self.parentNode.parentNode
-                               var next_row = row.nextSibling
-                               if (next_row && next_row.getAttribute('data-action') !== null)
-                                       row.parentNode.removeChild(next_row)
-
-                               new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_get/' + lxc_name, null,
-                               function(x)
-                               {
-                                       tr.innerHTML="<td colspan='" + row.cells.length + "'>" + lxc_configure_template(lxc_name, x.responseText) + "</td>"
-                                       tr.setAttribute('data-action','')
-                                       row.parentNode.insertBefore(tr, row.nextSibling)
-                               })
-
-                       break
-
-                       case "freeze":
-                               var tr = self.parentNode.parentNode
-                               var img = tr.querySelector('img')
-                               if(img.getAttribute('src') != window.img["green"])
-                                       return info_message(output_list,"Container is not running!")
-
-                               loading(loader)
-                               new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null,
-                               function(x, ec)
-                               {
-                                       loading(loader, 0)
-                                       if (!x || ec)
-                                               return info_message(output_list,"Action failed!")
-
-                                       set_status(img, "purple")
-                               })
-
-                       break
-
-                       case "unfreeze":
-                               var tr = self.parentNode.parentNode
-                               var img = tr.querySelector('img')
-
-                               if(img.getAttribute('src') != window.img["purple"])
-                                       return info_message(output_list,"Container is not frozen!")
-
-                               loading(loader)
-                               new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null,
-                               function(x, ec)
-                               {
-                                       loading(loader, 0)
-                                       if (!x || ec)
-                                               return info_message(output_list,"Action failed!")
-
-                                       set_status(img, "green")
-                               })
-
-                       break
-
-                       case "reboot":
-                               var tr = self.parentNode.parentNode
-                               var img = tr.querySelector('img')
-                               if(img.getAttribute('src') != window.img["green"])
-                                       return info_message(output_list,"Container is not running!")
-
-                               if (!confirm("Are you sure?"))
-                                       return
-
-                               loading(loader)
-                               new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null,
-                               function(x, ec)
-                               {
-                                       loading(loader, 0)
-                                       if (!x || ec)
-                                               return info_message(output_list,"Action failed!")
-
-                                       info_message(output_list,"LXC rebooted")
-                               })
-                       break
-               }
-
-       }
-
-       function set_empty(t_lxc_list)
-       {
-               if (document.getElementById('empty') !== null)
-                       return
-
-               var row_count = t_lxc_list.rows.length;
-               while(--row_count) t_lxc_list.deleteRow(row_count);
-
-               var row = t_lxc_list.insertRow(-1);
-               row.id = 'empty'
-               var cell = row.insertCell(0);
-               cell.colSpan = 4;
-               cell.innerHTML = '<em><br />There are no containers available yet.</em>';
-       }
-
-       function lxc_list_update()
-       {
-               XHR.poll(4, '<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/list', null,
-               function(x, data)
-               {
-                       if (!x) return;
-
-                       var lxc_count = Object.keys(data).length
-                       if (!data || !lxc_count)
-                               return set_empty(t_lxc_list)
-
-                       if (document.getElementById('empty') !== null)
-                               t_lxc_list.deleteRow(1);
-
-                       var lxcs = t_lxc_list.querySelectorAll('td[data-id]')
-                       var lxc_name_table = {}
-                       for (var i = 0, len = lxcs.length; i < len; i++)
-                       {
-                               var lxc_name = lxcs[i].getAttribute('data-id')
-                               if (!(lxc_name in data))
-                               {
-                                       var row = t_lxc_list.querySelector("[data-id='" + lxc_name + "']").parentNode
-                                       row.parentNode.removeChild(row)
-                                       continue
-                               }
-
-                               lxc_name_table[lxc_name] = lxcs[i].parentNode.querySelector('img')
-                       }
-
-                       for(var key in data)
-                       {
-                               var lxc_name = key
-                               var state = window.states[data[key]]
-
-                               if (!(lxc_name in lxc_name_table))
-                                       lxc_create_template(lxc_name, state)
-
-                               else if (state != get_status(lxc_name_table[lxc_name]))
-                                       set_status(lxc_name_table[lxc_name], state)
-                       }
-
-               })
-       }
-
-       function loading(elem, state)
-       {
-               state = (typeof state === 'undefined') ? 1 : state
-
-               if (state === 1)
-                       elem.innerHTML = loader_html
-               else
-                       setTimeout(function() { elem.innerHTML = ''}, 1000)
-       }
-
-       function set_status(elem, state)
-       {
-               state = (typeof state === 'undefined') ? 1 : state
-
-               setTimeout(function() { elem.setAttribute('src', window.img[state])}, 300)
-       }
-
-       function get_status(elem)
-       {
-               var src = elem.getAttribute('src')
-
-               for (var i in img)
-               {
-                       if (img[i] == src)
-                               return i
-               }
-       }
-
-       function info_message(output, msg, timeout)
-       {
-               timeout = timeout || 3000
-               output.innerHTML = msg
-               clearTimeout(timeout_msg)
-               timeout_msg = setTimeout(function(){ output.innerHTML=""}, timeout);
-       }
-
-       lxc_list_update()
-
-       new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_get_downloadable', null,
-       function(x, data)
-       {
-               if (!x) return;
-
-               var lxc_count = Object.keys(data).length
-               if (!data || !lxc_count) return;
-               var select = document.getElementById("s_template");
-               for(var key in data)
-               {
-                       var option = document.createElement('option');
-                       option.value = data[key];
-                       option.text = data[key].replace(/[_:]/g, ' ');
-                       select.add(option, -1);
-               }
-       })
-
-//]]></script>
diff --git a/utils/luci-app-lxc/files/www/luci-static/resources/cbi/green.gif b/utils/luci-app-lxc/files/www/luci-static/resources/cbi/green.gif
deleted file mode 100644 (file)
index d09febf..0000000
Binary files a/utils/luci-app-lxc/files/www/luci-static/resources/cbi/green.gif and /dev/null differ
diff --git a/utils/luci-app-lxc/files/www/luci-static/resources/cbi/purple.gif b/utils/luci-app-lxc/files/www/luci-static/resources/cbi/purple.gif
deleted file mode 100644 (file)
index f0d68cc..0000000
Binary files a/utils/luci-app-lxc/files/www/luci-static/resources/cbi/purple.gif and /dev/null differ
diff --git a/utils/luci-app-lxc/files/www/luci-static/resources/cbi/red.gif b/utils/luci-app-lxc/files/www/luci-static/resources/cbi/red.gif
deleted file mode 100644 (file)
index c1b39bb..0000000
Binary files a/utils/luci-app-lxc/files/www/luci-static/resources/cbi/red.gif and /dev/null differ
index cca11237566fb503576efd87223046e01ce94f34..f1f4762826e1029f4afab27c4fe062c96b26948d 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2006-2016 OpenWrt.org
+# Copyright (C) 2006-2017 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mc
-PKG_VERSION:=4.8.18
+PKG_VERSION:=4.8.19
 PKG_RELEASE:=1
 PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
 PKG_LICENSE:=GPL-3.0+
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://ftp.midnight-commander.org/
-PKG_MD5SUM:=f7636815c987c1719c4f5de2dcd156a0e7d097b1d10e4466d2bdead343d5bece
+PKG_HASH:=eb9e56bbb5b2893601d100d0e0293983049b302c5ab61bfb544ad0ee2cc1f2df
 PKG_BUILD_PARALLEL:=1
 PKG_FIXUP:=autoreconf gettext-version
 
@@ -32,7 +32,7 @@ PKG_CONFIG_DEPENDS := \
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/nls.mk
 
-define Package/$(PKG_NAME)
+define Package/mc
        SECTION:=utils
        CATEGORY:=Utilities
        DEPENDS:=+glib2 +libncurses +libmount +MC_VFS:libssh2 $(LIBRPC_DEPENDS) $(ICONV_DEPENDS)
@@ -41,11 +41,11 @@ define Package/$(PKG_NAME)
        MENU:=1
 endef
 
-define Package/$(PKG_NAME)/config
+define Package/mc/config
        source "$(SOURCE)/Config.in"
 endef
 
-define Package/$(PKG_NAME)/description
+define Package/mc/description
 GNU Midnight Commander is a visual file manager.
 It's a feature rich full-screen text mode application that allows you to copy,
 move and delete files and whole directory trees, search for files and run commands in the subshell.
@@ -54,6 +54,8 @@ Internal viewer and editor are included as well.
 endef
 
 CONFIGURE_ARGS += \
+       --enable-silent-rules \
+       --disable-tests \
        --disable-doxygen-doc \
        --with-homedir=/etc/mc \
        --with-screen=ncurses \
@@ -98,7 +100,7 @@ CONFIGURE_ARGS += \
        --disable-vfs
 endif
 
-define Package/$(PKG_NAME)/install
+define Package/mc/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mc $(1)/usr/bin
        $(INSTALL_DIR) $(1)/etc/mc
@@ -119,9 +121,9 @@ endif
        $(INSTALL_DIR) $(1)/etc/mc/mcedit/Syntax
 endef
 
-define Package/$(PKG_NAME)/conffiles
+define Package/mc/conffiles
 /etc/mc/mc.menu
 /etc/mc/skins/default.ini
 endef
 
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,mc))
index bd7ee35e90f54a254f1c5dbd7518a159882b9428..35432e6dddfdd5b72ab8921ccb764b382fd178c3 100644 (file)
@@ -1,11 +1,22 @@
 --- a/src/subshell/common.c
 +++ b/src/subshell/common.c
-@@ -849,7 +849,7 @@ init_subshell_precmd (char *precmd, size
-                     "else "
-                     "[ \"${PWD##$HOME/}\" = \"$PWD\" ] && MC_PWD=\"$PWD\" || MC_PWD=\"~/${PWD##$HOME/}\"; "
-                     "fi; "
+@@ -843,16 +843,9 @@ init_subshell_precmd (char *precmd, size
+          * "PS1='$($PRECMD)$ '\n",
+          */
+         g_snprintf (precmd, buff_size,
+-                    "precmd() { "
+-                    "if [ ! \"${PWD##$HOME}\" ]; then "
+-                    "MC_PWD=\"~\"; "
+-                    "else "
+-                    "[ \"${PWD##$HOME/}\" = \"$PWD\" ] && MC_PWD=\"$PWD\" || MC_PWD=\"~/${PWD##$HOME/}\"; "
+-                    "fi; "
 -                    "echo \"$USER@$(hostname -s):$MC_PWD\"; "
-+                    "echo \"$USER@$HOSTNAME:$MC_PWD\"; "
-                     "pwd>&%d; "
-                     "kill -STOP $$; "
-                     "}; " "PRECMD=precmd; " "PS1='$($PRECMD)$ '\n", subshell_pipe[WRITE]);
+-                    "pwd>&%d; "
+-                    "kill -STOP $$; "
+-                    "}; " "PRECMD=precmd; " "PS1='$($PRECMD)$ '\n", subshell_pipe[WRITE]);
++                    "precmd() { pwd>&%d; kill -STOP $$; }; "
++                    "PRECMD=precmd; "
++                    "PS1='$(eval $PRECMD)\\u@\\h:\\w\\$ '\n", subshell_pipe[WRITE]);
+         break;
+     case SHELL_ZSH:
index 445974c3b19c09ee9b5cb1da820e73a01a2c894f..5fc6faf7b3c40087f64d5f1760b32c7d73818d16 100644 (file)
@@ -9,15 +9,16 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mksh
-PKG_VERSION:=52c
+PKG_VERSION:=54
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=Thorsten Glaser <tg@mirbsd.org>
 PKG_LICENSE:=MirOS
 
 PKG_SOURCE:=$(PKG_NAME)-R$(PKG_VERSION).tgz
-PKG_SOURCE_URL:=http://www.mirbsd.org/MirOS/dist/mir/mksh
-PKG_MD5SUM:=cc3884e02314447e7b4a3073b8d65d1e
+PKG_SOURCE_URL:=http://www.mirbsd.org/MirOS/dist/mir/mksh \
+               http://pub.allbsd.org/MirOS/dist/mir/mksh/
+PKG_MD5SUM:=be0a6fb93b4a5f927bcc1893bb6692f8
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
 
index 7e9da8a024f97c1540afebdefdb2f3f5787eae74..a82c1ce54653bcd5c944280c41b9088ac630dea8 100644 (file)
@@ -1,4 +1,4 @@
-Refreshed for mksh-r52c, based on tg's patch
+Refreshed for mksh-r54, based on tg's patch
 
 From 23712cea8e2a623fd952eb781df0011c501703d0 Mon Sep 17 00:00:00 2001
 From: Thorsten Glaser <tg@mirbsd.org>
@@ -35,7 +35,7 @@ Signed-off-by: Alif M. A. <alive4ever at live.com>
  \alias doch='sudo mksh -c "$(\builtin fc -ln -1)"'
  \command -v rot13 >/dev/null || \alias rot13='tr \
      abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \
-@@ -601,4 +602,8 @@
+@@ -600,4 +601,8 @@
  
  \unset p
  
index d9caab4e5ef876cb49d85877d06867a52d7f7254..db285504f8a33caeed9441c8c5fc37f05b7e0a05 100644 (file)
@@ -8,15 +8,15 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nano
-PKG_VERSION:=2.7.4
+PKG_VERSION:=2.7.5
 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_MD5SUM:=c011c7f9e47cb1da27d4e7cc8b56ec6a
-PKG_HASH:=752170643039e2c95a433de357f0c70a8c4c4c561a90a7e7259a63e225b659b9
+PKG_MD5SUM:=002703e368e07882f75e304c8860d83d
+PKG_HASH:=a64d24e6bc4fc448376d038f9a755af77f8e748c9051b6f45bf85e783a7e67e4
 
 PKG_INSTALL:=1
 PKG_BUILD_PARALLEL:=1
index 243d8e9f328936407a6963b9c583fecaaf977dcc..8dae9342c660d23f27fc3b9c2a13a0be74ece08c 100644 (file)
@@ -42,11 +42,11 @@ define GenPlugin
   define Package/$(addprefix open-plc-utils-,$(1))
     $(call Package/open-plc-utils/Default)
     DEPENDS:=open-plc-utils
-    TITLE:=Utility $(2) from the Open PLC utilities
+    TITLE:=Utility $(1) from the Open PLC utilities
   endef
 
    define Package/$(addprefix open-plc-utils-,$(1))/description
-     Utility $(2) from the Open PLC utilities package.
+     Utility $(1) from the Open PLC utilities package.
    endef
 endef
 
diff --git a/utils/openzwave/Makefile b/utils/openzwave/Makefile
new file mode 100644 (file)
index 0000000..d5e13e5
--- /dev/null
@@ -0,0 +1,95 @@
+#
+# Copyright (C) 2017  Hauke Mehrtens <hauke@hauke-m.de>
+# Copyright (C) 2016 - 2017  Stijn Tintel <stijn@linux-ipv6.be>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=openzwave
+PKG_REV:=164
+PKG_VERSION:=1.4.$(PKG_REV)
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://old.openzwave.com/downloads
+PKG_HASH:=4ecf39787aaf278c203764069b581dbc26094ce57cafeab4a0c1f012d2c0ac69
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/openzwave/default
+  URL:=http://openzwave.com
+  MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
+  DEPENDS:=+libpthread +libstdcpp
+endef
+
+define Package/openzwave/description
+       Open-ZWave is a library that interfaces with selected Z-Wave PC controllers
+endef
+
+define Package/libopenzwave
+$(call Package/openzwave/default)
+  SECTION:=Libs
+  CATEGORY:=Libraries
+  TITLE:=Open-ZWave Library
+endef
+
+define Package/openzwave
+$(call Package/openzwave/default)
+  SECTION:=Utils
+  CATEGORY:=Utilities
+  TITLE:=Open-ZWave MinOZW test utility
+  DEPENDS:=+libopenzwave +openzwave-config
+endef
+
+define Package/openzwave-config
+$(call Package/openzwave/default)
+  SECTION:=Utils
+  CATEGORY:=Utilities
+  TITLE:=Open-ZWave Device Configs
+endef
+
+MAKE_FLAGS += \
+       LD="$(TARGET_CROSS)g++" \
+       PREFIX=$(CONFIGURE_PREFIX) \
+       instlibdir=/usr/lib \
+       pkgconfigdir=/usr/lib/pkgconfig \
+       sysconfdir=/etc/openzwave
+
+define Build/Prepare
+       $(call Build/Prepare/Default)
+       rm $(PKG_BUILD_DIR)/cpp/src/platform/HidController.*
+       sed -i -e '/hidapi/d;/HidController/d' $(PKG_BUILD_DIR)/distfiles.mk
+endef
+
+define Package/libopenzwave/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopenzwave.so* $(1)/usr/lib/
+endef
+
+define Package/openzwave/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/MinOZW $(1)/usr/bin/
+endef
+
+define Package/openzwave-config/install
+       $(INSTALL_DIR) $(1)/etc/
+       $(CP) $(PKG_INSTALL_DIR)/etc/openzwave $(1)/etc/
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/openzwave $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopenzwave.* $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libopenzwave.pc $(1)/usr/lib/pkgconfig/
+endef
+
+$(eval $(call BuildPackage,libopenzwave))
+$(eval $(call BuildPackage,openzwave))
+$(eval $(call BuildPackage,openzwave-config))
diff --git a/utils/openzwave/patches/001-unix-fix-compilation-against-musl-libc-1127.patch b/utils/openzwave/patches/001-unix-fix-compilation-against-musl-libc-1127.patch
new file mode 100644 (file)
index 0000000..3001667
--- /dev/null
@@ -0,0 +1,28 @@
+From eab45f0959ccb1deb662c6f8c036651088e2e8d6 Mon Sep 17 00:00:00 2001
+From: Stijn Tintel <stijn@linux-ipv6.be>
+Date: Fri, 17 Feb 2017 05:42:25 +0100
+Subject: [PATCH] unix: fix compilation against musl libc (#1127)
+
+POSIX.1-2001 requires sys/select.h for select() and friends.
+Compile-tested on glibc and musl, runtime tested on musl.
+
+Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
+---
+ cpp/src/platform/unix/SerialControllerImpl.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/cpp/src/platform/unix/SerialControllerImpl.cpp b/cpp/src/platform/unix/SerialControllerImpl.cpp
+index d95f848..b52b74f 100644
+--- a/cpp/src/platform/unix/SerialControllerImpl.cpp
++++ b/cpp/src/platform/unix/SerialControllerImpl.cpp
+@@ -25,6 +25,7 @@
+ //    along with OpenZWave.  If not, see <http://www.gnu.org/licenses/>.
+ //
+ //-----------------------------------------------------------------------------
++#include <sys/select.h>
+ #include <unistd.h>
+ #include <pthread.h>
+ #include "Defs.h"
+-- 
+2.10.2
+
diff --git a/utils/openzwave/patches/900_fix-build.patch b/utils/openzwave/patches/900_fix-build.patch
new file mode 100644 (file)
index 0000000..1081c98
--- /dev/null
@@ -0,0 +1,29 @@
+--- a/cpp/build/Makefile
++++ b/cpp/build/Makefile
+@@ -15,7 +15,7 @@
+ # what flags we will use for compiling in debug mode
+ DEBUG_CFLAGS    := -Wall -Wno-unknown-pragmas -Wno-inline -Wno-format -Werror -Wno-error=sequence-point -Wno-sequence-point -ggdb -DDEBUG -fPIC  -DSYSCONFDIR="\"$(PREFIX)/etc/openzwave/\""
+ # what flags we will use for compiling in release mode
+-RELEASE_CFLAGS  := -Wall -Wno-unknown-pragmas -Werror -Wno-format -Wno-error=sequence-point -Wno-sequence-point -O3 -DNDEBUG -fPIC  -DSYSCONFDIR="\"$(PREFIX)/etc/openzwave/\""
++RELEASE_CFLAGS  := -Wall -Wno-unknown-pragmas -Wno-error=sequence-point -Wno-sequence-point -DNDEBUG -fPIC  -DSYSCONFDIR="\"/etc/openzwave/\""
+ #what flags we will use for linking in debug mode
+ DEBUG_LDFLAGS := -g
+@@ -139,7 +139,7 @@ $(LIBDIR)/libopenzwave.a:  $(patsubst %.c
+                       $(patsubst %.cpp,$(OBJDIR)/%.o,$(indep)) \
+                       $(OBJDIR)/vers.o
+       @echo "Linking Static Library"
+-      @$(AR) $@ $+
++      @$(AR) q $@ $+
+       @$(RANLIB) $@
+ $(LIBDIR)/$(SHARED_LIB_NAME): $(patsubst %.cpp,$(OBJDIR)/%.o,$(tinyxml)) \
+@@ -161,7 +161,7 @@ $(top_builddir)/libopenzwave.pc: $(top_s
+               -e 's|[@]exec_prefix@|$(PREFIX)/bin|g' \
+               -e 's|[@]libdir@|$(instlibdir)|g' \
+               -e 's|[@]includedir@|$(PREFIX)/include/openzwave/|g' \
+-                -e 's|[@]sysconfdir@|$(PREFIX)/etc/openzwave/|g' \
++                -e 's|[@]sysconfdir@|/etc/openzwave/|g' \
+                 -e 's|[@]gitversion@|$(GITVERSION)|g' \
+                 -e 's|[@]docdir@|$(docdir)/|g' \
+               -e 's|[@]VERSION@|$(VERSION)|g' \
diff --git a/utils/openzwave/patches/901_no-hidcontroller.patch b/utils/openzwave/patches/901_no-hidcontroller.patch
new file mode 100644 (file)
index 0000000..dfacbf0
--- /dev/null
@@ -0,0 +1,89 @@
+--- a/cpp/src/Driver.cpp
++++ b/cpp/src/Driver.cpp
+@@ -37,11 +37,6 @@
+ #include "platform/Event.h"
+ #include "platform/Mutex.h"
+ #include "platform/SerialController.h"
+-#ifdef WINRT
+-#include "platform/winRT/HidControllerWinRT.h"
+-#else
+-#include "platform/HidController.h"
+-#endif
+ #include "platform/Thread.h"
+ #include "platform/Log.h"
+ #include "platform/TimeStamp.h"
+@@ -223,14 +218,7 @@ m_nonceReportSentAttempt( 0 )
+       initNetworkKeys(false);
+-      if( ControllerInterface_Hid == _interface )
+-      {
+-              m_controller = new HidController();
+-      }
+-      else
+-      {
+-              m_controller = new SerialController();
+-      }
++      m_controller = new SerialController();
+       m_controller->SetSignalThreshold( 1 );
+       Options::Get()->GetOptionAsBool( "NotifyTransactions", &m_notifytransactions );
+--- a/cpp/build/Makefile
++++ b/cpp/build/Makefile
+@@ -66,16 +66,7 @@ CFLAGS  += $(CPPFLAGS)
+ #where to put the temporary library
+ LIBDIR        ?= $(top_builddir)
+-INCLUDES      := -I $(top_srcdir)/cpp/src -I $(top_srcdir)/cpp/tinyxml/ -I $(top_srcdir)/cpp/hidapi/hidapi/
+-
+-ifeq ($(UNAME),Darwin)
+-SOURCES_HIDAPI =$(top_srcdir)/cpp/hidapi/mac
+-else ifeq ($(UNAME),FreeBSD)
+-SOURCES_HIDAPI =$(top_srcdir)/cpp/hidapi/libusb
+-else
+-SOURCES_HIDAPI =$(top_srcdir)/cpp/hidapi/linux
+-endif
+-
++INCLUDES      := -I $(top_srcdir)/cpp/src -I $(top_srcdir)/cpp/tinyxml/
+ SOURCES               := $(top_srcdir)/cpp/src $(top_srcdir)/cpp/src/command_classes $(top_srcdir)/cpp/tinyxml \
+       $(top_srcdir)/cpp/src/value_classes $(top_srcdir)/cpp/src/platform $(top_srcdir)/cpp/src/platform/unix $(SOURCES_HIDAPI) $(top_srcdir)/cpp/src/aes/
+@@ -85,14 +76,6 @@ VPATH = $(top_srcdir)/cpp/src:$(top_srcd
+ tinyxml := $(notdir $(wildcard $(top_srcdir)/cpp/tinyxml/*.cpp))
+-ifeq ($(UNAME),Darwin)
+-hidapi := $(notdir $(wildcard $(top_srcdir)/cpp/hidapi/mac/*.c))
+-else ifeq ($(UNAME),FreeBSD)
+-hidapi := $(notdir $(wildcard $(top_srcdir)/cpp/hidapi/libusb/*.c))
+-else
+-hidapi := $(notdir $(wildcard $(top_srcdir)/cpp/hidapi/linux/*.c)) # we do not want the libusb version
+-endif
+-
+ cclasses := $(notdir $(wildcard $(top_srcdir)/cpp/src/command_classes/*.cpp))
+ vclasses := $(notdir $(wildcard $(top_srcdir)/cpp/src/value_classes/*.cpp))
+ pform := $(notdir $(wildcard $(top_srcdir)/cpp/src/platform/*.cpp)) \
+@@ -111,7 +94,6 @@ printversion:
+ -include $(patsubst %.cpp,$(DEPDIR)/%.d,$(tinyxml))
+--include $(patsubst %.c,$(DEPDIR)/%.d,$(hidapi))
+ -include $(patsubst %.cpp,$(DEPDIR)/%.d,$(cclasses))
+ -include $(patsubst %.cpp,$(DEPDIR)/%.d,$(vclasses))
+ -include $(patsubst %.cpp,$(DEPDIR)/%.d,$(pform))
+@@ -131,7 +113,6 @@ $(top_srcdir)/cpp/src/vers.cpp:
+ #$(OBJDIR)/vers.o:    $(top_builddir)/vers.cpp
+ $(LIBDIR)/libopenzwave.a:     $(patsubst %.cpp,$(OBJDIR)/%.o,$(tinyxml)) \
+-                      $(patsubst %.c,$(OBJDIR)/%.o,$(hidapi)) \
+                       $(patsubst %.c,$(OBJDIR)/%.o,$(aes)) \
+                       $(patsubst %.cpp,$(OBJDIR)/%.o,$(cclasses)) \
+                       $(patsubst %.cpp,$(OBJDIR)/%.o,$(vclasses)) \
+@@ -143,7 +124,6 @@ $(LIBDIR)/libopenzwave.a:  $(patsubst %.c
+       @$(RANLIB) $@
+ $(LIBDIR)/$(SHARED_LIB_NAME): $(patsubst %.cpp,$(OBJDIR)/%.o,$(tinyxml)) \
+-                      $(patsubst %.c,$(OBJDIR)/%.o,$(hidapi)) \
+                       $(patsubst %.c,$(OBJDIR)/%.o,$(aes)) \
+                       $(patsubst %.cpp,$(OBJDIR)/%.o,$(cclasses)) \
+                       $(patsubst %.cpp,$(OBJDIR)/%.o,$(vclasses)) \
diff --git a/utils/openzwave/patches/902_no-udev.patch b/utils/openzwave/patches/902_no-udev.patch
new file mode 100644 (file)
index 0000000..c9176d7
--- /dev/null
@@ -0,0 +1,24 @@
+--- a/cpp/src/platform/unix/SerialControllerImpl.cpp
++++ b/cpp/src/platform/unix/SerialControllerImpl.cpp
+@@ -34,10 +34,6 @@
+ #include "SerialControllerImpl.h"
+ #include "platform/Log.h"
+-#ifdef __linux__
+-#include <libudev.h>
+-#endif
+-
+ using namespace OpenZWave;
+ //-----------------------------------------------------------------------------
+--- a/cpp/build/Makefile
++++ b/cpp/build/Makefile
+@@ -59,7 +59,7 @@ endif
+ else
+ LDFLAGS += -shared -Wl,-soname,libopenzwave.so.$(VERSION)
+-LIBS  += -ludev
++LIBS  +=
+ endif
+ CFLAGS  += $(CPPFLAGS)
index e0ac78f4ba8a75b67769cd4f94572d95bc301034..a4d08cd9afbd78ed3620953e316326baee8db1d7 100644 (file)
@@ -34,7 +34,7 @@ include $(INCLUDE_DIR)/package.mk
 # templates
 #
 
-define Package/$(PKG_NAME)/Default
+define Package/owfs/Default
   TITLE:=OWFS (1-Wire File System)
   URL:=http://owfs.sourceforge.net/
   SECTION:=net
@@ -42,7 +42,7 @@ define Package/$(PKG_NAME)/Default
   SUBMENU:=Filesystem
 endef
 
-define Package/$(PKG_NAME)/Default/description
+define Package/owfs/Default/description
   OWFS is a suite of programs that designed to make the 1-wire bus and its
   devices easily accessible. The underlying principle is to create a virtual
   filesystem, with the unique ID being the directory, and the individual
@@ -94,7 +94,7 @@ define Package/libow/config
 endef
 
 define Package/libow/description
-  $(call Package/$(PKG_NAME)/Default/description)
+  $(call Package/owfs/Default/description)
 
   This package contains the OWFS library.
 endef
@@ -106,7 +106,7 @@ define Package/libow-capi
 endef
 
 define Package/libow-capi/description
-  $(call Package/$(PKG_NAME)/Default/description)
+  $(call Package/owfs/Default/description)
 
   This package contains the OWFS C-API library.
 endef
@@ -122,7 +122,7 @@ define Package/owshell
 endef
 
 define Package/owshell/description
-  $(call Package/$(PKG_NAME)/Default/description)
+  $(call Package/owfs/Default/description)
 
   This package contains the OWFS shell utilities.
 endef
@@ -135,7 +135,7 @@ define Package/owfs
 endef
 
 define Package/owfs/description
-  $(call Package/$(PKG_NAME)/Default/description)
+  $(call Package/owfs/Default/description)
 
   This package contains the OWFS fuse filesystem.
 endef
@@ -150,7 +150,7 @@ define Package/owhttpd
 endef
 
 define Package/owhttpd/description
-  $(call Package/$(PKG_NAME)/Default/description)
+  $(call Package/owfs/Default/description)
 
   This package contains the OWFS http server.
 endef
@@ -161,7 +161,7 @@ define Package/owftpd
 endef
 
 define Package/owftpd/description
-  $(call Package/$(PKG_NAME)/Default/description)
+  $(call Package/owfs/Default/description)
 
   This package contains the OWFS ftp server.
 endef
@@ -172,7 +172,7 @@ define Package/owserver
 endef
 
 define Package/owserver/description
-  $(call Package/$(PKG_NAME)/Default/description)
+  $(call Package/owfs/Default/description)
 
   This package contains the OWFS network server.
 endef
index 09e0ef9e7099c100562f5a97990e1471b7c03724..264ae9f0a9cd3cc3dec0befa9325f3c1203179b0 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=screen
-PKG_VERSION:=4.3.1
+PKG_VERSION:=4.5.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=97db2114dd963b016cd4ded34831955dcbe3251e5eee45ac2606e67e9f097b2d
 PKG_SOURCE_URL:=@GNU/screen
-PKG_MD5SUM:=5bb3b0ff2674e29378c31ad3411170ad
 
 PKG_LICENSE:=GPL-3.0+
 PKG_LICENSE_FILES:=
index 0c11506b71cd321f030e9d94ac380bd78db84ec0..fbdac53d9b38f329156fbca5fc602bffa7fac84f 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ttyd
-PKG_VERSION:=1.3.0
+PKG_VERSION:=1.3.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
index 2e9f96a8b62cdcaa852446d36316d6d5f203c193..4f78d777d6b960a26ed7f2757f3cf45dd3823236 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=vim
-PKG_VERSION:=7.4
-PKG_RELEASE:=3
-VIMVER:=74
+PKG_VERSION:=8.0.069
+PKG_RELEASE:=4
+VIMVER:=80
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=ftp://ftp.vim.org/pub/vim/unix/
-PKG_MD5SUM:=607e135c559be642f210094ad023dc65
+PKG_MD5SUM:=457543a7754b0d3c1c0aa4d4c3bb4070
 PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)$(VIMVER)
@@ -41,6 +41,12 @@ define Package/vim-full
   TITLE+= (Normal)
 endef
 
+
+define Package/vim-fuller
+  $(call Package/vim/Default)
+  TITLE+= (Big)
+endef
+
 define Package/vim-runtime
   $(call Package/vim/Default)
   TITLE+= (runtime files)
@@ -78,6 +84,12 @@ define Package/vim-full/description
  (Normal build)
 endef
 
+
+define Package/vim-fuller/description
+ Vim is an almost compatible version of the UNIX editor Vi.
+ (Big build)
+endef
+
 define Package/vim-runtime/description
  Vim is an almost compatible version of the UNIX editor Vi.
  (Runtime files)
@@ -138,6 +150,20 @@ define Build/Compile/vim-full
 endef
 endif
 
+ifneq ($(CONFIG_PACKAGE_vim-fuller),)
+define Build/Compile/vim-fuller
+       $(call Build/Configure/Default, \
+               --with-features=big \
+               --enable-multibyte \
+       )
+       +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
+               DESTDIR="$(PKG_INSTALL_DIR)" all
+       $(CP) $(PKG_BUILD_DIR)/src/$(PKG_NAME) $(PKG_BUILD_DIR)/vim_big
+endef
+endif
+
+
+
 ifneq ($(CONFIG_PACKAGE_xxd),)
 define Build/Compile/xxd
        +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
@@ -155,6 +181,7 @@ endef
 define Build/Compile
 $(call Build/Compile/vim)
 $(call Build/Compile/vim-full)
+$(call Build/Compile/vim-fuller)
 $(call Build/Compile/vim-runtime)
 $(call Build/Compile/xxd)
 endef
@@ -173,6 +200,17 @@ define Package/vim-full/install
        $(INSTALL_CONF) ./files/vimrc.full $(1)/usr/share/vim/vimrc
 endef
 
+
+define Package/vim-fuller/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/vim_big $(1)/usr/bin/vim
+       $(INSTALL_DIR) $(1)/usr/share/vim
+       $(CP) -r $(PKG_INSTALL_DIR)/usr/share/vim/vim$(VIMVER) $(1)/usr/share/vim
+       $(INSTALL_CONF) ./files/vimrc.full $(1)/usr/share/vim/vimrc
+endef
+
+
+
 define Package/vim-runtime/install
        $(CP) $(PKG_INSTALL_DIR)/* $(1)
        rm -rf $(1)/usr/share/vim/vim$(VIMVER)/doc
@@ -189,6 +227,7 @@ endef
 
 $(eval $(call BuildPackage,vim))
 $(eval $(call BuildPackage,vim-full))
+$(eval $(call BuildPackage,vim-fuller))
 $(eval $(call BuildPackage,vim-runtime))
 $(eval $(call BuildPackage,vim-help))
 $(eval $(call BuildPackage,xxd))
diff --git a/utils/vim/patches/001-compile.patch b/utils/vim/patches/001-compile.patch
deleted file mode 100644 (file)
index 6740f1a..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
---- a/src/auto/configure
-+++ b/src/auto/configure
-@@ -12294,37 +12294,8 @@ _ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
- $as_echo_n "checking uint32_t is 32 bits... " >&6; }
--if test "$cross_compiling" = yes; then :
--  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check uint32_t when cross-compiling." >&5
--$as_echo "$as_me: WARNING: cannot check uint32_t when cross-compiling." >&2;}
--else
--  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h.  */
--
--#ifdef HAVE_STDINT_H
--# include <stdint.h>
--#endif
--#ifdef HAVE_INTTYPES_H
--# include <inttypes.h>
--#endif
--main() {
--  uint32_t nr1 = (uint32_t)-1;
--  uint32_t nr2 = (uint32_t)0xffffffffUL;
--  if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
--  exit(0);
--}
--_ACEOF
--if ac_fn_c_try_run "$LINENO"; then :
--  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: assuming ok" >&5
- $as_echo "ok" >&6; }
--else
--  as_fn_error "WRONG!  uint32_t not defined correctly." "$LINENO" 5
--fi
--rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
--  conftest.$ac_objext conftest.beam conftest.$ac_ext
--fi
--
--
- bcopy_test_prog='
- #include "confdefs.h"
index cd334f2db737e680e1bd15103e9e694c150df031..c21789ce568a2629054eb653b2623227c6246c9b 100644 (file)
@@ -9,8 +9,8 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=zoneinfo
-PKG_VERSION:=2016j
-PKG_VERSION_CODE:=2016j
+PKG_VERSION:=2017a
+PKG_VERSION_CODE:=2017a
 PKG_RELEASE:=1
 
 #As i couldn't find real license used "Public Domain"
@@ -20,14 +20,14 @@ PKG_LICENSE:=Public Domain
 PKG_SOURCE:=tzdata$(PKG_VERSION).tar.gz
 PKG_SOURCE_CODE:=tzcode$(PKG_VERSION_CODE).tar.gz
 PKG_SOURCE_URL:=http://www.iana.org/time-zones/repository/releases
-PKG_MD5SUM:=db361d005ac8b30a2d18c5ca38d3e8ab
+PKG_MD5SUM:=cb8274cd175f8a4d9d1b89895df876dc
 
 include $(INCLUDE_DIR)/package.mk
 
 define Download/tzcode
    FILE=$(PKG_SOURCE_CODE)
    URL=$(PKG_SOURCE_URL)
-   MD5SUM:=0684b98eb184fab250b6ca946862078d
+   MD5SUM:=eef0bfac7a52dce6989a7d8b40d86fe0
 endef
 
 $(eval $(call Download,tzcode))