Shorewall(6): add full packages.
--- /dev/null
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Comment: LEDE GnuPG key for unattended build jobs
+
+mQINBFeXZ7wBEAC3QZ+jhWrdj2XW9AdZpZrgHETZCW7lXxI3pJ2kS4UXNq+40KR2
+GJOdsXDnLb7ZiHNn6yio6qKLXFD/bimxK+22HSJlc3LSF2kKzNrgKoFR2rIKbL3c
+Us7GpWY8VqGTrfwR6OQNcoWqa1n5/tK9xuqKhfpoA2Eci8K+w5YCzCmnOz2vzbgS
+ptuFshTKYI2Z/DLQZyP+OQkEYPfCdani2KsISn4DTx8xFjmW/sb/zf0isemTwWyK
+Oh76FTa0tYdjTtAv3JHqyr2XkddM/oUSc09baCOfhUdo7Ep5rUqKw7BQsjreBYoZ
+WcL/hmlIksUrFlqo/HRpoBgCZpSjsF/Z9otZpSugMHVVlRCnAKQiWxWAd+V+y2FG
+q79myPgiMkbkaIrCelrUhDFRQ5wTnfAppFolw+xtT9bwdkwxZDNBe6PCYuLqD8wg
+jtDtt3q5UaUOMGJrMDKZ0Wi6ycdl/sM59kLfyBV4ybmYkwOLTlMvOATiyUZeJJZO
+2bTKBvD+izsx3Ea4VLPWYSFmk6QwaOMtj6tcXwBgtljzqMJ0S9Gubmopy3WAkP/m
+/6ETJpuIupqEtvbRTX4O/+qnBgY40aQX7B4NgJi2SypP/WML5v2B2amLlhTcN+we
+ULWyH9KvfKny5mrtG5C9xq1eAgKtB2QEDEbRyz34DWVWGpqIY1mscaNv8wARAQAB
+tFtMRURFIEJ1aWxkIFN5c3RlbSAoTEVERSBHbnVQRyBrZXkgZm9yIHVuYXR0ZW5k
+ZWQgYnVpbGQgam9icykgPGxlZGUtYWRtQGxpc3RzLmluZnJhZGVhZC5vcmc+iQI4
+BBMBAgAiBQJXl2e8AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDNhLzt
+YmRx8aJ2D/9eRQWekaeX8eAcAgzguFS12ODlg23lJx00d0zLhZcA6LycYJRmFN+M
+0tsVDZ6y7bLy1/h0YFYvYlJk4ZE+6sb4I/GSkMyqeZAy8whELYfEphXVYx0/wgyn
+d57wE0lDo8/zmt3rK1eD0zJioN7cL3A/t3L++al4gwmqtTfUIl96AXc3YBe/rwXS
+i7ShENVKYjTaMugP5BJ9kUZuaIjmXZWvREbURgBMWR7uR56XKJBwDBQMtHq2AoZs
+2iNR3dG8r70Sb/cMSgAqhwDZfeV71r7+Pd+asvxYb0JeNNgZ2ss/BA5yapUKZLgu
+hV6y7JSfHdb7q1t1j/wfqgYtQJB5K31JGxj+yaRxcF8LbvGZBNhaIJV+s4HmTeq4
+yI20pCRNd8lLY80XAISTk8DPwgTLOvMPKbDYW4+/FC8J6qoD9DByQxDduUWn5uD4
+LbVZ96v9+Ltf9LJzaxFVSE/dSsvgFNjo6u29ueG6aTxUIOc4Wi3mC0qNhqoyAbg6
+Xg922EF/sd6hf3aQU9rpcPbcsNognGgrKfyREvMlBsQ9U3pRcKPlG05bfUcayXkh
+59qIVU4kKCaW6LBy1fkBYyY3Nj5eoCAe9fm9ivi58FdI+7sKc2A1fMuVS83B370s
+qAsu6v2rvqYz6nS5VFIWYJmL8kbUmf5FWwbucH7/jr9s3bB0wUHcI7kCDQRXl2h/
+ARAAztMdT5ig5MKM02TFsmGvdc0SQVHPJymPTh6i/XwAbSeaTErvGLP3ke+2cdCj
+MOes4steII5MU6aD57i1zU/6xhZ2Zr8sZ4fCOzfqoI4AOIeeuiO+I5by2P+M+vj2
+v/U7KMWeixFjTkotWcvGGriP1jcRY1FHMrTfq/5lZYNHHzz/2zvszq02/WP+b/Gh
+1Rf1yfr5DlXKw6Q+7fkCg8BWfLichTtHiR0OcO0mtD6ECxz+iqDElbSAeE9Q02fO
+FTF4snHwCJvykHQ4EKudEoXcIEOR8TyH2tKorD821E/DSV9OA9XIBpDHavFQ3GCs
+29GQcqci46nOLn/LWqgTB86sgH4mnQrGsceVYzf8avM8c8TyxkufBd/k01lPn1sK
+/573AWdFRXVmOCMmlxPcI8k1+iGH1C7z0aX43NvhEI3xfbgTK8E/7Klrn/5xXUu2
+UBYov0gKaZRy3LpGF/ySR1pvnHZmUP58my2LDfWDHdHrGmkjLaqyk/+qC9NKwUQB
+S7jV7Mm15B0bkR7grLx+vN5lXVeGwyDL2dbRT0+cH8loHb+lBOR8AbDm4SJXdaRd
+DtPyq85KN+jm+9NToRz+oydL9rmguU5zRcIDtaFiYr7ZtkLJU3U02rp0uf/DdytF
+tzS/YEbpgg2Ui37q55ml707zJL2DvBffy/F2kiNpVfZ4u5cAEQEAAYkEPgQYAQIA
+CQUCV5dofwIbAgIpCRDNhLztYmRx8cFdIAQZAQIABgUCV5dofwAKCRD5NSWoi2mQ
+KQ/PD/9c/snQ2iok9H9PFinYmuOA6tf4Nbn0yX9oOTslDJ8ot6SB4OXGXGeT0lvq
+ytbYVeAlifBElYRVFYZt76dbjhqmsmDMZsYHbaXIYLZSPuTETVE3pZrpWhm9Qkhb
+eEyihAofgWleBmJcd8VXnrzsNkJGNokA6gqZ/ldqJtzMwkeHM58DHo/gFNNNlxe8
+M83PHA0rN48F6DU4tZeEvz+/QGrnn4DWcBhmWo+2ZLvTLI4cB9389j8ks7FFFXLi
+1gnWigWr29uGv8iZpAneY6414cZW3G79wTIwAATRvIvrI9pcvriUrMdOycTcwXOa
+d9eXq/mJdg8dEpKiIA8Vc9UNdT93aZt8r610LbORmdq+wFjEhWvh7xKu9hFm/3UM
+QUaVl3jsIlqZT4G8es+RLHnKVOzLMRovqRKRbsCsXxIxsVqxzhKQ5+wLCpisVNfH
+51WCTSLoAz7s0jKLCSzueUIbhV2vNBM5lFLNCl35UgN1aYuRusI7GyqkPT/A8VWj
+xVxn7o2SBIwyu4hZ4jFsq3qHOygIuRtdOHRX1vREmp7FA3+fVnx0CJUilfnGjhf/
+oydfEC6GuWUn9kTEf2eJsONwQ9gPQ9QC9cFGRFRrVwQcejr7V+DBZSdzY8YLvn7R
+qR3MmlXdpWijqj7noi2C+kbVqbLiX/LWe2axgKE+UTB7lGdl7v25D/99uFIzJmqA
+dhEAEQgb17L7kOV0MOBwFtZ6fElJaQEQV49JiQmgTzALDgXD0ACpT5qoQYCBTwuz
+m2D93ekfMnzxF8PmwW6a2czrG1KoRir2EayhgEoOJuWHLneb5nUc7X3krGNSJ3my
++lMw2QA3wIX7EAS6JJUnZFp7wawecdCekRF9ZE1Z/ZBiUZR17DkbAoYjEYZFxiXA
+cG6sFEM9uTG+y91RcQPq8tY+jw2d76ZjHSnoKjnP2VxsmtiWQ7yLj/5tjrVzQftI
+bbQQTK4V4O4aV2Y1wgkDbNPNJ6t0biQkHQv+4vaLMonOfMgGdWdYJ4hE9nlt61Aq
+GidOnyMxOb+2XpVypOoOPcTyTqe8BUjCcvHQwukZLk3XE7OQoR0wZBFhOr4JCYzT
+xIz9XYrSykZgkZMp8O4zbP+j1ZTXtJEvvPHjOS1HkL1O1H+W98dnl+oQMNQhHvvE
+6UfWEolfuWvBpfP12pUnRQAAyCBql4JAFeoCJEdJGkz8oFOFxv0kCpd7JM1gWEs2
+u0w61+5MelmliHImWiyhgV4XyKW6jeKWIpe9E5L7b8SPI5HHdT7opy3G7aD1XI3k
+jdaIiMnJbq0nSvc5VqRE7Uv0EEcepvFeiuYHYydluxRyNf/ts2JskfEnsOc1JiS+
+GPeIoGmFL85qtFOzc4sqYQGhLj9iMRfmNw==
+=W2Tk
+-----END PGP PUBLIC KEY BLOCK-----
--- /dev/null
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Comment: LEDE 17.01 "Reboot" public key
+
+mQINBFh9DQ8BEACmjR9z4mEXjTWBTcqHI8U38III55qStU4zX4mtYEm8KjaNyBu0
+F8ghe22IAPQcHuvQh0lzr2AoTYi+ZAUlHrLb3s+YdJJD2KoSD1nXW8PgtoT92tai
+utJjSKsB2ZWJc4nskAYXTkDmhTuuHBEg9hvljhXkrPxmcEDN/v1f5fv82U8JLYwt
+g1mGJmW7SsdKtkJbAmEMCi/MFFA2fxLNV33qGhzm4UeAsUrLIGBjbCtU/BK8Im28
+eAF9VP08OUK/QX7te6K6qumvuEIIc/GG4yatdbxltS1SjWYMS0vpqXm4v50CoMaB
+/XCcdq1zlIyIxQW9UF6xJDLhsHv/3iOginR/vRDbdRWk/YPwlx/d9h9GK309YhXu
+GUK/lrBHIZwZ4VEowYjK76isXmRuU9ZeTK9SeKdIyLzYg5NIXW9cvGR+4NKIqfmE
+xxbVupm7Vc+3n4KUdS2t9SLXdkG+YYmyDabftyuACU2+xeHyKcUBn4yxbrcBp5Rs
+5RgOIn/2BtiEQNSc8AagU1ie57VGErrwrpdW/Cmxrs+KG7Io8Pwv+nG9M53DqPwb
+Zuun75iuni9wAR5IVUsUWdIoalb/I4ht58FDOt2iS/KdVwi8yyCHS8gH1J3MzZWP
+Yy9k0pgup54CTXGv/KzDOAsPZzkwNiziWIVE0N49bZFkO0CXgAufOAEtewARAQAB
+tFNMRURFIFJlbGVhc2UgQnVpbGRlciAoMTcuMDEgIlJlYm9vdCIgU2lnbmluZyBL
+ZXkpIDxsZWRlLWRldkBsaXN0cy5sZWRlLXByb2plY3Qub3JnPokCPgQTAQIAKAUC
+WH0NDwIbAwUJA8JnAAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQgzxgENUr
+u2tMaA//aRvfrOoMTVtjw+Pru+hBC7IhkusJ70x8gUxSPmHZX0+KvIvILyAeVEho
+TW5lMwwo6b66GcBmP53qu/rech8HyunyyDUYFEvdE/ym3uO6NpE/3N/Z69TJiC+k
+1imElx5njTZkH/qZSClqN8j6ehspywnSKWNfSOM/9K1G7qtWgiqIaDYa+sdtRHjx
+oh4dtKiauUced0C1i7V1vT1ko8iZKWFiwj9GJSaoVxyUwI2fG3iV2qdcinPCL0nU
+BfVIhU5cXMZ6VtVg5Ly6NqUbrhZzVVl8DMnu5z4MOLZWseob4LhK5W0v+DUTezJS
+Cvei+woJ3SIy0CLXe6eDKwbCS5kCaoNbExeTnSz7/Mg14NjREhtWkq79rnHrH9MV
+QAXyjmd3q0D5sDLzk8nQ3fGaH1Zg+o+VECkwEwz4ypctXqRAcHyIkYHmv8rFYlQY
+dJlfs1NgZzk9EWfZ0/RLUdqNx6beKm27r2W1j+gcaM01sk5q9TPZeuNHh8psFlCD
+b5mq6XBstA9NwN9pg5zS+UkfjjMU5FiBIEVv4Lt/dblNkjID/+XUBkHpSAz13GDW
+k0ElkSBgBvz8TSm68EUGTfTVhK21x+1x15/8AUoV8V+4txncMhnJNmrEcKolnMeF
+96xgcoHpPszlHxjiwS6hrFPDyhfYwU9plDI7ojcIleqK98XjRHY=
+=aN5O
+-----END PGP PUBLIC KEY BLOCK-----
SDK_HOME="$HOME/sdk"
SDK_PATH=https://downloads.lede-project.org/snapshots/targets/ar71xx/generic/
-SDK=lede-sdk-ar71xx-generic_gcc-5.4.0_musl.Linux-x86_64
+SDK=lede-sdk-ar71xx-generic_gcc-5.5.0_musl.Linux-x86_64
PACKAGES_DIR="$PWD"
echo_red() { printf "\033[1;31m$*\033[m\n"; }
wget "$SDK_PATH/sha256sums.gpg" -O sha256sums.asc
# LEDE Build System (LEDE GnuPG key for unattended build jobs)
- gpg --recv 0xCD84BCED626471F1
+ gpg --import $PACKAGES_DIR/.travis/626471F1.asc
+ echo '54CC74307A2C6DC9CE618269CD84BCED626471F1:6:' | gpg --import-ownertrust
# LEDE Release Builder (17.01 "Reboot" Signing Key)
- gpg --recv 0x833C6010D52BBB6B
+ gpg --import $PACKAGES_DIR/.travis/D52BBB6B.asc
+ echo 'B09BE781AE8A0CD4702FDCD3833C6010D52BBB6B:6:' | gpg --import-ownertrust
+
gpg --verify sha256sums.asc
grep "$SDK" sha256sums > sha256sums.small
# test_package will run on the `script` step.
# test_package call make download check for very new/modified package
test_packages2() {
+ local commit_range=$TRAVIS_COMMIT_RANGE
+ if [ -z "$TRAVIS_PULL_REQUEST_SHA" ]; then
+ echo_blue "Using only the latest commit, since we're not in a Pull Request"
+ commit_range=HEAD~1
+ fi
+
# search for new or modified packages. PKGS will hold a list of package like 'admin/muninlite admin/monit ...'
- PKGS=$(git diff --diff-filter=d --name-only "$TRAVIS_COMMIT_RANGE" | grep 'Makefile$' | grep -v '/files/' | awk -F'/Makefile' '{ print $1 }')
+ PKGS=$(git diff --diff-filter=d --name-only "$commit_range" | grep 'Makefile$' | grep -v '/files/' | awk -F'/Makefile' '{ print $1 }')
if [ -z "$PKGS" ] ; then
echo_blue "No new or modified packages found!"
test_commits() {
RET=0
+ if [ -z "$TRAVIS_PULL_REQUEST_SHA" ]; then
+ echo_blue "Skipping commits tests (not in a Pull Request)"
+ return 0
+ fi
for commit in $(git rev-list ${TRAVIS_COMMIT_RANGE/.../..}); do
echo_blue "=== Checking commit '$commit'"
if git show --format='%P' -s $commit | grep -qF ' '; then
fi
subject="$(git show -s --format=%s $commit)"
- if echo "$subject" | grep -q -e '^[0-9A-Za-z,/-]\+: ' -e '^Revert '; then
+ if echo "$subject" | grep -q -e '^[0-9A-Za-z,/_-]\+: ' -e '^Revert '; then
echo_green "Commit subject line seems ok ($subject)"
else
echo_red "Commit subject line MUST start with '<package name>: ' ($subject)"
env
echo_blue "=== Travis ENV"
-while true; do
- # if clone depth is too small, git rev-list / diff return incorrect or empty results
- C="$(git rev-list ${TRAVIS_COMMIT_RANGE/.../..} | tail -n1)" 2>/dev/null
- [ -n "$C" -a "$C" != "a22de9b74cf9579d1ce7e6cf1845b4afa4277b00" ] && break
- echo_blue "Fetching 50 commits more"
- git fetch origin --deepen=50
-done
-
-if [ "$TRAVIS_PULL_REQUEST" = false ] ; then
- echo "Only Pull Requests are supported at the moment." >&2
- exit 0
+if [ -n "$TRAVIS_PULL_REQUEST_SHA" ]; then
+ while true; do
+ # if clone depth is too small, git rev-list / diff return incorrect or empty results
+ C="$(git rev-list ${TRAVIS_COMMIT_RANGE/.../..} | tail -n1)" 2>/dev/null
+ [ -n "$C" -a "$C" != "a22de9b74cf9579d1ce7e6cf1845b4afa4277b00" ] && break
+ echo_blue "Fetching 50 commits more"
+ git fetch origin --deepen=50
+ done
fi
-
if [ $# -ne 1 ] ; then
cat <<EOF
Usage: $0 (download_sdk|test_packages)
include $(TOPDIR)/rules.mk
PKG_NAME:=debootstrap
-PKG_VERSION:=1.0.87
+PKG_VERSION:=1.0.92
PKG_RELEASE:=1
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_SOURCE:=$(PKG_NAME)-udeb_$(PKG_VERSION)_all.udeb
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/d/debootstrap
-PKG_HASH:=784f5754f3287ae80715d9100a4ed04e7895be5f7b81b7b2295d335dd69d79fb
+PKG_HASH:=fa58c00529912d2cc187aa5434962376bd5ec00d3e7e9693f505a27b8848fdcf
PKG_LICENSE:=Unique
PKG_LICENSE_FILES:=debian/copyright
+++ /dev/null
---- a/usr/share/debootstrap/functions
-+++ b/usr/share/debootstrap/functions
-@@ -859,8 +859,6 @@ choose_extractor () {
-
- if [ -n "$EXTRACTOR_OVERRIDE" ]; then
- extractor="$EXTRACTOR_OVERRIDE"
-- elif type dpkg-deb >/dev/null 2>&1; then
-- extractor="dpkg-deb"
- else
- extractor="ar"
- fi
include $(TOPDIR)/rules.mk
PKG_NAME:=monit
-PKG_VERSION:=5.23.0
+PKG_VERSION:=5.24.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=dd39fe3a379c02402ba9c44c201b3ba925ebdc8f04225918820607b6c5d56713
-PKG_SOURCE_URL:=http://mmonit.com/monit/dist
+PKG_HASH:=754d1f0e165e5a26d4639a6a83f44ccf839e381f2622e0946d5302fa1f2d2414
+PKG_SOURCE_URL:=https://mmonit.com/monit/dist
PKG_LICENSE:=AGPL-3.0
PKG_LICENSE_FILES:=COPYING
CATEGORY:=Administration
DEPENDS:= +libpthread +zlib
TITLE:=System services monitoring utility
- URL:=http://mmonit.com/monit/
+ URL:=https://mmonit.com/monit/
MAINTAINER:=Etienne CHAMPETIER <champetier.etienne@gmail.com>
endef
#
-# Copyright (C) 2006-2015 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.
include $(TOPDIR)/rules.mk
PKG_NAME:=sudo
-PKG_VERSION:=1.8.14p3
+PKG_VERSION:=1.8.21p2
PKG_RELEASE:=1
PKG_LICENSE:=ISC
PKG_LICENSE_FILES:=doc/LICENSE
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.sudo.ws/dist
-PKG_HASH:=a8a697cbb113859058944850d098464618254804cf97961dee926429f00a1237
+PKG_HASH:=74c5746cd33a814e2431c39faf0d76f7f8a697379bd073862e3b156cf0d76368
PKG_INSTALL:=1
PKG_NAME:=zabbix
PKG_VERSION:=3.2.7
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_HASH:=3ea0c299bd69bc728177128740f0476bc1a2c1de438330df5bbd8f5fc6090712
--- /dev/null
+Index: zabbix-3.2.7/src/libs/zbxcommon/str.c
+===================================================================
+--- zabbix-3.2.7.orig/src/libs/zbxcommon/str.c
++++ zabbix-3.2.7/src/libs/zbxcommon/str.c
+@@ -51,7 +51,7 @@ static const char help_message_footer[]
+ void version(void)
+ {
+ printf("%s (Zabbix) %s\n", title_message, ZABBIX_VERSION);
+- printf("Revision %s %s, compilation time: %s %s\n\n", ZABBIX_REVISION, ZABBIX_REVDATE, __DATE__, __TIME__);
++ printf("Revision %s %s\n\n", ZABBIX_REVISION, ZABBIX_REVDATE);
+ puts(copyright_message);
+ }
+
PKG_NAME:=lpc21isp
PKG_VERSION:=197
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_LICENSE:=LGPL-3.0+
PKG_LICENSE_FILES:=README gpl.txt lgpl-3.0.txt
--- /dev/null
+Index: lpc21isp_197/lpc21isp.c
+===================================================================
+--- lpc21isp_197.orig/lpc21isp.c 2017-12-03 06:01:05.854070061 +0100
++++ lpc21isp_197/lpc21isp.c 2017-12-03 06:01:23.326431659 +0100
+@@ -1549,7 +1549,7 @@
+ DebugPrintf(2, "\n"
+ "Portable command line ISP\n"
+ "for NXP LPC family and Analog Devices ADUC 70xx\n"
+- "Version " VERSION_STR " compiled for " COMPILED_FOR ": " __DATE__ ", " __TIME__ "\n"
++ "Version " VERSION_STR " compiled for " COMPILED_FOR "\n"
+ "Copyright (c) by Martin Maurer, 2003-2013, Email: Martin.Maurer@clibb.de\n"
+ "Portions Copyright (c) by Aeolus Development 2004, www.aeolusdevelopment.com\n"
+ "\n");
include $(TOPDIR)/rules.mk
PKG_NAME:=lua-mosquitto
-PKG_VERSION:=0.2
+PKG_VERSION:=0.3
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_MIRROR_HASH:=c93aaf17c228917db2cc9ab1d9124971eecd818ec4da9d8f8609ca4a4e372beb
+PKG_MIRROR_HASH:=104a143131812a507e74f9debde45614d006b6ea6c3b0265b83060b14b9d3a34
PKG_SOURCE_PROTO:=git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_URL:=https://github.com/flukso/lua-mosquitto.git
CATEGORY:=Languages
TITLE:=Lua-mosquitto
DEPENDS:=+libmosquitto +lua
- MAINTAINER:=Karl Palsson <karlp@remake.is>
+ MAINTAINER:=Karl Palsson <karlp@etactica.com>
endef
define Package/lua-mosquitto/description
include $(TOPDIR)/rules.mk
PKG_NAME:=perl-cgi
-PKG_VERSION:=4.36
+PKG_VERSION:=4.38
PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.cpan.org/authors/id/L/LE/LEEJO
PKG_SOURCE:=CGI-$(PKG_VERSION).tar.gz
-PKG_HASH:=fefe84d4f2461e867f9be80f3f988e17bcbbcb4e306952cf2fd1dea7e4515490
+PKG_HASH:=8c58f4a529bb92a914b22b7e64c5e31185c9854a4070a6dfad44fe5cc248e7d4
PKG_LICENSE:=GPL Artistic-2.0
PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>, \
include $(TOPDIR)/rules.mk
PKG_NAME:=perl-inline-c
-PKG_VERSION:=0.76
+PKG_VERSION:=0.78
PKG_RELEASE:=1
-PKG_SOURCE_URL:=http://www.cpan.org/authors/id/I/IN/INGY
+PKG_SOURCE_URL:=http://www.cpan.org/authors/id/T/TI/TINITA
PKG_SOURCE:=Inline-C-$(PKG_VERSION).tar.gz
-PKG_HASH:=22e9713b4d331d3c49e4a9a9f012dbf84cec25a01e5da4f57091be287f1a9a35
+PKG_HASH:=9a7804d85c01a386073d2176582b0262b6374c5c0341049da3ef84c6f53efbc7
PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
CATEGORY:=Languages
TITLE:=C Language Support for Inline
URL:=http://search.cpan.org/dist/Inline-C/
- DEPENDS:=perl +perl-inline +perl-parse-recdescent +perlbase-config +perlbase-cwd +perlbase-data +perlbase-essential +perlbase-extutils +perlbase-file +perlbase-if
+ DEPENDS:=perl +perl-inline +perl-parse-recdescent +perlbase-config +perlbase-cwd +perlbase-data +perlbase-essential +perlbase-file +perlbase-if
endef
define Host/Configure
--- /dev/null
+--- a/Makefile.PL 2017-05-30 14:58:53.000000000 -0600
++++ b/Makefile.PL 2017-11-07 13:40:05.172119764 -0700
+@@ -82,3 +82,5 @@ package
+ MY;
+ use File::ShareDir::Install qw(postamble);
+ }
++
++1;
--- /dev/null
+#
+# Copyright (C) 2017 Philip Prindeville, Redfish Solutions, LLC
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-text-csv_xs
+PKG_VERSION:=1.34
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=http://www.cpan.org/authors/id/H/HM/HMBRAND/
+PKG_SOURCE:=Text-CSV_XS-$(PKG_VERSION).tgz
+PKG_HASH:=ea3aa6fe50e8ef9c07f4304ace98fca413c9c6cf60d84efc32c314b902e8a134
+
+PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
+PKG_MAINTAINER:=Philip Prindeville <philipp@redfish-solutions.com>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Text-CSV_XS-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-text-csv_xs
+ SUBMENU:=Perl
+ SECTION:=lang
+ CATEGORY:=Languages
+ TITLE:=Text comma-separated values manipulation routines
+ URL:=http://search.cpan.org/dist/Text-CSV_XS/
+ DEPENDS:=perl +perlbase-essential +perlbase-config +perlbase-io +perlbase-dynaloader
+endef
+
+define Build/Configure
+ $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+ $(call perlmod/Compile,,)
+endef
+
+define Package/perl-text-csv_xs/install
+ $(call perlmod/Install,$(1),Text Text/CSV_XS.pm auto/Text/CSV_XS)
+endef
+
+
+$(eval $(call BuildPackage,perl-text-csv_xs))
include $(TOPDIR)/rules.mk
PKG_NAME:=perl-uri
-PKG_VERSION:=1.71
+PKG_VERSION:=1.72
PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.cpan.org/authors/id/E/ET/ETHER/
PKG_SOURCE:=URI-$(PKG_VERSION).tar.gz
-PKG_HASH:=9c8eca0d7f39e74bbc14706293e653b699238eeb1a7690cc9c136fb8c2644115
+PKG_HASH:=35f14431d4b300de4be1163b0b5332de2d7fbda4f05ff1ed198a8e9330d40a32
PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
include $(TOPDIR)/rules.mk
PKG_NAME:=perl
-PKG_VERSION:=5.24.1
+PKG_VERSION:=5.26.1
PKG_RELEASE:=1
PKG_SOURCE_URL:=\
https://mirrors.sonic.net/cpan/src/5.0 \
https://www.cpan.org/src/5.0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_HASH:=03a77bac4505c270f1890ece75afc7d4b555090b41aa41ea478747e23b2afb3f
+PKG_HASH:=fe8208133e73e47afc3251c08d2c21c5a60160165a8ab8b669c43a420e4ec680
PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
PKG_LICENSE_FILES:=Copying Artistic README
-Dowrt:gccversion=$(CONFIG_GCC_VERSION) \
-Dowrt:target_cross='$(TARGET_CROSS)' \
-Dowrt:cflags='$(TARGET_CFLAGS_PERL) $(TARGET_CPPFLAGS_PERL)' \
- -Dowrt:ldflags='-rdynamic $(TARGET_LDFLAGS)' \
+ -Dowrt:ldflags='$(TARGET_LDFLAGS)' \
-Dowrt:libc=$(subst uClibc,uclibc,$(CONFIG_LIBC)) \
-Dowrt:ipv6=$(if $($(CONFIG_IPV6)),define,undef) \
-Dowrt:threads=$(if $(CONFIG_PERL_THREADS),yes,no) \
cppccsymbols=''
cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1'
d_casti32='define'
+d_double_style_ieee='define'
d_modflproto='undef'
doublekind='3'
fpossize='20'
cppccsymbols=''
cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1'
d_casti32='define'
+d_double_style_ieee='define'
d_modflproto='undef'
doublekind='4'
fpossize='20'
d_dlopen='define'
d_dlsymun='undef'
d_dosuid='undef'
+d_double_has_inf='define'
+d_double_has_nan='define'
+d_double_has_negative_zero='define'
+d_double_has_subnormals='define'
+d_double_style_cray='undef'
+d_double_style_ibm='undef'
+d_double_style_ieee='define'
+d_double_style_vax='undef'
d_drand48proto='define'
d_dup2='define'
d_duplocale='define'
d_ftello='define'
d_ftime='undef'
d_futimes='undef'
+d_gai_strerror='define'
d_gdbm_ndbm_h_uses_prototypes='undef'
d_gdbmndbm_h_uses_prototypes='undef'
d_getaddrinfo='define'
d_log1p='define'
d_log2='define'
d_logb='define'
+d_long_double_style_ieee='undef'
+d_long_double_style_ieee_doubledouble='undef'
+d_long_double_style_ieee_extended='undef'
+d_long_double_style_ieee_std='undef'
+d_long_double_style_vax='undef'
d_longdbl='define'
d_longlong='define'
d_lrint='define'
d_pwquota='undef'
d_qgcvt='undef'
d_quad='define'
+d_querylocale='undef'
d_re_comp='undef'
d_readdir='define'
d_readlink='define'
d_strctcpy='define'
d_strerrm='strerror(e)'
d_strerror='define'
+d_strerror_l='define'
d_strftime='define'
d_strlcat='define'
d_strlcpy='define'
db_version_major=''
db_version_minor=''
db_version_patch=''
+default_inc_excludes_dot='define'
defvoidused='15'
direntrytype='struct dirent'
dlext='so'
i_varargs='undef'
i_varhdr='stdarg.h'
i_vfork='undef'
+i_xlocale='undef'
ignore_versioned_solibs='y'
inc_version_list=' '
inc_version_list_init='0'
cppflags="$owrt:cflags"
ccflags="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $owrt:cflags"
ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
-ccdlflags="-fPIC -Wl,-rpath,$owrt:perllibpath/CORE"
+ccdlflags="-fPIC -rdynamic -Wl,-rpath,$owrt:perllibpath/CORE"
cccdlflags='-fPIC'
-ldflags=''
+ldflags="$owrt:ldflags"
ldflags_uselargefiles=''
lddlflags="-shared $owrt:ldflags"
cppccsymbols=''
cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 i386=1 __i386=1 __i386__=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1'
d_casti32='undef'
+d_double_style_ieee='define'
+d_long_double_style_ieee='define'
+d_long_double_style_ieee_extended='define'
d_modflproto='define'
doublekind='3'
fpossize='20'
cppccsymbols=''
cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 LANGUAGE_C=1 _LANGUAGE_C=1 __LANGUAGE_C=1 __LANGUAGE_C__=1 _LARGEFILE_SOURCE=1 MIPSEL=1 _MIPSEL=1 __MIPSEL=1 __MIPSEL__=1 _MIPS_FPSET=16 _MIPS_ISA=_MIPS_ISA_MIPS1 _MIPS_SIM=1 _MIPS_SZINT=32 _MIPS_SZLONG=32 _MIPS_SZPTR=32 __PIC__=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 R3000=1 _R3000=1 __R3000=1 __R3000__=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 mips=1 _mips=1 __mips=1 __mips__=1 __pic__=1 unix=1 __unix=1 __unix__=1'
d_casti32='define'
+d_double_style_ieee='define'
d_modflproto='undef'
doublekind='4'
fpossize='24'
cppccsymbols=''
cppsymbols=''
d_casti32='define'
+d_double_style_ieee='define'
+d_long_double_style_ieee_doubledouble='define'
d_modflproto='undef'
doublekind='4'
fpossize='24'
cppccsymbols=''
cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 LANGUAGE_C=1 _LANGUAGE_C=1 __LANGUAGE_C=1 __LANGUAGE_C__=1 _LARGEFILE_SOURCE=1 MIPSEL=1 _MIPSEL=1 __MIPSEL=1 __MIPSEL__=1 _MIPS_FPSET=16 _MIPS_ISA=_MIPS_ISA_MIPS1 _MIPS_SIM=1 _MIPS_SZINT=32 _MIPS_SZLONG=32 _MIPS_SZPTR=32 __PIC__=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 R3000=1 _R3000=1 __R3000=1 __R3000__=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 mips=1 _mips=1 __mips=1 __mips__=1 __pic__=1 unix=1 __unix=1 __unix__=1'
d_casti32='define'
+d_double_style_ieee='define'
d_modflproto='undef'
doublekind='3'
fpossize='24'
cppccsymbols='linux=1 unix=1'
cppsymbols='_BIG_ENDIAN=1 __BIG_ENDIAN__=1 __ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 __linux=1 __linux__=1 __unix=1 __unix__=1'
d_casti32='undef'
+d_double_style_ieee='define'
d_modflproto='undef'
doublekind='4'
fpossize='24'
# Set the version here
PERL_REVISION=5
-PERL_VERSION=24
+PERL_VERSION=26
PERL_SUBVERSION=1
# (api_revison, api_version, api_subversion) = (revision, version, 0) usually
PERL_API_REVISION=5
-PERL_API_VERSION=24
+PERL_API_VERSION=26
PERL_API_SUBVERSION=0
known_extensions='B Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Time/HiRes Time/Piece Unicode/Normalize Win32 Win32API/File Win32CORE XS/APItest XS/Typemap attrs re threads threads/shared Hash/Util/FieldHash'
cppccsymbols=''
cppsymbols='__ELF__=1 _LP64=1 __FLT_EVAL_METHOD__=0 __FXSR__=1 __GCC_ATOMIC_LLONG_LOCK_FREE=2 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1 __INT64_MAX__=9223372036854775807L __INT64_TYPE__=long\ int __INTMAX_MAX__=9223372036854775807L __INTMAX_TYPE__=long\ int __INTPTR_MAX__=9223372036854775807L __INTPTR_TYPE__=long\ int __INT_FAST16_MAX__=9223372036854775807L __INT_FAST16_TYPE__=long\ int __INT_FAST32_MAX__=9223372036854775807L __INT_FAST32_TYPE__=long\ int __INT_FAST64_MAX__=9223372036854775807L __INT_FAST64_TYPE__=long\ int __INT_LEAST64_MAX__=9223372036854775807L __INT_LEAST64_TYPE__=long\ int __LONG_MAX__=9223372036854775807L __LP64__=1 __MMX__=1 __PTRDIFF_MAX__=9223372036854775807L __PTRDIFF_TYPE__=long\ int __SIZEOF_INT128__=16 __SIZEOF_LONG_DOUBLE__=16 __SIZEOF_LONG__=8 __SIZEOF_POINTER__=8 __SIZEOF_PTRDIFF_T__=8 __SIZEOF_SIZE_T__=8 __SIZE_MAX__=18446744073709551615UL __SIZE_TYPE__=long\ unsigned\ int __SSE2_MATH__=1 __SSE2__=1 __SSE_MATH__=1 __SSE__=1 __UINT64_MAX__=18446744073709551615UL __UINT64_TYPE__=long\ unsigned\ int __UINTMAX_MAX__=18446744073709551615UL __UINTMAX_TYPE__=long\ unsigned\ int __UINTPTR_MAX__=18446744073709551615UL __UINTPTR_TYPE__=long\ unsigned\ int __UINT_FAST16_MAX__=18446744073709551615UL __UINT_FAST16_TYPE__=long\ unsigned\ int __UINT_FAST32_MAX__=18446744073709551615UL __UINT_FAST32_TYPE__=long\ unsigned\ int __UINT_FAST64_MAX__=18446744073709551615UL __UINT_FAST64_TYPE__=long\ unsigned\ int __UINT_LEAST64_MAX__=18446744073709551615UL __UINT_LEAST64_TYPE__=long\ unsigned\ int __WCHAR_MAX__=2147483647 __WCHAR_MIN__=(-2147483647\ -\ 1) __WCHAR_TYPE__=int __amd64=1 __amd64__=1 __code_model_small__=1 __k8=1 __k8__=1 __x86_64=1 __x86_64__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1'
d_casti32='undef'
+d_double_style_ieee='define'
+d_long_double_style_ieee='define'
+d_long_double_style_ieee_extended='define'
d_modflproto='define'
doublekind='3'
fpossize='16'
+++ /dev/null
---- a/hints/linux.sh
-+++ b/hints/linux.sh
-@@ -221,6 +221,24 @@ case "$libc" in
- ;;
- esac
-
-+# Ubuntu 11.04 (and later, presumably) doesn't keep most libraries
-+# (such as -lm) in /lib or /usr/lib. So we have to ask gcc to tell us
-+# where to look. We don't want gcc's own libraries, however, so we
-+# filter those out.
-+# This could be conditional on Unbuntu, but other distributions may
-+# follow suit, and this scheme seems to work even on rather old gcc's.
-+# This unconditionally uses gcc because even if the user is using another
-+# compiler, we still need to find the math library and friends, and I don't
-+# know how other compilers will cope with that situation.
-+# Still, as an escape hatch, allow Configure command line overrides to
-+# plibpth to bypass this check.
-+case "$plibpth" in
-+'') plibpth=`gcc -print-search-dirs | grep libraries |
-+ cut -f2- -d= | tr ':' $trnl | grep -v 'gcc'`
-+ plibpth="$plibpth" # Collapse all entries on one line
-+ ;;
-+esac
-+
- # Are we using ELF? Thanks to Kenneth Albanowski <kjahds@kjahds.com>
- # for this test.
- cat >try.c <<'EOM'
--- a/Makefile.SH
+++ b/Makefile.SH
-@@ -333,22 +333,11 @@ MANIFEST_SRT = MANIFEST.srt
+@@ -334,22 +334,11 @@ MANIFEST_SRT = MANIFEST.srt
!GROK!THIS!
+$spitshell >>$Makefile <<!GROK!THIS!
# Macros to invoke a copy of our fully operational perl during the build.
PERL_EXE = perl\$(EXE_EXT)
--RUN_PERL = \$(LDLIBPTH) \$(RUN) ./perl\$(EXE_EXT) -Ilib
-+RUN_PERL = \$(LDLIBPTH) \$(RUN) ./miniperl\$(EXE_EXT) -Ilib
+-RUN_PERL = \$(LDLIBPTH) \$(RUN) ./perl\$(EXE_EXT) -Ilib -I.
++RUN_PERL = \$(LDLIBPTH) \$(RUN) ./miniperl\$(EXE_EXT) -Ilib -I.
!GROK!THIS!
- ;;
-esac
--- /dev/null
+--- a/Makefile.SH 2017-10-17 11:59:52.938763142 -0600
++++ b/Makefile.SH 2017-10-17 12:13:46.202555604 -0600
+@@ -270,6 +270,7 @@ LNS = $lns
+ # NOTE: some systems don't grok "cp -f". XXX Configure test needed?
+ CPS = $cp
+ RMS = rm -f
++RMS_R = rm -rf
+ ranlib = $ranlib
+
+ # The following are mentioned only to make metaconfig include the
+@@ -731,7 +731,7 @@ bitcount.h: generate_uudmap$(HOST_EXE_EX
+ ./generate_uudmap$(HOST_EXE_EXT) $(generated_headers)
+
+ generate_uudmap$(HOST_EXE_EXT): generate_uudmap$(OBJ_EXT)
+- -@rm generate_uudmap$(HOST_EXE_EXT)
++ @$(RMS) generate_uudmap$(HOST_EXE_EXT)
+ $(LNS) $(HOST_GENERATE) generate_uudmap$(HOST_EXE_EXT)
+
+ !NO!SUBS!
+@@ -871,26 +872,26 @@ mydtrace.h: $(DTRACE_H)
+ define)
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+ $(DTRACE_MINI_O): perldtrace.d $(miniperl_objs_nodt)
+- -rm -rf mpdtrace
++ $(RMS_R) mpdtrace
+ mkdir mpdtrace
+ cp $(miniperl_objs_nodt) mpdtrace/
+ $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MINI_O) $(miniperl_dtrace_objs)
+
+ $(DTRACE_PERLLIB_O): perldtrace.d $(perllib_objs_nodt)
+- -rm -rf libpdtrace
++ $(RMS_R) libpdtrace
+ mkdir libpdtrace
+ cp $(perllib_objs_nodt) libpdtrace/
+ $(DTRACE) -G -s perldtrace.d -o $(DTRACE_PERLLIB_O) $(perllib_dtrace_objs)
+
+ $(DTRACE_MAIN_O): perldtrace.d perlmain$(OBJ_EXT)
+- -rm -rf maindtrace
++ $(RMS_R) maindtrace
+ mkdir maindtrace
+ cp perlmain$(OBJ_EXT) maindtrace/
+ $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MAIN_O) $(perlmain_dtrace_objs) || \
+ ( $(ECHO) "No probes in perlmain$(OBJ_EXT), generating a dummy $(DTRACE_MAIN_O)" && \
+ $(ECHO) >dtrace_main.c && \
+ `$(CCCMD)` $(PLDLFLAGS) dtrace_main.c && \
+- rm -f dtrace_main.c )
++ $(RMS) dtrace_main.c )
+
+ !NO!SUBS!
+ ;;
+@@ -901,13 +902,13 @@ $(LIBPERL): $& $(perllib_dep) $(DYNALOAD
+ case "$useshrplib" in
+ true)
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+- rm -f $@
++ $(RMS) $@
+ $(LD) -o $@ $(SHRPLDFLAGS) $(perllib_objs) $(DYNALOADER) $(libs)
+ !NO!SUBS!
+ case "$osname" in
+ aix)
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+- rm -f libperl$(OBJ_EXT)
++ $(RMS) libperl$(OBJ_EXT)
+ mv $@ libperl$(OBJ_EXT)
+ $(AR) qv $(LIBPERL) libperl$(OBJ_EXT)
+ !NO!SUBS!
+@@ -916,7 +917,7 @@ $(LIBPERL): $& $(perllib_dep) $(DYNALOAD
+ ;;
+ *)
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+- rm -f $(LIBPERL)
++ $(RMS) $(LIBPERL)
+ $(AR) rc $(LIBPERL) $(perllib_objs) $(DYNALOADER)
+ @$(ranlib) $(LIBPERL)
+ !NO!SUBS!
+@@ -949,7 +950,7 @@ $(MINIPERL_EXE): lib/buildcustomize.pl
+ amigaos*)
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+ lib/buildcustomize.pl: $& $(miniperl_objs) write_buildcustomize.pl
+- -@rm -f miniperl.xok
++ @$(RMS) miniperl.xok
+ $(CC) $(CLDFLAGS) -o $(MINIPERL_EXE) \
+ $(miniperl_objs) $(libs)
+ # $(LDLIBPTH) ./miniperl$(HOST_EXE_EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1'
+@@ -987,7 +988,7 @@ NAMESPACEFLAGS = -force_flat_namespace
+ esac
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+ lib/buildcustomize.pl: $& $(miniperl_objs) write_buildcustomize.pl
+- -@rm -f miniperl.xok
++ @$(RMS) miniperl.xok
+ $(CC) $(CLDFLAGS) $(NAMESPACEFLAGS) -o $(MINIPERL_EXE) \
+ $(miniperl_objs) $(libs)
+ $(LDLIBPTH) ./miniperl$(HOST_EXE_EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1'
+@@ -998,8 +999,8 @@ lib/buildcustomize.pl: $& $(miniperl_obj
+ if test "X$hostperl" != X; then
+ $spitshell >>$Makefile <<!GROK!THIS!
+ lib/buildcustomize.pl: \$& \$(miniperl_dep) write_buildcustomize.pl
+- -@rm -f miniperl.xok
+- -@rm \$(MINIPERL_EXE)
++ @\$(RMS) miniperl.xok
++ @\$(RMS) \$(MINIPERL_EXE)
+ \$(LNS) \$(HOST_PERL) \$(MINIPERL_EXE)
+ \$(LDLIBPTH) ./miniperl\$(HOST_EXE_EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1'
+ \$(MINIPERL) -f write_buildcustomize.pl 'osname' "$osname"
+@@ -1007,7 +1008,7 @@ lib/buildcustomize.pl: \$& \$(miniperl_d
+ else
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+ lib/buildcustomize.pl: $& $(miniperl_dep) write_buildcustomize.pl
+- -@rm -f miniperl.xok
++ @$(RMS) miniperl.xok
+ $(CC) $(CLDFLAGS) -o $(MINIPERL_EXE) \
+ $(miniperl_objs) $(libs)
+ $(LDLIBPTH) ./miniperl$(HOST_EXE_EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1'
+@@ -1020,7 +1021,7 @@ lib/buildcustomize.pl: $& $(miniperl_dep
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+
+ $(PERL_EXE): $& $(perlmain_dep) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) write_buildcustomize.pl
+- -@rm -f miniperl.xok
++ @$(RMS) miniperl.xok
+ !NO!SUBS!
+
+ case $osname in
+@@ -1114,8 +1115,8 @@ pod/perl5261delta.pod: pod/perldelta.pod
+ $(LNS) perldelta.pod pod/perl5261delta.pod
+
+ extra.pods: $(MINIPERL_EXE)
+- -@test ! -f extra.pods || rm -f `cat extra.pods`
+- -@rm -f extra.pods
++ -@test ! -f extra.pods || $(RMS) `cat extra.pods`
++ @$(RMS) extra.pods
+ -@for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ; do \
+ nx=`echo $$x | sed -e "s/README\.//"`; \
+ $(LNS) ../$$x "pod/perl"$$nx".pod" ; \
+@@ -1332,11 +1333,11 @@ realclean: _realcleaner _mopup
+ @echo "Note that '$(MAKE) realclean' does not delete config.sh or Policy.sh"
+
+ _clobber:
+- -@rm -f Cross/run-* Cross/to-* Cross/from-* Cross/mkdir
+- -rm -rf host
+- rm -f t/test_state
+- rm -f config.sh cppstdin Policy.sh extras.lst
+- rm -f $(MANIFEST_SRT)
++ @$(RMS) Cross/run-* Cross/to-* Cross/from-* Cross/mkdir
++ $(RMS_R) host
++ $(RMS) t/test_state
++ $(RMS) config.sh cppstdin Policy.sh extras.lst
++ $(RMS) $(MANIFEST_SRT)
+
+ clobber: _realcleaner _mopup _clobber
+
+@@ -1344,23 +1345,23 @@ distclean: clobber
+
+ # Like distclean but also removes emacs backups and *.orig.
+ veryclean: _verycleaner _mopup _clobber
+- -@rm -f Obsolete Wanted
++ $(RMS) Obsolete Wanted
+
+ # Do not 'make _mopup' directly.
+ _mopup:
+- rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c opmini.c perlmini.c generate_uudmap$(EXE_EXT) $(generated_headers)
++ $(RMS) *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c opmini.c perlmini.c generate_uudmap$(EXE_EXT) $(generated_headers)
+ -rmdir .depending
+- -@test -f extra.pods && rm -f `cat extra.pods`
+- -@test -f vms/README_vms.pod && rm -f vms/README_vms.pod
+- -rm -f perl.exp ext.libs $(generated_pods) uni.data opmini.o perlmini.o pod/roffitall
+- -rm -f perl.export perl.dll perl.libexp perl.map perl.def
+- -rm -f *perl.xok
+- -rm -f cygwin.c libperl*.def libperl*.dll cygperl*.dll *.exe.stackdump
+- -rm -f $(PERL_EXE) $(MINIPERL_EXE) $(LIBPERL) libperl.* microperl
+- -rm -f config.arch config.over $(DTRACE_H)
++ -@test -f extra.pods && $(RMS) `cat extra.pods`
++ -@test -f vms/README_vms.pod && $(RMS) vms/README_vms.pod
++ $(RMS) perl.exp ext.libs $(generated_pods) uni.data opmini.o perlmini.o pod/roffitall
++ $(RMS) perl.export perl.dll perl.libexp perl.map perl.def
++ $(RMS) *perl.xok
++ $(RMS) cygwin.c libperl*.def libperl*.dll cygperl*.dll *.exe.stackdump
++ $(RMS) $(PERL_EXE) $(MINIPERL_EXE) $(LIBPERL) libperl.* microperl
++ $(RMS) config.arch config.over $(DTRACE_H)
+
+ _cleaner1:
+- -cd os2; rm -f Makefile
++ -cd os2; $(RMS) Makefile
+ -cd pod; $(LDLIBPTH) $(MAKE) $(CLEAN)
+ -cd utils; $(LDLIBPTH) $(MAKE) $(CLEAN)
+ -@if test -f $(MINIPERL_EXE) ; then \
+@@ -1370,31 +1371,31 @@ _cleaner1:
+ else \
+ sh $(CLEAN).sh ; \
+ fi
+- rm -f realclean.sh veryclean.sh
+- -rm -f `grep -v ^# mkppport.lst | grep . | sed -e 's/$$/\/ppport.h/'`
++ $(RMS) realclean.sh veryclean.sh
++ $(RMS) `grep -v ^# mkppport.lst | grep . | sed -e 's/$$/\/ppport.h/'`
+
+ # Dear POSIX, thanks for making the default to xargs to be
+ # run once if nothhing is passed in. It is such a great help.
+
+ # Some systems do not support "?", so keep these files separate.
+ _cleaner2:
+- -rm -f core.*perl.*.? t/core.perl.*.? .?*.c
+- rm -f core *perl.core t/core t/*perl.core core.* t/core.*
+- rm -f t/$(PERL_EXE) t/rantests
+- rm -rf t/tmp*
+- rm -rf $(addedbyconf)
+- rm -f $(FIRSTMAKEFILE) $(FIRSTMAKEFILE).old makefile.old utils/Makefile
+- rm -f $(private)
+- rm -rf $(unidatafiles) $(unidatadirs)
+- rm -rf lib/auto
+- rm -f lib/.exists lib/*/.exists lib/*/*/.exists
+- rm -f h2ph.man
+- rm -rf .config
+- rm -f preload
+- rm -f pod2htmd.tmp
+- rm -rf pod/perlfunc pod/perlipc
++ $(RMS) core.*perl.*.? t/core.perl.*.? .?*.c
++ $(RMS) core *perl.core t/core t/*perl.core core.* t/core.*
++ $(RMS) t/$(PERL_EXE) t/rantests
++ $(RMS_R) t/tmp*
++ $(RMS_R) $(addedbyconf)
++ $(RMS) $(FIRSTMAKEFILE) $(FIRSTMAKEFILE).old makefile.old utils/Makefile
++ $(RMS) $(private)
++ $(RMS_R) $(unidatafiles) $(unidatadirs)
++ $(RMS_R) lib/auto
++ $(RMS) lib/.exists lib/*/.exists lib/*/*/.exists
++ $(RMS) h2ph.man
++ $(RMS_R) .config
++ $(RMS) preload
++ $(RMS) pod2htmd.tmp
++ $(RMS_R) pod/perlfunc pod/perlipc
+ -rmdir ext/B/lib
+- rm -f so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR)
++ $(RMS) so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR)
+ -rmdir lib/version lib/threads lib/inc/ExtUtils lib/inc lib/encoding
+ -rmdir lib/autodie/exception lib/autodie/Scope lib/autodie lib/XS
+ -rmdir lib/Win32API lib/VMS lib/Unicode/Collate/Locale
+@@ -1443,11 +1444,11 @@ _realcleaner:
+ _verycleaner:
+ @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=veryclean
+ @$(LDLIBPTH) $(MAKE) _cleaner2
+- -rm -f *~ *.orig */*~ */*.orig */*/*~ */*/*.orig
++ $(RMS) *~ *.orig */*~ */*.orig */*/*~ */*/*.orig
+
+ .PHONY: lint
+ lint: $(c)
+- rm -f *.ln
++ $(RMS) *.ln
+ lint $(lintflags) -DPERL_CORE -D_REENTRANT -DDEBUGGING -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(c)
+
+ cscopeflags = -Rb # Recursive, build-only.
+@@ -1505,7 +1506,7 @@ case "$targethost" in
+ '') $spitshell >>$Makefile <<'!NO!SUBS!'
+ test_prep test-prep: test_prep_pre $(MINIPERL_EXE) $(unidatafiles) $(PERL_EXE) \
+ $(dynamic_ext) $(TEST_PERL_DLL) runtests $(generated_pods)
+- cd t && (rm -f $(PERL_EXE); $(LNS) ../$(PERL_EXE) $(PERL_EXE))
++ cd t && ($(RMS) $(PERL_EXE); $(LNS) ../$(PERL_EXE) $(PERL_EXE))
+
+ !NO!SUBS!
+ ;;
+@@ -1555,7 +1556,7 @@ test_prep test-prep: test_prep_pre \$(MI
+ $to config.sh
+ # --- For lib/diagnostics.t with -Duseshrplib
+ $to \$(PERL_EXE)
+- cd t && (rm -f \$(PERL_EXE); \$(LNS) ../\$(PERL_EXE) \$(PERL_EXE)) && cd ..
++ cd t && (\$(RMS) \$(PERL_EXE); \$(LNS) ../\$(PERL_EXE) \$(PERL_EXE)) && cd ..
+ $to t/\$(PERL_EXE)
+
+ !GROK!THIS!
+@@ -1565,7 +1566,7 @@ esac
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+ test_prep_reonly: $(MINIPERL_EXE) $(PERL_EXE) $(dynamic_ext_re) $(TEST_PERL_DLL)
+ $(MINIPERL) make_ext.pl $(dynamic_ext_re) MAKE="$(MAKE)" LIBPERL_A=$(LIBPERL) LINKTYPE=dynamic
+- cd t && (rm -f $(PERL_EXE); $(LNS) ../$(PERL_EXE) $(PERL_EXE))
++ cd t && ($(RMS) $(PERL_EXE); $(LNS) ../$(PERL_EXE) $(PERL_EXE))
+ !NO!SUBS!
+
+ case "$targethost" in
+@@ -1620,7 +1621,7 @@ minitest_prep:
+ @echo "You may see some irrelevant test failures if you have been unable"
+ @echo "to build lib/Config.pm, or the Unicode data files."
+ @echo " "
+- - cd t && (rm -f $(PERL_EXE); $(LNS) ../$(MINIPERL_EXE) $(PERL_EXE))
++ - cd t && ($(RMS) $(PERL_EXE); $(LNS) ../$(MINIPERL_EXE) $(PERL_EXE))
+
+ MINITEST_TESTS = base/*.t comp/*.t cmd/*.t run/*.t io/*.t re/*.t opbasic/*.t op/*.t uni/*.t perf/*.t
+
--- /dev/null
+--- a/Makefile.SH 2017-10-15 18:57:08.436234652 -0600
++++ b/Makefile.SH 2017-10-15 19:02:47.587658819 -0600
+@@ -327,7 +327,7 @@ PATH_SEP = $p_
+ # Macros to invoke a copy of miniperl during the build. Targets which
+ # are built using these macros should depend on \$(MINIPERL_EXE)
+ MINIPERL_EXE = miniperl\$(EXE_EXT)
+-MINIPERL = \$(LDLIBPTH) ./miniperl\$(EXE_EXT) -Ilib
++MINIPERL = \$(LDLIBPTH) ./miniperl\$(EXE_EXT) -Ilib -I.
+
+ # Macros to invoke sort the MANIFEST during build
+ MANIFEST_SRT = MANIFEST.srt
+@@ -990,7 +990,7 @@ NAMESPACEFLAGS = -force_flat_namespace
+ @$(RMS) miniperl.xok
+ $(CC) $(CLDFLAGS) $(NAMESPACEFLAGS) -o $(MINIPERL_EXE) \
+ $(miniperl_objs) $(libs)
+- $(LDLIBPTH) ./miniperl$(HOST_EXE_EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1'
++ $(LDLIBPTH) ./miniperl$(HOST_EXE_EXT) -w -Ilib -I. -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1'
+ $(MINIPERL) -f write_buildcustomize.pl
+ !NO!SUBS!
+ ;;
+@@ -1001,16 +1001,16 @@ lib/buildcustomize.pl: $& $(miniperl_obj
+ @\$(RMS) miniperl.xok
+ @\$(RMS) \$(MINIPERL_EXE)
+ \$(LNS) \$(HOST_PERL) \$(MINIPERL_EXE)
+- \$(LDLIBPTH) ./miniperl\$(HOST_EXE_EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1'
++ \$(LDLIBPTH) ./miniperl\$(HOST_EXE_EXT) -w -Ilib -I. -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1'
+ \$(MINIPERL) -f write_buildcustomize.pl 'osname' "$osname"
+ !GROK!THIS!
+ else
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+ lib/buildcustomize.pl: $& $(miniperl_dep) write_buildcustomize.pl
+ @$(RMS) miniperl.xok
+ $(CC) $(CLDFLAGS) -o $(MINIPERL_EXE) \
+ $(miniperl_objs) $(libs)
+- $(LDLIBPTH) ./miniperl$(HOST_EXE_EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1'
++ $(LDLIBPTH) ./miniperl$(HOST_EXE_EXT) -w -Ilib -I. -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1'
+ $(MINIPERL) -f write_buildcustomize.pl
+ !NO!SUBS!
+ fi
+--- a/cpan/Devel-PPPort/PPPort_pm.PL 2017-07-18 16:59:59.000000000 -0600
++++ b/cpan/Devel-PPPort/PPPort_pm.PL 2017-10-15 19:19:27.341543182 -0600
+@@ -15,6 +15,7 @@
+
+ use strict;
+ $^W = 1;
++push(@INC, '.');
+ require "parts/ppptools.pl";
+
+ my $INCLUDE = 'parts/inc';
+--- a/cpan/Devel-PPPort/ppport_h.PL 2017-07-18 16:59:59.000000000 -0600
++++ b/cpan/Devel-PPPort/ppport_h.PL 2017-10-15 19:27:16.594178623 -0600
+@@ -14,6 +14,7 @@
+ ################################################################################
+
+ package Devel::PPPort;
++push(@INC, '.');
+ require "PPPort.pm";
+ rename 'ppport.h', 'ppport.old' if -f 'ppport.h';
+ unlink "ppport.old" if WriteFile("ppport.h") && -f 'ppport.h';
+--- a/cpan/Devel-PPPort/PPPort_xs.PL 2017-07-18 16:59:59.000000000 -0600
++++ b/cpan/Devel-PPPort/PPPort_xs.PL 2017-10-15 19:38:09.296679968 -0600
+@@ -15,6 +15,7 @@
+
+ use strict;
+ $^W = 1;
++push(@INC, '.');
+ require "parts/ppptools.pl";
+
+ my %SECTION = (
+--- a/cpan/Unicode-Collate/Makefile.PL 2017-07-18 16:49:51.000000000 -0600
++++ b/cpan/Unicode-Collate/Makefile.PL 2017-10-15 20:19:31.890439791 -0600
+@@ -6,7 +6,7 @@ my $clean = {};
+ if (-f "Collate.xs") {
+ print "Making header files for XS...\n";
+
+- do 'mkheader' or die $@ || "mkheader: $!";
++ do './mkheader' or die $@ || "mkheader: $!";
+
+ $clean = { FILES => 'ucatbl.h' };
+ }
# This makefile simplifies perl module builds.
#
-PERL_VERSION:=5.24
+PERL_VERSION:=5.26
# Build environment
HOST_PERL_PREFIX:=$(STAGING_DIR_HOSTPKG)/usr
(cd $(if $(3),$(3),$(PKG_BUILD_DIR)); \
PERL_MM_USE_DEFAULT=1 \
$(2) \
- $(PERL_CMD) -MConfig -e '$$$${tied %Config::Config}{cpprun}="$(GNU_TARGET_NAME)-cpp -E"; do "Makefile.PL"' \
+ $(PERL_CMD) -MConfig -e '$$$${tied %Config::Config}{cpprun}="$(GNU_TARGET_NAME)-cpp -E"; unshift(@INC, "."); unless (defined (do "./Makefile.PL")) { if ($$$$@) { die "couldn\047t parse Makefile.PL: $$$$@"; } elsif ($$$$!) { die "Could\047t run Makefile.PL: $$$$!"; } }; die "No Makefile generated!" unless -f "Makefile";' \
$(1) \
AR=ar \
CC=$(GNU_TARGET_NAME)-gcc \
PECL_LONGNAME:=Extended HTTP Support
PKG_VERSION:=3.1.0
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_HASH:=e3de67b156e7d5f6c2e5eb1e2b5f0acceb7004f1260d68c9f8b2c0f9629aabf0
PKG_NAME:=php7-pecl-http
--with-http-libevent-dir="$(STAGING_DIR)/usr" \
--with-http-libidn-dir="$(STAGING_DIR)/usr"
-$(eval $(call PECLPackage,http,$(PECL_LONGNAME),+icu +libcurl +librt +libevent2 +libidn +php7-mod-iconv +php7-mod-session +php7-pecl-raphf +php7-pecl-propro,30))
+$(eval $(call PECLPackage,http,$(PECL_LONGNAME),+icu +libcurl +librt +libevent2 +libidn +php7-mod-hash +php7-mod-iconv +php7-mod-session +php7-pecl-raphf +php7-pecl-propro,30))
$(eval $(call BuildPackage,$(PKG_NAME)))
include $(TOPDIR)/rules.mk
PKG_NAME:=php
-PKG_VERSION:=7.1.10
-PKG_RELEASE:=1
+PKG_VERSION:=7.1.12
+PKG_RELEASE:=2
PKG_MAINTAINER:=Michael Heimpold <mhei@heimpold.de>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.php.net/distributions/
-PKG_HASH:=2b8efa771a2ead0bb3ae67b530ca505b5b286adc873cca9ce97a6e1d6815c50b
+PKG_HASH:=a0118850774571b1f2d4e30b4fe7a4b958ca66f07d07d65ebdc789c54ba6eeb3
PKG_FIXUP:=libtool autoreconf
PKG_BUILD_PARALLEL:=1
ftp \
gettext gd gmp \
hash \
- iconv intl \
+ iconv imap intl \
json \
ldap \
mbstring mcrypt mysqli \
PKG_CONFIG_DEPENDS:= \
$(patsubst %,CONFIG_PACKAGE_php7-mod-%,$(PHP7_MODULES)) \
- CONFIG_PHP7_FILTER CONFIG_PHP7_LIBXML CONFIG_PHP7_SYSTEMTZDATA
+ CONFIG_PHP7_FILTER CONFIG_PHP7_LIBXML CONFIG_PHP7_SYSTEMTZDATA CONFIG_PHP7_LIBFREETYPE
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
This package contains the FastCGI Process Manager of the PHP7 interpreter.
endef
+define Package/php7-mod-gd/config
+ config PHP7_LIBFREETYPE
+ bool "Enable Freetype 2 support in php7-mod-gd"
+ depends on PACKAGE_php7-mod-gd
+ default y
+endef
+
# not everything groks --disable-nls
DISABLE_NLS:=
ifneq ($(SDK)$(CONFIG_PACKAGE_php7-mod-gd),)
CONFIGURE_ARGS+= \
--with-gd=shared \
- --without-freetype-dir \
--with-jpeg-dir="$(STAGING_DIR)/usr" \
--with-png-dir="$(STAGING_DIR)/usr" \
--without-xpm-dir \
else
CONFIGURE_ARGS+= --without-gd
endif
+ifneq ($(CONFIG_PHP7_LIBFREETYPE),)
+ CONFIGURE_ARGS+= --with-freetype-dir="$(STAGING_DIR)"
+else
+ CONFIGURE_ARGS+= --without-freetype-dir
+endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php7-mod-gmp),)
CONFIGURE_ARGS+= --with-gmp=shared,"$(STAGING_DIR)/usr"
CONFIGURE_ARGS+= --without-iconv
endif
+ifneq ($(SDK)$(CONFIG_PACKAGE_php7-mod-imap),)
+ CONFIGURE_ARGS+= \
+ --with-imap=shared,"$(STAGING_DIR)/usr" \
+ --with-imap-kerberos=no \
+ --with-imap-ssl="$(STAGING_DIR)/usr"
+else
+ CONFIGURE_ARGS+= --without-imap
+endif
+
ifneq ($(SDK)$(CONFIG_PACKAGE_php7-mod-intl),)
CONFIGURE_ARGS+= --enable-intl=shared
TARGET_CXXFLAGS+= -std=c++0x
CONFIGURE_ARGS+= --disable-libxml
endif
-#ifneq ($(CONFIG_PHP7_SYSTEMTZDATA),)
-# CONFIGURE_ARGS+= --with-system-tzdata
-#else
-# CONFIGURE_ARGS+= --without-system-tzdata
-#endif
+ifneq ($(CONFIG_PHP7_SYSTEMTZDATA),)
+ CONFIGURE_ARGS+= --with-system-tzdata
+else
+ CONFIGURE_ARGS+= --without-system-tzdata
+endif
CONFIGURE_VARS+= \
ac_cv_c_bigendian_php=$(if $(CONFIG_BIG_ENDIAN),yes,no) \
php_cv_cc_rpath="no" \
iconv_impl_name="gnu_libiconv" \
ac_cv_php_xml2_config_path="$(STAGING_DIR)/host/bin/xml2-config" \
+ ac_cv_u8t_decompose=yes \
define Package/php7/conffiles
/etc/php.ini
+/etc/php7/
endef
define Package/php7/install
$(INSTALL_BIN) ./files/php7-fpm.init $(1)/etc/init.d/php7-fpm
endef
+define Package/php7-fpm/conffiles
+/etc/php7-fpm.conf
+/etc/php7-fpm.d/
+/etc/config/php7-fpm
+endef
+
define Build/Prepare
$(call Build/Prepare/Default)
( cd $(PKG_BUILD_DIR); touch configure.in; ./buildconf --force )
$(eval $(call BuildModule,exif,EXIF))
$(eval $(call BuildModule,fileinfo,Fileinfo))
$(eval $(call BuildModule,ftp,FTP,+PACKAGE_php7-mod-ftp:libopenssl))
-$(eval $(call BuildModule,gd,GD graphics,+PACKAGE_php7-mod-gd:libjpeg +PACKAGE_php7-mod-gd:libpng))
+$(eval $(call BuildModule,gd,GD graphics,+PACKAGE_php7-mod-gd:libjpeg +PACKAGE_php7-mod-gd:libpng +PHP7_LIBFREETYPE:libfreetype))
$(eval $(call BuildModule,gettext,Gettext,+PACKAGE_php7-mod-gettext:libintl-full))
$(eval $(call BuildModule,gmp,GMP,+PACKAGE_php7-mod-gmp:libgmp))
$(eval $(call BuildModule,hash,Hash))
$(eval $(call BuildModule,iconv,iConv,$(ICONV_DEPENDS)))
+$(eval $(call BuildModule,imap,IMAP,+PACKAGE_php7-mod-imap:libopenssl +PACKAGE_libpam:libpam +PACKAGE_php7-mod-imap:uw-imap))
$(eval $(call BuildModule,intl,Internationalization Functions,+PACKAGE_php7-mod-intl:icu))
$(eval $(call BuildModule,json,JSON))
$(eval $(call BuildModule,ldap,LDAP,+PACKAGE_php7-mod-ldap:libopenldap +PACKAGE_php7-mod-ldap:libsasl2))
--- /dev/null
+From 96465be0f4ac225cfe6f52b809c91b9496807eac Mon Sep 17 00:00:00 2001
+From: Michael Heimpold <mhei@heimpold.de>
+Date: Sun, 26 Nov 2017 18:29:42 +0100
+Subject: [PATCH] ext/imap/config.m4: fix ac_cv_u8t_decompose check
+
+Once upon the time, commit c58f63a38ae19caaab339c61486fc3bd7e5894f9
+changed the check from U8T_CANONICAL to U8T_DECOMPOSE. However,
+the autoconf cache id was not renamed.
+
+Sometimes it is desirable to preseed the autoconf variables, e.g. when
+cross-compiling to avoid the tests running on the host system. In this
+case it's confusing when the cache id does not match the variable to
+set, so let's adjust it.
+
+Signed-off-by: Michael Heimpold <mhei@heimpold.de>
+---
+ ext/imap/config.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ext/imap/config.m4 b/ext/imap/config.m4
+index d0b86cb..badb6e2 100644
+--- a/ext/imap/config.m4
++++ b/ext/imap/config.m4
+@@ -147,7 +147,7 @@ if test "$PHP_IMAP" != "no"; then
+
+ old_CFLAGS=$CFLAGS
+ CFLAGS="-I$IMAP_INC_DIR"
+- AC_CACHE_CHECK(for U8T_DECOMPOSE, ac_cv_u8t_canonical,
++ AC_CACHE_CHECK(for U8T_DECOMPOSE, ac_cv_u8t_decompose,
+ AC_TRY_COMPILE([
+ #include <c-client.h>
+ ],[
+--
+2.7.4
+
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=chardet
-PKG_VERSION:=2.3.0
+PKG_VERSION:=3.0.4
PKG_RELEASE:=1
PKG_LICENSE:=LGPL-2.1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://pypi.python.org/packages/source/c/chardet/
-PKG_HASH:=e53e38b3a4afe6d1132de62b7400a4ac363452dc5dfcf8d88e8e0cce663c68aa
+PKG_SOURCE_URL:=https://pypi.python.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/
+PKG_HASH:=84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/rules.mk
PKG_NAME:=django-compressor
-PKG_VERSION:=2.1.1
+PKG_VERSION:=2.2
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_SOURCE:=django_compressor-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/38/58/03098a826062b856956c7169a8f778ec2b8e2767ddc63da0629062df5621/
+PKG_SOURCE_URL:=https://pypi.python.org/packages/82/76/1355459f90714517c52f264aa7245b52e59a273ec16e8f8d505fa6c342f8/
PKG_BUILD_DIR:=$(BUILD_DIR)/django_compressor-$(PKG_VERSION)/
-PKG_HASH:=9200400046ee00a5c1b4e2fbab97704fd2514f9b59d5649c8a365c3cf06c82e8
+PKG_HASH:=9616570e5b08e92fa9eadc7a1b1b49639cce07ef392fc27c74230ab08075b30f
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/rules.mk
PKG_NAME:=django-constance
-PKG_VERSION:=1.3.4
+PKG_VERSION:=2.0.0
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/0c/19/74c6bbf29a7882bab377db7a4ca30b43e09173dc1e6cabe163dc8d6a3931/
-PKG_HASH:=212eba25cc7d4690abd802ec81fb2a511f68bc3eab1dd45ea805296449377b48
+PKG_SOURCE_URL:=https://pypi.python.org/packages/8a/37/4fa87dd0e43aa0a66fc419d58e67a9b6da70e1853d646c4b501c1ee7208b/
+PKG_HASH:=6eec9f3ac4e5657b93e64f3379181d1e727088df10dd34f0398cd12119b9f0b0
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=django-picklefield
-PKG_VERSION:=0.3.2
+PKG_VERSION:=1.0.0
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://pypi.python.org/packages/source/d/django-picklefield/
-PKG_HASH:=fab48a427c6310740755b242128f9300283bef159ffee42d3231a274c65d9ae2
+PKG_SOURCE_URL:=https://pypi.python.org/packages/e8/69/232d78ef16cad8dd4c2f871b0f44d87bcde36ed6a90597416e903034600b/
+PKG_HASH:=61e3ba7f6df82d8df9e6be3a8c55ef589eb3bf926c3d25d2b7949b07eae78354
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=django-postoffice
-PKG_VERSION:=2.0.8
+PKG_VERSION:=3.0.3
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_SOURCE:=django-post_office-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/52/25/cc0cfe923f183d7c19b162cac3bf8430ddaed7bad28202b8f93a97d248a4/
+PKG_SOURCE_URL:=https://pypi.python.org/packages/0f/8c/8c7e1d8998741fd195f7df947c509bc31a03d505aca03488c39e59da11f0/
PKG_BUILD_DIR:=$(BUILD_DIR)/django-post_office-$(PKG_VERSION)/
-PKG_HASH:=bfb3ff26de5b668c91453ee8d930ff0bfe397849fd5508ff3e1216c3b46d6449
+PKG_HASH:=8d691b2e53ba8121d770ce448f05568874cf78a3cf63215918ad49536db5e76a
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/rules.mk
PKG_NAME:=django-restframework
-PKG_VERSION:=3.5.4
+PKG_VERSION:=3.7.1
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE:=djangorestframework-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/e9/24/86dfe19fb82a40a3d7a4c50371a8bd85b9277d3506698bf332a6d41d08f6/
+PKG_SOURCE_URL:=https://pypi.python.org/packages/d0/ab/8b991e7d3e26af7cf6327c84b341e60004fc56325d8a4d4019e1474f7456/
PKG_BUILD_DIR:=$(BUILD_DIR)/djangorestframework-$(PKG_VERSION)
-PKG_HASH:=f995a35ae22f354d2a9a42ee6d2c059c101f826b1485ed46781677895ad25ee5
+PKG_HASH:=305b2c6564ca46d3b558ba21110ed717135c467adf1a6dfd192bd85f4bb04d50
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/rules.mk
PKG_NAME:=django-statici18n
-PKG_VERSION:=1.3.0
+PKG_VERSION:=1.4.0
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/86/6b/2c2e86a7e144ba7b064119eaafb2c8c67665c2a0e722f0819daa9657e551/
-PKG_HASH:=f37cff511dd7d6f0c0b465c685026b660aea2ae178cc82a1b4c96c1b1e718c2a
+PKG_SOURCE_URL:=https://pypi.python.org/packages/29/4d/fd9ba0e9b86c05714d9bc945d26376b331899d38c9b0666c7b38f3f26686/
+PKG_HASH:=3cb5334d42cfabda49c9c0efb1c24f5663e318ed34b3a34fada5195232f75f65
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/rules.mk
PKG_NAME:=django
-PKG_VERSION:=1.8.17
+PKG_VERSION:=1.8.18
PKG_RELEASE=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/django/django.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=d3d12fc11da56e4ea8af37a22a9a0aa6579ab2d5
+PKG_SOURCE_VERSION:=2d4bc5a60aa8a076689667c550ded96b87bc463e
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=7d8c4e58486c3a539f17437b3a802b67d53401971eceac2be50c47bcc756c27b
+PKG_MIRROR_HASH:=c82c2cc338ae46ba8572d9960fc98dca932edc43a00f011fed102810a86185ae
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=gunicorn
-PKG_VERSION:=19.6.0
+PKG_VERSION:=19.7.1
PKG_RELEASE=1
PKG_LICENSE:=MIT
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/84/ce/7ea5396efad1cef682bbc4068e72a0276341d9d9d0f501da609fab9fcb80/
-PKG_HASH:=813f6916d18a4c8e90efde72f419308b357692f81333cb1125f80013d22fb618
+PKG_SOURCE_URL:=https://pypi.python.org/packages/30/3a/10bb213cede0cc4d13ac2263316c872a64bf4c819000c8ccd801f1d5f822/
+PKG_HASH:=eee1169f0ca667be05db3351a0960765620dad53f53434262ff8901b68a1b622
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=jdcal
-PKG_VERSION:=1.2
+PKG_VERSION:=1.3
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://pypi.python.org/packages/source/j/jdcal/
-PKG_HASH:=5ebedb58b95ebabd30f56abef65139c6f69ec1687cf1d2f3a7c503f9a2cdfa4d
+PKG_SOURCE_URL:=https://pypi.python.org/packages/9b/fa/40beb2aa43a13f740dd5be367a10a03270043787833409c61b79e69f1dfd/
+PKG_HASH:=b760160f8dc8cc51d17875c6b663fafe64be699e10ce34b6a95184b5aa0fdc9e
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/rules.mk
PKG_NAME:=micropython-lib
-PKG_VERSION=1.8.6-$(PKG_SOURCE_VERSION)
+PKG_VERSION=1.9-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=1
PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/micropython/micropython-lib.git
-PKG_SOURCE_VERSION:=f81e979c56dddb771ad36ec381b7f2c6cd12111f
+PKG_SOURCE_VERSION:=f5fe55aaef1a39d3d56f07040c0ff9f7e841fdf7
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
-PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
-PKG_MIRROR_HASH:=b9642fb3d01a7423d64ecc6ea81b4fac81a9112494727c8ca7744bd8e3ac120b
+PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.xz
+PKG_MIRROR_HASH:=76565b5d44d47ccf61562f98dcf166d8103760eed7f3d84f5f7f31610140d780
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
PKG_BUILD_PARALLEL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=micropython
-PKG_VERSION=1.8.6-$(PKG_SOURCE_VERSION)
+PKG_VERSION=1.9.2-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=1
PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/micropython/micropython.git
-PKG_SOURCE_VERSION:=5a1d63fc14dae788f705403a43c2d8639b7dd9cd
+PKG_SOURCE_VERSION:=1f78e7a43130acfa4bedf16c1007a1b0f37c75c3
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
-PKG_MIRROR_HASH:=cd431a94664277ac3f80a25b3f6ebc415b281c9265faad154bd0b3fbe638167e
+PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.xz
+PKG_MIRROR_HASH:=18234ffd1e91ac461080b4213399a6a18d4163fe314782b2e6ffbd1bfe48537b
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
PKG_BUILD_PARALLEL:=1
endef
-MAKE_FLAGS += -C $(PKG_BUILD_DIR)/unix
+MAKE_FLAGS += -C $(PKG_BUILD_DIR)/unix FROZEN_MPY_DIR=
define Build/Compile
$(call Build/Compile/Default,axtls)
--- /dev/null
+--- a/py/persistentcode.c 2017-09-22 13:26:04.914339465 +0000
++++ b/py/persistentcode.c 2017-09-22 13:26:22.618319621 +0000
+@@ -373,7 +373,7 @@
+
+ // here we define mp_raw_code_save_file depending on the port
+ // TODO abstract this away properly
+
+-#if defined(__i386__) || defined(__x86_64__) || (defined(__arm__) && (defined(__unix__)))
++#if defined(__i386__) || defined(__x86_64__) || defined(__unix__)
+
+ #include <unistd.h>
+
include $(TOPDIR)/rules.mk
PKG_NAME:=openpyxl
-PKG_VERSION:=2.4.2
+PKG_VERSION:=2.5.0b1
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/56/c6/a2a7c36196e4732acceca093ce5961db907f5a855b557d6a727a7f59b8b4/
-PKG_HASH:=2fe9ba182b687acf7e4660b39bd91d703c0bf934f8295c182d04ecd2345c6e26
+PKG_SOURCE_URL:=https://pypi.python.org/packages/88/3c/34fbe561fc92e6a75f297478b123c2590ca986d9f2d2dbf340d879aa24dd/
+PKG_HASH:=3b42ece7933b46b2128f8d4111c57c80fb5aa46f4d16e7f83281f169e7398ba7
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/rules.mk
PKG_NAME:=pyodbc
-PKG_VERSION:=4.0.17
-PKG_RELEASE:=5
+PKG_VERSION:=4.0.21
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/ce/57/6b92aa5b3497dde6be55fd6fcb76c7db215ed1d56fde45c613add4a43095/
-PKG_HASH:=a82892ba8d74318524efaaccaf8351d3a3b4079a07e1a758902a2b9e84529c9d
+PKG_SOURCE_URL:=https://pypi.python.org/packages/0f/04/c5638a4636fb8117fdc45685f489864459d193b1d892b61dce785ddf58f9
+PKG_HASH:=9655f84ca9e5cb2dfffff705601017420c840d55271ba62dd44f05383eff0329
PKG_BUILD_DEPENDS:=python python3 unixodbc
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE.txt
include $(TOPDIR)/rules.mk
PKG_NAME:=python-asn1crypto
-PKG_VERSION:=0.22.0
+PKG_VERSION:=0.23.0
PKG_RELEASE:=1
PKG_SOURCE:=asn1crypto-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/67/14/5d66588868c4304f804ebaff9397255f6ec5559e46724c2496e0f26e68d6
-PKG_HASH:=cbbadd640d3165ab24b06ef25d1dca09a3441611ac15f6a6b452474fdf0aed1a
+PKG_SOURCE_URL:=https://pypi.python.org/packages/31/53/8bca924b30cb79d6d70dbab6a99e8731d1e4dd3b090b7f3d8412a8d8ffbc
+PKG_HASH:=0874981329cfebb366d6584c3d16e913f2a0eb026c9463efcc4aaf42a9d94d70
PKG_LICENSE:=MIT
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
include $(TOPDIR)/rules.mk
PKG_NAME:=python-cffi
-PKG_VERSION:=1.11.0
+PKG_VERSION:=1.11.2
PKG_RELEASE:=1
PKG_SOURCE:=cffi-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/4e/32/4070bdf32812c89eb635c80880a5caa2e0189aa7999994c265577e5154f3
-PKG_HASH:=5f4ff33371c6969b39b293d9771ee91e81d26f9129be093ca1b7be357fcefd15
+PKG_SOURCE_URL:=https://pypi.python.org/packages/c9/70/89b68b6600d479034276fed316e14b9107d50a62f5627da37fafe083fde3
+PKG_HASH:=ab87dd91c0c4073758d07334c1e5f712ce8fe48f007b86f8238773963ee700a6
PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-cffi-$(PKG_VERSION)
include $(TOPDIR)/rules.mk
PKG_NAME:=python-cryptography
-PKG_VERSION:=2.0.3
+PKG_VERSION:=2.1.3
PKG_RELEASE:=1
PKG_SOURCE:=cryptography-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/9c/1a/0fc8cffb04582f9ffca61b15b0681cf2e8588438e55f61403eb9880bd8e0
-PKG_HASH:=d04bb2425086c3fe86f7bc48915290b13e798497839fbb18ab7f6dffcf98cc3a
+PKG_SOURCE_URL:=https://pypi.python.org/packages/f3/7c/ec4f94489719803cb14d35e9625d1f5a613b9c4b8d01ee52a4c77485e681
+PKG_HASH:=68a26c353627163d74ee769d4749f2ee243866e9dac43c93bb33ebd8fbed1199
PKG_LICENSE:=Apache-2.0 BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE.APACHE LICENSE.BSD
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=python-dateutil
-PKG_VERSION:=2.6.0
+PKG_VERSION:=2.6.1
PKG_RELEASE:=1
PKG_LICENSE:=BSD-2-Clause
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/51/fc/39a3fbde6864942e8bb24c93663734b74e281b984d1b8c4f95d64b0c21f6/
-PKG_HASH:=62a2f8df3d66f878373fd0072eacf4ee52194ba302e00082828e0d263b0418d2
+PKG_SOURCE_URL:=https://pypi.python.org/packages/54/bb/f1db86504f7a49e1d9b9301531181b00a1c7325dc85a29160ee3eaa73a54/
+PKG_HASH:=891c38b2a02f5bb1be3e4793866c8df49c7d19baabf9c1bad62547e0b4866aca
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
endef
define Package/python3-idna/description
-$(call define Package/python-idna/description)
+$(call Package/python-idna/description)
.
(Variant for Python3)
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=python-lxml
-PKG_VERSION:=4.0.0
+PKG_VERSION:=4.1.1
PKG_RELEASE:=1
PKG_SOURCE:=lxml-$(PKG_VERSION).tgz
PKG_SOURCE_URL:=http://lxml.de/files/
-PKG_HASH:=f7bc9f702500e205b1560d620f14015fec76dcd6f9e889a946a2ddcc3c344fd0
+PKG_HASH:=940caef1ec7c78e0c34b0f6b94fe42d0f2022915ffc78643d28538a5cfd0f40e
PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-lxml-$(PKG_VERSION)
PKG_UNPACK=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
include $(TOPDIR)/rules.mk
PKG_NAME:=python-pyasn1-modules
-PKG_VERSION:=0.1.4
+PKG_VERSION:=0.1.5
PKG_RELEASE:=1
PKG_SOURCE:=pyasn1-modules-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/66/6b/f5582cbf3b920896ce1b97bde3894599b3dec31301ef79ae7ea0022f5577
-PKG_HASH:=b07c17bdb34d6f64aafea6269f2e8fb306a57473f0f38d9a6ca389d6ab30ac4a
+PKG_SOURCE_URL:=https://pypi.python.org/packages/7e/2c/351c0c0ef88b904de50d8144eb4c365c13660c297c051b72255b4e1ad34a
+PKG_HASH:=1d303eed5aa54cafeca209d16b8c7ea2c6064735fb61f1bee2e0ed63a0816988
PKG_LICENSE:=BSD-2-Clause
PKG_LICENSE_FILES:=LICENSE.txt
include $(TOPDIR)/rules.mk
PKG_NAME:=python-pyasn1
-PKG_VERSION:=0.3.5
+PKG_VERSION:=0.3.7
PKG_RELEASE:=1
PKG_SOURCE:=pyasn1-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/bc/85/029f5f4d4fa8a487538ce597932cf3601bba3392c85d74eae148fe6ac5d3
-PKG_HASH:=c7a1186416bcdaf19b56f5b2506200306d7d4cf222d3d7c2d4cb600ccacdaf1b
+PKG_SOURCE_URL:=https://pypi.python.org/packages/3c/a6/4d6c88aa1694a06f6671362cb3d0350f0d856edea4685c300785200d1cd9/
+PKG_HASH:=187f2a66d617683f8e82d5c00033b7c8a0287e1da88a9d577aebec321cad4965
PKG_LICENSE:=BSD-2-Clause
PKG_LICENSE_FILES:=LICENSE.txt
include $(TOPDIR)/rules.mk
PKG_NAME:=python-urllib3
-PKG_VERSION:=1.20
+PKG_VERSION:=1.22
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_SOURCE:=urllib3-$(PKG_VERSION).tar.gz
PKG_BUILD_DIR:=$(BUILD_DIR)/urllib3-$(PKG_VERSION)/
-PKG_SOURCE_URL:=https://pypi.python.org/packages/20/56/a6aa403b0998f857b474a538343ee483f5c02491bd1aebf61d42a3f60f77/
-PKG_HASH:=97ef2b6e2878d84c0126b9f4e608e37a951ca7848e4855a7f7f4437d5c34a72f
+PKG_SOURCE_URL:=https://pypi.python.org/packages/ee/11/7c59620aceedcc1ef65e156cc5ce5a24ef87be4107c2b74458464e437a5d/
+PKG_HASH:=cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO)
# XXX: reset PKG_RELEASE to 1 only if Python's pip & setuptools versions have also bumped;
# otherwise, keep bumping PKG_RELEASE
-PKG_RELEASE:=2
+PKG_RELEASE:=4
PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://www.python.org/ftp/python/$(PKG_VERSION)
# For PyPackage
include ./files/python-package.mk
+PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
HOST_BUILD_PARALLEL:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/Python-$(PKG_VERSION)
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/Python-$(PKG_VERSION)
-PKG_CONFIG_DEPENDS:=CONFIG_PACKAGE_python-setuptools CONFIG_PACKAGE_python-pip
+PKG_CONFIG_DEPENDS:= \
+ CONFIG_PACKAGE_python-setuptools CONFIG_PACKAGE_python-pip \
+ CONFIG_PACKAGE_bluez-libs
-PKG_BUILD_DEPENDS:=python/host
+PKG_BUILD_DEPENDS:=python/host PACKAGE_bluez-libs:bluez-libs
HOST_BUILD_DEPENDS:=bzip2/host expat/host
include $(INCLUDE_DIR)/host-build.mk
define Package/python-light
$(call Package/python/Default)
TITLE:=Python $(PYTHON_VERSION) light installation
- DEPENDS:=+python-base +libffi +libbz2
+ DEPENDS:=+python-base +libffi +libbz2 +PACKAGE_bluez-libs:bluez-libs
endef
define Package/python-light/description
--- /dev/null
+diff --git a/configure b/configure
+index 4c0435e..0068a9d 100755
+--- a/configure
++++ b/configure
+@@ -7045,7 +7045,7 @@ sys/param.h sys/poll.h sys/random.h sys/select.h sys/socket.h sys/statvfs.h sys/
+ sys/termio.h sys/time.h \
+ sys/times.h sys/types.h sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h \
+ sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \
+-bluetooth/bluetooth.h linux/tipc.h spawn.h util.h alloca.h
++linux/tipc.h spawn.h util.h alloca.h
+ do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+@@ -7267,6 +7267,24 @@ fi
+ fi
+
+
++# bluetooth/bluetooth.h has been known to not compile with -std=c99.
++# http://permalink.gmane.org/gmane.linux.bluez.kernel/22294
++SAVE_CFLAGS=$CFLAGS
++CFLAGS="-std=c99 $CFLAGS"
++for ac_header in bluetooth/bluetooth.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "bluetooth/bluetooth.h" "ac_cv_header_bluetooth_bluetooth_h" "$ac_includes_default"
++if test "x$ac_cv_header_bluetooth_bluetooth_h" = xyes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_BLUETOOTH_BLUETOOTH_H 1
++_ACEOF
++
++fi
++
++done
++
++CFLAGS=$SAVE_CFLAGS
++
+ # On Linux, netlink.h requires asm/types.h
+ for ac_header in linux/netlink.h
+ do :
+diff --git a/configure.ac b/configure.ac
+index 780f275..dceca1c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1702,10 +1702,17 @@ sys/param.h sys/poll.h sys/random.h sys/select.h sys/socket.h sys/statvfs.h sys/
+ sys/termio.h sys/time.h \
+ sys/times.h sys/types.h sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h \
+ sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \
+-bluetooth/bluetooth.h linux/tipc.h spawn.h util.h alloca.h)
++linux/tipc.h spawn.h util.h alloca.h)
+ AC_HEADER_DIRENT
+ AC_HEADER_MAJOR
+
++# bluetooth/bluetooth.h has been known to not compile with -std=c99.
++# http://permalink.gmane.org/gmane.linux.bluez.kernel/22294
++SAVE_CFLAGS=$CFLAGS
++CFLAGS="-std=c99 $CFLAGS"
++AC_CHECK_HEADERS(bluetooth/bluetooth.h)
++CFLAGS=$SAVE_CFLAGS
++
+ # On Linux, netlink.h requires asm/types.h
+ AC_CHECK_HEADERS(linux/netlink.h,,,[
+ #ifdef HAVE_ASM_TYPES_H
PKG_NAME:=python3
# XXX: reset PKG_RELEASE to 1 only if Python's pip & setuptools versions have also bumped;
# otherwise, keep bumping PKG_RELEASE
-PKG_RELEASE:=7
+PKG_RELEASE:=10
PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO)
PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://www.python.org/ftp/python/$(PKG_VERSION)
-PKG_HASH:=9229773be41ed144370f47f0f626a1579931f5a390f1e8e3853174d52edd64a9
+PKG_HASH:=cda7d967c9a4bfa52337cdf551bcc5cff026b6ac50a8834e568ce4a794ca81da
PKG_LICENSE:=PSF
PKG_LICENSE_FILES:=LICENSE Modules/_ctypes/libffi_msvc/LICENSE Modules/_ctypes/darwin/LICENSE Modules/_ctypes/libffi/LICENSE Modules/_ctypes/libffi_osx/LICENSE Tools/pybench/LICENSE
# For Py3Package
include ./files/python3-package.mk
+PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
HOST_BUILD_PARALLEL:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/Python-$(PKG_VERSION)
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/Python-$(PKG_VERSION)
-PKG_CONFIG_DEPENDS:=CONFIG_PACKAGE_python3-setuptools CONFIG_PACKAGE_python3-pip
+PKG_CONFIG_DEPENDS:= \
+ CONFIG_PACKAGE_python3-setuptools CONFIG_PACKAGE_python3-pip \
+ CONFIG_PACKAGE_bluez-libs
-PKG_BUILD_DEPENDS:=python3/host
+
+PKG_BUILD_DEPENDS:=python3/host PACKAGE_bluez-libs:bluez-libs
HOST_BUILD_DEPENDS:=bzip2/host expat/host libffi/host
include $(INCLUDE_DIR)/host-build.mk
define Package/python3-light
$(call Package/python3/Default)
TITLE:=Python $(PYTHON_VERSION) light installation
- DEPENDS:=+python3-base +libffi +libbz2
+ DEPENDS:=+python3-base +libffi +libbz2 +PACKAGE_bluez-libs:bluez-libs
endef
define Package/python3-light/description
--- /dev/null
+#
+# Copyright (C) 2006-2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Package/python3-cgi
+$(call Package/python3/Default)
+ TITLE:=Python $(PYTHON3_VERSION) cgi module
+ DEPENDS:=+python3-light +python3-email
+endef
+
+define Package/python3-cgitb
+$(call Package/python3/Default)
+ TITLE:=Python $(PYTHON3_VERSION) cgitb module
+ DEPENDS:=+python3-light +python3-cgi +python3-pydoc
+endef
+
+
+$(eval $(call Py3BasePackage,python3-cgi, \
+ /usr/lib/python$(PYTHON3_VERSION)/cgi.py \
+))
+
+$(eval $(call Py3BasePackage,python3-cgitb, \
+ /usr/lib/python$(PYTHON3_VERSION)/cgitb.py \
+))
# Note: keep in sync with setuptools & pip
PYTHON3_VERSION_MAJOR:=3
PYTHON3_VERSION_MINOR:=6
-PYTHON3_VERSION_MICRO:=2
+PYTHON3_VERSION_MICRO:=3
PYTHON3_VERSION:=$(PYTHON3_VERSION_MAJOR).$(PYTHON3_VERSION_MINOR)
+++ /dev/null
---- a/Lib/imp.py
-+++ b/Lib/imp.py
-@@ -203,8 +203,9 @@ def load_package(name, path):
- extensions = (machinery.SOURCE_SUFFIXES[:] +
- machinery.BYTECODE_SUFFIXES[:])
- for extension in extensions:
-- path = os.path.join(path, '__init__'+extension)
-- if os.path.exists(path):
-+ init_path = os.path.join(path, '__init__'+extension)
-+ if os.path.exists(init_path):
-+ path = init_path
- break
- else:
- raise ValueError('{!r} is not a package'.format(path))
+++ /dev/null
---- a/configure
-+++ b/configure
-@@ -11271,7 +11271,7 @@ for ac_func in alarm accept4 setitimer g
- sigtimedwait sigwait sigwaitinfo snprintf strftime strlcpy symlinkat sync \
- sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
- truncate uname unlinkat unsetenv utimensat utimes waitid waitpid wait3 wait4 \
-- wcscoll wcsftime wcsxfrm wmemcmp writev _getpty
-+ wcscoll wcsxfrm wmemcmp writev _getpty
- do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
- ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=pytz
-PKG_VERSION:=2016.6.1
+PKG_VERSION:=2017.2
PKG_RELEASE:=1
PKG_LICENSE:=MIT
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/5d/8e/6635d8f3f9f48c03bb925fab543383089858271f9cfd1216b83247e8df94/
-PKG_HASH:=6f57732f0f8849817e9853eb9d50d85d1ebb1404f702dbc44ee627c642a486ca
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).zip
+PKG_SOURCE_URL:=https://pypi.python.org/packages/a4/09/c47e57fc9c7062b4e83b075d418800d322caa87ec0ac21e6308bd3a2d519/
+PKG_HASH:=f5c056e8f62d45ba8215e5cb8f50dfccb198b4b9fbea8500674f3443e4689589
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=simplejson
-PKG_VERSION:=3.10.0
+PKG_VERSION:=3.11.1
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/40/ad/52c1f3a562df3b210e8f165e1aa243a178c454ead65476a39fa3ce1847b6/
-PKG_HASH:=953be622e88323c6f43fad61ffd05bebe73b9fd9863a46d68b052d2aa7d71ce2
+PKG_SOURCE_URL:=https://pypi.python.org/packages/08/48/c97b668d6da7d7bebe7ea1817a6f76394b0ec959cb04214ca833c34359df/
+PKG_HASH:=01a22d49ddd9a168b136f26cac87d9a335660ce07aa5c630b8e3607d6f4325e7
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# 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.
include $(TOPDIR)/rules.mk
PKG_NAME:=vala
-PKG_VERSION:=0.34.2
+PKG_VERSION:=0.34.5
PKG_RELEASE:=1
PKG_LICENSE:=LGPL-2.1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GNOME/vala/0.34/
-PKG_HASH:=765e9c2b429a66db93247940f8588319b43f35c173d057bcae5717a97d765c41
+PKG_HASH:=3fd4ba371778bc87da42827b8d23f1f42b0629759a9a1c40c9683dfb7e73fae5
PKG_BUILD_DEPENDS:=glib2 glib2/host vala/host
HOST_BUILD_DEPENDS:=glib2/host
include $(TOPDIR)/rules.mk
PKG_NAME:=alsa-lib
-PKG_VERSION:=1.1.4.1
+PKG_VERSION:=1.1.5
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=ftp://ftp.alsa-project.org/pub/lib/ \
http://distfiles.gentoo.org/distfiles/
-PKG_HASH:=91bb870c14d1c7c269213285eeed874fa3d28112077db061a3af8010d0885b76
+PKG_HASH:=f4f68ad3c6da36b0b5241ac3c798a7a71e0e97d51f972e9f723b3f20a9650ae6
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>, \
Peter Wagner <tripolar@gmx.at>
+++ /dev/null
---- a/aserver/aserver.c
-+++ b/aserver/aserver.c
-@@ -20,7 +20,7 @@
-
- #include <sys/shm.h>
- #include <sys/socket.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <sys/un.h>
- #include <sys/uio.h>
- #include <stdio.h>
---- a/include/asoundlib-head.h
-+++ b/include/asoundlib-head.h
-@@ -35,6 +35,6 @@
- #include <string.h>
- #include <fcntl.h>
- #include <assert.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <errno.h>
- #include <stdarg.h>
---- a/include/asoundlib.h
-+++ b/include/asoundlib.h
-@@ -35,7 +35,7 @@
- #include <string.h>
- #include <fcntl.h>
- #include <assert.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <errno.h>
- #include <stdarg.h>
- #include <endian.h>
---- a/include/local.h
-+++ b/include/local.h
-@@ -47,7 +47,7 @@
- #error Header defining endianness not defined
- #endif
- #include <stdarg.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <sys/types.h>
- #include <errno.h>
- #if defined(__linux__)
---- a/src/control/control.c
-+++ b/src/control/control.c
-@@ -90,7 +90,7 @@ against the original design.
- #include <string.h>
- #include <fcntl.h>
- #include <signal.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <stdbool.h>
- #include "control_local.h"
-
---- a/src/control/control_shm.c
-+++ b/src/control/control_shm.c
-@@ -27,7 +27,7 @@
- #include <fcntl.h>
- #include <sys/shm.h>
- #include <sys/socket.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <sys/un.h>
- #include <sys/uio.h>
- #include <sys/mman.h>
---- a/src/pcm/pcm.c
-+++ b/src/pcm/pcm.c
-@@ -651,7 +651,7 @@ playback devices.
- #include <stdarg.h>
- #include <signal.h>
- #include <ctype.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <sys/mman.h>
- #include <limits.h>
- #include "pcm_local.h"
---- a/src/pcm/pcm_direct.c
-+++ b/src/pcm/pcm_direct.c
-@@ -30,7 +30,7 @@
- #include <grp.h>
- #include <sys/ioctl.h>
- #include <sys/mman.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <sys/shm.h>
- #include <sys/sem.h>
- #include <sys/wait.h>
---- a/src/pcm/pcm_mmap.c
-+++ b/src/pcm/pcm_mmap.c
-@@ -22,7 +22,7 @@
- #include <stdio.h>
- #include <malloc.h>
- #include <string.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <sys/mman.h>
- #ifdef HAVE_SYS_SHM_H
- #include <sys/shm.h>
---- a/src/pcm/pcm_share.c
-+++ b/src/pcm/pcm_share.c
-@@ -34,7 +34,7 @@
- #include <signal.h>
- #include <math.h>
- #include <sys/socket.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <pthread.h>
- #include "pcm_local.h"
-
---- a/src/pcm/pcm_shm.c
-+++ b/src/pcm/pcm_shm.c
-@@ -36,7 +36,7 @@
- #include <sys/ioctl.h>
- #include <sys/shm.h>
- #include <sys/socket.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <sys/un.h>
- #include <sys/mman.h>
- #include <netinet/in.h>
---- a/src/seq/seq.c
-+++ b/src/seq/seq.c
-@@ -777,7 +777,7 @@ void event_filter(snd_seq_t *seq, snd_se
-
- */
-
--#include <sys/poll.h>
-+#include <poll.h>
- #include "seq_local.h"
-
- /****************************************************************************
---- a/src/shmarea.c
-+++ b/src/shmarea.c
-@@ -27,7 +27,7 @@
- #include <malloc.h>
- #include <string.h>
- #include <errno.h>
--#include <sys/poll.h>
-+#include <poll.h>
- #include <sys/mman.h>
- #include <sys/shm.h>
- #include "list.h"
PKG_NAME:=avahi
PKG_VERSION:=0.6.32
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/lathiat/avahi/releases/download/v$(PKG_VERSION)
$(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libavahi-* $(1)/usr/lib/
-ifeq ($(CONFIG_PACKAGE_libavahi-compat-libdnssd)-$(BUILD_VARIANT),y-dbus)
+ifneq ($(CONFIG_PACKAGE_libavahi-compat-libdnssd),)
+ifeq ($(BUILD_VARIANT),dbus)
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libdns_sd* $(1)/usr/lib/
+endif
endif
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/* $(1)/usr/lib/pkgconfig/
PKG_NAME:=boost
PKG_VERSION:=1.65.1
PKG_SOURCE_VERSION:=1_65_1
-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)
| compile the kernel with Full Language Support. |
| Without these requirerements, the following libs will not be available: |
| - Boost.Locale |
-| - Boost.Coroutine2 |
-| - Boost.Fiber |
+| - Boost.Coroutine2 (header-only library - requires C++11) |
+| - Boost.Fiber (requires C++14) |
-----------------------------------------------------------------------------
This package provides the following run-time libraries:
$(eval $(call DefineBoostLibrary,fiber,coroutine filesystem,,))
$(eval $(call DefineBoostLibrary,filesystem,system,))
$(eval $(call DefineBoostLibrary,graph,regex,))
-$(eval $(call DefineBoostLibrary,iostreams,,+zlib +liblzma))
+$(eval $(call DefineBoostLibrary,iostreams,,+zlib +liblzma +libbz2))
$(eval $(call DefineBoostLibrary,locale,system,$(ICONV_DEPENDS),BUILD_NLS))
$(eval $(call DefineBoostLibrary,log,system chrono date_time thread filesystem regex,))
$(eval $(call DefineBoostLibrary,math,,))
$(if $(CONFIG_boost-single-thread),threading=single,) \
threading=multi \
--without-mpi \
- $(if $(CONFIG_boost-coroutine2),,--without-coroutine2) \
$(if $(CONFIG_boost-graph-parallel),,--without-graph_parallel) \
$(if $(CONFIG_PACKAGE_boost-test),,--without-test) \
$(foreach lib,$(BOOST_LIBS), \
$(if $(findstring python,$(lib)), \
$(if $(CONFIG_PACKAGE_boost-python),python=2.7,--without-python), \
- $(if $(CONFIG_PACKAGE_boost-$(lib)),,--without-$(lib))) \
+ $(if $(CONFIG_PACKAGE_boost-$(lib)),, \
+ $(if $(findstring $(lib),wserialization),,--without-$(lib)) \
+ ) \
+ ) \
) \
$(if $(CONFIG_PACKAGE_boost-locale),boost.locale.iconv=on -sICONV_PATH=$(ICONV_PREFIX) boost.locale.posix=$(if $(USE_MUSL),on,off), \
boost.locale.iconv=off) \
$(if $(CONFIG_PACKAGE_boost-iostreams),-sNO_BZIP2=1 -sZLIB_INCLUDE=$(STAGING_DIR)/usr/include \
-sZLIB_LIBPATH=$(STAGING_DIR)/usr/lib) \
install ;\
- b2 \
- $(CONFIGURE_ARGS) \
- --ignore-site-config \
- --toolset=gcc-$(ARCH) abi=$(BOOST_ABI) \
- --disable-long-double \
- $(if $(CONFIG_boost-variant-release), variant=release,) \
- $(if $(CONFIG_boost-variant-debug), variant=debug,) \
- $(if $(CONFIG_boost-variant-profile), variant=profile,) \
- $(if $(CONFIG_boost-use-name-tags),--layout=tagged,--layout=system) \
- $(if $(CONFIG_boost-build-type-complete),--build-type=complete,--build-type=minimal) \
- $(if $(CONFIG_boost-shared-libs),link=shared,) \
- $(if $(CONFIG_boost-static-libs),link=static,) \
- $(if $(CONFIG_boost-static-and-shared-libs),link=static$(comma)shared,) \
- $(if $(CONFIG_boost-runtime-shared),runtime-link=shared,) \
- $(if $(CONFIG_boost-runtime-static),runtime-link=static,) \
- $(if $(CONFIG_boost-runtime-static-and-shared),runtime-link=shared$(comma)static,) \
- $(if $(CONFIG_boost-single-thread),threading=single,) \
- threading=multi \
- $(if $(CONFIG_PACKAGE_boost-python3),--with-python python=3.6,) \
- install ;\
+ $(if $(CONFIG_PACKAGE_boost-python3), \
+ b2 \
+ $(CONFIGURE_ARGS) \
+ --ignore-site-config \
+ --toolset=gcc-$(ARCH) abi=$(BOOST_ABI) \
+ --disable-long-double \
+ $(if $(CONFIG_boost-variant-release), variant=release,) \
+ $(if $(CONFIG_boost-variant-debug), variant=debug,) \
+ $(if $(CONFIG_boost-variant-profile), variant=profile,) \
+ $(if $(CONFIG_boost-use-name-tags),--layout=tagged,--layout=system) \
+ $(if $(CONFIG_boost-build-type-complete),--build-type=complete,--build-type=minimal) \
+ $(if $(CONFIG_boost-shared-libs),link=shared,) \
+ $(if $(CONFIG_boost-static-libs),link=static,) \
+ $(if $(CONFIG_boost-static-and-shared-libs),link=static$(comma)shared,) \
+ $(if $(CONFIG_boost-runtime-shared),runtime-link=shared,) \
+ $(if $(CONFIG_boost-runtime-static),runtime-link=static,) \
+ $(if $(CONFIG_boost-runtime-static-and-shared),runtime-link=shared$(comma)static,) \
+ $(if $(CONFIG_boost-single-thread),threading=single,) \
+ threading=multi \
+ $(foreach lib,$(BOOST_LIBS), \
+ $(if $(findstring python,$(lib)), \
+ $(if $(CONFIG_PACKAGE_boost-python3),python=3.6,), \
+ ) \
+ ) \
+ install ;\
+ ,) \
)
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=check
-PKG_VERSION:=0.11.0
+PKG_VERSION:=0.12.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/libcheck/check/releases/download/$(PKG_VERSION)
-PKG_HASH:=24f7a48aae6b74755bcbe964ce8bc7240f6ced2141f8d9cf480bc3b3de0d5616
+PKG_HASH:=464201098bee00e90f5c4bdfa94a5d3ead8d641f9025b560a27755a83b824234
PKG_LICENSE:=LGPL-2.1+
PKG_LICENSE_FILES:=COPYING.LESSER
include $(TOPDIR)/rules.mk
PKG_NAME:=expat
-PKG_VERSION:=2.2.4
+PKG_VERSION:=2.2.5
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@SF/expat
-PKG_HASH:=03ad85db965f8ab2d27328abcf0bc5571af6ec0a414874b2066ee3fdd372019e
+PKG_HASH:=d9dc32efba7e74f788fcc4f212a43216fc37cf5f23f4c2339664d473353aedf6
PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>, \
Ted Hess <thess@kitschensync.net>
include $(TOPDIR)/rules.mk
PKG_NAME:=faad2
-PKG_VERSION:=2.8.1
+PKG_VERSION:=2.8.6
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/faac/faad2-src/$(PKG_NAME)-2.8.0
-PKG_HASH:=f4042496f6b0a60f5ded6acd11093230044ef8a2fd965360c1bbd5b58780933d
+PKG_HASH:=654977adbf62eb81f4fca00152aca58ce3b6dd157181b9edd7bed687a7c73f21
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
PKG_FIXUP:=autoreconf
include $(TOPDIR)/rules.mk
PKG_NAME:=fftw3
-PKG_VERSION:=3.3.6-pl2
+PKG_VERSION:=3.3.7
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0+
PKG_SOURCE:=fftw-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.fftw.org
-PKG_HASH:=a5de35c5c824a78a058ca54278c706cdf3d4abba1c56b63531c2cb05f5d57da2
+PKG_HASH:=3b609b7feba5230e8f6dd8d245ddbefac324c5a6ae4186947670d9ac2cd25573
PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/fftw-$(PKG_VERSION)
PKG_FIXUP:=autoreconf
--enable-threads \
--enable-type-prefix \
--disable-debug \
- --disable-fortran
+ --disable-fortran \
+ --disable-doc
ifeq ($(BUILD_VARIANT), single)
CONFIGURE_ARGS += \
+ $(if $(findstring neon,$(CONFIG_TARGET_OPTIMIZATION)),--enable-neon) \
--enable-single
endif
include $(TOPDIR)/rules.mk
PKG_NAME:=freetype
-PKG_VERSION:=2.7.1
-PKG_RELEASE:=1
+PKG_VERSION:=2.8.1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@SF/freetype
-PKG_HASH:=3a3bb2c4e15ffb433f2032f50a5b5a92558206822e22bfe8cbe339af4aa82f88
+PKG_HASH:=e5435f02e02d2b87bb8e4efdcaa14b1f78c9cf3ab1ed80f94b6382fb6acc7d78
PKG_LICENSE:=FTL GPL-2.0 MIT ZLIB
PKG_LICENSE_FILES:=docs/LICENSE.TXT docs/FTL.TXT docs/GPLv2.TXT src/bdf/README src/pcf/README src/gzip/zlib.h
-PKG_MAINTAINER:=Nicolas Thill <nico@openwrt.org>
+PKG_MAINTAINER:=Val Kulkov <val.kulkov@gmail.com>
PKG_FIXUP:=autoreconf
PKG_LIBTOOL_PATHS:=builds/unix
CATEGORY:=Libraries
TITLE:=A free, high-quality and portable font engine
URL:=http://www.freetype.org/
- DEPENDS:=+zlib +libbz2
+ DEPENDS:=+zlib +libbz2 +libpng
endef
define Package/libfreetype/description
--enable-static \
--with-bzip2=yes \
--with-zlib=yes \
- --with-png=no \
+ --with-png=yes
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) DESTDIR="$(PKG_INSTALL_DIR)" all install
endef
define Build/InstallDev
+ $(INSTALL_DIR) $(1)/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/freetype-config $(1)/bin/
$(INSTALL_DIR) $(2)/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/freetype-config $(2)/bin/
$(INSTALL_DIR) $(1)/usr/include
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/freetype2.pc $(1)/usr/lib/pkgconfig/
- $(SED) \
- 's,^\(prefix\|exec_prefix\)=.*,\1="$(STAGING_DIR)/usr",; \
- s,^\(includedir\)=.*,\1="$(STAGING_DIR)/usr/include",; \
- s,^\(libdir\)=.*,\1="$(STAGING_DIR)/usr/lib",' \
- $(2)/bin/freetype-config
$(SED) \
's,/usr/include,$$$${prefix}/include,g; \
s,/usr/lib,$$$${exec_prefix}/lib,g' \
include $(TOPDIR)/rules.mk
PKG_NAME:=glib2
-PKG_VERSION:=2.53.7
+PKG_VERSION:=2.55.0
PKG_RELEASE:=1
PKG_SOURCE:=glib-$(PKG_VERSION).tar.xz
PKG_BUILD_DIR:=$(BUILD_DIR)/glib-$(PKG_VERSION)
-PKG_SOURCE_URL:=@GNOME/glib/2.53
-PKG_HASH:=028efbf6df4d88d7725314456524b923169f4d4f8503347194b2baf2222f3e33
+PKG_SOURCE_URL:=@GNOME/glib/2.55
+PKG_HASH:=13fc009e68ca490f986f21a7d5d3a429486fb28a1f4e06298c9ac976067518f5
PKG_BUILD_PARALLEL:=1
HOST_BUILD_PARALLEL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=glpk
-PKG_VERSION:=4.62
+PKG_VERSION:=4.63
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
-PKG_HASH:=096e4be3f83878ccf70e1fdb62ad1c178715ef8c0d244254c29e2f9f0c1afa70
+PKG_HASH:=914d27f1a51c2bf4a51f1bd4a507f875fcca99db7b219380b836a25b29b3e7f6
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=gnutls
-PKG_VERSION:=3.5.13
+PKG_VERSION:=3.5.16
PKG_RELEASE:=1
PKG_USE_MIPS16:=0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=ftp://ftp.gnutls.org/gcrypt/gnutls/v3.5
-PKG_HASH:=79f5480ad198dad5bc78e075f4a40c4a315a1b2072666919d2d05a08aec13096
+PKG_HASH:=0924dec90c37c05f49fec966eba3672dab4d336d879e5c06e06e13325cbfec25
#PKG_FIXUP:=autoreconf gettext-version
PKG_MAINTAINER:=Nikos Mavrogiannopoulos <nmav@gnutls.org>
PKG_LICENSE:=LGPLv2.1+
include $(TOPDIR)/rules.mk
PKG_NAME:=icu4c
-PKG_VERSION:=59.1
-PKG_RELEASE:=2
+PKG_VERSION:=60.1
+PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-59_1-src.tgz
+PKG_SOURCE:=$(PKG_NAME)-60_1-src.tgz
PKG_SOURCE_URL:=http://download.icu-project.org/files/$(PKG_NAME)/$(PKG_VERSION)
-PKG_HASH:=7132fdaf9379429d004005217f10e00b7d2319d0fea22bdfddef8991c45b75fe
+PKG_HASH:=f8f5a6c8fbf32c015a467972bdb1477dc5f5d5dfea908b6ed218715eeb5ee225
PKG_LICENSE:=ICU-1.8.1+
PKG_LICENSE_FILES:=LICENSE
index 9db6c52..6aa2273 100644
--- a/Makefile.in
+++ b/Makefile.in
-@@ -184,7 +184,6 @@ install-icu: $(INSTALLED_BUILT_FILES)
+@@ -186,7 +186,6 @@ install-icu: $(INSTALLED_BUILT_FILES)
$(INSTALL_SCRIPT) $(top_srcdir)/install-sh $(DESTDIR)$(pkgdatadir)/install-sh
@$(MKINSTALLDIRS) $(DESTDIR)$(libdir)/pkgconfig
$(INSTALL_DATA) $(ALL_PKGCONFIG_FILES) $(DESTDIR)$(libdir)/pkgconfig/
+++ /dev/null
---- a/configure.ac
-+++ b/configure.ac
-@@ -883,8 +883,8 @@
- AC_CHECK_FUNC(strtod_l)
- if test x$ac_cv_func_strtod_l = xyes
- then
-- CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1"
-- U_HAVE_STRTOD_L=1
-+ CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=0"
-+ U_HAVE_STRTOD_L=0
- else
- CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=0"
- U_HAVE_STRTOD_L=0
---- a/configure
-+++ b/configure
-@@ -7093,8 +7093,8 @@
-
- if test x$ac_cv_func_strtod_l = xyes
- then
-- CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1"
-- U_HAVE_STRTOD_L=1
-+ CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=0"
-+ U_HAVE_STRTOD_L=0
- else
- CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=0"
- U_HAVE_STRTOD_L=0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/libs/security/linux-privs/libcap2
PKG_HASH:=693c8ac51e983ee678205571ef272439d83afe62dd8e424ea14ad9790bc35162
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=License
PKG_MAINTAINER:=Paul Wassi <p.wassi@gmx.at>
PKG_INSTALL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=libextractor
-PKG_VERSION:=1.4
+PKG_VERSION:=1.6
PKG_RELEASE:=1
# ToDo:
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
-PKG_HASH:=84128170a4a9aa3a19942dd53fdf30ed17b56d7fae79b5f6e7e17a0d65d1f66c
+PKG_HASH:=26d4adca2e381d2a0c8b3037ec85e094ac5d40485623794466cfc176f5bbf69d
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=ftp://ftp.gnupg.org/gcrypt/libgcrypt
PKG_HASH:=f9461b4619bb78b273a88d468915750d418e89a3ea3b641bab0563a9af4b04d0
+PKG_LICENSE:=LGPL-2.1+ GPL-2.0+
+PKG_LICENSE_FILES:=COPYING
PKG_FIXUP:=patch-libtool
PKG_INSTALL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=libgd
-PKG_VERSION:=2.2.4
-PKG_RELEASE:=2
+PKG_VERSION:=2.2.5
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/$(PKG_NAME)/$(PKG_NAME)/releases/download/gd-$(PKG_VERSION)/
-PKG_HASH:=137f13a7eb93ce72e32ccd7cebdab6874f8cf7ddf31d3a455a68e016ecd9e4e6
+PKG_HASH:=8c302ccbf467faec732f0741a859eef4ecae22fea2d2ab87467be940842bde51
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
PKG_LICENSE:=MIT
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=ftp://ftp.gnupg.org/gcrypt/libgpg-error
PKG_HASH:=cafc9ed6a87c53a35175d5a1220a96ca386696eef2fa059cc0306211f246e55f
+PKG_LICENSE:=LGPL-2.1+
+PKG_LICENSE_FILES:=COPYING
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=libgphoto2
-PKG_VERSION:=2.5.14
-PKG_RELEASE:=2
+PKG_VERSION:=2.5.16
+PKG_RELEASE:=1
PORT_VERSION:=0.12.0
PKG_MAINTAINER:=Leonardo Medici <leonardo_medici@me.com>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@SF/gphoto
-PKG_HASH:=d3ce70686fb87d6791b9adcbb6e5693bfbe1cfef9661c23c75eb8a699ec4e274
+PKG_HASH:=e757416d1623e01a9d0d294b2e790162e434c0964f50d3b7ff1a3424b62a2906
PKG_LICENSE:=LGPL-2.1
PKG_LICENSE_FILES:=COPYING
-Index: libgphoto2-2.5.14/configure.ac
+Index: libgphoto2-2.5.16/configure.ac
===================================================================
---- libgphoto2-2.5.14.orig/configure.ac
-+++ libgphoto2-2.5.14/configure.ac
+--- libgphoto2-2.5.16.orig/configure.ac
++++ libgphoto2-2.5.16/configure.ac
@@ -209,7 +209,6 @@ ALL_LINGUAS="cs da de es eu fr hu it ja
GP_GETTEXT_HACK([${PACKAGE}-${LIBGPHOTO2_CURRENT_MIN}],[The gPhoto Team],[${MAIL_GPHOTO_TRANSLATION}])
AM_GNU_GETTEXT_VERSION([0.14.1])
AM_ICONV()
GP_GETTEXT_FLAGS()
-Index: libgphoto2-2.5.14/libgphoto2_port/configure.ac
+Index: libgphoto2-2.5.16/libgphoto2_port/configure.ac
===================================================================
---- libgphoto2-2.5.14.orig/libgphoto2_port/configure.ac
-+++ libgphoto2-2.5.14/libgphoto2_port/configure.ac
+--- libgphoto2-2.5.16.orig/libgphoto2_port/configure.ac
++++ libgphoto2-2.5.16/libgphoto2_port/configure.ac
@@ -124,7 +124,6 @@ GP_GETTEXT_HACK([${PACKAGE}-${LIBGPHOTO2
ALL_LINGUAS="cs da de es eu fi fr it ja nl pl pt_BR ru sk sr sv uk vi zh_CN zh_TW"
AM_GNU_GETTEXT_VERSION([0.14.1])
-Index: libgphoto2-2.5.14/Makefile.am
+Index: libgphoto2-2.5.16/Makefile.am
===================================================================
---- libgphoto2-2.5.14.orig/Makefile.am
-+++ libgphoto2-2.5.14/Makefile.am
+--- libgphoto2-2.5.16.orig/Makefile.am
++++ libgphoto2-2.5.16/Makefile.am
@@ -8,7 +8,7 @@ bin_SCRIPTS = gphoto2-config
EXTRA_DIST = HACKING MAINTAINERS TESTERS installcheck.mk
EXTRA_DIST += libgphoto2.pc.in
pkgconfig_DATA = libgphoto2.pc
-Index: libgphoto2-2.5.14/Makefile.in
+Index: libgphoto2-2.5.16/Makefile.in
===================================================================
---- libgphoto2-2.5.14.orig/Makefile.in
-+++ libgphoto2-2.5.14/Makefile.in
+--- libgphoto2-2.5.16.orig/Makefile.in
++++ libgphoto2-2.5.16/Makefile.in
@@ -482,7 +482,7 @@ EXTRA_DIST = HACKING MAINTAINERS TESTERS
INSTALL README.in README README.packaging
pkgconfig_DATA = libgphoto2.pc
noinst_DATA = libgphoto2-uninstalled.pc
doc_DATA = AUTHORS COPYING NEWS ABOUT-NLS ChangeLog README \
-Index: libgphoto2-2.5.14/configure.ac
+Index: libgphoto2-2.5.16/configure.ac
===================================================================
---- libgphoto2-2.5.14.orig/configure.ac
-+++ libgphoto2-2.5.14/configure.ac
+--- libgphoto2-2.5.16.orig/configure.ac
++++ libgphoto2-2.5.16/configure.ac
@@ -635,20 +635,11 @@ gphoto-m4/Makefile
libgphoto2/Makefile
libgphoto2.pc
],[
dnl This relies on this code being called for each of the above files
dnl with ac_file set to the filename.
-Index: libgphoto2-2.5.14/libgphoto2_port/Makefile.am
+Index: libgphoto2-2.5.16/libgphoto2_port/Makefile.am
===================================================================
---- libgphoto2-2.5.14.orig/libgphoto2_port/Makefile.am
-+++ libgphoto2-2.5.14/libgphoto2_port/Makefile.am
+--- libgphoto2-2.5.16.orig/libgphoto2_port/Makefile.am
++++ libgphoto2-2.5.16/libgphoto2_port/Makefile.am
@@ -25,7 +25,7 @@ udevscript_PROGRAMS =
bin_SCRIPTS = gphoto2-port-config
########################################################################
-Index: libgphoto2-2.5.14/libgphoto2_port/Makefile.in
+Index: libgphoto2-2.5.16/libgphoto2_port/Makefile.in
===================================================================
---- libgphoto2-2.5.14.orig/libgphoto2_port/Makefile.in
-+++ libgphoto2-2.5.14/libgphoto2_port/Makefile.in
+--- libgphoto2-2.5.16.orig/libgphoto2_port/Makefile.in
++++ libgphoto2-2.5.16/libgphoto2_port/Makefile.in
@@ -574,7 +574,7 @@ EXTRA_LTLIBRARIES = disk.la ptpip.la ser
bin_SCRIPTS = gphoto2-port-config
########################################################################
# All iolibs are defined as EXTRA_LTLIBRARIES. This requires that
-Index: libgphoto2-2.5.14/libgphoto2_port/configure.ac
+Index: libgphoto2-2.5.16/libgphoto2_port/configure.ac
===================================================================
---- libgphoto2-2.5.14.orig/libgphoto2_port/configure.ac
-+++ libgphoto2-2.5.14/libgphoto2_port/configure.ac
+--- libgphoto2-2.5.16.orig/libgphoto2_port/configure.ac
++++ libgphoto2-2.5.16/libgphoto2_port/configure.ac
@@ -512,13 +512,10 @@ AC_SUBST([AM_LDFLAGS])
# ---------------------------------------------------------------------------
AC_CONFIG_FILES([
include $(TOPDIR)/rules.mk
PKG_NAME:=libiio
-PKG_VERSION:=0.10
-PKG_RELEASE:=4
+PKG_VERSION:=0.11
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/analogdevicesinc/libiio/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=002d57f35715821efae66479859bc5357b4d8d33bfff1446b4e17b02ae2c10d2
+PKG_HASH:=0174111b028d84f18fb3716b22834a372a1f2575938f87e20e5cbd76747d0fdb
PKG_LICENSE:=LGPL-2.1
PKG_LICENSE_FILES:=COPYING.txt
DEPENDS:=+libiio
endef
-define Package/libiio/description
+define Package/iiod/description
Daemon to access IIO devices via network.
endef
endef
define Package/iio-utils/description
- Command tools for IIO devices.
+ Command line tools for IIO devices.
endef
define Build/InstallDev
endef
define Package/iiod/install
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/iiod.init $(1)/etc/init.d/iiod
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/iiod $(1)/usr/sbin/
endef
--- /dev/null
+#!/bin/sh /etc/rc.common
+
+START=90
+USE_PROCD=1
+PROG=/usr/sbin/iiod
+
+start_service() {
+ procd_open_instance
+ procd_set_param command $PROG
+ procd_set_param respawn
+ procd_close_instance
+}
--- /dev/null
+--- a/CMakeLists.txt 2017-10-23 22:24:46.000000000 +0200
++++ b/CMakeLists.txt 2017-11-18 20:31:27.943838662 +0100
+@@ -111,7 +111,7 @@
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+- if (${LIBIIO_GIT_REPO} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
++ if ("${LIBIIO_GIT_REPO}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
PKG_LICENSE:=BSD-3-Clause
PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
-PKG_VERSION:=0.9.15
+PKG_VERSION:=0.9.22
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=cea46db1edb72231c9e009d7e6d6799256676eb8
-PKG_MIRROR_HASH:=a686754cef2ef29a511b8ea06d121f0ce562b570d6cea6c6a7562ff47b91d2a2
+PKG_SOURCE_VERSION:=8aafe1286cb4036b87054e6e1ca5edc34a31595c
+PKG_MIRROR_HASH:=ac6fca84ba903825958afe313ff0795c34eb0865ed7b5003b7112afcb24b9d94
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/cesnet/libnetconf2/
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
include $(TOPDIR)/rules.mk
PKG_NAME:=libp11
-PKG_VERSION:=0.4.6
+PKG_VERSION:=0.4.7
PKG_RELEASE:=1
-PKG_HASH:=03d4990c17c8dc1ba18a442a944acca6c03f4a3972be9aea6e727882f2be6d7c
+PKG_HASH:=32e486d4279e09174b63eb263bc840016ebfa80b0b154390c0539b211aec0452
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_LICENSE:=LGPL-2.1+
include $(TOPDIR)/rules.mk
PKG_NAME:=libpng
-PKG_VERSION:=1.6.29
-PKG_RELEASE:=2
+PKG_VERSION:=1.6.34
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@SF/libpng
-PKG_HASH:=4245b684e8fe829ebb76186327bb37ce5a639938b219882b53d64bd3cfc5f239
+PKG_HASH:=2f1e960d92ce3b3abd03d06dfec9637dfbd22febf107a536b44f7a47c60659f6
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
PKG_LICENSE:=Libpng GPL-2.0+ BSD-3-Clause
CONFIGURE_ARGS += \
--enable-shared \
--enable-static \
+ $(if $(findstring neon,$(CONFIG_TARGET_OPTIMIZATION)),--enable-hardware-optimizations=yes --enable-arm-neon=yes)
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/bin
include $(TOPDIR)/rules.mk
PKG_NAME:=libsearpc
-PKG_VERSION:=6.0.7
+PKG_VERSION:=6.2.2
PKG_RELEASE=$(PKG_SOURCE_VERSION)-1
PKG_LICENSE:=GPL-3.0
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=8998e7b2c5587f0b94c48db24e2952d08def5add
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=125f40beb7d310e65571cb0d93f157b196e83423fde69bebf9880ca1cfac6c46
+PKG_MIRROR_HASH:=207baa1fc63a60c117cf4985b60a18212b151fa070f208621633c3b53ab679bf
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
--- /dev/null
+diff -ruN libudev-fbsd-20160820/src/libudev.h libudev-fbsd-20160820.mod/src/libudev.h
+--- libudev-fbsd-20160820/src/libudev.h 2017-11-17 16:46:56.705435146 +0100
++++ libudev-fbsd-20160820.mod/src/libudev.h 2017-11-17 16:48:07.276021522 +0100
+@@ -11,6 +11,11 @@
+ #include <fcntl.h>
+ #include <unistd.h>
+
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
+ struct udev;
+ struct udev_device;
+ struct udev_list_entry;
+@@ -83,4 +88,8 @@
+ struct udev_monitor *udev_monitor);
+ void udev_monitor_unref(struct udev_monitor *udev_monitor);
+
++#ifdef __cplusplus
++} /* extern "C" */
++#endif
++
+ #endif
include $(TOPDIR)/rules.mk
PKG_NAME:=libuv
-PKG_VERSION:=1.14.0
+PKG_VERSION:=1.17.0
PKG_RELEASE:=1
PKG_LICENSE_FILES:=LICENSE
-PKG_MAINTAINER:=Luka Perkov <luka.perkov@sartura.hr>
+PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://dist.libuv.org/dist/v$(PKG_VERSION)/
-PKG_HASH:=7267f1564fc6bd84e1721ad7e3cdd7b5da06faab9fa09522f33589dc08d3edf9
+PKG_HASH:=ab9eb5355eb868e970a02022e0371d819251df6bbb88aada630cfcf8ac7b1c9b
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-v$(PKG_VERSION)
PKG_BUILD_PARALLEL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=libwebsockets
-PKG_VERSION:=2.2.1
-PKG_RELEASE:=3
+PKG_VERSION:=2.4.0
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_URL:=https://codeload.github.com/warmcat/libwebsockets/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=e7f9eaef258e003c9ada0803a9a5636757a5bc0a58927858834fb38a87d18ad2
+PKG_HASH:=0dc355c1f9a660b98667cc616fa4c4fe08dacdaeff2d5cc9f74e49e9d4af2d95
PKG_SOURCE_VERSION:=v$(PKG_VERSION)
SECTION:=libs
CATEGORY:=Libraries
TITLE:=libwebsockets
- DEPENDS:=+zlib
+ DEPENDS:=+zlib +libcap
URL:=https://libwebsockets.org
MAINTAINER:=Karl Palsson <karlp@etactica.com>
+ PROVIDES:= libwebsockets
endef
define Package/libwebsockets-openssl
VARIANT:=openssl
endef
-define Package/libwebsockets-wolfssl
- $(call Package/libwebsockets/Default)
- TITLE += (WolfSSL)
- DEPENDS += +libcyassl
- VARIANT:=wolfssl
+define Package/libwebsockets-mbedtls
+ $(call Package/$(PKG_NAME)/Default)
+ TITLE += (mbedTLS)
+ DEPENDS += +libmbedtls
+ VARIANT:=mbedtls
endef
define Package/libwebsockets-full
CMAKE_OPTIONS += -DLWS_WITH_SSL=ON
endif
-ifeq ($(BUILD_VARIANT),wolfssl)
- CMAKE_OPTIONS += -DLWS_OPENSSL_CLIENT_CERTS=/etc/ssl/certs
- CMAKE_OPTIONS += -DLWS_OPENSSL_SUPPORT=ON
- CMAKE_OPTIONS += -DLWS_WITH_SSL=ON
-# for wolfssl, edit package/libs/wolfssl/Makefile to include --enable-opensslextra
-# NOTE: it will compile without it, untested whether it it's needed?!
- CMAKE_OPTIONS += -DLWS_USE_WOLFSSL=ON
- CMAKE_OPTIONS += -DLWS_WOLFSSL_LIBRARIES=$(STAGING_DIR)/usr/lib/libwolfssl.so
- CMAKE_OPTIONS += -DLWS_WOLFSSL_INCLUDE_DIRS=$(STAGING_DIR)/usr/include
+ifeq ($(BUILD_VARIANT),mbedtls)
+ CMAKE_OPTIONS += -DLWS_WITH_MBEDTLS=1
endif
ifeq ($(BUILD_VARIANT),full)
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libwebsockets.so* $(1)/usr/lib/
endef
-Package/libwebsockets-wolfssl/install = $(Package/libwebsockets/install)
+Package/libwebsockets-mbedtls/install = $(Package/libwebsockets/install)
Package/libwebsockets-openssl/install = $(Package/libwebsockets/install)
Package/libwebsockets-full/install = $(Package/libwebsockets/install)
$(eval $(call BuildPackage,libwebsockets-openssl))
-$(eval $(call BuildPackage,libwebsockets-wolfssl))
+$(eval $(call BuildPackage,libwebsockets-mbedtls))
$(eval $(call BuildPackage,libwebsockets-full))
include $(TOPDIR)/rules.mk
PKG_NAME:=libxml2
-PKG_VERSION:=2.9.6
+PKG_VERSION:=2.9.7
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://gd.tuwien.ac.at/languages/libxml/ \
http://xmlsoft.org/sources/ \
ftp://fr.rpmfind.net/pub/libxml/
-PKG_HASH:=8b9038cca7240e881d462ea391882092dfdc6d4f483f72683e817be08df5ebbc
+PKG_HASH:=f63c5e7d30362ed28b38bfa1ac6313f9a80230720b7fb6c80575eeab3ff5900c
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libxml2.{la,a,so*} $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/lib/cmake/libxml2
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/cmake/libxml2/libxml2-config.cmake \
+ $(1)/usr/lib/cmake/libxml2
+
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libxml-2.0.pc $(1)/usr/lib/pkgconfig/
include $(TOPDIR)/rules.mk
PKG_NAME:=libxslt
-PKG_VERSION:=1.1.28
-PKG_RELEASE:=2
+PKG_VERSION:=1.1.31
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:= \
http://xmlsoft.org/sources/ \
ftp://fr.rpmfind.net/pub/libxml/
-PKG_HASH:=5fc7151a57b89c03d7b825df5a0fae0a8d5f05674c0e7cf2937ecec4d54a028c
+PKG_HASH:=db25e96b6b801144277e67c05b10560ac09dfff82ccd53a154ce86e43622f3ab
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
--- /dev/null
+#
+# Copyright (C) 2017 Steven Hessing
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libyaml-cpp
+PKG_RELEASE:=1
+
+PKG_MAINTAINER:= Steven Hessing <steven.hessing@gmail.com>
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/jbeder/yaml-cpp/
+PKG_SOURCE_DATA:=2017-11-01
+PKG_SOURCE_VERSION:=beb44b872c07c74556314e730c6f20a00b32e8e5
+PKG_MIRROR_HASH:=3ddb1f5a6c564f33fd164c0300df8048c689c319964a08386d869637a0f5c8e2
+
+PKG_SOURCE_SUBDIR:=yaml-cpp
+
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
+PKG_BUILD_PARALLEL:=1
+
+CMAKE_INSTALL:=1
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+CMAKE_OPTIONS += -DBUILD_SHARED_LIBS=ON
+#CMAKE_OPTIONS += -DBUILD_SHARED_LIBS=OFF
+
+define Package/libyaml-cpp
+ SECTION:=development
+ CATEGORY:=Libraries
+ TITLE:=libyaml-cpp
+ URL:=https://github.com/jbeder/yaml-cpp
+ DEPENDS:=+libstdcpp
+endef
+
+define Package/libyaml-cpp/description
+yaml-cpp is a YAML parser and emitter in C++ matching the YAML 1.2 spec.
+endef
+
+define Package/libyaml-cpp/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ #$(INSTALL_DATA) $(PKG_BUILD_DIR)/libyaml-cpp.so.0.5.3 $(1)/usr/lib/
+ #$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libyaml-cpp.so.0.5.3 $(1)/usr/lib/
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libyaml-cpp.so.0.5 $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libyaml-cpp))
include $(TOPDIR)/rules.mk
PKG_NAME:=libyang
-PKG_VERSION:=0.13.46
+PKG_VERSION:=0.13.75
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_LICENSE:=GPL-2.0+
PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=d1556e0ae3872d676dfd63bd6073fe7e72d0130f
-PKG_MIRROR_HASH:=4a23a3854ceca147e113ab65ecdce3371e30b59436680e7d981b0bab6dbe751d
+PKG_SOURCE_VERSION:=e11255e32a63fdafe31764f5d594bed46d08f6a9
+PKG_MIRROR_HASH:=916cbfd52a04c6b306afa5fb684299f202c1c235689d8b57546a6b4eb4cc5a39
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/CESNET/libyang.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
ftp://ftp.nl.uu.net/pub/unix/db/openldap/openldap-release/ \
ftp://ftp.plig.org/pub/OpenLDAP/openldap-release/
PKG_HASH:=cdd6cffdebcd95161a73305ec13fc7a78e9707b46ca9f84fb897cd5626df3824
+PKG_LICENSE:=OLDAP-2.8
+PKG_LICENSE_FILES:=LICENSE
PKG_FIXUP:=autoreconf
include $(TOPDIR)/rules.mk
PKG_NAME:=postgresql
-PKG_VERSION:=9.6.4
+PKG_VERSION:=9.6.5
PKG_RELEASE:=1
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_LICENSE:=PostgreSQL
http://ftp.postgresql.org/pub/source/v$(PKG_VERSION) \
ftp://ftp.postgresql.org/pub/source/v$(PKG_VERSION)
-PKG_HASH:=2b3ab16d82e21cead54c08b95ce3ac480696944a68603b6c11b3205b7376ce13
+PKG_HASH:=06da12a7e3dddeb803962af8309fa06da9d6989f49e22865335f0a14bad0744c
PKG_USE_MIPS16:=0
PKG_FIXUP:=autoreconf
#
-# Copyright (C) 2006-2012 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.
include $(TOPDIR)/rules.mk
PKG_NAME:=qrencode
-PKG_VERSION:=3.4.4
-PKG_RELEASE:=2
+PKG_VERSION:=4.0.0
+PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://fukuchi.org/works/qrencode/
-PKG_HASH:=e794e26a96019013c0e3665cb06b18992668f352c5553d0a553f5d144f7f2a72
+PKG_HASH:=c90035e16921117d4086a7fdee65aab85be32beb4a376f6b664b8a425d327d0b
PKG_MAINTAINER:=Jonathan Bennett <JBennett@incomsystems.biz>
PKG_LICENSE:=LGPL-2.1+
PKG_INSTALL:=1
--enable-static \
--disable-rpath \
--disable-sdltest \
- --without-tests
+ --without-tests \
+ --without-png
TARGET_LDFLAGS+= -s
--- /dev/null
+From 7dd8a1b6f4efab84025c735195ad9d84f6477359 Mon Sep 17 00:00:00 2001
+From: Jonathan Bennett <JBennett@incomsystems.biz>
+Date: Mon, 16 Oct 2017 11:59:23 -0500
+Subject: [PATCH] Adds the --inline option, which omits the xml tag for SVG
+ output.
+
+---
+ qrenc.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/qrenc.c b/qrenc.c
+index ed83d8a..373352e 100644
+--- a/qrenc.c
++++ b/qrenc.c
+@@ -45,6 +45,7 @@ static int structured = 0;
+ static int rle = 0;
+ static int svg_path = 0;
+ static int micro = 0;
++static int inline_svg = 0;
+ static QRecLevel level = QR_ECLEVEL_L;
+ static QRencodeMode hint = QR_MODE_8;
+ static unsigned char fg_color[4] = {0, 0, 0, 255};
+@@ -80,6 +81,7 @@ static const struct option options[] = {
+ {"margin" , required_argument, NULL, 'm'},
+ {"dpi" , required_argument, NULL, 'd'},
+ {"type" , required_argument, NULL, 't'},
++ {"inline" , no_argument , NULL, 'I'},
+ {"structured" , no_argument , NULL, 'S'},
+ {"kanji" , no_argument , NULL, 'k'},
+ {"casesensitive", no_argument , NULL, 'c'},
+@@ -95,7 +97,7 @@ static const struct option options[] = {
+ {NULL, 0, NULL, 0}
+ };
+
+-static char *optstring = "ho:r:l:s:v:m:d:t:Skci8MV";
++static char *optstring = "ho:r:l:s:v:m:d:t:ISkci8MV";
+
+ static void usage(int help, int longopt, int status)
+ {
+@@ -132,6 +134,7 @@ static void usage(int help, int longopt, int status)
+ " -t {PNG,PNG32,EPS,SVG,XPM,ANSI,ANSI256,ASCII,ASCIIi,UTF8,ANSIUTF8},\n"
+ " --type={PNG,PNG32,EPS,SVG,XPM,ANSI,ANSI256,ASCII,ASCIIi,UTF8,ANSIUTF8}\n"
+ " specify the type of the generated image. (default=PNG)\n\n"
++" -I, --inline Only useful for SVG output, generates an svg without the XML tag\n"
+ " -S, --structured\n"
+ " make structured symbols. Version must be specified.\n\n"
+ " -k, --kanji assume that the input text contains kanji (shift-jis).\n\n"
+@@ -551,7 +554,8 @@ static int writeSVG(const QRcode *qrcode, const char *outfile)
+ bg_opacity = (float)bg_color[3] / 255;
+
+ /* XML declaration */
+- fputs( "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n", fp );
++ if (!inline_svg)
++ fputs( "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n", fp );
+
+ /* DTD
+ No document type specified because "while a DTD is provided in [the SVG]
+@@ -1324,6 +1328,9 @@ int main(int argc, char **argv)
+ exit(EXIT_FAILURE);
+ }
+ break;
++ case 'I':
++ inline_svg = 1;
++ break;
+ case 'S':
+ structured = 1;
+ break;
+++ /dev/null
---- a/qrenc.c
-+++ b/qrenc.c
-@@ -25,7 +25,6 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
--#include <png.h>
- #include <getopt.h>
-
- #include "qrencode.h"
-@@ -49,7 +48,6 @@
- static int verbose = 0;
-
- enum imageType {
-- PNG_TYPE,
- EPS_TYPE,
- SVG_TYPE,
- ANSI_TYPE,
-@@ -60,7 +58,7 @@
- ANSIUTF8_TYPE
- };
-
--static enum imageType image_type = PNG_TYPE;
-+static enum imageType image_type = SVG_TYPE;
-
- static const struct option options[] = {
- {"help" , no_argument , NULL, 'h'},
-@@ -96,13 +94,13 @@
- if(longopt) {
- fprintf(stderr,
- "Usage: qrencode [OPTION]... [STRING]\n"
--"Encode input data in a QR Code and save as a PNG or EPS image.\n\n"
-+"Encode input data in a QR Code and save as a SVG or EPS image.\n\n"
- " -h, --help display the help message. -h displays only the help of short\n"
- " options.\n\n"
- " -o FILENAME, --output=FILENAME\n"
- " write image to FILENAME. If '-' is specified, the result\n"
- " will be output to standard output. If -S is given, structured\n"
--" symbols are written to FILENAME-01.png, FILENAME-02.png, ...\n"
-+" symbols are written to FILENAME-01.svg, FILENAME-02.svg, ...\n"
- " (suffix is removed from FILENAME, if specified)\n"
- " -s NUMBER, --size=NUMBER\n"
- " specify module size in dots (pixels). (default=3)\n\n"
-@@ -116,9 +114,9 @@
- " specify the width of the margins. (default=4 (2 for Micro QR)))\n\n"
- " -d NUMBER, --dpi=NUMBER\n"
- " specify the DPI of the generated PNG. (default=72)\n\n"
--" -t {PNG,EPS,SVG,ANSI,ANSI256,ASCII,ASCIIi,UTF8,ANSIUTF8}, --type={PNG,EPS,\n"
-+" -t {EPS,SVG,ANSI,ANSI256,ASCII,ASCIIi,UTF8,ANSIUTF8}, --type={EPS,\n"
- " SVG,ANSI,ANSI256,ASCII,ASCIIi,UTF8,ANSIUTF8}\n"
--" specify the type of the generated image. (default=PNG)\n\n"
-+" specify the type of the generated image. (default=SVG)\n\n"
- " -S, --structured\n"
- " make structured symbols. Version must be specified.\n\n"
- " -k, --kanji assume that the input text contains kanji (shift-jis).\n\n"
-@@ -133,7 +131,7 @@
- " --background=RRGGBB[AA]\n"
- " specify foreground/background color in hexadecimal notation.\n"
- " 6-digit (RGB) or 8-digit (RGBA) form are supported.\n"
--" Color output support available only in PNG and SVG.\n"
-+" Color output support available only in SVG.\n"
- " -V, --version\n"
- " display the version number and copyrights of the qrencode.\n\n"
- " --verbose\n"
-@@ -153,12 +151,12 @@
- } else {
- fprintf(stderr,
- "Usage: qrencode [OPTION]... [STRING]\n"
--"Encode input data in a QR Code and save as a PNG or EPS image.\n\n"
-+"Encode input data in a QR Code and save as a SVG or EPS image.\n\n"
- " -h display this message.\n"
- " --help display the usage of long options.\n"
- " -o FILENAME write image to FILENAME. If '-' is specified, the result\n"
- " will be output to standard output. If -S is given, structured\n"
--" symbols are written to FILENAME-01.png, FILENAME-02.png, ...\n"
-+" symbols are written to FILENAME-01.svg, FILENAME-02.svg, ...\n"
- " (suffix is removed from FILENAME, if specified)\n"
- " -s NUMBER specify module size in dots (pixels). (default=3)\n"
- " -l {LMQH} specify error correction level from L (lowest) to H (highest).\n"
-@@ -166,8 +164,8 @@
- " -v NUMBER specify the version of the symbol. (default=auto)\n"
- " -m NUMBER specify the width of the margins. (default=4 (2 for Micro))\n"
- " -d NUMBER specify the DPI of the generated PNG. (default=72)\n"
--" -t {PNG,EPS,SVG,ANSI,ANSI256,ASCII,ASCIIi,UTF8,ANSIUTF8}\n"
--" specify the type of the generated image. (default=PNG)\n"
-+" -t {EPS,SVG,ANSI,ANSI256,ASCII,ASCIIi,UTF8,ANSIUTF8}\n"
-+" specify the type of the generated image. (default=SVG)\n"
- " -S make structured symbols. Version must be specified.\n"
- " -k assume that the input text contains kanji (shift-jis).\n"
- " -c encode lower-case alphabet characters in 8-bit mode. (default)\n"
-@@ -178,7 +176,7 @@
- " --background=RRGGBB[AA]\n"
- " specify foreground/background color in hexadecimal notation.\n"
- " 6-digit (RGB) or 8-digit (RGBA) form are supported.\n"
--" Color output support available only in PNG and SVG.\n"
-+" Color output support available only in SVG.\n"
- " -V display the version number and copyrights of the qrencode.\n"
- " [STRING] input data. If it is not specified, data will be taken from\n"
- " standard input.\n"
-@@ -253,128 +251,6 @@
- return fp;
- }
-
--static int writePNG(QRcode *qrcode, const char *outfile)
--{
-- static FILE *fp; // avoid clobbering by setjmp.
-- png_structp png_ptr;
-- png_infop info_ptr;
-- png_colorp palette;
-- png_byte alpha_values[2];
-- unsigned char *row, *p, *q;
-- int x, y, xx, yy, bit;
-- int realwidth;
--
-- realwidth = (qrcode->width + margin * 2) * size;
-- row = (unsigned char *)malloc((realwidth + 7) / 8);
-- if(row == NULL) {
-- fprintf(stderr, "Failed to allocate memory.\n");
-- exit(EXIT_FAILURE);
-- }
--
-- if(outfile[0] == '-' && outfile[1] == '\0') {
-- fp = stdout;
-- } else {
-- fp = fopen(outfile, "wb");
-- if(fp == NULL) {
-- fprintf(stderr, "Failed to create file: %s\n", outfile);
-- perror(NULL);
-- exit(EXIT_FAILURE);
-- }
-- }
--
-- png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-- if(png_ptr == NULL) {
-- fprintf(stderr, "Failed to initialize PNG writer.\n");
-- exit(EXIT_FAILURE);
-- }
--
-- info_ptr = png_create_info_struct(png_ptr);
-- if(info_ptr == NULL) {
-- fprintf(stderr, "Failed to initialize PNG write.\n");
-- exit(EXIT_FAILURE);
-- }
--
-- if(setjmp(png_jmpbuf(png_ptr))) {
-- png_destroy_write_struct(&png_ptr, &info_ptr);
-- fprintf(stderr, "Failed to write PNG image.\n");
-- exit(EXIT_FAILURE);
-- }
--
-- palette = (png_colorp) malloc(sizeof(png_color) * 2);
-- if(palette == NULL) {
-- fprintf(stderr, "Failed to allocate memory.\n");
-- exit(EXIT_FAILURE);
-- }
-- palette[0].red = fg_color[0];
-- palette[0].green = fg_color[1];
-- palette[0].blue = fg_color[2];
-- palette[1].red = bg_color[0];
-- palette[1].green = bg_color[1];
-- palette[1].blue = bg_color[2];
-- alpha_values[0] = fg_color[3];
-- alpha_values[1] = bg_color[3];
-- png_set_PLTE(png_ptr, info_ptr, palette, 2);
-- png_set_tRNS(png_ptr, info_ptr, alpha_values, 2, NULL);
--
-- png_init_io(png_ptr, fp);
-- png_set_IHDR(png_ptr, info_ptr,
-- realwidth, realwidth,
-- 1,
-- PNG_COLOR_TYPE_PALETTE,
-- PNG_INTERLACE_NONE,
-- PNG_COMPRESSION_TYPE_DEFAULT,
-- PNG_FILTER_TYPE_DEFAULT);
-- png_set_pHYs(png_ptr, info_ptr,
-- dpi * INCHES_PER_METER,
-- dpi * INCHES_PER_METER,
-- PNG_RESOLUTION_METER);
-- png_write_info(png_ptr, info_ptr);
--
-- /* top margin */
-- memset(row, 0xff, (realwidth + 7) / 8);
-- for(y=0; y<margin * size; y++) {
-- png_write_row(png_ptr, row);
-- }
--
-- /* data */
-- p = qrcode->data;
-- for(y=0; y<qrcode->width; y++) {
-- bit = 7;
-- memset(row, 0xff, (realwidth + 7) / 8);
-- q = row;
-- q += margin * size / 8;
-- bit = 7 - (margin * size % 8);
-- for(x=0; x<qrcode->width; x++) {
-- for(xx=0; xx<size; xx++) {
-- *q ^= (*p & 1) << bit;
-- bit--;
-- if(bit < 0) {
-- q++;
-- bit = 7;
-- }
-- }
-- p++;
-- }
-- for(yy=0; yy<size; yy++) {
-- png_write_row(png_ptr, row);
-- }
-- }
-- /* bottom margin */
-- memset(row, 0xff, (realwidth + 7) / 8);
-- for(y=0; y<margin * size; y++) {
-- png_write_row(png_ptr, row);
-- }
--
-- png_write_end(png_ptr, info_ptr);
-- png_destroy_write_struct(&png_ptr, &info_ptr);
--
-- fclose(fp);
-- free(row);
-- free(palette);
--
-- return 0;
--}
--
- static int writeEPS(QRcode *qrcode, const char *outfile)
- {
- FILE *fp;
-@@ -831,9 +707,6 @@
- }
-
- switch(image_type) {
-- case PNG_TYPE:
-- writePNG(qrcode, outfile);
-- break;
- case EPS_TYPE:
- writeEPS(qrcode, outfile);
- break;
-@@ -887,9 +760,6 @@
- size_t suffix_size;
-
- switch(image_type) {
-- case PNG_TYPE:
-- type_suffix = ".png";
-- break;
- case EPS_TYPE:
- type_suffix = ".eps";
- break;
-@@ -948,9 +818,6 @@
- }
-
- switch(image_type) {
-- case PNG_TYPE:
-- writePNG(p->code, filename);
-- break;
- case EPS_TYPE:
- writeEPS(p->code, filename);
- break;
-@@ -1062,9 +929,7 @@
- }
- break;
- case 't':
-- if(strcasecmp(optarg, "png") == 0) {
-- image_type = PNG_TYPE;
-- } else if(strcasecmp(optarg, "eps") == 0) {
-+ if(strcasecmp(optarg, "eps") == 0) {
- image_type = EPS_TYPE;
- } else if(strcasecmp(optarg, "svg") == 0) {
- image_type = SVG_TYPE;
-@@ -1133,11 +998,6 @@
- exit(EXIT_SUCCESS);
- }
-
-- if(outfile == NULL && image_type == PNG_TYPE) {
-- fprintf(stderr, "No output filename is given.\n");
-- exit(EXIT_FAILURE);
-- }
--
- if(optind < argc) {
- intext = (unsigned char *)argv[optind];
- length = strlen((char *)intext);
---- a/configure.ac
-+++ b/configure.ac
-@@ -58,9 +58,6 @@
- [build_tools=$withval], [build_tools=yes])
-
- AM_CONDITIONAL(BUILD_TOOLS, [test "x$build_tools" = "xyes" ])
--if test x$build_tools = xyes ; then
-- PKG_CHECK_MODULES(png, "libpng")
--fi
-
- dnl --with-tests
- AC_ARG_WITH([tests], [AS_HELP_STRING([--with-tests], [build tests [default=no]])],
-@@ -80,12 +77,6 @@
- echo "/* #undef WITH_TESTS */" >>confdefs.h
- fi
-
--if test x$build_tests = xyes ; then
-- SDL_REQUIRED_VERSION=1.2.0
-- AM_PATH_SDL($SDL_REQUIRED_VERSION,,AC_MSG_WARN([*** SDL $SDL_REQUIRED_VERSION or better is required.]))
-- AC_MSG_NOTICE([SDL check done.])
-- AM_ICONV_LINK
--fi
- AM_CONDITIONAL(HAVE_SDL, [test "x$SDL_CFLAGS" != "x" ])
-
-
include $(TOPDIR)/rules.mk
PKG_NAME:=sqlite
-PKG_VERSION:=3200100
+PKG_VERSION:=3210000
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-autoconf-$(PKG_VERSION).tar.gz
-PKG_HASH:=ec66595b29bc0798b023a5122021ea646ab4fa9e2f735937c5426feeba950742
+PKG_HASH:=d7dd516775005ad87a57f428b6f86afd206cb341722927f104d3f0cf65fbbbe3
PKG_SOURCE_URL:=http://www.sqlite.org/2017/
PKG_LICENSE:=PUBLICDOMAIN
--- /dev/null
+#
+# Copyright (C) 2017 Lucian Cristian <lucian.cristian@gmail.com>
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=uw-imap
+PKG_VERSION:=2007f
+PKG_RELEASE:=1
+
+PKG_SOURCE:=imap-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:= \
+ https://www.mirrorservice.org/sites/ftp.cac.washington.edu/imap \
+ http://ftp.ntua.gr/pub/net/mail/imap \
+ http://gd.tuwien.ac.at/infosys/mail/imap
+
+PKG_HASH:=53e15a2b5c1bc80161d42e9f69792a3fa18332b7b771910131004eb520004a28
+PKG_BUILD_DIR:=$(BUILD_DIR)/imap-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Lucian Cristian <lucian.cristian@gmail.com>
+
+PKG_LICENSE:=Apache-2.0
+PKG_LICENSE_FILES:=LICENSE.txt
+
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/uw-imap
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=University of Washington IMAP toolkit
+ URL:=https://www.washington.edu/imap/
+ DEPENDS:=+libpthread +libopenssl
+endef
+
+define Package/uw-imap/description
+ The UW IMAP tookit includes the following:
+ c-lient library : an API (application programming interface) used to build email clients and servers,
+ including support for IMAP,POP3, SMTP and NNTP protocols and for local mailbox file access on Unix and Windows
+endef
+
+TARGET_CFLAGS += \
+ -fPIC -DPIC -D_REENTRANT -DDISABLE_POP_PROXY -fno-strict-aliasing -Wno-pointer-sign \
+ -Wno-implicit-function-declaration -Wno-incompatible-pointer-types
+
+MAKE_FLAGS += \
+ SSLINCLUDE=$(STAGING_DIR)/usr/include SSLCERTS=/etc/ssl/certs GCCOPTLEVEL=" -Os" \
+ SSLDIR=$(STAGING_DIR)/usr SHLIBNAME=libc-client.so.$(PKG_VERSION) $(if $(CONFIG_IPV6),IP=6,IP=4)
+
+define Build/Compile
+ $(MAKE) -C $(PKG_BUILD_DIR) slx EXTRACFLAGS='$(TARGET_CFLAGS)' CC='$(TARGET_CC)' $(MAKE_FLAGS)
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/lib \
+ $(1)/usr/include/c-client
+ $(CP) $(PKG_BUILD_DIR)/c-client/libc-client.so.$(PKG_VERSION) $(1)/usr/lib/
+ $(LN) libc-client.so.$(PKG_VERSION) $(1)/usr/lib/libc-client.so
+ $(CP) $(PKG_BUILD_DIR)/c-client/linkage.h $(1)/usr/include/c-client/
+ $(CP) $(PKG_BUILD_DIR)/src/c-client/*.h $(1)/usr/include/c-client/
+ $(CP) $(PKG_BUILD_DIR)/src/osdep/unix/*.h $(1)/usr/include/c-client/
+ $(LN) os_slx.h $(1)/usr/include/c-client/osdep.h
+endef
+
+define Package/uw-imap/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_BUILD_DIR)/c-client/libc-client.so.$(PKG_VERSION) $(1)/usr/lib/
+ $(LN) libc-client.so.$(PKG_VERSION) $(1)/usr/lib/libc-client.so
+endef
+
+
+$(eval $(call BuildPackage,uw-imap))
--- /dev/null
+--- a/Makefile 2017-11-13 01:13:36.340236114 +0200
++++ b/Makefile 2017-11-13 01:34:56.869682313 +0200
+@@ -638,10 +638,6 @@
+ @echo + yourself, try adding IP6=4 to the make command line.
+ @echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ @echo
+- @echo Do you want to build with IPv6 anyway? Type y or n please:
+- @$(SH) -c 'read x; case "$$x" in y) exit 0;; *) (make noip6;exit 1);; esac'
+- @echo OK, I will remember that you really want to build with IPv6.
+- @echo You will not see this message again.
+ @$(TOUCH) ip6
+
+ noip6:
+@@ -678,20 +674,18 @@
+ $(TOOLS)/$@ "$(LN)" src/tmail tmail
+ $(LN) $(TOOLS)/$@ .
+
+-build: OSTYPE rebuild rebuildclean bundled
++build: OSTYPE rebuild rebuildclean
+
+ OSTYPE:
+ @$(MAKE) ip$(IP)
+ @echo Building c-client for $(BUILDTYPE)...
+ @$(TOUCH) SPECIALS
+- echo `$(CAT) SPECIALS` $(EXTRASPECIALS) > c-client/SPECIALS
+ $(CD) c-client;$(MAKE) $(BUILDTYPE) EXTRACFLAGS='$(EXTRACFLAGS)'\
+ EXTRALDFLAGS='$(EXTRALDFLAGS)'\
+ EXTRADRIVERS='$(EXTRADRIVERS)'\
+ EXTRAAUTHENTICATORS='$(EXTRAAUTHENTICATORS)'\
+ PASSWDTYPE=$(PASSWDTYPE) SSLTYPE=$(SSLTYPE) IP=$(IP)\
+- $(SPECIALS) $(EXTRASPECIALS)
+- echo $(BUILDTYPE) > OSTYPE
++ $(SPECIALS) $(EXTRASPECIALS) OSTYPE=$(BUILDTYPE)
+ $(TOUCH) rebuild
+
+ rebuild:
+--- a/src/osdep/unix/Makefile 2017-11-13 01:37:58.674011768 +0200
++++ b/src/osdep/unix/Makefile 2017-11-13 03:30:18.204908962 +0200
+@@ -96,11 +96,11 @@
+ LOGINPW=std
+ SIGTYPE=bsd
+ CRXTYPE=std
+-ACTIVEFILE=/usr/lib/news/active
+-SPOOLDIR=/usr/spool
++ACTIVEFILE=/var/lib/news/active
++SPOOLDIR=/var/spool
+ MAILSPOOL=$(SPOOLDIR)/mail
+ NEWSSPOOL=$(SPOOLDIR)/news
+-RSHPATH=/usr/ucb/rsh
++RSHPATH=/usr/bin/rsh
+ MD5PWD=/etc/cram-md5.pwd
+ # Tries one of the test alternatives below if not specified.
+ LOCKPGM=
+@@ -154,7 +154,7 @@
+ dummy.o pseudo.o netmsg.o flstring.o fdstring.o \
+ rfc822.o nntp.o smtp.o imap4r1.o pop3.o \
+ unix.o mbx.o mmdf.o tenex.o mtx.o news.o phile.o mh.o mx.o mix.o
+-CFLAGS=-g
++CFLAGS=$(BASECFLAGS) $(EXTRACFLAGS) -DCHUNKSIZE=$(CHUNKSIZE)
+
+ CAT=cat
+ MAKE=make
+@@ -162,6 +162,16 @@
+ RM=rm -rf
+ SH=sh
+
++OSCFLAGS= $(SSLCFLAGS) \
++ -DCREATEPROTO=$(CREATEPROTO) -DEMPTYPROTO=$(EMPTYPROTO) \
++ -DMD5ENABLE=\"$(MD5PWD)\" -DMAILSPOOL=\"$(MAILSPOOL)\" \
++ -DANONYMOUSHOME=\"$(MAILSPOOL)/anonymous\" \
++ -DACTIVEFILE=\"$(ACTIVEFILE)\" -DNEWSSPOOL=\"$(NEWSSPOOL)\" \
++ -DRSHPATH=\"$(RSHPATH)\" -DLOCKPGM=\"$(LOCKPGM)\" \
++ -DLOCKPGM1=\"$(LOCKPGM1)\" -DLOCKPGM2=\"$(LOCKPGM2)\" \
++ -DLOCKPGM3=\"$(LOCKPGM3)\"
++
++LDFLAGS= $(BASELDFLAGS) $(EXTRALDFLAGS) $(SSLLDFLAGS)
+
+ # Primary build command
+
+@@ -174,7 +184,7 @@
+ # Here if no make argument established
+
+ missing: osdep.h
+- $(MAKE) all `$(CAT) SPECIALS`
++ $(MAKE) all $(SPECIALS)
+
+ osdep.h:
+ @echo You must specify what type of system
+@@ -674,7 +684,7 @@
+ @echo You are building for libc6/glibc versions of Secure Linux
+ @echo If you want libc5 versions you must use sl5 instead!
+ @echo If you want libc4 versions you must use sl4 instead!
+- $(BUILD) `$(CAT) SPECIALS` OS=$@ \
++ $(BUILD) $(SPECIALS) OS=$@ \
+ SIGTYPE=psx CHECKPW=psx CRXTYPE=nfs \
+ SPOOLDIR=/var/spool \
+ ACTIVEFILE=/var/lib/news/active \
+@@ -863,7 +873,7 @@
+ @$(SH) ARCHIVE
+
+ .c.o:
+- `$(CAT) CCTYPE` -c `$(CAT) CFLAGS` $*.c
++ $(CC) -c $(CFLAGS) $*.c
+
+
+ # Cleanup
+@@ -922,8 +932,8 @@
+ @echo If you get No such file error messages for files x509.h, ssl.h,
+ @echo pem.h, buffer.h, bio.h, and crypto.h, that means that OpenSSL
+ @echo is not installed on your system. Either install OpenSSL first
+- @echo or build with command: make `$(CAT) OSTYPE` SSLTYPE=none
+- `$(CAT) CCTYPE` -c `$(CAT) CFLAGS` `$(CAT) OSCFLAGS` -c osdep.c
++ @echo or build with command: make $(OSTYPE) SSLTYPE=none
++ $(CC) -c $(CFLAGS) $(OSCFLAGS) -c osdep.c
+
+ osdep.c: osdepbas.c osdepckp.c osdeplog.c osdepssl.c
+ $(CAT) osdepbas.c osdepckp.c osdeplog.c osdepssl.c > osdep.c
+@@ -962,21 +972,14 @@
+
+ # Once-only environment setup
+
+-once: onceenv ckp$(PASSWDTYPE) ssl$(SSLTYPE) osdep.c
++once: ssl$(SSLTYPE) onceenv ckp$(PASSWDTYPE) osdep.c
+
+ onceenv:
+ @echo Once-only environment setup...
+- echo $(CC) > CCTYPE
+- echo $(BASECFLAGS) '$(EXTRACFLAGS)' -DCHUNKSIZE=$(CHUNKSIZE) > CFLAGS
+- echo -DCREATEPROTO=$(CREATEPROTO) -DEMPTYPROTO=$(EMPTYPROTO) \
+- -DMD5ENABLE=\"$(MD5PWD)\" -DMAILSPOOL=\"$(MAILSPOOL)\" \
+- -DANONYMOUSHOME=\"$(MAILSPOOL)/anonymous\" \
+- -DACTIVEFILE=\"$(ACTIVEFILE)\" -DNEWSSPOOL=\"$(NEWSSPOOL)\" \
+- -DRSHPATH=\"$(RSHPATH)\" -DLOCKPGM=\"$(LOCKPGM)\" \
+- -DLOCKPGM1=\"$(LOCKPGM1)\" -DLOCKPGM2=\"$(LOCKPGM2)\" \
+- -DLOCKPGM3=\"$(LOCKPGM3)\" > OSCFLAGS
+- echo $(BASELDFLAGS) $(EXTRALDFLAGS) > LDFLAGS
+ echo "$(ARRC) $(ARCHIVE) $(BINARIES);$(RANLIB) $(ARCHIVE)" > ARCHIVE
++ echo "$(OSCFLAGS)" > OSCFLAGS
++ echo "$(CC) $(CFLAGS) $(OSCFLAGS) -shared -Wl,-soname,libc-client.so \
++ -o $(SHLIBNAME) $(BINARIES) $(LDFLAGS)" >> ARCHIVE
+ echo $(OS) > OSTYPE
+ ./drivers $(EXTRADRIVERS) $(DEFAULTDRIVERS) dummy
+ ./mkauths $(EXTRAAUTHENTICATORS) $(DEFAULTAUTHENTICATORS)
+@@ -1055,7 +1058,6 @@
+ sbasic: # UNIX OpenSSL
+ @echo Building with SSL
+ $(LN) ssl_unix.c osdepssl.c
+- echo $(SSLCFLAGS) >> OSCFLAGS
+ echo " ssl_onceonlyinit ();" >> linkage.c
+
+ snopwd: # Plaintext disable
+@@ -1063,13 +1065,12 @@
+ echo " mail_parameters (NIL,SET_DISABLEPLAINTEXT,(void *) 2);" >> linkage.c
+
+ sldunix:# Normal UNIX SSL load flags
+- echo $(SSLLDFLAGS) >> LDFLAGS
++ @echo Normal UNIX SSL load flags
+
+
+ sldsco: # SCO SSL load flags
+ # Note: Tim Rice says that SSL has to be lunk before other libraries on SCO.
+- echo $(SSLLDFLAGS) `cat LDFLAGS` > LDFLAGS.tmp
+- mv LDFLAGS.tmp LDFLAGS
++ @echo SCO SSL load flags
+
+
+ # A monument to a hack of long ago and far away...
--- /dev/null
+Patch by Robert Scheck <redhat@linuxnetz.de> for uw-imap >= 2004a, which corrects
+paths to imapd, ipop2d and ipop3d in the man pages.
+
+This patch is based on Red Hat Bugzilla ID #127271 and solves ID #229781.
+
+--- imap-2004a/src/imapd/imapd.8 2004-05-18 19:46:54.000000000 +0200
++++ imap-2004a/src/imapd/imapd.8.doc 2004-07-23 15:24:17.000000000 +0200
+@@ -3,7 +3,7 @@
+ .SH NAME
+ IMAPd \- Internet Message Access Protocol server
+ .SH SYNOPSIS
+-.B /usr/etc/imapd
++.B /usr/sbin/imapd
+ .SH DESCRIPTION
+ .I imapd
+ is a server which supports the
+--- imap-2004a/src/ipopd/ipopd.8 2004-05-18 19:50:05.000000000 +0200
++++ imap-2004a/src/ipopd/ipopd.8.doc 2004-07-23 15:23:38.000000000 +0200
+@@ -3,9 +3,9 @@
+ .SH NAME
+ IPOPd \- Post Office Protocol server
+ .SH SYNOPSIS
+-.B /usr/etc/ipop2d
++.B /usr/sbin/ipop2d
+ .PP
+-.B /usr/etc/ipop3d
++.B /usr/sbin/ipop3d
+ .SH DESCRIPTION
+ .I ipop2d
+ and
--- /dev/null
+diff -up imap-2007e/src/c-client/rfc822.c.overflow imap-2007e/src/c-client/rfc822.c
+--- imap-2007e/src/c-client/rfc822.c.overflow 2008-12-12 11:08:26.000000000 -0600
++++ imap-2007e/src/c-client/rfc822.c 2009-07-07 19:27:20.057772757 -0500
+@@ -384,6 +384,9 @@ void rfc822_parse_content (BODY *body,ST
+ if (CHR (bs) == '\012'){/* following LF? */
+ c = SNX (bs); i--; /* yes, slurp it */
+ }
++ if (!i) /* Make sure we don't get an overflow for */
++ break; /* messages ending on \015 (or the following */
++ /* i-- will cause i to be MAXINT. Not good.) */
+ case '\012': /* at start of a line, start with -- ? */
+ if (!(i && i-- && ((c = SNX (bs)) == '-') && i-- &&
+ ((c = SNX (bs)) == '-'))) break;
--- /dev/null
+diff -up imap-2007e/src/c-client/auth_md5.c.authmd5 imap-2007e/src/c-client/auth_md5.c
+--- imap-2007e/src/c-client/auth_md5.c.authmd5 2008-06-04 13:18:34.000000000 -0500
++++ imap-2007e/src/c-client/auth_md5.c 2009-07-07 19:24:12.348005485 -0500
+@@ -42,17 +42,17 @@ typedef struct {
+
+ /* Prototypes */
+
+-long auth_md5_valid (void);
+-long auth_md5_client (authchallenge_t challenger,authrespond_t responder,
++static long auth_md5_valid (void);
++static long auth_md5_client (authchallenge_t challenger,authrespond_t responder,
+ char *service,NETMBX *mb,void *stream,
+ unsigned long *trial,char *user);
+-char *auth_md5_server (authresponse_t responder,int argc,char *argv[]);
+-char *auth_md5_pwd (char *user);
++static char *auth_md5_server (authresponse_t responder,int argc,char *argv[]);
++static char *auth_md5_pwd (char *user);
+ char *apop_login (char *chal,char *user,char *md5,int argc,char *argv[]);
+-char *hmac_md5 (char *text,unsigned long tl,char *key,unsigned long kl);
+-void md5_init (MD5CONTEXT *ctx);
+-void md5_update (MD5CONTEXT *ctx,unsigned char *data,unsigned long len);
+-void md5_final (unsigned char *digest,MD5CONTEXT *ctx);
++static char *hmac_md5 (char *text,unsigned long tl,char *key,unsigned long kl);
++static void md5_init (MD5CONTEXT *ctx);
++static void md5_update (MD5CONTEXT *ctx,unsigned char *data,unsigned long len);
++static void md5_final (unsigned char *digest,MD5CONTEXT *ctx);
+ static void md5_transform (unsigned long *state,unsigned char *block);
+ static void md5_encode (unsigned char *dst,unsigned long *src,int len);
+ static void md5_decode (unsigned long *dst,unsigned char *src,int len);
--- /dev/null
+diff -Naur imap-2007f.orig/src/osdep/unix/flocklnx.c imap-2007f/src/osdep/unix/flocklnx.c
+--- imap-2007f.orig/src/osdep/unix/flocklnx.c 2011-07-23 02:20:11.000000000 +0200
++++ imap-2007f/src/osdep/unix/flocklnx.c 2014-04-14 19:17:46.429000000 +0200
+@@ -57,7 +57,7 @@
+ case ENOLCK: /* lock table is full */
+ sprintf (tmp,"File locking failure: %s",strerror (errno));
+ mm_log (tmp,WARN); /* give the user a warning of what happened */
+- if (!logged++) syslog (LOG_ERR,tmp);
++ if (!logged++) syslog (LOG_ERR, "%s", tmp);
+ /* return failure if non-blocking lock */
+ if (op & LOCK_NB) return -1;
+ sleep (5); /* slow down in case it loops */
--- /dev/null
+http://anonscm.debian.org/cgit/collab-maint/uw-imap.git/plain/debian/patches/1005_poll.patch
+
+Description: Use poll(2) instead of select(2) to support more than 1024 file descriptors
+Author: Ben Smithurst <ben.smithurst@gradwell.com>
+Bug-Debian: https://bugs.debian.org/478193
+
+diff --git a/src/osdep/unix/os_lnx.c b/src/osdep/unix/os_lnx.c
+index 03fd17d..671bbd6 100644
+--- a/src/osdep/unix/os_lnx.c
++++ b/src/osdep/unix/os_lnx.c
+@@ -41,6 +41,7 @@
+ extern int errno; /* just in case */
+ #include <pwd.h>
+ #include "misc.h"
++#include <poll.h>
+
+
+ #include "fs_unix.c"
+diff --git a/src/osdep/unix/os_slx.c b/src/osdep/unix/os_slx.c
+index c94d632..f6bf27d 100644
+--- a/src/osdep/unix/os_slx.c
++++ b/src/osdep/unix/os_slx.c
+@@ -42,6 +42,7 @@ extern int errno; /* just in case */
+ #include <pwd.h>
+ #include <shadow.h>
+ #include "misc.h"
++#include <poll.h>
+
+
+ #include "fs_unix.c"
+diff --git a/src/osdep/unix/tcp_unix.c b/src/osdep/unix/tcp_unix.c
+index 795fb4f..c69eaec 100644
+--- a/src/osdep/unix/tcp_unix.c
++++ b/src/osdep/unix/tcp_unix.c
+@@ -235,12 +235,11 @@ TCPSTREAM *tcp_open (char *host,char *service,unsigned long port)
+ int tcp_socket_open (int family,void *adr,size_t adrlen,unsigned short port,
+ char *tmp,int *ctr,char *hst)
+ {
+- int i,ti,sock,flgs;
++ int i,ti,sock,flgs,tmo;
++ struct pollfd pfd;
+ size_t len;
+ time_t now;
+ struct protoent *pt = getprotobyname ("tcp");
+- fd_set rfds,wfds,efds;
+- struct timeval tmo;
+ struct sockaddr *sadr = ip_sockaddr (family,adr,adrlen,port,&len);
+ blocknotify_t bn = (blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL);
+ /* fetid Solaris */
+@@ -252,14 +251,6 @@ int tcp_socket_open (int family,void *adr,size_t adrlen,unsigned short port,
+ sprintf (tmp,"Unable to create TCP socket: %s",strerror (errno));
+ (*bn) (BLOCK_NONSENSITIVE,data);
+ }
+- else if (sock >= FD_SETSIZE) {/* unselectable sockets are useless */
+- sprintf (tmp,"Unable to create selectable TCP socket (%d >= %d)",
+- sock,FD_SETSIZE);
+- (*bn) (BLOCK_NONSENSITIVE,data);
+- close (sock);
+- sock = -1;
+- errno = EMFILE;
+- }
+ \f
+ else { /* get current socket flags */
+ flgs = fcntl (sock,F_GETFL,0);
+@@ -284,16 +275,11 @@ int tcp_socket_open (int family,void *adr,size_t adrlen,unsigned short port,
+ if ((sock >= 0) && ctr) { /* want open timeout? */
+ now = time (0); /* open timeout */
+ ti = ttmo_open ? now + ttmo_open : 0;
+- tmo.tv_usec = 0;
+- FD_ZERO (&rfds); /* initialize selection vector */
+- FD_ZERO (&wfds); /* initialize selection vector */
+- FD_ZERO (&efds); /* handle errors too */
+- FD_SET (sock,&rfds); /* block for error or readable or writable */
+- FD_SET (sock,&wfds);
+- FD_SET (sock,&efds);
++ pfd.fd = sock;
++ pfd.events = POLLIN | POLLOUT;
+ do { /* block under timeout */
+- tmo.tv_sec = ti ? ti - now : 0;
+- i = select (sock+1,&rfds,&wfds,&efds,ti ? &tmo : NIL);
++ tmo = ti ? ti - now : 0;
++ i = poll (&pfd, 1, ti ? tmo * 1000 : -1);
+ now = time (0); /* fake timeout if interrupt & time expired */
+ if ((i < 0) && (errno == EINTR) && ti && (ti <= now)) i = 0;
+ } while ((i < 0) && (errno == EINTR));
+@@ -302,7 +288,7 @@ int tcp_socket_open (int family,void *adr,size_t adrlen,unsigned short port,
+ fcntl (sock,F_SETFL,flgs);
+ /* This used to be a zero-byte read(), but that crashes Solaris */
+ /* get socket status */
+- if(FD_ISSET(sock, &rfds)) while (((i = *ctr = read (sock,tmp,1)) < 0) && (errno == EINTR));
++ if(pfd.revents & POLLIN) while (((i = *ctr = read (sock,tmp,1)) < 0) && (errno == EINTR));
+ }
+ if (i <= 0) { /* timeout or error? */
+ i = i ? errno : ETIMEDOUT;/* determine error code */
+@@ -545,9 +531,8 @@ long tcp_getbuffer (TCPSTREAM *stream,unsigned long size,char *s)
+ stream->ictr -=n;
+ }
+ if (size) {
+- int i;
+- fd_set fds,efds;
+- struct timeval tmo;
++ int i, tmo;
++ struct pollfd pfd;
+ time_t t = time (0);
+ blocknotify_t bn=(blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL);
+ (*bn) (BLOCK_TCPREAD,NIL);
+@@ -556,16 +541,13 @@ long tcp_getbuffer (TCPSTREAM *stream,unsigned long size,char *s)
+ time_t now = tl;
+ time_t ti = ttmo_read ? now + ttmo_read : 0;
+ if (tcpdebug) mm_log ("Reading TCP buffer",TCPDEBUG);
+- tmo.tv_usec = 0;
+- FD_ZERO (&fds); /* initialize selection vector */
+- FD_ZERO (&efds); /* handle errors too */
+- /* set bit in selection vectors */
+- FD_SET (stream->tcpsi,&fds);
+- FD_SET (stream->tcpsi,&efds);
++
++ pfd.events = POLLIN;
++ pfd.fd = stream->tcpsi;
+ errno = NIL; /* initially no error */
+ do { /* block under timeout */
+- tmo.tv_sec = ti ? ti - now : 0;
+- i = select (stream->tcpsi+1,&fds,NIL,&efds,ti ? &tmo : NIL);
++ tmo = ti ? ti - now : 0;
++ i = poll (&pfd, 1, ti ? tmo * 1000 : -1);
+ now = time (0); /* fake timeout if interrupt & time expired */
+ if ((i < 0) && (errno == EINTR) && ti && (ti <= now)) i = 0;
+ } while ((i < 0) && (errno == EINTR));
+@@ -605,9 +587,8 @@ long tcp_getbuffer (TCPSTREAM *stream,unsigned long size,char *s)
+
+ long tcp_getdata (TCPSTREAM *stream)
+ {
+- int i;
+- fd_set fds,efds;
+- struct timeval tmo;
++ int i, tmo;
++ struct pollfd pfd;
+ time_t t = time (0);
+ blocknotify_t bn = (blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL);
+ if (stream->tcpsi < 0) return NIL;
+@@ -617,15 +598,12 @@ long tcp_getdata (TCPSTREAM *stream)
+ time_t now = tl;
+ time_t ti = ttmo_read ? now + ttmo_read : 0;
+ if (tcpdebug) mm_log ("Reading TCP data",TCPDEBUG);
+- tmo.tv_usec = 0;
+- FD_ZERO (&fds); /* initialize selection vector */
+- FD_ZERO (&efds); /* handle errors too */
+- FD_SET (stream->tcpsi,&fds);/* set bit in selection vectors */
+- FD_SET (stream->tcpsi,&efds);
++ pfd.fd = stream->tcpsi;
++ pfd.events = POLLIN;
+ errno = NIL; /* initially no error */
+ do { /* block under timeout */
+- tmo.tv_sec = ti ? ti - now : 0;
+- i = select (stream->tcpsi+1,&fds,NIL,&efds,ti ? &tmo : NIL);
++ tmo = ti ? ti - now : 0;
++ i = poll (&pfd, 1, ti ? tmo * 1000 : -1);
+ now = time (0); /* fake timeout if interrupt & time expired */
+ if ((i < 0) && (errno == EINTR) && ti && (ti <= now)) i = 0;
+ } while ((i < 0) && (errno == EINTR));
+@@ -677,9 +655,8 @@ long tcp_soutr (TCPSTREAM *stream,char *string)
+
+ long tcp_sout (TCPSTREAM *stream,char *string,unsigned long size)
+ {
+- int i;
+- fd_set fds,efds;
+- struct timeval tmo;
++ int i, tmo;
++ struct pollfd pfd;
+ time_t t = time (0);
+ blocknotify_t bn = (blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL);
+ if (stream->tcpso < 0) return NIL;
+@@ -689,15 +666,12 @@ long tcp_sout (TCPSTREAM *stream,char *string,unsigned long size)
+ time_t now = tl;
+ time_t ti = ttmo_write ? now + ttmo_write : 0;
+ if (tcpdebug) mm_log ("Writing to TCP",TCPDEBUG);
+- tmo.tv_usec = 0;
+- FD_ZERO (&fds); /* initialize selection vector */
+- FD_ZERO (&efds); /* handle errors too */
+- FD_SET (stream->tcpso,&fds);/* set bit in selection vector */
+- FD_SET(stream->tcpso,&efds);/* set bit in error selection vector */
++ pfd.fd = stream->tcpso;
++ pfd.events = POLLOUT;
+ errno = NIL; /* block and write */
+ do { /* block under timeout */
+- tmo.tv_sec = ti ? ti - now : 0;
+- i = select (stream->tcpso+1,NIL,&fds,&efds,ti ? &tmo : NIL);
++ tmo = ti ? ti - now : 0;
++ i = poll (&pfd, 1, ti ? tmo * 1000 : -1);
+ now = time (0); /* fake timeout if interrupt & time expired */
+ if ((i < 0) && (errno == EINTR) && ti && (ti <= now)) i = 0;
+ } while ((i < 0) && (errno == EINTR));
include $(TOPDIR)/rules.mk
PKG_NAME:=dovecot
-PKG_VERSION:=2.2.32
+PKG_VERSION:=2.2.33.2
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.dovecot.org/releases/2.2
-PKG_HASH:=160b2151e2af359877f69cb2dcdfe1a3f4138ad3766e3b8562b96616e2f6bc2e
+PKG_HASH:=fe1e3b78609a56ee22fc209077e4b75348fa1bbd54c46f52bde2472a4c4cee84
PKG_LICENSE:=LGPL-2.1 MIT BSD-3-Clause Unique
PKG_LICENSE_FILES:=COPYING COPYING.LGPL COPYING.MIT
+PKG_MAINTAINER:=Lucian Cristian <lucian.cristian@gmail.com>
PKG_BUILD_DEPENDS:=libiconv
+PKG_CONFIG_DEPENDS:= \
+ CONFIG_DOVECOT_LDAP \
+ CONFIG_DOVECOT_MYSQL \
+ CONFIG_DOVECOT_PGSQL \
+ CONFIG_DOVECOT_SQLITE \
+ CONFIG_DOVECOT_ICU
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
define Package/dovecot
SECTION:=mail
CATEGORY:=Mail
- DEPENDS:=+DOVECOT_LDAP:libopenldap +DOVECOT_MYSQL:libmysqlclient +DOVECOT_PGSQL:libpq +DOVECOT_SQLITE:libsqlite3 +libopenssl +librt +zlib +libbz2 +libcap
+ DEPENDS:=+DOVECOT_LDAP:libopenldap +DOVECOT_MYSQL:libmysqlclient +DOVECOT_PGSQL:libpq +DOVECOT_SQLITE:libsqlite3 +libopenssl +librt +zlib +libbz2 +libcap +DOVECOT_ICU:icu
TITLE:=An IMAP and POP3 daemon
- MAINTAINER:=Lucian Cristian <lucian.cristian@gmail.com>
URL:=http://www.dovecot.org/
USERID:=dovecot=59:dovecot=59
+ ABI_VERSION:=$(PKG_VERSION)
endef
define Package/dovecot/description
default n
help
Implements SQLite DB support in dovecot.
+ config DOVECOT_ICU
+ bool "Enable i18n features"
+ default n
+ help
+ Enable ICU (International Components for Unicode) support.
endmenu
endef
+define Package/dovecot/conffiles
+/etc/init.d/dovecot
+/etc/dovecot/
+endef
+
+define Package/dovecot-utils
+ SECTION:=mail
+ CATEGORY:=Mail
+ DEPENDS:=+dovecot
+ TITLE:=doveadm and dsync utilities for Dovecot
+endef
+
CONFIGURE_ARGS += \
--without-gssapi \
--without-pam \
--with-notify=dnotify \
--without-lzma \
--without-lz4 \
- --with-icu=no \
$(if $(CONFIG_DOVECOT_LDAP),--with-ldap=yes,--with-ldap=no) \
$(if $(CONFIG_DOVECOT_MYSQL),--with-mysql=yes,--with-mysql=no) \
$(if $(CONFIG_DOVECOT_PGSQL),--with-pgsql=yes,--with-pgsql=no) \
- $(if $(CONFIG_DOVECOT_SQLITE),--with-sqlite=yes,--with-sqlite=no)
+ $(if $(CONFIG_DOVECOT_SQLITE),--with-sqlite=yes,--with-sqlite=no) \
+ $(if $(CONFIG_DOVECOT_ICU),--with-icu=yes,--with-icu=no)
CONFIGURE_VARS += \
RPCGEN= \
define Package/dovecot/install
$(INSTALL_DIR) $(1)/etc/init.d \
$(1)/etc/dovecot \
- $(1)/usr/share/doc/dovecot/example-config \
+ $(1)/usr/share/doc/dovecot \
$(1)/usr/lib/dovecot \
$(1)/usr/bin \
$(1)/usr/sbin
$(CP) $(PKG_INSTALL_DIR)/etc/dovecot/* $(1)/etc/dovecot/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/dovecot/* $(1)/usr/lib/dovecot/
- $(CP) $(PKG_INSTALL_DIR)/usr/share/doc/dovecot/example-config $(1)/usr/share/doc/dovecot/example-config
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/doc/dovecot/example-config $(1)/usr/share/doc/dovecot/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/doveconf $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/* $(1)/usr/sbin/
$(INSTALL_BIN) ./files/dovecot.init $(1)/etc/init.d/dovecot
find $(1)/usr/lib/dovecot/ -name "*.a" -o -name "*.la" | xargs rm
endef
+define Package/dovecot-utils/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/doveadm $(1)/usr/bin/
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/dsync $(1)/usr/bin/
+endef
+
$(eval $(call BuildPackage,dovecot))
+$(eval $(call BuildPackage,dovecot-utils))
PKG_NAME:=emailrelay
PKG_VERSION:=1.9
-PKG_RELEASE:=4
+PKG_RELEASE:=5
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-src.tar.gz
PKG_SOURCE_URL:=@SF/emailrelay/$(PKG_VERSION)
PKG_HASH:=869a3e2d053237d7f63784acc25e748af2dbf2d9b9c5c48e4a5269d4e4b5bda0
+PKG_MAINTAINER:=Federico Di Marco <fededim@gmail.com>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
-PKG_CONFIG_DEPENDS:=CONFIG_EMAILRELAY_SUPPORT_VERBOSE_DBG CONFIG_EMAILRELAY_SSL
+PKG_CONFIG_DEPENDS:=CONFIG_EMAILRELAY_SUPPORT_VERBOSE_DBG CONFIG_EMAILRELAY_SSL
+PKG_LICENSE:=GPL-3.0
+PKG_LICENSE_FILES:=COPYING
#include $(INCLUDE_DIR)/uclibc++.mk # $(CXX_DEPENDS)
include $(INCLUDE_DIR)/package.mk
define Package/emailrelay
SECTION:=mail
CATEGORY:=Mail
- DEPENDS:=+EMAILRELAY_SSL:libopenssl +libstdcpp
+ DEPENDS:=+EMAILRELAY_SSL:libopenssl +libstdcpp
TITLE:=A simple SMTP proxy and MTA
URL:=http://emailrelay.sourceforge.net/
- MAINTAINER:=Federico Di Marco <fededim@gmail.com>
MENU:=1
endef
help
Enables support for extended logging (must also be explicitely enabled by using command line switch --debug when starting emailrelay)
-config EMAILRELAY_SSL
+config EMAILRELAY_SSL
bool "Enable support for OpenSSL"
depends on PACKAGE_emailrelay
default y
define Package/emailrelay/description
- Emailrelay is a simple SMTP proxy and store-and-forward message transfer agent (MTA).
-
- When running as a proxy all e-mail messages can be passed through
- a user-defined program, such as a spam filter, which can drop,
- re-address or edit messages as they pass through. When running
- as a store-and-forward MTA incoming messages are stored in a
- local spool directory, and then forwarded to the next SMTP
- server on request.
+ Emailrelay is a simple SMTP proxy and store-and-forward message transfer agent (MTA).
+
+ When running as a proxy all e-mail messages can be passed through
+ a user-defined program, such as a spam filter, which can drop,
+ re-address or edit messages as they pass through. When running
+ as a store-and-forward MTA incoming messages are stored in a
+ local spool directory, and then forwarded to the next SMTP
+ server on request.
endef
define Package/emailrelay/conffiles
+/etc/config/emailrelay
/etc/emailrelay.auth
endef
--enable-testing=no
CONFIGURE_VARS += \
- CXXFLAGS="$$$$CXXFLAGS -fno-rtti"
+ CXXFLAGS="$$$$CXXFLAGS -fno-rtti"
ifeq ($(CONFIG_EMAILRELAY_SSL),y)
ifeq ($(CONFIG_OPENSSL_WITH_SSL3),y)
CONFIGURE_VARS += \
- CXXFLAGS="$$$$CXXFLAGS -DSSL3_SUPPORT"
+ CXXFLAGS="$$$$CXXFLAGS -DSSL3_SUPPORT"
endif
define Package/emailrelay/install
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/main/emailrelay-passwd $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/main/emailrelay-poke $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/main/emailrelay-submit $(1)/usr/bin/
- $(INSTALL_DIR) $(1)/tmp/spool
- $(INSTALL_DIR) $(1)/tmp/spool/emailrelay
$(INSTALL_DIR) $(1)/etc
$(INSTALL_DATA) files/$(PKG_NAME).auth $(1)/etc/
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) files/$(PKG_NAME).config $(1)/etc/config/$(PKG_NAME)
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) files/$(PKG_NAME).init $(1)/etc/init.d/$(PKG_NAME)
endef
#
#NONE server 192.168.1.* keyword
#LOGIN client smtpuser@smtpserver smtppassword
-#LOGIN server user1 secret
\ No newline at end of file
+#LOGIN server user1 secret
--- /dev/null
+config emailrelay 'server'
+ option enabled '0'
+ option mode 'server'
+ option port '25'
+ option remote_clients '0'
+# option server_tls '/etc/path/to/certificate'
+# option server_auth '/etc/emailrelay.auth'
+# option extra_cmdline ''
+
+config emailrelay 'proxy'
+ option enabled '0'
+ option mode 'proxy'
+ option smarthost '192.0.2.1:25'
+ option port '25'
+ option remote_clients '0'
+# option server_tls '/etc/path/to/certificate'
+# option server_auth '/etc/emailrelay.auth'
+# option client_tls '1'
+# option client_auth '/etc/emailrelay.auth'
+# option extra_cmdline ''
+
+config emailrelay 'cmdline'
+ option enabled '0'
+ option mode 'cmdline'
+ # specify all arguments that should be passed to emailrelay here
+ # see http://emailrelay.sourceforge.net/reference.html for command line reference
+ option extra_cmdline '--some-other --cmdline-options'
+
#!/bin/sh /etc/rc.common
-#see http://emailrelay.sourceforge.net/reference.html for command line reference
START=90
+USE_PROCD=1
+PROG=/usr/bin/emailrelay
+NAME=emailrelay
-start() {
- logger -t 'emailrelay' "Starting emailrelay service."
- service_start /usr/bin/emailrelay --as-server --poll 60 --forward-to smtpserver:smtpport --spool-dir /tmp --client-tls --client-auth /etc/emailrelay.auth --server-auth /etc/emailrelay.auth --log
+
+emailrelay_instance()
+{
+ local enabled mode port remote_clients server_tls server_auth extra_cmdline smarthost client_tls client_auth
+
+ config_get_bool enabled "$1" enabled
+ config_get mode "$1" mode
+ config_get port "$1" port
+ config_get_bool remote_clients "$1" remote_clients
+ config_get server_tls "$1" server_tls
+ config_get server_auth "$1" server_auth
+ config_get extra_cmdline "$1" extra_cmdline
+ config_get smarthost "$1" smarthost
+ config_get_bool client_tls "$1" client_tls
+ config_get client_auth "$1" client_auth
+
+
+ [ "$enabled" = 0 ] && return 1
+
+ procd_open_instance
+ procd_set_param command "$PROG" --no-daemon
+
+ case "$mode" in
+ "server"|\
+ "proxy")
+ procd_append_param command "--as-${mode}"
+ [ -n "$smarthost" ] && procd_append_param command "$smarthost"
+ [ -n "$port" ] && procd_append_param command --port "$port"
+ [ "$remote_clients" = 1 ] && procd_append_param command --remote-clients
+ [ -n "$server_tls" ] && procd_append_param command --server-tls "$server_tls"
+ [ -n "$server_auth" ] && procd_append_param command --server-auth "$server_auth"
+ [ "$client_tls" = 1 ] && procd_append_param command --client-tls
+ [ -n "$client_auth" ] && procd_append_param command --client-auth "$client_auth"
+ ;;
+ "cmdline")
+ # empty by intention (just append extra_cmdline)
+ ;;
+ *)
+ echo "no mode specified"
+ return 1
+ ;;
+ esac
+
+ [ -n "$extra_cmdline" ] && procd_append_param command $extra_cmdline
+
+ procd_set_param respawn
+
+ procd_close_instance
}
-stop() {
- logger -t 'emailrelay' "Stopping emailrelay service."
- service_stop /usr/bin/emailrelay
+
+start_service()
+{
+ [ ! -d /var/spool/emailrelay ] && mkdir -p /var/spool/emailrelay
+
+ config_load "${NAME}"
+ config_foreach emailrelay_instance emailrelay
}
include $(TOPDIR)/rules.mk
PKG_NAME:=mutt
-PKG_VERSION:=1.7.2
+PKG_VERSION:=1.9.1
PKG_RELEASE:=1
PKG_SOURCE_URL:=ftp://ftp.mutt.org/pub/mutt/ \
https://bitbucket.org/mutt/mutt/downloads/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=1553501687cd22d5b8aaee4dc5a7d9dcf6cc61d7956f6aabaadd252d10cd5ff9
+PKG_HASH:=749b83a96373c6e2101ebe8c4b9a651735e02c478edb750750a5146a15d91bb1
PKG_LICENSE:=GPL-2.0+
PKG_LICENSE_FILES:=GPL
PKG_MAINTAINER:=Phil Eichinger <phil@zankapfel.net>
+PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
--enable-pop \
--enable-imap \
--with-ssl \
- --without-idn
+ --without-idn \
+ --disable-doc
define Package/mutt/install
$(INSTALL_DIR) $(1)/usr/bin
+++ /dev/null
-From b0e285a8c7faaec8807fdd677da6750f341f0109 Mon Sep 17 00:00:00 2001
-From: Phil Eichinger <phil@zankapfel.net>
-Date: Thu, 19 Nov 2015 13:18:53 +0100
-Subject: [PATCH] no po and docs
-
-[adapted old patch and converted to git patch]
-Signed-off-by: Phil Eichinger <phil@zankapfel.net>
----
- Makefile.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile.in b/Makefile.in
-index 1909835..cfa7ca0 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -470,7 +470,7 @@ get_cs_cmdline = $(call get_cs_compile,$
- AUTOMAKE_OPTIONS = 1.6 foreign
- @BUILD_IMAP_TRUE@IMAP_SUBDIR = imap
- @BUILD_IMAP_TRUE@IMAP_INCLUDES = -I$(top_srcdir)/imap
--SUBDIRS = m4 po intl doc contrib $(IMAP_SUBDIR)
-+SUBDIRS = m4 intl contrib $(IMAP_SUBDIR)
- bin_SCRIPTS = muttbug flea $(SMIMEAUX_TARGET)
- @BUILD_HCACHE_TRUE@HCVERSION = hcversion.h
- BUILT_SOURCES = keymap_defs.h patchlist.c reldate.h conststrings.c $(HCVERSION)
---
-2.1.4
-
--- /dev/null
+From 6dbfafd4b8bfc9f5e53db90c5279784c506a3253 Mon Sep 17 00:00:00 2001
+From: Phil Eichinger <phil@zankapfel.net>
+Date: Tue, 17 Oct 2017 06:44:04 +0200
+Subject: [PATCH] no po
+
+docs are disabled via ./configure --disable-doc now
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 4bc2db4..bb00927 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -14,7 +14,7 @@ IMAP_SUBDIR = imap
+ IMAP_INCLUDES = -I$(top_srcdir)/imap
+ endif
+
+-SUBDIRS = m4 po intl $(DOC_SUBDIR) contrib $(IMAP_SUBDIR)
++SUBDIRS = m4 intl $(DOC_SUBDIR) contrib $(IMAP_SUBDIR)
+
+ bin_SCRIPTS = muttbug flea $(SMIMEAUX_TARGET)
+
+--
+2.11.0
+
+++ /dev/null
-From: Antonio Radici <antonio@debian.org>
-Date: Fri, 18 Sep 2015 11:48:47 +0200
-Subject: 771125-CVE-2014-9116-jessie
-
-This patch solves the issue raised by CVE-2014-9116 in bug 771125.
-
-We correctly redefine what are the whitespace characters as per RFC5322; by
-doing so we prevent mutt_substrdup from being used in a way that could lead to
-a segfault.
-
-The lib.c part was written by Antonio Radici <antonio@debian.org> to prevent
-crashes due to this kind of bugs from happening again.
-
-Signed-off-by: Matteo F. Vescovi <mfv@debian.org>
----
- lib.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff -rupN a/lib.c b/lib.c
---- a/lib.c
-+++ b/lib.c
-@@ -815,6 +815,9 @@ char *mutt_substrdup (const char *begin,
- size_t len;
- char *p;
-
-+ if (end != NULL && end < begin)
-+ return NULL;
-+
- if (end)
- len = end - begin;
- else
include $(TOPDIR)/rules.mk
-PKG_NAME:=pigeonhole
-PKG_VERSION:=0.4.20
-PKG_RELEASE:=1
+PKG_NAME:=dovecot-pigeonhole
+PKG_VERSION_PLUGIN:=0.4.20
+PKG_VERSION_DOVECOT:=$(shell make --no-print-directory -C ../dovecot/ val.PKG_VERSION V=s)
+PKG_VERSION:=$(PKG_VERSION_DOVECOT)-$(PKG_VERSION_PLUGIN)
+PKG_RELEASE:=2
DOVECOT_VERSION:=2.2
-PKG_SOURCE:=dovecot-$(DOVECOT_VERSION)-$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE:=dovecot-$(DOVECOT_VERSION)-pigeonhole-$(PKG_VERSION_PLUGIN).tar.gz
PKG_SOURCE_URL:=https://pigeonhole.dovecot.org/releases/$(DOVECOT_VERSION)
PKG_HASH:=6fe17d0b8f25f2ad580e01ad81ce47a9e965255e383a1f80e455f9ca0f00be5b
PKG_LICENSE:=LGPL-2.1
PKG_LICENSE_FILES:=COPYING COPYING.LGPL
-PKG_BUILD_DIR:=$(BUILD_DIR)/dovecot-$(DOVECOT_VERSION)-$(PKG_NAME)-$(PKG_VERSION)
+PKG_BUILD_DIR:=$(BUILD_DIR)/dovecot-$(DOVECOT_VERSION)-pigeonhole-$(PKG_VERSION_PLUGIN)
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
-define Package/pigeonhole
+define Package/dovecot-pigeonhole
SECTION:=mail
CATEGORY:=Mail
DEPENDS:=+dovecot
+ EXTRA_DEPENDS:=dovecot (>= $(PKG_VERSION_DOVECOT))
TITLE:=Mail filtering facilities for Dovecot
MAINTAINER:=W. Michael Petullo <mike@flyn.org>
URL:=https://wiki2.dovecot.org/Pigeonhole
endef
-define Package/pigeonhole/description
+define Package/dovecot-pigeonhole/description
Pigeonhole provides mail filtering facilities for Dovecot using the Sieve
(RFC 5228) language.
endef
CONFIGURE_ARGS += \
- --with-dovecot=$(STAGING_DIR)/usr/lib/dovecot/ \
- --without-managesieve
+ --with-dovecot=$(STAGING_DIR)/usr/lib/dovecot/
CONFIGURE_VARS += \
LDFLAGS="$(TARGET_LDFLAGS) -L$(STAGING_DIR)/usr/lib/dovecot/" \
CPPFLAGS="$(TARGET_CPPFLAGS) -I$(STAGING_DIR)/usr/include/dovecot/"
-define Package/pigeonhole/install
+define Package/dovecot-pigeonhole/install
$(INSTALL_DIR) $(1)/usr/bin $(1)/usr/lib/dovecot/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/dovecot/* $(1)/usr/lib/dovecot/
find $(1)/usr/lib/dovecot/ -name "*.a" -o -name "*.la" | xargs rm
endef
-$(eval $(call BuildPackage,pigeonhole))
+$(eval $(call BuildPackage,dovecot-pigeonhole))
-#
+#
# Copyright (C) 2014-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
PKG_NAME:=postfix
PKG_RELEASE:=1
-PKG_VERSION:=3.2.3
+PKG_VERSION:=3.2.4
PKG_SOURCE_URL:= \
https://cdn.postfix.johnriley.me/mirrors/postfix-release/official/ \
ftp://ftp.porcupine.org/mirrors/postfix-release/official/
-PKG_HASH:=5b0b975d075ea7561028d4109c581549b794aa92d733429ea6d9fa57751140bf
+PKG_HASH:=ec55ebaa2aa464792af8d5ee103eb68b27a42dc2b36a02fee42dafbf9740c7f6
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_MAINTAINER:=Denis Shulyaka <Shulyaka@gmail.com>
PKG_LICENSE:=IPL-1.0
SECTION:=mail
CATEGORY:=Mail
TITLE:=Postfix Mail Transmit Agent
+ USERID:= \
+ postfix=25:postfix=25 \
+ postdrop=26:postdrop=26
URL:=http://www.postfix.org/
DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_SQLITE:libsqlite3 +POSTFIX_PGSQL:libpq +POSTFIX_EAI:icu +POSTFIX_PCRE:libpcre
endef
bool "BerkeleyDB support"
default n
help
- Implements support for btree files using Berkeley DB. Note that hash files support is not compiled into Berkeley DB OpenWRT distribution
+ Implements support for btree and hash files using Berkeley DB.
config POSTFIX_CDB
bool "CDB support"
default y
Implement support for PostgreSQL
config POSTFIX_PCRE
bool "PCRE support"
- default n
+ default y
help
Implement support for Perl Compatible Regular Expressions
config POSTFIX_EAI
CCARGS=-DNO_NIS
AUXLIBS=-L$(STAGING_DIR)/usr/lib
-default_database_type=cdb
ifdef CONFIG_POSTFIX_TLS
CCARGS+=-DUSE_TLS
ifdef CONFIG_POSTFIX_CDB
CCARGS+=-DHAS_CDB
AUXLIBS+=-lcdb
+ ifndef default_database_type
+ default_database_type=cdb
+ endif
endif
ifdef CONFIG_POSTFIX_DB
AUXLIBS+=-ldb
CCARGS+=-DHAS_DB
- ifndef CONFIG_POSTFIX_CDB
+ ifndef default_database_type
default_database_type=btree
endif
else
CCARGS+=-DDEF_DB_TYPE=\"$(default_database_type)\"
-config_directory=/etc/postfix# also add this to postfix init file
+# prevent postfix-install from executing postconf at build time
+# by explicitly providing the default values to postfix-install
+config_directory=/etc/postfix
sample_directory=/etc/postfix
command_directory=/usr/sbin
daemon_directory=/usr/libexec/postfix
-data_directory=/usr/var/lib/postfix
-queue_directory=/usr/var/spool/postfix
-mail_spool_directory=/usr/var/mail
html_directory=no
manpage_directory=no
readme_directory=no
mailq_path=/usr/bin/mailq
shlib_directory=/usr/lib/postfix
meta_directory=/etc/postfix
+data_directory=/usr/var/lib/postfix
+queue_directory=/usr/var/spool/postfix
+mail_spool_directory=/usr/var/mail
ln_suffix=.postfix
-ln_old_suffix=.old
+ln_suffix_pre_pf=.pre-postfix
+ln_suffix_legacy=.old
define Package/postfix/conffiles
-$(config_directory)/main.cf
-$(config_directory)/master.cf
-$(config_directory)/aliases
-$(config_directory)/virtual
+$(config_directory)
endef
define Build/Configure
- if [ "$(CONFIG_POSTFIX_DB)" = "" -a "$(CONFIG_POSTFIX_CDB)" = "" ]; then\
- echo "Build error: You must select at least one of the DB types";\
- exit 1;\
+ if [ "$(default_database_type)" = "" ]; then \
+ echo "Build error: CDB or BerkeleyDB support must be enabled."; \
+ exit 1; \
fi
-
cd $(PKG_BUILD_DIR); $(MAKE) makefiles CCARGS='$(CCARGS)' $(TARGET_CONFIGURE_OPTS) AUXLIBS="$(AUXLIBS)"
endef
-# Steps to regenerate files/main.cf.default:
-#
-# 1. Compile the package with current file
-# 2. Execute the following command on target device:
-# postconf -d > /tmp/main.cf.new
-# 3. Transfer /tmp/main.cf.new file to the build system
-# 4. Execute the following command:
-# cat /tmp/main.cf.new | ( echo '# DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE'; echo '# TEXT HERE JUST SHOWS DEFAULT SETTINGS BUILT INTO POSTFIX.'; echo '#'; grep -v ^alias_maps\ = |grep -v ^alias_database\ = |grep -v ^command_directory\ = |grep -v ^config_directory\ = |grep -v ^daemon_directory\ = |grep -v ^data_directory\ = |grep -v ^default_database_type\ = |grep -v ^html_directory\ = |grep -v ^mail_spool_directory\ = |grep -v ^mailq_path\ = |grep -v ^manpage_directory\ = |grep -v ^meta_directory\ = |grep -v ^mydomain\ = |grep -v ^myhostname\ = |grep -v ^mynetworks\ = |grep -v ^mynetworks_style\ = |grep -v ^newaliases_path\ = |grep -v ^queue_directory\ = |grep -v ^readme_directory\ = |grep -v ^sample_directory\ = |grep -v ^sendmail_path\ = |grep -v ^shlib_directory\ = |grep -v ^smtputf8_enable\ = |grep -v ^virtual_maps\ = |grep -v ^process_id\ = ) > files/main.cf.default
-# 5. Done. Now you can rebuild the package with new main.cf.default.
-#
-
define Build/Compile
# Currently postfix has a bug with Makefiles that CCARGS are not passed to the compiler, so we are copying them to CC as a workaround
cd $(PKG_BUILD_DIR); $(MAKE) $(TARGET_CONFIGURE_OPTS) CC='$(TARGET_CC) $(CCARGS)'
- cp ./files/main.cf.default $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "default_database_type = $(default_database_type)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "alias_database = $(default_database_type):$(config_directory)/aliases" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "alias_maps = $(default_database_type):$(config_directory)/aliases" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "virtual_maps = $(default_database_type):$(config_directory)/virtual" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "sendmail_path = $(sendmail_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "newaliases_path = $(newaliases_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "mailq_path = $(mailq_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "html_directory = $(html_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "manpage_directory = $(manpage_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "sample_directory = $(sample_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "readme_directory = $(readme_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "command_directory = $(command_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "daemon_directory = $(daemon_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "data_directory = $(data_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "queue_directory = $(queue_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "config_directory = $(config_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "mail_spool_directory = $(mail_spool_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "shlib_directory = $(shlib_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "meta_directory = $(meta_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
- echo "smtputf8_enable = $(smtputf8_conf)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
+ $(foreach p, \
+ default_database_type config_directory command_directory daemon_directory \
+ shlib_directory manpage_directory data_directory queue_directory \
+ mail_spool_directory, \
+ echo "$(p) = $($(p))" >> $(PKG_BUILD_DIR)/conf/main.cf;)
endef
define Package/postfix/install
cd $(PKG_BUILD_DIR); $(MAKE) install_root=$(1) command_directory=$(command_directory) daemon_directory=$(daemon_directory) data_directory=$(data_directory) html_directory=$(html_directory) mail_owner=postfix mailq_path=$(mailq_path)$(ln_suffix) manpage_directory=$(manpage_directory) newaliases_path=$(newaliases_path)$(ln_suffix) queue_directory=$(queue_directory) readme_directory=$(readme_directory) sendmail_path=$(sendmail_path)$(ln_suffix) setgid_group=postdrop sample_directory=$(sample_directory) config_directory=$(config_directory) shlib_directory=$(shlib_directory) meta_directory=$(meta_directory) mail_version=$(PKG_VERSION) non-interactive-package
- $(INSTALL_DIR) $(1)$(mail_spool_directory)
$(INSTALL_DIR) $(1)/etc/init.d/
$(INSTALL_BIN) ./files/postfix.init $(1)/etc/init.d/postfix
endef
define Package/postfix/postinst
#!/bin/sh
- if [ -f "$${IPKG_INSTROOT}$(sendmail_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(sendmail_path)")" != "$(sendmail_path)$(ln_suffix)" ]; then
- mv "$${IPKG_INSTROOT}$(sendmail_path)" "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)"
- echo "Warning: $${IPKG_INSTROOT}$(sendmail_path) saved as $${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)"
- fi
- if [ ! -f "$${IPKG_INSTROOT}$(sendmail_path)" ]; then
- ln -s "$(sendmail_path)$(ln_suffix)" "$${IPKG_INSTROOT}$(sendmail_path)"
- fi
-
- if [ -f "$${IPKG_INSTROOT}$(newaliases_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(newaliases_path)")" != "$(newaliases_path)$(ln_suffix)" ]; then
- mv "$${IPKG_INSTROOT}$(newaliases_path)" "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)"
- echo "Warning: $${IPKG_INSTROOT}$(newaliases_path) saved as $${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)"
- fi
- if [ ! -f "$${IPKG_INSTROOT}$(newaliases_path)" ]; then
- ln -s "$(newaliases_path)$(ln_suffix)" "$${IPKG_INSTROOT}$(newaliases_path)"
- fi
-
- if [ -f "$${IPKG_INSTROOT}$(mailq_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(mailq_path)")" != "$(mailq_path)$(ln_suffix)" ]; then
- mv "$${IPKG_INSTROOT}$(mailq_path)" "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)"
- echo "Warning: $${IPKG_INSTROOT}$(mailq_path) saved as $${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)"
- fi
- if [ ! -f "$(mailq_path)" ]; then
- ln -s "$(mailq_path)$(ln_suffix)" "$${IPKG_INSTROOT}$(mailq_path)"
- fi
-
- grep -qc main\.cf "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/main.cf" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
- grep -qc master\.cf "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/master.cf" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
- grep -qc aliases "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/aliases" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
- grep -qc virtual "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/virtual" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
-
- touch "$${IPKG_INSTROOT}$(config_directory)"/opkg_postinst
-
- if [ -z "$${IPKG_INSTROOT}" ]; then
- ps | grep "postfix/master" | grep -cvq grep >/dev/null && /etc/init.d/postfix restart
- fi
+for syml in $(sendmail_path) $(newaliases_path) $(mailq_path); do
+ file=$${IPKG_INSTROOT}$${syml}
+ if [ -f "$${file}$(ln_suffix_legacy)" ]; then
+ # update files saved by legacy versions of Postfix postinst script
+ mv "$${file}$(ln_suffix_legacy)" "$${file}$(ln_suffix_pre_pf)"
+ fi
+ if [ -f "$${file}" ]; then
+ linktarget=$$(basename $$(readlink "$${file}"))
+ postfixf=$$(basename "$${syml}")$(ln_suffix)
+ if [ $${linktarget} != $${postfixf} ]; then
+ mv "$${file}" "$${file}$(ln_suffix_pre_pf)"
+ echo "Info: $${file} saved as $${file}$(ln_suffix_pre_pf)"
+ fi
+ fi
+ if [ ! -f "$${file}" ]; then
+ ln -s "$${syml}$(ln_suffix)" "$${file}"
+ fi
+done
+# fix file/dir ownership in data_directory and queue_directory
+if [ -z "$${IPKG_INSTROOT}" ]; then
+ postfix set-permissions
+fi
endef
-define Package/postfix/prerm
-#!/bin/sh
- ps | grep "postfix/master" | grep -cvq grep >/dev/null && postfix stop
- /etc/init.d/postfix disable
-endef
-
define Package/postfix/postrm
#!/bin/sh
- rm -f $${IPKG_INSTROOT}$(config_directory)/aliases.cdb $${IPKG_INSTROOT}$(config_directory)/aliases.db $${IPKG_INSTROOT}$(data_directory)/master.lock
-
- rm -f $${IPKG_INSTROOT}$(config_directory)/virtual.cdb $${IPKG_INSTROOT}$(config_directory)/virtual.db
-
- rm -f "$${IPKG_INSTROOT}$(sendmail_path)" "$${IPKG_INSTROOT}$(newaliases_path)" "$${IPKG_INSTROOT}$(mailq_path)"
-
- if [ -f "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" ]; then
- mv "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(sendmail_path)"
- echo "Warning: $${IPKG_INSTROOT}$(sendmail_path) restored from $${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)"
- fi
- if [ -f "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" ]; then
- mv "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(newaliases_path)"
- echo "Warning: $${IPKG_INSTROOT}$(newaliases_path) restored from $${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)"
- fi
- if [ -f "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" ]; then
- mv "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(mailq_path)"
- echo "Warning: $${IPKG_INSTROOT}$(mailq_path) restored from $${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)"
- fi
+rm -f "$(sendmail_path)" "$(newaliases_path)" "$(mailq_path)"
+
+for syml in "$(sendmail_path)" "$(newaliases_path)" "$(mailq_path)"; do
+ file=$${IPKG_INSTROOT}$${syml}
+ if [ -f "$${file}$(ln_suffix_legacy)" ]; then
+ # update files saved by legacy versions of Postfix postinst script
+ mv "$${file}$(ln_suffix_legacy)" "$${file}$(ln_suffix_pre_pf)"
+ fi
+ if [ -f "$${syml}$(ln_suffix_pre_pf)" ]; then
+ mv "$${syml}$(ln_suffix_pre_pf)" "$${syml}"
+ echo "Info: $${syml}$(ln_suffix_pre_pf) restored as $${syml}"
+ fi
+done
endef
$(eval $(call BuildPackage,postfix))
+++ /dev/null
-# DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE
-# TEXT HERE JUST SHOWS DEFAULT SETTINGS BUILT INTO POSTFIX.
-#
-2bounce_notice_recipient = postmaster
-access_map_defer_code = 450
-access_map_reject_code = 554
-address_verify_cache_cleanup_interval = 12h
-address_verify_default_transport = $default_transport
-address_verify_local_transport = $local_transport
-address_verify_map = btree:$data_directory/verify_cache
-address_verify_negative_cache = yes
-address_verify_negative_expire_time = 3d
-address_verify_negative_refresh_time = 3h
-address_verify_pending_request_limit = 5000
-address_verify_poll_count = ${stress?{1}:{3}}
-address_verify_poll_delay = 3s
-address_verify_positive_expire_time = 31d
-address_verify_positive_refresh_time = 7d
-address_verify_relay_transport = $relay_transport
-address_verify_relayhost = $relayhost
-address_verify_sender = $double_bounce_sender
-address_verify_sender_dependent_default_transport_maps = $sender_dependent_default_transport_maps
-address_verify_sender_dependent_relayhost_maps = $sender_dependent_relayhost_maps
-address_verify_sender_ttl = 0s
-address_verify_service_name = verify
-address_verify_transport_maps = $transport_maps
-address_verify_virtual_transport = $virtual_transport
-allow_mail_to_commands = alias, forward
-allow_mail_to_files = alias, forward
-allow_min_user = no
-allow_percent_hack = yes
-allow_untrusted_routing = no
-alternate_config_directories =
-always_add_missing_headers = no
-always_bcc =
-anvil_rate_time_unit = 60s
-anvil_status_update_time = 600s
-append_at_myorigin = yes
-append_dot_mydomain = ${{$compatibility_level} < {1} ? {yes} : {no}}
-application_event_drain_time = 100s
-authorized_flush_users = static:anyone
-authorized_mailq_users = static:anyone
-authorized_submit_users = static:anyone
-backwards_bounce_logfile_compatibility = yes
-berkeley_db_create_buffer_size = 16777216
-berkeley_db_read_buffer_size = 131072
-best_mx_transport =
-biff = yes
-body_checks =
-body_checks_size_limit = 51200
-bounce_notice_recipient = postmaster
-bounce_queue_lifetime = 5d
-bounce_service_name = bounce
-bounce_size_limit = 50000
-bounce_template_file =
-broken_sasl_auth_clients = no
-canonical_classes = envelope_sender, envelope_recipient, header_sender, header_recipient
-canonical_maps =
-cleanup_service_name = cleanup
-command_execution_directory =
-command_expansion_filter = 1234567890!@%-_=+:,./abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
-command_time_limit = 1000s
-compatibility_level = 0
-confirm_delay_cleared = no
-connection_cache_protocol_timeout = 5s
-connection_cache_service_name = scache
-connection_cache_status_update_time = 600s
-connection_cache_ttl_limit = 2s
-content_filter =
-cyrus_sasl_config_path =
-daemon_table_open_error_is_fatal = no
-daemon_timeout = 18000s
-debug_peer_level = 2
-debug_peer_list =
-debugger_command =
-default_delivery_slot_cost = 5
-default_delivery_slot_discount = 50
-default_delivery_slot_loan = 3
-default_delivery_status_filter =
-default_destination_concurrency_failed_cohort_limit = 1
-default_destination_concurrency_limit = 20
-default_destination_concurrency_negative_feedback = 1
-default_destination_concurrency_positive_feedback = 1
-default_destination_rate_delay = 0s
-default_destination_recipient_limit = 50
-default_extra_recipient_limit = 1000
-default_filter_nexthop =
-default_minimum_delivery_slots = 3
-default_privs = nobody
-default_process_limit = 100
-default_rbl_reply = $rbl_code Service unavailable; $rbl_class [$rbl_what] blocked using $rbl_domain${rbl_reason?; $rbl_reason}
-default_recipient_limit = 20000
-default_recipient_refill_delay = 5s
-default_recipient_refill_limit = 100
-default_transport = smtp
-default_transport_rate_delay = 0s
-default_verp_delimiters = +=
-defer_code = 450
-defer_service_name = defer
-defer_transports =
-delay_logging_resolution_limit = 2
-delay_notice_recipient = postmaster
-delay_warning_time = 0h
-deliver_lock_attempts = 20
-deliver_lock_delay = 1s
-destination_concurrency_feedback_debug = no
-detect_8bit_encoding_header = yes
-disable_dns_lookups = no
-disable_mime_input_processing = no
-disable_mime_output_conversion = no
-disable_verp_bounces = no
-disable_vrfy_command = no
-dns_ncache_ttl_fix_enable = no
-dnsblog_reply_delay = 0s
-dnsblog_service_name = dnsblog
-dont_remove = 0
-double_bounce_sender = double-bounce
-duplicate_filter_limit = 1000
-empty_address_default_transport_maps_lookup_key = <>
-empty_address_recipient = MAILER-DAEMON
-empty_address_relayhost_maps_lookup_key = <>
-enable_long_queue_ids = no
-enable_original_recipient = yes
-error_delivery_slot_cost = $default_delivery_slot_cost
-error_delivery_slot_discount = $default_delivery_slot_discount
-error_delivery_slot_loan = $default_delivery_slot_loan
-error_destination_concurrency_failed_cohort_limit = $default_destination_concurrency_failed_cohort_limit
-error_destination_concurrency_limit = $default_destination_concurrency_limit
-error_destination_concurrency_negative_feedback = $default_destination_concurrency_negative_feedback
-error_destination_concurrency_positive_feedback = $default_destination_concurrency_positive_feedback
-error_destination_rate_delay = $default_destination_rate_delay
-error_destination_recipient_limit = $default_destination_recipient_limit
-error_extra_recipient_limit = $default_extra_recipient_limit
-error_initial_destination_concurrency = $initial_destination_concurrency
-error_minimum_delivery_slots = $default_minimum_delivery_slots
-error_notice_recipient = postmaster
-error_recipient_limit = $default_recipient_limit
-error_recipient_refill_delay = $default_recipient_refill_delay
-error_recipient_refill_limit = $default_recipient_refill_limit
-error_service_name = error
-error_transport_rate_delay = $default_transport_rate_delay
-execution_directory_expansion_filter = 1234567890!@%-_=+:,./abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
-expand_owner_alias = no
-export_environment = TZ MAIL_CONFIG LANG
-fallback_transport =
-fallback_transport_maps =
-fast_flush_domains = $relay_domains
-fast_flush_purge_time = 7d
-fast_flush_refresh_time = 12h
-fault_injection_code = 0
-flush_service_name = flush
-fork_attempts = 5
-fork_delay = 1s
-forward_expansion_filter = 1234567890!@%-_=+:,./abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
-forward_path = $home/.forward${recipient_delimiter}${extension}, $home/.forward
-frozen_delivered_to = yes
-hash_queue_depth = 1
-hash_queue_names = deferred, defer
-header_address_token_limit = 10240
-header_checks =
-header_size_limit = 102400
-helpful_warnings = yes
-home_mailbox =
-hopcount_limit = 50
-ignore_mx_lookup_error = no
-import_environment = MAIL_CONFIG MAIL_DEBUG MAIL_LOGTAG TZ XAUTHORITY DISPLAY LANG=C
-in_flow_delay = 1s
-inet_interfaces = all
-inet_protocols = all
-initial_destination_concurrency = 5
-internal_mail_filter_classes =
-invalid_hostname_reject_code = 501
-ipc_idle = 5s
-ipc_timeout = 3600s
-ipc_ttl = 1000s
-line_length_limit = 2048
-lmdb_map_size = 16777216
-lmtp_address_preference = any
-lmtp_address_verify_target = rcpt
-lmtp_assume_final = no
-lmtp_bind_address =
-lmtp_bind_address6 =
-lmtp_body_checks =
-lmtp_cname_overrides_servername = no
-lmtp_connect_timeout = 0s
-lmtp_connection_cache_destinations =
-lmtp_connection_cache_on_demand = yes
-lmtp_connection_cache_time_limit = 2s
-lmtp_connection_reuse_count_limit = 0
-lmtp_connection_reuse_time_limit = 300s
-lmtp_data_done_timeout = 600s
-lmtp_data_init_timeout = 120s
-lmtp_data_xfer_timeout = 180s
-lmtp_defer_if_no_mx_address_found = no
-lmtp_delivery_slot_cost = $default_delivery_slot_cost
-lmtp_delivery_slot_discount = $default_delivery_slot_discount
-lmtp_delivery_slot_loan = $default_delivery_slot_loan
-lmtp_delivery_status_filter = $default_delivery_status_filter
-lmtp_destination_concurrency_failed_cohort_limit = $default_destination_concurrency_failed_cohort_limit
-lmtp_destination_concurrency_limit = $default_destination_concurrency_limit
-lmtp_destination_concurrency_negative_feedback = $default_destination_concurrency_negative_feedback
-lmtp_destination_concurrency_positive_feedback = $default_destination_concurrency_positive_feedback
-lmtp_destination_rate_delay = $default_destination_rate_delay
-lmtp_destination_recipient_limit = $default_destination_recipient_limit
-lmtp_discard_lhlo_keyword_address_maps =
-lmtp_discard_lhlo_keywords =
-lmtp_dns_reply_filter =
-lmtp_dns_resolver_options =
-lmtp_dns_support_level =
-lmtp_enforce_tls = no
-lmtp_extra_recipient_limit = $default_extra_recipient_limit
-lmtp_fallback_relay =
-lmtp_generic_maps =
-lmtp_header_checks =
-lmtp_host_lookup = dns
-lmtp_initial_destination_concurrency = $initial_destination_concurrency
-lmtp_lhlo_name = $myhostname
-lmtp_lhlo_timeout = 300s
-lmtp_line_length_limit = 998
-lmtp_mail_timeout = 300s
-lmtp_mime_header_checks =
-lmtp_minimum_delivery_slots = $default_minimum_delivery_slots
-lmtp_mx_address_limit = 5
-lmtp_mx_session_limit = 2
-lmtp_nested_header_checks =
-lmtp_per_record_deadline = no
-lmtp_pix_workaround_delay_time = 10s
-lmtp_pix_workaround_maps =
-lmtp_pix_workaround_threshold_time = 500s
-lmtp_pix_workarounds = disable_esmtp,delay_dotcrlf
-lmtp_quit_timeout = 300s
-lmtp_quote_rfc821_envelope = yes
-lmtp_randomize_addresses = yes
-lmtp_rcpt_timeout = 300s
-lmtp_recipient_limit = $default_recipient_limit
-lmtp_recipient_refill_delay = $default_recipient_refill_delay
-lmtp_recipient_refill_limit = $default_recipient_refill_limit
-lmtp_reply_filter =
-lmtp_rset_timeout = 20s
-lmtp_sasl_auth_cache_name =
-lmtp_sasl_auth_cache_time = 90d
-lmtp_sasl_auth_enable = no
-lmtp_sasl_auth_soft_bounce = yes
-lmtp_sasl_mechanism_filter =
-lmtp_sasl_password_maps =
-lmtp_sasl_path =
-lmtp_sasl_security_options = noplaintext, noanonymous
-lmtp_sasl_tls_security_options = $lmtp_sasl_security_options
-lmtp_sasl_tls_verified_security_options = $lmtp_sasl_tls_security_options
-lmtp_sasl_type = cyrus
-lmtp_send_dummy_mail_auth = no
-lmtp_send_xforward_command = no
-lmtp_sender_dependent_authentication = no
-lmtp_skip_5xx_greeting = yes
-lmtp_skip_quit_response = no
-lmtp_starttls_timeout = 300s
-lmtp_tcp_port = 24
-lmtp_tls_CAfile =
-lmtp_tls_CApath =
-lmtp_tls_block_early_mail_reply = no
-lmtp_tls_cert_file =
-lmtp_tls_ciphers = medium
-lmtp_tls_dcert_file =
-lmtp_tls_dkey_file = $lmtp_tls_dcert_file
-lmtp_tls_eccert_file =
-lmtp_tls_eckey_file = $lmtp_tls_eccert_file
-lmtp_tls_enforce_peername = yes
-lmtp_tls_exclude_ciphers =
-lmtp_tls_fingerprint_cert_match =
-lmtp_tls_fingerprint_digest = md5
-lmtp_tls_force_insecure_host_tlsa_lookup = no
-lmtp_tls_key_file = $lmtp_tls_cert_file
-lmtp_tls_loglevel = 0
-lmtp_tls_mandatory_ciphers = medium
-lmtp_tls_mandatory_exclude_ciphers =
-lmtp_tls_mandatory_protocols = !SSLv2, !SSLv3
-lmtp_tls_note_starttls_offer = no
-lmtp_tls_per_site =
-lmtp_tls_policy_maps =
-lmtp_tls_protocols = !SSLv2, !SSLv3
-lmtp_tls_scert_verifydepth = 9
-lmtp_tls_secure_cert_match = nexthop
-lmtp_tls_security_level =
-lmtp_tls_session_cache_database =
-lmtp_tls_session_cache_timeout = 3600s
-lmtp_tls_trust_anchor_file =
-lmtp_tls_verify_cert_match = hostname
-lmtp_tls_wrappermode = no
-lmtp_transport_rate_delay = $default_transport_rate_delay
-lmtp_use_tls = no
-lmtp_xforward_timeout = 300s
-local_command_shell =
-local_delivery_slot_cost = $default_delivery_slot_cost
-local_delivery_slot_discount = $default_delivery_slot_discount
-local_delivery_slot_loan = $default_delivery_slot_loan
-local_delivery_status_filter = $default_delivery_status_filter
-local_destination_concurrency_failed_cohort_limit = $default_destination_concurrency_failed_cohort_limit
-local_destination_concurrency_limit = 2
-local_destination_concurrency_negative_feedback = $default_destination_concurrency_negative_feedback
-local_destination_concurrency_positive_feedback = $default_destination_concurrency_positive_feedback
-local_destination_rate_delay = $default_destination_rate_delay
-local_destination_recipient_limit = 1
-local_extra_recipient_limit = $default_extra_recipient_limit
-local_header_rewrite_clients = permit_inet_interfaces
-local_initial_destination_concurrency = $initial_destination_concurrency
-local_minimum_delivery_slots = $default_minimum_delivery_slots
-local_recipient_limit = $default_recipient_limit
-local_recipient_maps = proxy:unix:passwd.byname $alias_maps
-local_recipient_refill_delay = $default_recipient_refill_delay
-local_recipient_refill_limit = $default_recipient_refill_limit
-local_transport = local:$myhostname
-local_transport_rate_delay = $default_transport_rate_delay
-luser_relay =
-mail_name = Postfix
-mail_owner = postfix
-mail_release_date = 20161001
-mail_version = 3.1.3
-mailbox_command =
-mailbox_command_maps =
-mailbox_delivery_lock = fcntl, dotlock
-mailbox_size_limit = 51200000
-mailbox_transport =
-mailbox_transport_maps =
-maps_rbl_domains =
-maps_rbl_reject_code = 554
-masquerade_classes = envelope_sender, header_sender, header_recipient
-masquerade_domains =
-masquerade_exceptions =
-master_service_disable =
-max_idle = 100s
-max_use = 100
-maximal_backoff_time = 4000s
-maximal_queue_lifetime = 5d
-message_drop_headers = bcc, content-length, resent-bcc, return-path
-message_reject_characters =
-message_size_limit = 10240000
-message_strip_characters =
-milter_command_timeout = 30s
-milter_connect_macros = j {daemon_name} v
-milter_connect_timeout = 30s
-milter_content_timeout = 300s
-milter_data_macros = i
-milter_default_action = tempfail
-milter_end_of_data_macros = i
-milter_end_of_header_macros = i
-milter_header_checks =
-milter_helo_macros = {tls_version} {cipher} {cipher_bits} {cert_subject} {cert_issuer}
-milter_macro_daemon_name = $myhostname
-milter_macro_defaults =
-milter_macro_v = $mail_name $mail_version
-milter_mail_macros = i {auth_type} {auth_authen} {auth_author} {mail_addr} {mail_host} {mail_mailer}
-milter_protocol = 6
-milter_rcpt_macros = i {rcpt_addr} {rcpt_host} {rcpt_mailer}
-milter_unknown_command_macros =
-mime_boundary_length_limit = 2048
-mime_header_checks = $header_checks
-mime_nesting_limit = 100
-minimal_backoff_time = 300s
-multi_instance_directories =
-multi_instance_enable = no
-multi_instance_group =
-multi_instance_name =
-multi_instance_wrapper =
-multi_recipient_bounce_reject_code = 550
-mydestination = $myhostname, localhost.$mydomain, localhost
-myorigin = $myhostname
-nested_header_checks = $header_checks
-non_fqdn_reject_code = 504
-non_smtpd_milters =
-notify_classes = resource, software
-openssl_path = openssl
-owner_request_special = yes
-parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks,permit_mx_backup_networks,qmqpd_authorized_clients,relay_domains,smtpd_access_maps
-permit_mx_backup_networks =
-pickup_service_name = pickup
-pipe_delivery_status_filter = $default_delivery_status_filter
-plaintext_reject_code = 450
-postmulti_control_commands = reload flush
-postmulti_start_commands = start
-postmulti_stop_commands = stop abort drain quick-stop
-postscreen_access_list = permit_mynetworks
-postscreen_bare_newline_action = ignore
-postscreen_bare_newline_enable = no
-postscreen_bare_newline_ttl = 30d
-postscreen_blacklist_action = ignore
-postscreen_cache_cleanup_interval = 12h
-postscreen_cache_map = btree:$data_directory/postscreen_cache
-postscreen_cache_retention_time = 7d
-postscreen_client_connection_count_limit = $smtpd_client_connection_count_limit
-postscreen_command_count_limit = 20
-postscreen_command_filter =
-postscreen_command_time_limit = ${stress?{10}:{300}}s
-postscreen_disable_vrfy_command = $disable_vrfy_command
-postscreen_discard_ehlo_keyword_address_maps = $smtpd_discard_ehlo_keyword_address_maps
-postscreen_discard_ehlo_keywords = $smtpd_discard_ehlo_keywords
-postscreen_dnsbl_action = ignore
-postscreen_dnsbl_max_ttl = ${postscreen_dnsbl_ttl?{$postscreen_dnsbl_ttl}:{1}}h
-postscreen_dnsbl_min_ttl = 60s
-postscreen_dnsbl_reply_map =
-postscreen_dnsbl_sites =
-postscreen_dnsbl_threshold = 1
-postscreen_dnsbl_timeout = 10s
-postscreen_dnsbl_whitelist_threshold = 0
-postscreen_enforce_tls = $smtpd_enforce_tls
-postscreen_expansion_filter = $smtpd_expansion_filter
-postscreen_forbidden_commands = $smtpd_forbidden_commands
-postscreen_greet_action = ignore
-postscreen_greet_banner = $smtpd_banner
-postscreen_greet_ttl = 1d
-postscreen_greet_wait = ${stress?{2}:{6}}s
-postscreen_helo_required = $smtpd_helo_required
-postscreen_non_smtp_command_action = drop
-postscreen_non_smtp_command_enable = no
-postscreen_non_smtp_command_ttl = 30d
-postscreen_pipelining_action = enforce
-postscreen_pipelining_enable = no
-postscreen_pipelining_ttl = 30d
-postscreen_post_queue_limit = $default_process_limit
-postscreen_pre_queue_limit = $default_process_limit
-postscreen_reject_footer = $smtpd_reject_footer
-postscreen_tls_security_level = $smtpd_tls_security_level
-postscreen_upstream_proxy_protocol =
-postscreen_upstream_proxy_timeout = 5s
-postscreen_use_tls = $smtpd_use_tls
-postscreen_watchdog_timeout = 10s
-postscreen_whitelist_interfaces = static:all
-prepend_delivered_header = command, file, forward
-process_id_directory = pid
-process_name = postconf
-propagate_unmatched_extensions = canonical, virtual
-proxy_interfaces =
-proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $sender_bcc_maps $recipient_bcc_maps $smtp_generic_maps $lmtp_generic_maps $alias_maps $smtpd_client_restrictions $smtpd_helo_restrictions $smtpd_sender_restrictions $smtpd_relay_restrictions $smtpd_recipient_restrictions
-proxy_write_maps = $smtp_sasl_auth_cache_name $lmtp_sasl_auth_cache_name $address_verify_map $postscreen_cache_map
-proxymap_service_name = proxymap
-proxywrite_service_name = proxywrite
-qmgr_clog_warn_time = 300s
-qmgr_daemon_timeout = 1000s
-qmgr_fudge_factor = 100
-qmgr_ipc_timeout = 60s
-qmgr_message_active_limit = 20000
-qmgr_message_recipient_limit = 20000
-qmgr_message_recipient_minimum = 10
-qmqpd_authorized_clients =
-qmqpd_client_port_logging = no
-qmqpd_error_delay = 1s
-qmqpd_timeout = 300s
-queue_file_attribute_count_limit = 100
-queue_minfree = 0
-queue_run_delay = 300s
-queue_service_name = qmgr
-rbl_reply_maps =
-receive_override_options =
-recipient_bcc_maps =
-recipient_canonical_classes = envelope_recipient, header_recipient
-recipient_canonical_maps =
-recipient_delimiter =
-reject_code = 554
-reject_tempfail_action = defer_if_permit
-relay_clientcerts =
-relay_delivery_slot_cost = $default_delivery_slot_cost
-relay_delivery_slot_discount = $default_delivery_slot_discount
-relay_delivery_slot_loan = $default_delivery_slot_loan
-relay_destination_concurrency_failed_cohort_limit = $default_destination_concurrency_failed_cohort_limit
-relay_destination_concurrency_limit = $default_destination_concurrency_limit
-relay_destination_concurrency_negative_feedback = $default_destination_concurrency_negative_feedback
-relay_destination_concurrency_positive_feedback = $default_destination_concurrency_positive_feedback
-relay_destination_rate_delay = $default_destination_rate_delay
-relay_destination_recipient_limit = $default_destination_recipient_limit
-relay_domains = ${{$compatibility_level} < {2} ? {$mydestination} : {}}
-relay_domains_reject_code = 554
-relay_extra_recipient_limit = $default_extra_recipient_limit
-relay_initial_destination_concurrency = $initial_destination_concurrency
-relay_minimum_delivery_slots = $default_minimum_delivery_slots
-relay_recipient_limit = $default_recipient_limit
-relay_recipient_maps =
-relay_recipient_refill_delay = $default_recipient_refill_delay
-relay_recipient_refill_limit = $default_recipient_refill_limit
-relay_transport = relay
-relay_transport_rate_delay = $default_transport_rate_delay
-relayhost =
-relocated_maps =
-remote_header_rewrite_domain =
-require_home_directory = no
-reset_owner_alias = no
-resolve_dequoted_address = yes
-resolve_null_domain = no
-resolve_numeric_domain = no
-retry_delivery_slot_cost = $default_delivery_slot_cost
-retry_delivery_slot_discount = $default_delivery_slot_discount
-retry_delivery_slot_loan = $default_delivery_slot_loan
-retry_destination_concurrency_failed_cohort_limit = $default_destination_concurrency_failed_cohort_limit
-retry_destination_concurrency_limit = $default_destination_concurrency_limit
-retry_destination_concurrency_negative_feedback = $default_destination_concurrency_negative_feedback
-retry_destination_concurrency_positive_feedback = $default_destination_concurrency_positive_feedback
-retry_destination_rate_delay = $default_destination_rate_delay
-retry_destination_recipient_limit = $default_destination_recipient_limit
-retry_extra_recipient_limit = $default_extra_recipient_limit
-retry_initial_destination_concurrency = $initial_destination_concurrency
-retry_minimum_delivery_slots = $default_minimum_delivery_slots
-retry_recipient_limit = $default_recipient_limit
-retry_recipient_refill_delay = $default_recipient_refill_delay
-retry_recipient_refill_limit = $default_recipient_refill_limit
-retry_transport_rate_delay = $default_transport_rate_delay
-rewrite_service_name = rewrite
-send_cyrus_sasl_authzid = no
-sender_bcc_maps =
-sender_canonical_classes = envelope_sender, header_sender
-sender_canonical_maps =
-sender_dependent_default_transport_maps =
-sender_dependent_relayhost_maps =
-sendmail_fix_line_endings = always
-service_throttle_time = 60s
-setgid_group = postdrop
-show_user_unknown_table_name = yes
-showq_service_name = showq
-smtp_address_preference = any
-smtp_address_verify_target = rcpt
-smtp_always_send_ehlo = yes
-smtp_bind_address =
-smtp_bind_address6 =
-smtp_body_checks =
-smtp_cname_overrides_servername = no
-smtp_connect_timeout = 30s
-smtp_connection_cache_destinations =
-smtp_connection_cache_on_demand = no
-smtp_connection_cache_time_limit = 2s
-smtp_connection_reuse_count_limit = 0
-smtp_connection_reuse_time_limit = 300s
-smtp_data_done_timeout = 600s
-smtp_data_init_timeout = 120s
-smtp_data_xfer_timeout = 180s
-smtp_defer_if_no_mx_address_found = no
-smtp_delivery_slot_cost = $default_delivery_slot_cost
-smtp_delivery_slot_discount = $default_delivery_slot_discount
-smtp_delivery_slot_loan = $default_delivery_slot_loan
-smtp_delivery_status_filter = $default_delivery_status_filter
-smtp_destination_concurrency_failed_cohort_limit = $default_destination_concurrency_failed_cohort_limit
-smtp_destination_concurrency_limit = $default_destination_concurrency_limit
-smtp_destination_concurrency_negative_feedback = $default_destination_concurrency_negative_feedback
-smtp_destination_concurrency_positive_feedback = $default_destination_concurrency_positive_feedback
-smtp_destination_rate_delay = $default_destination_rate_delay
-smtp_destination_recipient_limit = $default_destination_recipient_limit
-smtp_discard_ehlo_keyword_address_maps =
-smtp_discard_ehlo_keywords =
-smtp_dns_reply_filter =
-smtp_dns_resolver_options =
-smtp_dns_support_level =
-smtp_enforce_tls = no
-smtp_extra_recipient_limit = $default_extra_recipient_limit
-smtp_fallback_relay = $fallback_relay
-smtp_generic_maps =
-smtp_header_checks =
-smtp_helo_name = $myhostname
-smtp_helo_timeout = 300s
-smtp_host_lookup = dns
-smtp_initial_destination_concurrency = $initial_destination_concurrency
-smtp_line_length_limit = 998
-smtp_mail_timeout = 300s
-smtp_mime_header_checks =
-smtp_minimum_delivery_slots = $default_minimum_delivery_slots
-smtp_mx_address_limit = 5
-smtp_mx_session_limit = 2
-smtp_nested_header_checks =
-smtp_never_send_ehlo = no
-smtp_per_record_deadline = no
-smtp_pix_workaround_delay_time = 10s
-smtp_pix_workaround_maps =
-smtp_pix_workaround_threshold_time = 500s
-smtp_pix_workarounds = disable_esmtp,delay_dotcrlf
-smtp_quit_timeout = 300s
-smtp_quote_rfc821_envelope = yes
-smtp_randomize_addresses = yes
-smtp_rcpt_timeout = 300s
-smtp_recipient_limit = $default_recipient_limit
-smtp_recipient_refill_delay = $default_recipient_refill_delay
-smtp_recipient_refill_limit = $default_recipient_refill_limit
-smtp_reply_filter =
-smtp_rset_timeout = 20s
-smtp_sasl_auth_cache_name =
-smtp_sasl_auth_cache_time = 90d
-smtp_sasl_auth_enable = no
-smtp_sasl_auth_soft_bounce = yes
-smtp_sasl_mechanism_filter =
-smtp_sasl_password_maps =
-smtp_sasl_path =
-smtp_sasl_security_options = noplaintext, noanonymous
-smtp_sasl_tls_security_options = $smtp_sasl_security_options
-smtp_sasl_tls_verified_security_options = $smtp_sasl_tls_security_options
-smtp_sasl_type = cyrus
-smtp_send_dummy_mail_auth = no
-smtp_send_xforward_command = no
-smtp_sender_dependent_authentication = no
-smtp_skip_5xx_greeting = yes
-smtp_skip_quit_response = yes
-smtp_starttls_timeout = 300s
-smtp_tls_CAfile =
-smtp_tls_CApath =
-smtp_tls_block_early_mail_reply = no
-smtp_tls_cert_file =
-smtp_tls_ciphers = medium
-smtp_tls_dane_insecure_mx_policy = dane
-smtp_tls_dcert_file =
-smtp_tls_dkey_file = $smtp_tls_dcert_file
-smtp_tls_eccert_file =
-smtp_tls_eckey_file = $smtp_tls_eccert_file
-smtp_tls_enforce_peername = yes
-smtp_tls_exclude_ciphers =
-smtp_tls_fingerprint_cert_match =
-smtp_tls_fingerprint_digest = md5
-smtp_tls_force_insecure_host_tlsa_lookup = no
-smtp_tls_key_file = $smtp_tls_cert_file
-smtp_tls_loglevel = 0
-smtp_tls_mandatory_ciphers = medium
-smtp_tls_mandatory_exclude_ciphers =
-smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
-smtp_tls_note_starttls_offer = no
-smtp_tls_per_site =
-smtp_tls_policy_maps =
-smtp_tls_protocols = !SSLv2, !SSLv3
-smtp_tls_scert_verifydepth = 9
-smtp_tls_secure_cert_match = nexthop, dot-nexthop
-smtp_tls_security_level =
-smtp_tls_session_cache_database =
-smtp_tls_session_cache_timeout = 3600s
-smtp_tls_trust_anchor_file =
-smtp_tls_verify_cert_match = hostname
-smtp_tls_wrappermode = no
-smtp_transport_rate_delay = $default_transport_rate_delay
-smtp_use_tls = no
-smtp_xforward_timeout = 300s
-smtpd_authorized_verp_clients = $authorized_verp_clients
-smtpd_authorized_xclient_hosts =
-smtpd_authorized_xforward_hosts =
-smtpd_banner = $myhostname ESMTP $mail_name
-smtpd_client_auth_rate_limit = 0
-smtpd_client_connection_count_limit = 50
-smtpd_client_connection_rate_limit = 0
-smtpd_client_event_limit_exceptions = ${smtpd_client_connection_limit_exceptions:$mynetworks}
-smtpd_client_message_rate_limit = 0
-smtpd_client_new_tls_session_rate_limit = 0
-smtpd_client_port_logging = no
-smtpd_client_recipient_rate_limit = 0
-smtpd_client_restrictions =
-smtpd_command_filter =
-smtpd_data_restrictions =
-smtpd_delay_open_until_valid_rcpt = yes
-smtpd_delay_reject = yes
-smtpd_discard_ehlo_keyword_address_maps =
-smtpd_discard_ehlo_keywords =
-smtpd_dns_reply_filter =
-smtpd_end_of_data_restrictions =
-smtpd_enforce_tls = no
-smtpd_error_sleep_time = 1s
-smtpd_etrn_restrictions =
-smtpd_expansion_filter = \t\40!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~
-smtpd_forbidden_commands = CONNECT GET POST
-smtpd_hard_error_limit = ${stress?{1}:{20}}
-smtpd_helo_required = no
-smtpd_helo_restrictions =
-smtpd_history_flush_threshold = 100
-smtpd_junk_command_limit = ${stress?{1}:{100}}
-smtpd_log_access_permit_actions =
-smtpd_milters =
-smtpd_noop_commands =
-smtpd_null_access_lookup_key = <>
-smtpd_peername_lookup = yes
-smtpd_per_record_deadline = ${stress?{yes}:{no}}
-smtpd_policy_service_default_action = 451 4.3.5 Server configuration problem
-smtpd_policy_service_max_idle = 300s
-smtpd_policy_service_max_ttl = 1000s
-smtpd_policy_service_policy_context =
-smtpd_policy_service_request_limit = 0
-smtpd_policy_service_retry_delay = 1s
-smtpd_policy_service_timeout = 100s
-smtpd_policy_service_try_limit = 2
-smtpd_proxy_ehlo = $myhostname
-smtpd_proxy_filter =
-smtpd_proxy_options =
-smtpd_proxy_timeout = 100s
-smtpd_recipient_limit = 1000
-smtpd_recipient_overshoot_limit = 1000
-smtpd_recipient_restrictions =
-smtpd_reject_footer =
-smtpd_reject_unlisted_recipient = yes
-smtpd_reject_unlisted_sender = no
-smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
-smtpd_restriction_classes =
-smtpd_sasl_auth_enable = no
-smtpd_sasl_authenticated_header = no
-smtpd_sasl_exceptions_networks =
-smtpd_sasl_local_domain =
-smtpd_sasl_path = smtpd
-smtpd_sasl_security_options = noanonymous
-smtpd_sasl_service = smtp
-smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
-smtpd_sasl_type = cyrus
-smtpd_sender_login_maps =
-smtpd_sender_restrictions =
-smtpd_service_name = smtpd
-smtpd_soft_error_limit = 10
-smtpd_starttls_timeout = ${stress?{10}:{300}}s
-smtpd_timeout = ${stress?{10}:{300}}s
-smtpd_tls_CAfile =
-smtpd_tls_CApath =
-smtpd_tls_always_issue_session_ids = yes
-smtpd_tls_ask_ccert = no
-smtpd_tls_auth_only = no
-smtpd_tls_ccert_verifydepth = 9
-smtpd_tls_cert_file =
-smtpd_tls_ciphers = medium
-smtpd_tls_dcert_file =
-smtpd_tls_dh1024_param_file =
-smtpd_tls_dh512_param_file =
-smtpd_tls_dkey_file = $smtpd_tls_dcert_file
-smtpd_tls_eccert_file =
-smtpd_tls_eckey_file = $smtpd_tls_eccert_file
-smtpd_tls_eecdh_grade = strong
-smtpd_tls_exclude_ciphers =
-smtpd_tls_fingerprint_digest = md5
-smtpd_tls_key_file = $smtpd_tls_cert_file
-smtpd_tls_loglevel = 0
-smtpd_tls_mandatory_ciphers = medium
-smtpd_tls_mandatory_exclude_ciphers =
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-smtpd_tls_protocols = !SSLv2, !SSLv3
-smtpd_tls_received_header = no
-smtpd_tls_req_ccert = no
-smtpd_tls_security_level =
-smtpd_tls_session_cache_database =
-smtpd_tls_session_cache_timeout = 3600s
-smtpd_tls_wrappermode = no
-smtpd_upstream_proxy_protocol =
-smtpd_upstream_proxy_timeout = 5s
-smtpd_use_tls = no
-smtputf8_autodetect_classes = sendmail, verify
-soft_bounce = no
-stale_lock_time = 500s
-stress =
-strict_7bit_headers = no
-strict_8bitmime = no
-strict_8bitmime_body = no
-strict_mailbox_ownership = yes
-strict_mime_encoding_domain = no
-strict_rfc821_envelopes = no
-strict_smtputf8 = no
-sun_mailtool_compatibility = no
-swap_bangpath = yes
-syslog_facility = mail
-syslog_name = ${multi_instance_name?{$multi_instance_name}:{postfix}}
-tcp_windowsize = 0
-tls_append_default_CA = no
-tls_daemon_random_bytes = 32
-tls_dane_digest_agility = on
-tls_dane_digests = sha512 sha256
-tls_dane_trust_anchor_digest_enable = yes
-tls_disable_workarounds =
-tls_eecdh_strong_curve = prime256v1
-tls_eecdh_ultra_curve = secp384r1
-tls_export_cipherlist = aNULL:-aNULL:HIGH:MEDIUM:LOW:EXPORT:+RC4:@STRENGTH
-tls_high_cipherlist = aNULL:-aNULL:HIGH:@STRENGTH
-tls_legacy_public_key_fingerprints = no
-tls_low_cipherlist = aNULL:-aNULL:HIGH:MEDIUM:LOW:+RC4:@STRENGTH
-tls_medium_cipherlist = aNULL:-aNULL:HIGH:MEDIUM:+RC4:@STRENGTH
-tls_null_cipherlist = eNULL:!aNULL
-tls_preempt_cipherlist = no
-tls_random_bytes = 32
-tls_random_exchange_name = ${data_directory}/prng_exch
-tls_random_prng_update_period = 3600s
-tls_random_reseed_period = 3600s
-tls_random_source = dev:/dev/urandom
-tls_session_ticket_cipher = aes-256-cbc
-tls_ssl_options =
-tls_wildcard_matches_multiple_labels = yes
-tlsmgr_service_name = tlsmgr
-tlsproxy_enforce_tls = $smtpd_enforce_tls
-tlsproxy_service_name = tlsproxy
-tlsproxy_tls_CAfile = $smtpd_tls_CAfile
-tlsproxy_tls_CApath = $smtpd_tls_CApath
-tlsproxy_tls_always_issue_session_ids = $smtpd_tls_always_issue_session_ids
-tlsproxy_tls_ask_ccert = $smtpd_tls_ask_ccert
-tlsproxy_tls_ccert_verifydepth = $smtpd_tls_ccert_verifydepth
-tlsproxy_tls_cert_file = $smtpd_tls_cert_file
-tlsproxy_tls_ciphers = $smtpd_tls_ciphers
-tlsproxy_tls_dcert_file = $smtpd_tls_dcert_file
-tlsproxy_tls_dh1024_param_file = $smtpd_tls_dh1024_param_file
-tlsproxy_tls_dh512_param_file = $smtpd_tls_dh512_param_file
-tlsproxy_tls_dkey_file = $smtpd_tls_dkey_file
-tlsproxy_tls_eccert_file = $smtpd_tls_eccert_file
-tlsproxy_tls_eckey_file = $smtpd_tls_eckey_file
-tlsproxy_tls_eecdh_grade = $smtpd_tls_eecdh_grade
-tlsproxy_tls_exclude_ciphers = $smtpd_tls_exclude_ciphers
-tlsproxy_tls_fingerprint_digest = $smtpd_tls_fingerprint_digest
-tlsproxy_tls_key_file = $smtpd_tls_key_file
-tlsproxy_tls_loglevel = $smtpd_tls_loglevel
-tlsproxy_tls_mandatory_ciphers = $smtpd_tls_mandatory_ciphers
-tlsproxy_tls_mandatory_exclude_ciphers = $smtpd_tls_mandatory_exclude_ciphers
-tlsproxy_tls_mandatory_protocols = $smtpd_tls_mandatory_protocols
-tlsproxy_tls_protocols = $smtpd_tls_protocols
-tlsproxy_tls_req_ccert = $smtpd_tls_req_ccert
-tlsproxy_tls_security_level = $smtpd_tls_security_level
-tlsproxy_use_tls = $smtpd_use_tls
-tlsproxy_watchdog_timeout = 10s
-trace_service_name = trace
-transport_maps =
-transport_retry_time = 60s
-trigger_timeout = 10s
-undisclosed_recipients_header =
-unknown_address_reject_code = 450
-unknown_address_tempfail_action = $reject_tempfail_action
-unknown_client_reject_code = 450
-unknown_helo_hostname_tempfail_action = $reject_tempfail_action
-unknown_hostname_reject_code = 450
-unknown_local_recipient_reject_code = 550
-unknown_relay_recipient_reject_code = 550
-unknown_virtual_alias_reject_code = 550
-unknown_virtual_mailbox_reject_code = 550
-unverified_recipient_defer_code = 450
-unverified_recipient_reject_code = 450
-unverified_recipient_reject_reason =
-unverified_recipient_tempfail_action = $reject_tempfail_action
-unverified_sender_defer_code = 450
-unverified_sender_reject_code = 450
-unverified_sender_reject_reason =
-unverified_sender_tempfail_action = $reject_tempfail_action
-verp_delimiter_filter = -=+
-virtual_alias_address_length_limit = 1000
-virtual_alias_domains = $virtual_alias_maps
-virtual_alias_expansion_limit = 1000
-virtual_alias_maps = $virtual_maps
-virtual_alias_recursion_limit = 1000
-virtual_delivery_slot_cost = $default_delivery_slot_cost
-virtual_delivery_slot_discount = $default_delivery_slot_discount
-virtual_delivery_slot_loan = $default_delivery_slot_loan
-virtual_delivery_status_filter = $default_delivery_status_filter
-virtual_destination_concurrency_failed_cohort_limit = $default_destination_concurrency_failed_cohort_limit
-virtual_destination_concurrency_limit = $default_destination_concurrency_limit
-virtual_destination_concurrency_negative_feedback = $default_destination_concurrency_negative_feedback
-virtual_destination_concurrency_positive_feedback = $default_destination_concurrency_positive_feedback
-virtual_destination_rate_delay = $default_destination_rate_delay
-virtual_destination_recipient_limit = $default_destination_recipient_limit
-virtual_extra_recipient_limit = $default_extra_recipient_limit
-virtual_gid_maps =
-virtual_initial_destination_concurrency = $initial_destination_concurrency
-virtual_mailbox_base =
-virtual_mailbox_domains = $virtual_mailbox_maps
-virtual_mailbox_limit = 51200000
-virtual_mailbox_lock = fcntl, dotlock
-virtual_mailbox_maps =
-virtual_minimum_delivery_slots = $default_minimum_delivery_slots
-virtual_minimum_uid = 100
-virtual_recipient_limit = $default_recipient_limit
-virtual_recipient_refill_delay = $default_recipient_refill_delay
-virtual_recipient_refill_limit = $default_recipient_refill_limit
-virtual_transport = virtual
-virtual_transport_rate_delay = $default_transport_rate_delay
-virtual_uid_maps =
flush Force delivery: attempt to deliver every message in the deferred mail queue
postinst Force running a script that checks for users, group, configuration, permissions, etc"
-config_directory="$IPKG_INSTROOT"/etc/postfix
postinst() {
- rm -f "$config_directory"/opkg_postinst
-
- group_exists postfix || group_add postfix 87
- user_exists postfix || user_add postfix 87
- group_exists postdrop || group_add postdrop 88
-
- echo "myhostname = $(uci get system.@system[0].hostname)" >> "$config_directory"/main.cf.default
- echo "mydomain = $(uci get system.@system[0].hostname|sed -e "s/[^\.]*\.\(.*\)/\1/")" >> "$config_directory"/main.cf.default
- (eval $(ipcalc.sh $(uci get network.lan.ipaddr) $(uci get network.lan.netmask)); echo mynetworks = 127.0.0.0/8 $NETWORK/$PREFIX) >> "$config_directory"/main.cf.default
- echo "mynetworks_style = subnet" >> "$config_directory"/main.cf.default
-
- grep -qc "^sendmail_path[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^sendmail_path =" "$config_directory"/main.cf.default)"
- grep -qc "^newaliases_path[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^newaliases_path =" "$config_directory"/main.cf.default)"
- grep -qc "^mailq_path[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^mailq_path =" "$config_directory"/main.cf.default)"
- grep -qc "^html_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^html_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^manpage_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^manpage_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^sample_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^sample_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^readme_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^readme_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^command_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^command_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^daemon_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^daemon_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^data_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^data_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^queue_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^queue_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^config_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^config_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^mail_spool_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^mail_spool_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^mail_owner[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^mail_owner =" "$config_directory"/main.cf.default)"
- grep -qc "^setgid_group[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^setgid_group =" "$config_directory"/main.cf.default)"
- grep -qc "^myhostname[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^myhostname =" "$config_directory"/main.cf.default)"
- grep -qc "^mydomain[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^mydomain =" "$config_directory"/main.cf.default)"
- #grep -qc "^mynetworks[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^mynetworks =" "$config_directory"/main.cf.default)" #Setting mynetworks_style is enough
- grep -qc "^mynetworks_style[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^mynetworks_style =" "$config_directory"/main.cf.default)"
- grep -qc "^shlib_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^shlib_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^meta_directory[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^meta_directory =" "$config_directory"/main.cf.default)"
- grep -qc "^smtputf8_enable[^_]" "$config_directory"/main.cf >/dev/null || postconf -e "$(grep "^smtputf8_enable =" "$config_directory"/main.cf.default)"
+ if [ -z "$(postconf -nh myhostname)" ]; then
+ postconf -e "myhostname = $(uci get system.@system[0].hostname)"
+ fi
+ if [ -z "$(postconf -nh mydomain)" ]; then
+ postconf -e "mydomain = $(uci get dhcp.@dnsmasq[0].domain)"
+ fi
+ if [ -z "$(postconf -nh mynetworks_style)" ]; then
+ postconf -e "mynetworks_style = subnet"
+ fi
+ mail_spool_directory=$(postconf -h mail_spool_directory)
+ if [ ! -d $mail_spool_directory ]; then
+ mkdir -p -m 0755 $mail_spool_directory
+ chown -R postfix $mail_spool_directory
+ fi
postfix set-permissions
postfix post-install upgrade-source
postfix upgrade-configuration
newaliases
- postmap "$config_directory"/virtual
+ postmap $(postconf -h config_directory)/virtual
postfix check
}
start() {
- test -f "$config_directory"/opkg_postinst && postinst
+ if [ -z "$(postconf -nh myhostname)" ]; then
+ postinst
+ fi
postfix start
}
}
reload() {
- test -f "$config_directory"/opkg_postinst && postinst
postfix reload
}
--- /dev/null
+This patch fixes the runtime error when libmilter is used with Postfix:
+"unix_send_fd: your system has no support for file descriptor passing"
+
+The issue has been fixed upstream in 20170618 update to Postfix v.3.3:
+http://postfix.1071664.n5.nabble.com/Fix-check-for-file-descriptor-passing-td90983.html
+
+This patch must be removed before compiling Postfix v.3.3.*
+
+--- a/src/util/sys_defs.h
++++ b/src/util/sys_defs.h
+@@ -804,7 +804,7 @@ extern int initgroups(const char *, int)
+ #define KERNEL_VERSION(a,b,c) (LINUX_VERSION_CODE + 1)
+ #endif
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,2,0)) \
+- || (__GLIBC__ < 2)
++ || (defined(__GLIBC__) && __GLIBC__ < 2)
+ #define CANT_USE_SEND_RECV_MSG
+ #define DEF_SMTP_CACHE_DEMAND 0
+ #else
include $(TOPDIR)/rules.mk
PKG_NAME:=ffmpeg
-PKG_VERSION:=3.2.8
+PKG_VERSION:=3.2.9
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://ffmpeg.org/releases/
-PKG_HASH:=42e7362692318afc666f14378dd445effa9a1b09787504a6ab5811fe442674cd
+PKG_HASH:=1131d37890ed3dcbc3970452b200a56ceb36b73eaa51d1c23c770c90f928537f
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>, \
Ian Leonard <antonlacon@gmail.com>
$(patsubst %,CONFIG_FFMPEG_CUSTOM_PARSER_%,$(FFMPEG_CUSTOM_PARSERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_PROTOCOL_%,$(FFMPEG_CUSTOM_PROTOCOLS))
+PKG_BUILD_DEPENDS:= \
+ PACKAGE_shine:shine \
+ PACKAGE_libx264:libx264 \
+ PACKAGE_lame-lib:lame-lib \
+ PACKAGE_libopus:libopus
+
include $(INCLUDE_DIR)/package.mk
define Package/ffmpeg/Default
endef
+# Package build suppressed when CONFIG_ALL=y
define Package/libffmpeg-custom
$(call Package/libffmpeg/Default)
TITLE+= (custom)
- DEPENDS+= +FFMPEG_CUSTOM_SELECT_libopus:libopus \
+ DEPENDS+= @!ALL \
+ +FFMPEG_CUSTOM_SELECT_libopus:libopus \
+PACKAGE_libx264:libx264 +PACKAGE_lame-lib:lame-lib \
+FFMPEG_CUSTOM_SELECT_libshine:shine \
+PACKAGE_fdk-aac:fdk-aac
$(eval $(call BuildPackage,libffmpeg-audio-dec))
$(eval $(call BuildPackage,libffmpeg-full))
$(eval $(call BuildPackage,libffmpeg-mini))
-ifneq ($(CONFIG_ALL),y)
- $(eval $(call BuildPackage,libffmpeg-custom))
-endif
+$(eval $(call BuildPackage,libffmpeg-custom))
include $(TOPDIR)/rules.mk
PKG_NAME:=gphoto2
-PKG_VERSION:=2.5.14
+PKG_VERSION:=2.5.15
PKG_RELEASE:=1
PKG_MAINTAINER:=Leonardo Medici <leonardo_medici@me.com>
-
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@SF/gphoto
-PKG_HASH:=9302d02fb472d4936988382b7277ccdc4edaf7ede56c490278912ffd0627699c
+PKG_HASH:=ae571a227983dc9997876702a73af5431d41f287ea0f483cda897c57a6084a77
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
-Index: gphoto2-2.5.14/Makefile.am
+Index: gphoto2-2.5.15/Makefile.am
===================================================================
---- gphoto2-2.5.14.orig/Makefile.am
-+++ gphoto2-2.5.14/Makefile.am
+--- gphoto2-2.5.15.orig/Makefile.am
++++ gphoto2-2.5.15/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = gphoto-m4 contrib doc gphoto2 packaging po tests
+SUBDIRS = gphoto-m4 contrib doc gphoto2 packaging tests
ACLOCAL_AMFLAGS = -I auto-m4 -I gphoto-m4
EXTRA_DIST = README.md
-Index: gphoto2-2.5.14/Makefile.in
+Index: gphoto2-2.5.15/Makefile.in
===================================================================
---- gphoto2-2.5.14.orig/Makefile.in
-+++ gphoto2-2.5.14/Makefile.in
-@@ -390,7 +390,7 @@ target_alias = @target_alias@
+--- gphoto2-2.5.15.orig/Makefile.in
++++ gphoto2-2.5.15/Makefile.in
+@@ -389,7 +389,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I auto-m4 -I gphoto-m4
EXTRA_DIST = README.md
all: config.h
-Index: gphoto2-2.5.14/configure.ac
+Index: gphoto2-2.5.15/configure.ac
===================================================================
---- gphoto2-2.5.14.orig/configure.ac
-+++ gphoto2-2.5.14/configure.ac
-@@ -59,10 +59,7 @@ dnl ------------------------------------
+--- gphoto2-2.5.15.orig/configure.ac
++++ gphoto2-2.5.15/configure.ac
+@@ -58,10 +58,7 @@ dnl ------------------------------------
GP_GETTEXT_HACK([],[Lutz Müller and others],[${MAIL_GPHOTO_TRANSLATION}])
ALL_LINGUAS="az cs da de en_GB es eu fi fr hu id is it ja nl pa pl pt_BR ro ru rw sk sr sv uk vi zh_CN zh_TW"
AM_GNU_GETTEXT_VERSION([0.14.1])
dnl We cannot use AC_DEFINE_UNQUOTED() for these definitions, as
dnl we require make to do insert the proper $(datadir) value
-@@ -408,7 +405,6 @@ AC_SUBST([AM_LDFLAGS])
+@@ -407,7 +404,6 @@ AC_SUBST([AM_LDFLAGS])
# Create output files
# ---------------------------------------------------------------------------
AC_CONFIG_FILES([
-Index: gphoto2-2.5.14/Makefile.am
+Index: gphoto2-2.5.15/Makefile.am
===================================================================
---- gphoto2-2.5.14.orig/Makefile.am
-+++ gphoto2-2.5.14/Makefile.am
+--- gphoto2-2.5.15.orig/Makefile.am
++++ gphoto2-2.5.15/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = gphoto-m4 contrib doc gphoto2 packaging tests
+SUBDIRS = gphoto-m4 contrib gphoto2 packaging
ACLOCAL_AMFLAGS = -I auto-m4 -I gphoto-m4
EXTRA_DIST = README.md
-Index: gphoto2-2.5.14/Makefile.in
+Index: gphoto2-2.5.15/Makefile.in
===================================================================
---- gphoto2-2.5.14.orig/Makefile.in
-+++ gphoto2-2.5.14/Makefile.in
-@@ -390,7 +390,7 @@ target_alias = @target_alias@
+--- gphoto2-2.5.15.orig/Makefile.in
++++ gphoto2-2.5.15/Makefile.in
+@@ -389,7 +389,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I auto-m4 -I gphoto-m4
EXTRA_DIST = README.md
all: config.h
-Index: gphoto2-2.5.14/configure.ac
+Index: gphoto2-2.5.15/configure.ac
===================================================================
---- gphoto2-2.5.14.orig/configure.ac
-+++ gphoto2-2.5.14/configure.ac
-@@ -408,16 +408,10 @@ AC_CONFIG_FILES([
+--- gphoto2-2.5.15.orig/configure.ac
++++ gphoto2-2.5.15/configure.ac
+@@ -407,16 +407,10 @@ AC_CONFIG_FILES([
Makefile
gphoto2/Makefile
gphoto-m4/Makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=gst1-libav
-PKG_VERSION:=1.8.2
-PKG_RELEASE:=2
+PKG_VERSION:=1.10.5
+PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
Ted Hess <thess@kitschensync.net>
PKG_SOURCE:=gst-libav-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-libav
-PKG_HASH:=b5f3c7a27b39b5f5c2f0bfd546b0c655020faf6b38d27b64b346c43e5ebf687a
+PKG_HASH:=e4d2f315f478d47281fbfdfbd590a63d23704ca37911d7142d5992616f4b28d3
PKG_LICENSE:=GPL-2.0 LGPL-2.0
PKG_LICENSE_FILES:=COPYING COPYING.LIB
LIBAV_CONFIGURE_PARSERS:=$(call FILTER_CONFIG,PARSER,parser,$(LIBAV_PARSERS))
LIBAV_CONFIGURE_PROTOCOLS:=$(call FILTER_CONFIG,PROTOCOL,protocol,$(LIBAV_PROTOCOLS))
+# Strip off FPU notation
+REAL_CPU_TYPE:=$(firstword $(subst +, ,$(CONFIG_CPU_TYPE)))
+
CONFIGURE_ARGS += \
--without-system-libav \
- --with-libav-extra-configure="--target-os=linux \
- $(if $(findstring " ",$(CONFIG_CPU_TYPE)),,--cpu=$(CONFIG_CPU_TYPE)) \
+ --with-libav-extra-configure=" \
+ $(if $(REAL_CPU_TYPE),--cpu=$(call qstrip,$(REAL_CPU_TYPE)),) \
--disable-bsfs \
--disable-programs \
--disable-devices \
include $(TOPDIR)/rules.mk
PKG_NAME:=gst1-plugins-bad
-PKG_VERSION:=1.8.2
+PKG_VERSION:=1.10.5
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-bad-$(PKG_VERSION)
PKG_SOURCE:=gst-plugins-bad-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-bad/
-PKG_HASH:=d7995317530c8773ec088f94d9320909d41da61996b801ebacce9a56af493f97
+PKG_HASH:=c5806040bb83b43be86ce592e6a19c5d83d7776f7d9f434eb4b911c4efff3573
-PKG_BUILD_DEPENDS:= libgstreamer1 gstreamer1-plugins-base
+PKG_BUILD_DEPENDS:= libgstreamer1 gst1-plugins-base libgst1basecamerabinsrc libgst1photography libgst1adaptivedemux libgst1uridownloader libgst1badbase
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
SECTION:=multimedia
TITLE:=GStreamer
URL:=http://gstreamer.freedesktop.org/
- DEPENDS:= +libgstreamer1 $(ICONV_DEPENDS)
+ DEPENDS:= +gst1-plugins-base +libgstreamer1 +libgst1pbutils $(ICONV_DEPENDS)
endef
define Package/gstreamer1-bad/description/Default
--- a/configure.ac
+++ b/configure.ac
-@@ -3717,7 +3717,6 @@ ext/x265/Makefile
- ext/xvid/Makefile
+@@ -3841,7 +3841,6 @@ ext/xvid/Makefile
ext/zbar/Makefile
ext/dtls/Makefile
+ ext/webrtcdsp/Makefile
-po/Makefile.in
docs/Makefile
docs/plugins/Makefile
--- a/configure.ac
+++ b/configure.ac
-@@ -3617,38 +3617,6 @@ sys/wasapi/Makefile
+@@ -3739,37 +3739,6 @@ sys/wasapi/Makefile
sys/wininet/Makefile
sys/winks/Makefile
sys/winscreencap/Makefile
-tests/examples/gl/generic/doublecube/Makefile
-tests/examples/gl/generic/recordgraphic/Makefile
-tests/examples/gl/gtk/Makefile
--tests/examples/gl/gtk/gtkvideooverlay/Makefile
-tests/examples/gl/gtk/3dvideo/Makefile
-tests/examples/gl/gtk/filternovideooverlay/Makefile
-tests/examples/gl/gtk/filtervideooverlay/Makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=gst1-plugins-base
-PKG_VERSION:=1.8.2
+PKG_VERSION:=1.10.5
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-base-$(PKG_VERSION)
PKG_SOURCE:=gst-plugins-base-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-base/
-PKG_HASH:=9d7109c8fb0a5dec8edb17b0053c59a46aba7ddf48dc48ea822ebbbd4339d38d
+PKG_HASH:=1c401a79bd1e4521c6ef1b66579bddedd9136e164e54792aab4bfcf3485bf9a7
PKG_BUILD_DEPENDS:= libgstreamer1
PKG_CONFIG_DEPENDS:= \
--- a/configure.ac
+++ b/configure.ac
-@@ -929,7 +929,6 @@ docs/design/Makefile
+@@ -963,7 +963,6 @@ docs/design/Makefile
docs/libs/Makefile
docs/plugins/Makefile
docs/version.entities
--- a/configure.ac
+++ b/configure.ac
-@@ -907,23 +907,6 @@ pkgconfig/gstreamer-video.pc
+@@ -940,24 +940,6 @@ pkgconfig/gstreamer-video.pc
pkgconfig/gstreamer-video-uninstalled.pc
pkgconfig/gstreamer-plugins-base.pc
pkgconfig/gstreamer-plugins-base-uninstalled.pc
-tests/examples/Makefile
-tests/examples/app/Makefile
-tests/examples/audio/Makefile
+-tests/examples/decodebin_next/Makefile
-tests/examples/dynamic/Makefile
-tests/examples/encoding/Makefile
-tests/examples/fft/Makefile
--- a/configure.ac
+++ b/configure.ac
-@@ -907,11 +907,6 @@ pkgconfig/gstreamer-video.pc
+@@ -940,11 +940,6 @@ pkgconfig/gstreamer-video.pc
pkgconfig/gstreamer-video-uninstalled.pc
pkgconfig/gstreamer-plugins-base.pc
pkgconfig/gstreamer-plugins-base-uninstalled.pc
include $(TOPDIR)/rules.mk
PKG_NAME:=gst1-plugins-good
-PKG_VERSION:=1.8.2
+PKG_VERSION:=1.10.5
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-good-$(PKG_VERSION)
PKG_SOURCE:=gst-plugins-good-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-good/
-PKG_HASH:=8d7549118a3b7a009ece6bb38a05b66709c551d32d2adfd89eded4d1d7a23944
+PKG_HASH:=be053f6ed716eeb517cec148cec637cdce571c6e04d5c21409e2876fb76c7639
-PKG_BUILD_DEPENDS:= libgstreamer1 gstreamer1-plugins-base
+PKG_BUILD_DEPENDS:= libgstreamer1 gst1-plugins-base
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
SECTION:=multimedia
TITLE:=GStreamer
URL:=http://gstreamer.freedesktop.org/
- DEPENDS:= +libgstreamer1 $(ICONV_DEPENDS)
+ DEPENDS:= +libgstreamer1 +libgst1pbutils $(ICONV_DEPENDS)
endef
define Package/gstreamer1-good/description/Default
--- a/configure.ac
+++ b/configure.ac
-@@ -1049,7 +1049,6 @@ sys/sunaudio/Makefile
+@@ -1061,7 +1061,6 @@ sys/sunaudio/Makefile
sys/v4l2/Makefile
sys/waveform/Makefile
sys/ximage/Makefile
--- a/configure.ac
+++ b/configure.ac
-@@ -1049,21 +1049,6 @@ sys/sunaudio/Makefile
+@@ -1061,21 +1061,6 @@ sys/sunaudio/Makefile
sys/v4l2/Makefile
sys/waveform/Makefile
sys/ximage/Makefile
--- a/configure.ac
+++ b/configure.ac
-@@ -1052,9 +1052,6 @@ sys/ximage/Makefile
+@@ -1064,9 +1064,6 @@ sys/ximage/Makefile
common/Makefile
common/m4/Makefile
m4/Makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=gst1-plugins-ugly
-PKG_VERSION:=1.8.2
+PKG_VERSION:=1.10.5
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-ugly-$(PKG_VERSION)
PKG_SOURCE:=gst-plugins-ugly-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-ugly/
-PKG_HASH:=9c5b33a2a98fc1d6d6c99a1b536b1fb2de45f53cc8bf8ab85a8b8141fed1a8ac
+PKG_HASH:=d6edc046350809c967f5b058c5c2e534d99d1d69fe1b26acd849e87781a7d7fc
PKG_BUILD_DEPENDS:= libgstreamer1 gstreamer1-plugins-base
PKG_CONFIG_DEPENDS:= \
-diff -u --recursive gst-plugins-ugly-1.6.2-vanilla/configure.ac gst-plugins-ugly-1.6.2/configure.ac
---- gst-plugins-ugly-1.6.2-vanilla/configure.ac 2016-01-01 10:47:06.333623730 -0500
-+++ gst-plugins-ugly-1.6.2/configure.ac 2016-01-01 10:47:20.211613708 -0500
-@@ -470,7 +470,6 @@
- tests/Makefile
+--- a/configure.ac
++++ b/configure.ac
+@@ -482,7 +482,6 @@ tests/Makefile
tests/check/Makefile
+ tests/files/Makefile
m4/Makefile
-po/Makefile.in
pkgconfig/Makefile
pkgconfig/gstreamer-plugins-ugly-uninstalled.pc
gst-plugins-ugly.spec
-diff -u --recursive gst-plugins-ugly-1.6.2-vanilla/Makefile.am gst-plugins-ugly-1.6.2/Makefile.am
---- gst-plugins-ugly-1.6.2-vanilla/Makefile.am 2016-01-01 10:47:06.333623730 -0500
-+++ gst-plugins-ugly-1.6.2/Makefile.am 2016-01-01 10:47:14.523210855 -0500
+--- a/Makefile.am
++++ b/Makefile.am
@@ -1,7 +1,7 @@
DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
include $(TOPDIR)/rules.mk
PKG_NAME:=gstreamer1
-PKG_VERSION:=1.8.2
+PKG_VERSION:=1.10.5
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
PKG_BUILD_DIR:=$(BUILD_DIR)/gstreamer-$(PKG_VERSION)
PKG_SOURCE:=gstreamer-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gstreamer/
-PKG_HASH:=9dbebe079c2ab2004ef7f2649fa317cabea1feb4fb5605c24d40744b90918341
+PKG_HASH:=bc06243600817f637029da29d089d5908d1d266542f68bf6626a10c5f05f1f1d
PKG_FIXUP:=autoreconf
PKG_REMOVE_FILES:=autogen.sh aclocal.m4
--disable-examples \
--disable-tests \
--disable-valgrind \
+ --disable-gst-tracer-hooks \
--without-libiconv-prefix \
--without-libintl-prefix \
--without-x \
./usr/include/gstreamer-$(GST_VERSION)/* \
$(1)/usr/include/gstreamer-$(GST_VERSION)/ \
)
- $(INSTALL_DIR) $(1)/usr/lib/gstreamer-$(GST_VERSION)/include/gst
- ( cd $(PKG_INSTALL_DIR); $(CP) \
- ./usr/lib/gstreamer-$(GST_VERSION)/include/gst/*.h \
- $(1)/usr/lib/gstreamer-$(GST_VERSION)/include/gst \
- )
$(INSTALL_DIR) $(1)/usr/lib
( cd $(PKG_INSTALL_DIR); $(CP) \
./usr/lib/libgst*-$(GST_VERSION).{a,la,so*} \
--- a/configure.ac
+++ b/configure.ac
-@@ -998,7 +998,6 @@ libs/gst/net/Makefile
+@@ -1047,7 +1047,6 @@ libs/gst/net/Makefile
plugins/Makefile
plugins/elements/Makefile
plugins/tracers/Makefile
--- a/configure.ac
+++ b/configure.ac
-@@ -998,21 +998,6 @@ libs/gst/net/Makefile
+@@ -1047,21 +1047,6 @@ libs/gst/net/Makefile
plugins/Makefile
plugins/elements/Makefile
plugins/tracers/Makefile
--- a/configure.ac
+++ b/configure.ac
-@@ -1001,18 +1001,6 @@ plugins/tracers/Makefile
+@@ -1050,18 +1050,6 @@ plugins/tracers/Makefile
tools/Makefile
common/Makefile
common/m4/Makefile
--- /dev/null
+--- a/configure.ac
++++ b/configure.ac
+@@ -826,20 +826,6 @@ if test "x$BUILD_EXAMPLES" = "xyes"; the
+ fi
+ AM_CONDITIONAL(HAVE_GTK, test "x$HAVE_GTK" = "xyes")
+
+-dnl libunwind is optionally used by the leaks tracer
+-PKG_CHECK_MODULES(UNWIND, libunwind, HAVE_UNWIND=yes, HAVE_UNWIND=no)
+-
+-dnl Check for backtrace() from libc
+-AC_CHECK_FUNC(backtrace, [
+- AC_CHECK_HEADERS([execinfo.h], [
+- AC_DEFINE(HAVE_BACKTRACE,1,[Have backtrace])
+- ], [], [])
+-])
+-
+-if test "x$HAVE_UNWIND" = "xyes"; then
+- AC_DEFINE(HAVE_UNWIND, 1, [libunwind available])
+-fi
+-
+ dnl building of unit test libraries
+ AC_ARG_ENABLE(check,
+ AS_HELP_STRING([--disable-check],[disable building unit test libraries]),
include $(TOPDIR)/rules.mk
PKG_NAME:=minidlna
-PKG_VERSION:=1.2.0
-PKG_RELEASE:=1
+PKG_VERSION:=1.2.1
+PKG_RELEASE:=2
PKG_SOURCE_URL:=@SF/minidlna
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=8d34436580c4c44be25976d5e46bc5b71af69bf441c4492774eac001164c4433
+PKG_HASH:=67388ba23ab0c7033557a32084804f796aa2a796db7bb2b770fb76ac2a742eec
PKG_LICENSE:=GPL-2.0 BSD-3-Clause
PKG_LICENSE_FILES:=COPYING LICENCE.miniupnpd
option log_dir '/var/log'
option inotify '1'
option enable_tivo '0'
+ option wide_links '0'
option strict_dlna '0'
option presentation_url ''
option notify_interval '900'
minidlna_cfg_addstr $cfg log_dir
minidlna_cfg_addbool $cfg inotify '1'
minidlna_cfg_addbool $cfg enable_tivo '0'
+ minidlna_cfg_addbool $cfg wide_links '0'
minidlna_cfg_addbool $cfg strict_dlna '0'
minidlna_cfg_addstr $cfg album_art_names
minidlna_cfg_addstr $cfg presentation_url
PKG_NAME:=mjpg-streamer
PKG_REV:=182
PKG_VERSION:=r$(PKG_REV)
-PKG_RELEASE:=8
+PKG_RELEASE:=9
PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>, \
Ted Hess <thess@kitschensync.net>
procd_open_instance
procd_set_param command "$PROG" --input "$input_arg" --output "$output_arg"
+ [ "x$output" = 'xhttp' ] && procd_add_mdns "http" "tcp" "$port" "daemon=mjpg-streamer"
procd_close_instance
}
include $(TOPDIR)/rules.mk
PKG_NAME:=adblock
-PKG_VERSION:=3.0.2
+PKG_VERSION:=3.1.1
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
A lot of people already use adblocker plugins within their desktop browsers, but what if you are using your (smart) phone, tablet, watch or any other wlan gadget...getting rid of annoying ads, trackers and other abuse sites (like facebook ;-) is simple: block them with your router. When the dns server on your router receives dns requests, you will sort out queries that ask for the resource records of ad servers and return a simple 'NXDOMAIN'. This is nothing but **N**on-e**X**istent Internet or Intranet domain name, if domain name is unable to resolved using the dns server, a condition called the 'NXDOMAIN' occurred.
## Main Features
-* support of the following domain block list sources (free for private usage, for commercial use please check their individual licenses):
+* support of the following domain blocklist sources (free for private usage, for commercial use please check their individual licenses):
* [adaway](https://adaway.org)
* => infrequent updates, approx. 400 entries (enabled by default)
* [adguard](https://adguard.com)
* => numerous updates on the same day, approx. 12.000 entries
+ * [bitcoin](https://github.com/hoshsadiq/adblock-nocoin-list)
+ * => infrequent updates, approx. 15 entries
* [blacklist]()
* => static local blacklist, located by default in '/etc/adblock/adblock.blacklist'
* [disconnect](https://disconnect.me)
* => daily updates, approx. 150 entries
* [reg_cn](https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt)
* => regional blocklist for China, daily updates, approx. 1.600 entries
+ * [reg_de](https://easylist-downloads.adblockplus.org/easylistgermany+easylist.txt)
+ * => regional blocklist for Germany, daily updates, approx. 9.200 entries
* [reg_id](https://easylist-downloads.adblockplus.org/abpindo+easylist.txt)
* => regional blocklist for Indonesia, daily updates, approx. 800 entries
* [reg_nl](https://easylist-downloads.adblockplus.org/easylistdutch+easylist.txt)
* => daily updates, approx. 440 entries
* zero-conf like automatic installation & setup, usually no manual changes needed
* simple but yet powerful adblock engine: adblock does not use error prone external iptables rulesets, http pixel server instances and things like that
-* supports five different dns backends / block list formats: dnsmasq, unbound, named (bind), kresd and dnscrypt-proxy
+* supports five different dns backends / blocklist formats: dnsmasq, unbound, named (bind), kresd and dnscrypt-proxy
* automatically selects uclient-fetch or wget as download utility (other tools like curl or aria2c are supported as well)
-* provides 'http only' mode without installed ssl library for all non-SSL block list sources
+* provides 'http only' mode without installed ssl library for all non-SSL blocklist sources
* supports a wide range of router modes, even AP modes are supported
* full IPv4 and IPv6 support
-* provides top level domain compression ('tld compression'), this feature removes thousands of needless host entries from the block list 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 central block list (adb_list.overall)
+* provides top level domain compression ('tld compression'), this feature removes thousands of needless host entries from the blocklist and lowers the memory footprint for the dns backends
+* blocklist source parsing by fast & flexible regex rulesets
+* overall duplicate removal in central blocklist 'adb_list.overall'
* additional whitelist for manual overrides, located by default in /etc/adblock/adblock.whitelist
-* quality checks during block list update to ensure a reliable dns backend service
+* quality checks during blocklist update to ensure a reliable dns backend service
* minimal status & error logging to syslog, enable debug logging to receive more output
* procd based init system support (start/stop/restart/reload/suspend/resume/query/status)
* procd network interface trigger support or classic time based startup
-* suspend & resume adblock actions temporarily without block list reloading
+* conditional dns backend restarts by old/new blocklist comparison with sha256sum (default) or md5sum
+* suspend & resume adblock actions temporarily without blocklist reloading
* output comprehensive runtime information via LuCI or via 'status' init command
* query function to quickly identify blocked (sub-)domains, e.g. for whitelisting
* strong LuCI support
* optional: force dns requests to local resolver
* optional: force overall sort / duplicate removal for low memory devices (handle with care!)
-* optional: 'manual mode' to re-use blocklist backups during startup, get fresh lists only via manual reload or restart action
-* optional: automatic block list backup & restore, they will be used in case of download errors or during startup in manual mode
+* optional: automatic blocklist backup & restore, they will be used in case of download errors or during startup in backup mode
+* optional: 'backup mode' to re-use blocklist backups during startup, get fresh lists only via reload or restart action
+* optional: 'whitelist mode' to block access to all domains except those explicitly listed in the whitelist file
* optional: add new adblock sources on your own via uci config
## Prerequisites
* control the adblock service manually with _/etc/init.d/adblock_ start/stop/restart/reload/suspend/resume/status or use the LuCI frontend
## LuCI adblock companion package
-* for easy management of the various block list sources and all other adblock options you should use the provided LuCI frontend
+* for easy management of the various blocklist sources and all other adblock options you should use the provided LuCI frontend
* install 'luci-app-adblock' (_opkg install luci-app-adblock_)
* the application is located in LuCI under 'Services' menu
## Tweaks
* **runtime information:** the adblock status is available via _/etc/init.d/adblock status_ (see example below)
* **debug logging:** for script debugging please set the config option 'adb\_debug' to '1' and check the runtime output with _logread -e "adblock"_
-* **storage expansion:** to process and store all block list sources at once it might helpful to enlarge your temp directory with a swap partition => see [openwrt wiki](https://wiki.openwrt.org/doc/uci/fstab) for further details
+* **storage expansion:** to process and store all blocklist sources at once it might helpful to enlarge your temp directory with a swap partition => see [openwrt wiki](https://wiki.openwrt.org/doc/uci/fstab) for further details
* **add white- / blacklist entries:** add domain white- or blacklist entries to always-allow or -deny certain (sub) domains, by default both lists are empty and located in _/etc/adblock_. Please add one domain per line - ip addresses, wildcards & regex are _not_ allowed (see example below)
-* **backup & restore block lists:** enable this feature, to restore automatically the latest compressed backup of your block lists in case of any processing error (e.g. a single block list source is not available during update). Please use an (external) solid partition and _not_ your volatile router temp directory for this
+* **backup & restore blocklists:** enable this feature, to restore automatically the latest compressed backup of your blocklists in case of any processing error (e.g. a single blocklist source is not available during update). Please use an (external) solid partition and _not_ your volatile router temp directory for this
* **scheduled list updates:** for a scheduled call of the adblock service add an appropriate crontab entry (see example below)
* **change startup behaviour:** by default the startup will be triggered by the 'wan' procd interface trigger. Choose 'none' to disable automatic startups, 'timed' to use a classic timeout (default 30 sec.) or select another trigger interface.
* **suspend & resume adblocking:** to quickly switch the adblock service 'on' or 'off', simply use _/etc/init.d/adblock [suspend|resume]_
-* **domain query:** to query the active block list for a specific domain, please run _/etc/init.d/adblock query `<DOMAIN>`_ (see example below)
-* **add new list sources:** you could add new block list sources on your own via uci config, all you need is a source url and an awk one-liner (see example below)
+* **domain query:** to query the active blocklist for a specific domain, please run _/etc/init.d/adblock query `<DOMAIN>`_ (see example below)
+* **add new list sources:** you could add new blocklist sources on your own via uci config, all you need is a source url and an awk one-liner (see example below)
* **disable active dns probing in windows 10:** to prevent a yellow exclamation mark on your internet connection icon (which wrongly means connected, but no internet), please change the following registry key/value from "1" to "0" _HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\EnableActiveProbing_
## Further adblock config options
* adb\_fetchparm => options for the download utility, see example below (default: not set, use wget default options)
* adb\_forcedns => force dns requests to local resolver (default: '0', disabled)
* adb\_forcesrt => force overall sort on low memory devices with less than 64 MB RAM (default: '0', disabled)
- * adb\_manmode => do not automatically update block lists during startup, use backups instead (default: '0', disabled)
+ * adb\_backup_mode => do not automatically update blocklists during startup, use backups instead (default: '0', disabled)
+ * adb\_whitelist_mode => block access to all domains except those explicitly listed in the whitelist file (default: '0', disabled)
## Examples
**change default dns backend to 'unbound':**
-Adblock deposits the sorted and filtered block list (adb_list.overall) in '/var/lib/unbound' where unbound can find them in its jail.
-If you use manual configuration for unbound, then just include the following line in your 'server' clause:
+Adblock deposits the final blocklist 'adb_list.overall' in '/var/lib/unbound' where unbound can find them in its jail. If you use manual configuration for unbound, then just include the following line in your 'server' clause:
<pre><code>
include: "/var/lib/unbound/adb_list.overall"
</code></pre>
**change default dns backend to 'named' (bind):**
-Adblock deposits the sorted and filtered block list (adb_list.overall) in '/var/lib/bind' where bind can find them.
-To use the block list please modify the following bind configuration files:
+Adblock deposits the final blocklist 'adb_list.overall' in '/var/lib/bind'. To use the blocklist please modify '/etc/bind/named.conf':
<pre><code>
-change '/etc/bind/named.conf', in the 'options' namespace add:
+in the 'options' namespace add:
response-policy { zone "rpz"; };
and at the end of the file add:
zone "rpz" {
type master;
- file "/etc/bind/db.rpz";
+ file "/var/lib/bind/adb_list.overall";
allow-query { none; };
allow-transfer { none; };
};
-
-create the new file '/etc/bind/db.rpz' and add:
- $TTL 2h
- $ORIGIN rpz.
- @ SOA localhost. root.localhost. (1 6h 1h 1w 2h)
- NS localhost.
-
- $INCLUDE /var/lib/bind/adb_list.overall
</code></pre>
**change default dns backend to 'kresd':**
-The knot-resolver (kresd) is only available on turris omnia devices. Currently there's no package for kresd in the official LEDE / OpenWrt package repository.
-Adblock deposits the sorted and filtered block list (adb_list.overall) in '/etc/kresd' where kresd can find them.
-To use the block list please create/modify the following kresd configuration files:
+The knot-resolver (kresd) is only available on turris omnia devices. Adblock deposits the final blocklist 'adb_list.overall' in '/etc/kresd'. To use the blocklist please modify '/etc/config/resolver':
<pre><code>
-TurrisOS > 3.6:
- edit '/etc/config/resolver' and change / uncomment the following options:
- forward_upstream '0'
list rpz_file '/etc/kresd/adb_list.overall'
-
-TurrisOS < 3.6:
- edit '/etc/config/resolver' and change / uncomment the following options:
- forward_upstream '0'
- option include_config '/etc/kresd/custom.conf'
-
- create '/etc/kresd/custom.conf' and add:
- policy.add(policy.rpz(policy.DENY, '/etc/kresd/adb_list.overall'))
- policy.add(policy.all(policy.FORWARD({'8.8.8.8', '8.8.4.4'})))
</code></pre>
**change default dns backend to 'dnscrypt-proxy':**
-Adblock deposits the sorted and filtered block list (adb_list.overall) by default in '/tmp' where DNSCrypt-Proxy can find them.
-The blacklist option is not supported by default, because DNSCrypt-Proxy is compiled without plugins support.
-Take a custom LEDE build with plugins support to use this feature:
+The required 'blacklist' option of dnscrypt-proxy is not enabled by default, because the package will be compiled without plugins support. Take a custom LEDE build with plugins support to use this feature. Adblock deposits the final blocklist 'adb_list.overall' in '/tmp'. To use the blocklist please modify '/etc/config/dnscrypt-proxy' per instance:
<pre><code>
-edit '/etc/config/dnscrypt-proxy' and add the following option per dnscrypt-proxy instance:
list blacklist 'domains:/tmp/adb_list.overall'
</code></pre>
/etc/init.d/adblock status
::: adblock runtime information
+ adblock_status : enabled
- + adblock_version : 3.0.0
- + blocked_domains : 37406
+ + adblock_version : 3.1.0
+ + overall_domains : 5117
+ fetch_utility : wget (built-in)
+ dns_backend : kresd (/etc/kresd)
- + last_rundate : 08.09.2017 21:21:21
- + system_release : OpenWrt omnia 15.05
+ + last_rundate : 03.11.2017 22:57:41
+ + system_release : Turris Omnia, OpenWrt omnia 15.05/3.8.4
</code></pre>
**cronjob for a regular block list update (/etc/crontabs/root):**
<pre><code>
here.com
-This entry removes the following (sub)domains from the block list:
+This entry removes the following (sub)domains from the blocklist:
maps.here.com
here.com
www.adwhere.com
</code></pre>
-**query active block list for a certain (sub-)domain, e.g. for whitelisting:**
+**query the active blocklist for a certain (sub-)domain, e.g. for whitelisting:**
+
+The query function checks against the submitted (sub-)domain and recurses automatically to the upper top level domain. For every (sub-)domain it returns the first ten relevant results.
<pre><code>
-/etc/init.d/adblock query example.www.doubleclick.net
-root@turris:~# /etc/init.d/adblock query example.www.doubleclick.net
-::: max. ten results for domain 'example.www.doubleclick.net'
+/etc/init.d/adblock query www.example.google.com
+::: max. ten results for domain 'www.example.google.com'
- no match
-::: max. ten results for domain 'www.doubleclick.net'
+::: max. ten results for domain 'example.google.com'
- no match
-::: max. ten results for domain 'doubleclick.net'
- + doubleclick.net
-
-The query function checks against the submitted (sub-)domain and recurses automatically to the upper top level domain.
-For every (sub-)domain it returns the first ten relevant results.
-In the example above whitelist "doubleclick.net" to free the submitted domain.
+::: max. ten results for domain 'google.com'
+ + analytics.google.com
+ + googleadapis.l.google.com
+ + pagead.l.google.com
+ + partnerad.l.google.com
+ + ssl-google-analytics.l.google.com
+ + video-stats.video.google.com
+ + www-google-analytics.l.google.com
</code></pre>
-**add a new block list source:**
-<pre><code>
-1. the easy way ...
-example: https://easylist-downloads.adblockplus.org/rolist+easylist.txt
-adblock already supports an easylist source, called 'ruadlist'. To add the additional local easylist
-as a new source, copy the existing config source 'ruadlist' section and change only
-the source name, the url and the description - that's all!
+**add a new blocklist source:**
-config source 'rolist'
+1. the easy way ...
+example: https://easylist-downloads.adblockplus.org/rolist+easylist.txt
+Adblock already supports an easylist source, called 'reg_ru'. To add the additional local easylist as a new source, copy the existing config source section and change only
+the source name, the url and the description - that's all!
+<pre><code>
+config source 'reg_ro'
option enabled '0'
option adb_src 'https://easylist-downloads.adblockplus.org/rolist+easylist.txt'
- option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
- option adb_src_desc 'focus on romanian ad related domains plus generic easylist additions, weekly updates, approx. 600 entries'
+ option adb_src_rset 'BEGIN{FS=\"[|^]\"}\$0~/^\|\|([[:alnum:]_-]+\.){1,}[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+ option adb_src_desc 'focus on romanian ads plus generic easylist additions, weekly updates, approx. 9.400 entries'
+</code></pre>
-2. a bit harder ...
-to add a really new source with different domain/host format you have to write a suitable
-awk one-liner on your own, so basic awk skills are needed. As a starting point check the already
-existing awk strings (adb_src_rset) in adblock config, maybe you need only small changes for your individual list.
-Download the desired list and test your new awk string locally with:
- cat new.list | awk 'fs__individual search__search core__result'
- 'fs' => field separator (optional)
- 'individual search' => individual search part to filter out needless list information
- 'search core' => always '([A-Za-z0-9_-]+\.){1,}[A-Za-z]+', this is part of all list sources and should be unchanged
- 'result' => always '{print tolower(\$n)}', only the output column 'n' may vary
-the output result should be a sequential list with one domain/host per line - nothing more.
+2. a bit harder ...
+To add a really new source with different domain/host format you have to write a suitable awk one-liner on your own, so basic awk skills are needed. As a starting point check the already existing awk rulesets 'adb_src_rset' in the config file, probably you need only small changes for your individual list. Download the desired list and test your new awk string locally. The output result should be a sequential list with one domain/host per line - nothing more. If your awk one-liner works quite well, add a new source section to the adblock config file and test the new source.
-If your awk one-liner works quite well, add a new source section in adblock config and test your new source
-</code></pre>
-
## Support
Please join the adblock discussion in this [forum thread](https://forum.lede-project.org/t/adblock-2-x-support-thread/507) or contact me by mail <dev@brenken.org>
config adblock 'global'
option adb_enabled '0'
+ option adb_dns 'dnsmasq'
+ option adb_trigger 'wan'
+
+config adblock 'extra'
option adb_debug '0'
option adb_forcesrt '0'
option adb_forcedns '0'
- option adb_dns 'dnsmasq'
- option adb_trigger 'wan'
- option adb_whitelist '/etc/adblock/adblock.whitelist'
- option adb_whitelist_rset '\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\"^\"\$1\"\\\|[.]\"\$1)}'
option adb_backup '0'
- option adb_backupdir '/mnt'
- option adb_rtfile '/tmp/adb_runtime.json'
config source 'adaway'
option enabled '1'
option adb_src 'https://adaway.org/hosts.txt'
- option adb_src_rset '\$0 ~/^127\.0\.0\.1[ \t]+([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$2)}'
+ option adb_src_rset '\$0~/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
option adb_src_desc 'focus on mobile ads, infrequent updates, approx. 400 entries'
config source 'adguard'
option enabled '0'
- option adb_src 'https://raw.githubusercontent.com/AdguardTeam/AdguardDNS/master/Filters/filter.txt'
- option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
- option adb_src_desc 'combined adguard dns filter list, approx. 12.000 entries'
+ option adb_src 'https://filters.adtidy.org/windows/filters/15.txt'
+ option adb_src_rset 'BEGIN{FS=\"[/|^|\r]\"}\$0~/^\|\|([[:alnum:]_-]+\.){1,}[[:alpha:]]+([\/\^\r]|$)/{print tolower(\$3)}'
+ option adb_src_desc 'combined adguard dns filter list, frequent updates, approx. 15.700 entries'
+
+config source 'bitcoin'
+ option enabled '0'
+ option adb_src 'https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt'
+ option adb_src_rset '\$0~/^0\.0\.0\.0[[:space:]]+([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+ option adb_src_desc 'focus on malicious bitcoin mining sites, infrequent updates, approx. 20 entries'
config source 'blacklist'
option enabled '0'
option adb_src '/etc/adblock/adblock.blacklist'
- option adb_src_rset '\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$1)}'
- option adb_src_desc 'static local domain blacklist (always deny these domains)'
+ option adb_src_rset '\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+ option adb_src_desc 'static local domain blacklist, always deny these domains'
config source 'disconnect'
option enabled '1'
option adb_src 'https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt'
- option adb_src_rset '\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$1)}'
- option adb_src_desc 'mozilla driven blocklist, numerous updates on the same day, approx. 6.500 entries'
+ option adb_src_rset '\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+ option adb_src_desc 'mozilla driven blocklist, numerous updates on the same day, approx. 4.600 entries'
config source 'dshield'
option enabled '0'
option adb_src 'https://www.dshield.org/feeds/suspiciousdomains_Low.txt'
- option adb_src_rset '\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$1)}'
- option adb_src_desc 'generic blocklist, daily updates, approx. 4.500 entries'
+ option adb_src_rset '\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+ option adb_src_desc 'generic blocklist, daily updates, approx. 3.500 entries'
config source 'feodo'
option enabled '0'
option adb_src 'https://feodotracker.abuse.ch/blocklist/?download=domainblocklist'
- option adb_src_rset '\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$1)}'
+ option adb_src_rset '\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
option adb_src_desc 'focus on feodo botnet, daily updates, approx. 0-10 entries'
config source 'hphosts'
option enabled '0'
option adb_src 'https://hosts-file.net/ad_servers.txt'
- option adb_src_rset '\$0 ~/^127\.0\.0\.1[ \t]+([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$2)}'
- option adb_src_desc 'broad blocklist, monthly updates, approx. 50.000 entries'
+ option adb_src_rset '\$0~/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+ option adb_src_desc 'broad blocklist, monthly updates, approx. 19.200 entries'
config source 'malware'
option enabled '0'
option adb_src 'https://mirror.cedia.org.ec/malwaredomains/justdomains'
- option adb_src_rset '\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$1)}'
- option adb_src_desc 'broad blocklist, daily updates, approx. 16.000 entries'
+ option adb_src_rset '\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+ option adb_src_desc 'broad blocklist, daily updates, approx. 18.300 entries'
config source 'malwarelist'
option enabled '0'
option adb_src 'http://www.malwaredomainlist.com/hostslist/hosts.txt'
- option adb_src_rset '\$0 ~/^127\.0\.0\.1[ \t]+([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$2)}'
- option adb_src_desc 'focus on malware, daily updates, approx. 1.500 entries'
+ option adb_src_rset '\$0~/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+ option adb_src_desc 'focus on malware, daily updates, approx. 1.200 entries'
config source 'openphish'
option enabled '0'
option adb_src 'https://openphish.com/feed.txt'
- option adb_src_rset '{FS=\"/\"} \$3 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$3)}'
- option adb_src_desc 'focus on phishing, numerous updates on the same day, approx. 1.800 entries'
+ option adb_src_rset 'BEGIN{FS=\"/\"}\$0~/^http[s]?:\/\/([[:alnum:]_-]+\.){1,}[[:alpha:]]+(\/|$)/{print tolower(\$3)}'
+ option adb_src_desc 'focus on phishing, numerous updates on the same day, approx. 2.400 entries'
config source 'ransomware'
option enabled '0'
option adb_src 'https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt'
- option adb_src_rset '\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$1)}'
- option adb_src_desc 'focus on ransomware, numerous updates on the same day, approx. 130 entries'
+ option adb_src_rset '\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|\r|$)/{print tolower(\$1)}'
+ option adb_src_desc 'focus on ransomware, numerous updates on the same day, approx. 1900 entries'
config source 'reg_cn'
option enabled '0'
option adb_src 'https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt'
- option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
- option adb_src_desc 'focus on chinese ads, daily updates, approx. 1.600 entries'
+ option adb_src_rset 'BEGIN{FS=\"[|^]\"}\$0~/^\|\|([[:alnum:]_-]+\.){1,}[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+ option adb_src_desc 'focus on chinese ads plus generic easylist additions, daily updates, approx. 11.700 entries'
+
+config source 'reg_de'
+ option enabled '0'
+ option adb_src 'https://easylist-downloads.adblockplus.org/easylistgermany+easylist.txt'
+ option adb_src_rset 'BEGIN{FS=\"[|^]\"}\$0~/^\|\|([[:alnum:]_-]+\.){1,}[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+ option adb_src_desc 'focus on german ads plus generic easylist additions, daily updates, approx. 9.200 entries'
config source 'reg_id'
option enabled '0'
option adb_src 'https://easylist-downloads.adblockplus.org/abpindo+easylist.txt'
- option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
- option adb_src_desc 'focus on indonesian ads plus generic easylist additions, weekly updates, approx. 800 entries'
+ option adb_src_rset 'BEGIN{FS=\"[|^]\"}\$0~/^\|\|([[:alnum:]_-]+\.){1,}[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+ option adb_src_desc 'focus on indonesian ads plus generic easylist additions, weekly updates, approx. 9.600 entries'
config source 'reg_nl'
option enabled '0'
option adb_src 'https://easylist-downloads.adblockplus.org/easylistdutch+easylist.txt'
- option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
- option adb_src_desc 'focus on dutch ads plus generic easylist additions, weekly updates, approx. 1300 entries'
+ option adb_src_rset 'BEGIN{FS=\"[|^]\"}\$0~/^\|\|([[:alnum:]_-]+\.){1,}[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+ option adb_src_desc 'focus on dutch ads plus generic easylist additions, weekly updates, approx. 9.400 entries'
config source 'reg_pl'
option enabled '0'
option adb_src 'http://adblocklist.org/adblock-pxf-polish.txt'
- option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
- option adb_src_desc 'focus on polish ads, daily updates, approx. 50 entries'
+ option adb_src_rset 'BEGIN{FS=\"[|^]\"}\$0~/^\|\|([[:alnum:]_-]+\.){1,}[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+ option adb_src_desc 'focus on polish ads, daily updates, approx. 90 entries'
config source 'reg_ro'
option enabled '0'
option adb_src 'https://easylist-downloads.adblockplus.org/rolist+easylist.txt'
- option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
- option adb_src_desc 'focus on romanian ads plus generic easylist additions, weekly updates, approx. 600 entries'
+ option adb_src_rset 'BEGIN{FS=\"[|^]\"}\$0~/^\|\|([[:alnum:]_-]+\.){1,}[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+ option adb_src_desc 'focus on romanian ads plus generic easylist additions, weekly updates, approx. 9.400 entries'
config source 'reg_ru'
option enabled '0'
option adb_src 'https://easylist-downloads.adblockplus.org/ruadlist+easylist.txt'
- option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
- option adb_src_desc 'focus on russian ads plus generic easylist additions, weekly updates, approx. 2.000 entries'
+ option adb_src_rset 'BEGIN{FS=\"[|^]\"}\$0~/^\|\|([[:alnum:]_-]+\.){1,}[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+ option adb_src_desc 'focus on russian ads plus generic easylist additions, weekly updates, approx. 14.500 entries'
config source 'securemecca'
option enabled '0'
option adb_src 'http://securemecca.com/Downloads/hosts.txt'
- option adb_src_rset '\$0 ~/^127\.0\.0\.1[ \t]+([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$2)}'
- option adb_src_desc 'broad blocklist, infrequent updates, approx. 25.000 entries'
+ option adb_src_rset '\$0~/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+ option adb_src_desc 'broad blocklist, infrequent updates, approx. 13.700 entries'
config source 'shalla'
option enabled '0'
option adb_src 'http://www.shallalist.de/Downloads/shallalist.tar.gz'
- option adb_src_rset '{FS=\"/\"} \$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$1)}'
- option adb_src_desc 'broad blocklist subdivided in different categories, daily updates, approx. 32.000 entries'
+ option adb_src_rset '\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+ option adb_src_desc 'broad blocklist subdivided in different categories, daily updates, approx. 31.700 entries'
list adb_src_cat 'adv'
list adb_src_cat 'costtraps'
list adb_src_cat 'spyware'
config source 'spam404'
option enabled '0'
option adb_src 'https://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt'
- option adb_src_rset '\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$1)}'
- option adb_src_desc 'generic blocklist, infrequent updates, approx. 5.000 entries'
+ option adb_src_rset '\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+ option adb_src_desc 'generic blocklist, infrequent updates, approx. 6.000 entries'
config source 'sysctl'
option enabled '0'
option adb_src 'http://sysctl.org/cameleon/hosts'
- option adb_src_rset '\$0 ~/^127\.0\.0\.1[ \t]+([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$2)}'
- option adb_src_desc 'broad blocklist, weekly updates, approx. 21.000 entries'
+ option adb_src_rset '\$0~/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+ option adb_src_desc 'broad blocklist, weekly updates, approx. 16.500 entries'
config source 'whocares'
option enabled '0'
option adb_src 'http://someonewhocares.org/hosts/hosts'
- option adb_src_rset '\$0 ~/^127\.0\.0\.1[ \t]+([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$2)}'
- option adb_src_desc 'broad blocklist, weekly updates, approx. 12.000 entries'
+ option adb_src_rset '\$0~/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+ option adb_src_desc 'broad blocklist, weekly updates, approx. 10.000 entries'
config source 'winspy'
option enabled '0'
option adb_src 'https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/win10/spy.txt'
- option adb_src_rset '\$0 ~/^0\.0\.0\.0[ \t]+([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$2)}'
- option adb_src_desc 'focus on windows spy & telemetry, infrequent updates, approx. 140 entries'
+ option adb_src_rset '\$0~/^0\.0\.0\.0[[:space:]]+([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+ option adb_src_desc 'focus on windows spy & telemetry domains, infrequent updates, approx. 300 entries'
config source 'winhelp'
option enabled '0'
option adb_src 'http://winhelp2002.mvps.org/hosts.txt'
- option adb_src_rset '\$0 ~/^0\.0\.0\.0[ \t]+([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$2)}'
- option adb_src_desc 'broad blocklist, infrequent updates, approx. 15.000 entries'
+ option adb_src_rset '\$0~/^0\.0\.0\.0[[:space:]]+([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+ option adb_src_desc 'broad blocklist, infrequent updates, approx. 13.000 entries'
config source 'yoyo'
option enabled '1'
option adb_src 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=nohtml&showintro=0&mimetype=plaintext'
- option adb_src_rset '\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$1)}'
- option adb_src_desc 'focus on ad related domains, weekly updates, approx. 2.500 entries'
+ option adb_src_rset '\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+ option adb_src_desc 'focus on ad related domains, weekly updates, approx. 2.400 entries'
config source 'zeus'
option enabled '0'
option adb_src 'https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist'
- option adb_src_rset '\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\$1)}'
- option adb_src_desc 'focus on zeus botnet, daily updates, approx. 440 entries'
+ option adb_src_rset '\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+ option adb_src_desc 'focus on zeus botnet, daily updates, approx. 400 entries'
#
LC_ALL=C
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-adb_ver="3.0.2"
+adb_ver="3.1.1"
adb_sysver="unknown"
adb_enabled=0
adb_debug=0
-adb_manmode=0
+adb_backup_mode=0
+adb_whitelist_mode=0
adb_forcesrt=0
adb_forcedns=0
adb_triggerdelay=0
adb_dns="dnsmasq"
adb_dnsprefix="adb_list"
adb_dnsfile="${adb_dnsprefix}.overall"
+adb_whitelist="/etc/adblock/adblock.whitelist"
adb_rtfile="/tmp/adb_runtime.json"
+adb_hashsum="$(command -v sha256sum)"
adb_action="${1:-"start"}"
adb_cnt=0
adb_rc=0
f_log "error" "system libraries not found"
fi
- # parse global section by callback
+ # parse 'global' and 'extra' section by callback
#
config_cb()
{
fi
}
- # parse 'source' sections
+ # parse 'source' typed sections
#
parse_config()
{
#
case "${adb_dns}" in
dnsmasq)
- adb_dnsuser="${adb_dns}"
+ adb_dnsuser="${adb_dnsuser:-"dnsmasq"}"
adb_dnsdir="${adb_dnsdir:-"/tmp/dnsmasq.d"}"
adb_dnsformat="awk '{print \"local=/\"\$0\"/\"}'"
+ if [ ${adb_whitelist_mode} -eq 1 ]
+ then
+ adb_dnsformat="awk '{print \"local=/\"\$0\"/#\"}'"
+ adb_dnsblock="local=/#/"
+ fi
;;
unbound)
- adb_dnsuser="${adb_dns}"
+ adb_dnsuser="${adb_dnsuser:-"unbound"}"
adb_dnsdir="${adb_dnsdir:-"/var/lib/unbound"}"
adb_dnsformat="awk '{print \"local-zone: \042\"\$0\"\042 static\"}'"
+ if [ ${adb_whitelist_mode} -eq 1 ]
+ then
+ adb_dnsformat="awk '{print \"local-zone: \042\"\$0\"\042 transparent\"}'"
+ adb_dnsblock="local-zone: \".\" static"
+ fi
;;
named)
- adb_dnsuser="bind"
+ adb_dnsuser="${adb_dnsuser:-"bind"}"
adb_dnsdir="${adb_dnsdir:-"/var/lib/bind"}"
- adb_dnsformat="awk '{print \"\"\$0\" IN CNAME .\n*.\"\$0\" IN CNAME .\"}'"
+ adb_dnsheader="\$TTL 2h"$'\n'"@ IN SOA localhost. root.localhost. (1 6h 1h 1w 2h)"$'\n'" IN NS localhost."
+ adb_dnsformat="awk '{print \"\"\$0\" CNAME .\n*.\"\$0\" CNAME .\"}'"
+ if [ ${adb_whitelist_mode} -eq 1 ]
+ then
+ adb_dnsformat="awk '{print \"\"\$0\" CNAME rpz-passthru.\n*.\"\$0\" CNAME rpz-passthru.\"}'"
+ adb_dnsblock="* CNAME ."
+ fi
;;
kresd)
- adb_dnsuser="root"
+ adb_dnsuser="${adb_dnsuser:-"root"}"
adb_dnsdir="${adb_dnsdir:-"/etc/kresd"}"
+ adb_dnsheader="\$TTL 2h"$'\n'"@ IN SOA localhost. root.localhost. (1 6h 1h 1w 2h)"$'\n'" IN NS localhost."
adb_dnsformat="awk '{print \"\"\$0\" CNAME .\n*.\"\$0\" CNAME .\"}'"
- adb_dnsheader="\$TTL 2h"$'\n'"@ IN SOA localhost. root.localhost. (2 6h 1h 1w 2h)"$'\n'" IN NS localhost."
+ if [ ${adb_whitelist_mode} -eq 1 ]
+ then
+ adb_dnsformat="awk '{print \"\"\$0\" CNAME rpz-passthru.\n*.\"\$0\" CNAME rpz-passthru.\"}'"
+ adb_dnsblock="* CNAME ."
+ fi
;;
dnscrypt-proxy)
- adb_dnsuser="nobody"
+ adb_dnsuser="${adb_dnsuser:-"nobody"}"
adb_dnsdir="${adb_dnsdir:-"/tmp"}"
adb_dnsformat="awk '{print \$0}'"
;;
esac
+ # check adblock status
+ #
+ if [ ${adb_enabled} -eq 0 ]
+ then
+ if [ -s "${adb_dnsdir}/${adb_dnsfile}" ]
+ then
+ f_rmdns
+ f_dnsrestart
+ fi
+ f_extconf
+ f_jsnupdate
+ f_log "info " "adblock is currently disabled, please set adb_enabled to '1' to use this service"
+ exit 0
+ fi
+
if [ -d "${adb_dnsdir}" ] && [ ! -f "${adb_dnsdir}/${adb_dnsfile}" ]
then
> "${adb_dnsdir}/${adb_dnsfile}"
then
f_log "error" "'${adb_dns}' not running, DNS backend not found"
fi
-
- # force dns to local resolver
- #
- if [ ${adb_forcedns} -eq 1 ] && [ -z "$(uci -q get firewall.adblock_dns)" ]
- then
- uci -q set firewall.adblock_dns="redirect"
- uci -q set firewall.adblock_dns.name="Adblock DNS"
- uci -q set firewall.adblock_dns.src="lan"
- uci -q set firewall.adblock_dns.proto="tcp udp"
- uci -q set firewall.adblock_dns.src_dport="53"
- uci -q set firewall.adblock_dns.dest_port="53"
- uci -q set firewall.adblock_dns.target="DNAT"
- elif [ ${adb_forcedns} -eq 0 ] && [ -n "$(uci -q get firewall.adblock_dns)" ]
- then
- uci -q delete firewall.adblock_dns
- fi
- if [ -n "$(uci -q changes firewall)" ]
- then
- uci -q commit firewall
- if [ $(/etc/init.d/firewall enabled; printf "%u" ${?}) -eq 0 ]
- then
- /etc/init.d/firewall reload >/dev/null 2>&1
- fi
- fi
}
# f_envcheck: check/set environment prerequisites
{
local ssl_lib
- # check 'enabled' option
+ # check external uci config files
#
- if [ ${adb_enabled} -ne 1 ]
- then
- if [ -s "${adb_dnsdir}/${adb_dnsfile}" ]
- then
- f_rmdns
- f_dnsrestart
- fi
- f_jsnupdate
- f_log "info " "adblock is currently disabled, please set adb_enabled to '1' to use this service"
- exit 0
- fi
+ f_extconf
# check fetch utility
#
fi
adb_fetchinfo="${adb_fetch##*/} (${ssl_lib})"
- # create adblock temp file/directory
+ # check hashsum utility
+ #
+ if [ ! -x "${adb_hashsum}" ]
+ then
+ adb_hashsum="$(command -v md5sum)"
+ fi
+
+ # initialize temp files and directories
#
adb_tmpload="$(mktemp -tu)"
adb_tmpfile="$(mktemp -tu)"
adb_tmpdir="$(mktemp -p /tmp -d)"
+ > "${adb_tmpdir}/tmp.whitelist"
+}
- # prepare whitelist entries
+# f_extconf: set external config options
+#
+f_extconf()
+{
+ # kresd related options
#
- if [ -s "${adb_whitelist}" ] && [ -n "${adb_whitelist_rset}" ]
+ if [ "${adb_dns}" = "kresd" ]
then
- awk "${adb_whitelist_rset}" "${adb_whitelist}" > "${adb_tmpdir}/tmp.whitelist"
+ if [ ${adb_enabled} -eq 1 ] && [ -z "$(uci -q get resolver.kresd.rpz_file | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")" ]
+ then
+ uci -q add_list resolver.kresd.rpz_file="${adb_dnsdir}/${adb_dnsfile}"
+ elif [ ${adb_enabled} -eq 0 ] && [ -n "$(uci -q get resolver.kresd.rpz_file | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")" ]
+ then
+ uci -q del_list resolver.kresd.rpz_file="${adb_dnsdir}/${adb_dnsfile}"
+ fi
+ if [ -n "$(uci -q changes resolver)" ]
+ then
+ uci -q commit resolver
+ fi
+ fi
+
+ # firewall related options
+ #
+ if [ ${adb_enabled} -eq 1 ] && [ ${adb_forcedns} -eq 1 ] && [ -z "$(uci -q get firewall.adblock_dns)" ]
+ then
+ uci -q set firewall.adblock_dns="redirect"
+ uci -q set firewall.adblock_dns.name="Adblock DNS"
+ uci -q set firewall.adblock_dns.src="lan"
+ uci -q set firewall.adblock_dns.proto="tcp udp"
+ uci -q set firewall.adblock_dns.src_dport="53"
+ uci -q set firewall.adblock_dns.dest_port="53"
+ uci -q set firewall.adblock_dns.target="DNAT"
+ elif [ -n "$(uci -q get firewall.adblock_dns)" ] && ([ ${adb_enabled} -eq 0 ] || [ ${adb_forcedns} -eq 0 ])
+ then
+ uci -q delete firewall.adblock_dns
+ fi
+ if [ -n "$(uci -q changes firewall)" ]
+ then
+ uci -q commit firewall
+ if [ $(/etc/init.d/firewall enabled; printf "%u" ${?}) -eq 0 ]
+ then
+ /etc/init.d/firewall reload >/dev/null 2>&1
+ fi
fi
}
return 1
}
-# f_list: backup/restore/remove block lists
+# f_list: backup/restore/remove blocklists
#
f_list()
{
then
cat "${source}" > "${target}"
> "${source}"
+ chown "${adb_dnsuser}" "${target}" 2>/dev/null
f_dnsrestart
f_jsnupdate
f_log "info " "adblock processing ${status}"
fi
}
-# f_query: query block list for certain (sub-)domains
+# f_query: query blocklist for certain (sub-)domains
#
f_query()
{
if [ ! -s "${adb_dnsdir}/${adb_dnsfile}" ]
then
- printf "%s\n" "::: no active block list found, please start / resume adblock first"
+ printf "%s\n" "::: no active blocklist found, please start / resume adblock first"
elif [ -z "${domain}" ] || [ "${domain}" = "${tld}" ]
then
printf "%s\n" "::: invalid domain input, please submit a single domain, e.g. 'doubleclick.net'"
then
result="$(awk -F '/|\"' "/[\/\"\.]${search}/{i++;{printf(\" + %s\n\",\$2)};if(i>9){exit}}" "${adb_dnsfile}")"
else
- result="$(awk "/(^[^\*][a-z]*[\.]+${search}|^${search})/{i++;{printf(\" + %s\n\",\$1)};if(i>9){exit}}" "${adb_dnsfile}")"
+ result="$(awk "/(^[^\*][[:alpha:]]*[\.]+${search}|^${search})/{i++;{printf(\" + %s\n\",\$1)};if(i>9){exit}}" "${adb_dnsfile}")"
fi
printf "%s\n" "::: max. ten results for domain '${domain}'"
printf "%s\n" "${result:-" - no match"}"
if [ ${adb_rc} -gt 0 ]
then
status="error"
- elif [ ${adb_enabled} -ne 1 ]
+ elif [ ${adb_enabled} -eq 0 ]
then
status="disabled"
elif [ -s "${adb_dnsdir}/.${adb_dnsfile}" ]
then
adb_cnt="$(( ( $(wc -l < "${adb_dnsdir}/${adb_dnsfile}") - $(printf "%s" "${adb_dnsheader}" | grep -c "^") ) / 2 ))"
else
- adb_cnt="$(( $(wc -l < "${adb_dnsdir}/${adb_dnsfile}") - $(printf "%s" "${adb_dnsheader}" | grep -c "^") ))"
+ adb_cnt="$(wc -l < "${adb_dnsdir}/${adb_dnsfile}")"
fi
fi
fi
json_add_object "data"
json_add_string "adblock_status" "${status}"
json_add_string "adblock_version" "${adb_ver}"
- json_add_string "blocked_domains" "${adb_cnt}"
+ json_add_string "overall_domains" "${adb_cnt}"
json_add_string "fetch_utility" "${adb_fetchinfo}"
json_add_string "dns_backend" "${adb_dns} (${adb_dnsdir})"
json_add_string "last_rundate" "${rundate}"
fi
}
-# main function for block list processing
+# main function for blocklist processing
#
f_main()
{
local mem_total="$(awk '/^MemTotal/ {print int($2/1000)}' "/proc/meminfo")"
f_log "info " "start adblock processing ..."
- f_log "debug" "action: ${adb_action}, manual_mode:${adb_manmode}, backup: ${adb_backup}, dns: ${adb_dns}, fetch: ${adb_fetchinfo}, mem_total: ${mem_total}, force_srt/_dns: ${adb_forcesrt}/${adb_forcedns}"
+ f_log "debug" "action: ${adb_action}, dns: ${adb_dns}, fetch: ${adb_fetchinfo}, hashsum: ${adb_hashsum}, backup: ${adb_backup}, backup_mode: ${adb_backup_mode}, whitelist_mode: ${adb_whitelist_mode}, force_srt/_dns: ${adb_forcesrt}/${adb_forcedns}, mem_total: ${mem_total}"
> "${adb_rtfile}"
+ > "${adb_dnsdir}/.${adb_dnsfile}"
+
+ # prepare whitelist entries
+ #
+ if [ -s "${adb_whitelist}" ]
+ then
+ if [ ${adb_whitelist_mode} -eq 1 ] && [ "${adb_dns}" != "dnscrypt-proxy" ]
+ then
+ adb_whitelist_rset="\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}"
+ else
+ adb_whitelist_rset="\$0~/^([[:alnum:]_-]+\.){1,}[[:alpha:]]+([[:space:]]|$)/{gsub(\"\\\.\",\"\\\.\",\$1);print tolower(\"^\"\$1\"\\\|\\\.\"\$1)}"
+ fi
+ awk "${adb_whitelist_rset}" "${adb_whitelist}" > "${adb_tmpdir}/tmp.whitelist"
+ fi
+
+ # whitelist mode
+ #
+ if [ ${adb_whitelist_mode} -eq 1 ] && [ "${adb_dns}" != "dnscrypt-proxy" ]
+ then
+ f_tldcompression "${adb_tmpdir}/tmp.whitelist"
+ eval "${adb_dnsformat}" "${adb_tmpdir}/tmp.whitelist" > "${adb_dnsdir}/${adb_dnsfile}"
+ printf '%s\n' "${adb_dnsblock}" >> "${adb_dnsdir}/${adb_dnsfile}"
+ if [ -n "${adb_dnsheader}" ]
+ then
+ printf '%s\n' "${adb_dnsheader}" | cat - "${adb_dnsdir}/${adb_dnsfile}" > "${adb_tmpdir}/${adb_dnsfile}"
+ cat "${adb_tmpdir}/${adb_dnsfile}" > "${adb_dnsdir}/${adb_dnsfile}"
+ fi
+ f_dnsrestart
+ if [ ${?} -eq 0 ]
+ then
+ f_jsnupdate "${adb_cnt}"
+ f_log "info " "whitelist with overall ${adb_cnt} domains loaded successfully (${adb_sysver})"
+ else
+ f_log "error" "dns backend restart with active whitelist failed"
+ fi
+ return
+ fi
+
+ # normal & backup mode
+ #
for src_name in ${adb_sources}
do
eval "enabled=\"\${enabled_${src_name}}\""
continue
fi
- # manual / backup mode
+ # backup mode
#
- if [ ${adb_manmode} -eq 1 ] && [ "${adb_action}" = "start" ] && [ "${src_name}" != "blacklist" ]
+ if [ ${adb_backup_mode} -eq 1 ] && [ "${adb_action}" = "start" ] && [ "${src_name}" != "blacklist" ]
then
f_list restore
if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpfile}" ]
fi
fi
- # download block list
+ # download blocklist
#
if [ "${src_name}" = "blacklist" ] && [ -s "${url}" ]
then
# hash preparation, whitelist removal and overall sort
#
- if [ -f "${adb_dnsdir}/${adb_dnsfile}" ]
+ if [ -x "${adb_hashsum}" ] && [ -f "${adb_dnsdir}/${adb_dnsfile}" ]
then
- hash_old="$(sha256sum "${adb_dnsdir}/${adb_dnsfile}" 2>/dev/null | awk '{print $1}')"
+ hash_old="$(${adb_hashsum} "${adb_dnsdir}/${adb_dnsfile}" 2>/dev/null | awk '{print $1}')"
fi
if [ -s "${adb_tmpdir}/${adb_dnsfile}" ]
then
# conditional restart of the dns backend and runtime information export
#
- hash_new="$(sha256sum "${adb_dnsdir}/${adb_dnsfile}" 2>/dev/null | awk '{print $1}')"
+ if [ -x "${adb_hashsum}" ] && [ -f "${adb_dnsdir}/${adb_dnsfile}" ]
+ then
+ hash_new="$(${adb_hashsum} "${adb_dnsdir}/${adb_dnsfile}" 2>/dev/null | awk '{print $1}')"
+ fi
if [ -z "${hash_old}" ] || [ -z "${hash_new}" ] || [ "${hash_old}" != "${hash_new}" ]
then
f_dnsrestart
if [ ${?} -eq 0 ]
then
f_jsnupdate "${adb_cnt}"
- f_log "info " "block list with overall ${adb_cnt} domains loaded successfully (${adb_sysver})"
+ f_log "info " "blocklist with overall ${adb_cnt} domains loaded successfully (${adb_sysver})"
else
- f_log "error" "dns backend restart with active block list failed"
+ f_log "error" "dns backend restart with active blocklist failed"
fi
}
--- /dev/null
+menu "Configuration"
+ depends on PACKAGE_apache
+
+config APACHE_HTTP2
+ bool
+ prompt "Enable HTTP2"
+ help
+ Enable HTTPS2 support.
+ default n
+
+endmenu
include $(TOPDIR)/rules.mk
PKG_NAME:=apache
-PKG_VERSION:=2.4.27
-PKG_RELEASE:=1
+PKG_VERSION:=2.4.28
+PKG_RELEASE:=2
PKG_SOURCE_NAME:=httpd
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_LICENSE:=Apache License
PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@APACHE/httpd/
-PKG_HASH:=71fcc128238a690515bd8174d5330a5309161ef314a326ae45c7c15ed139c13a
+PKG_HASH:=c1197a3a62a4ab5c584ab89b249af38cf28b4adee9c0106b62999fd29f920666
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
PKG_INSTALL:=1
+PKG_CONFIG_DEPENDS := \
+ CONFIG_APACHE_HTTP2
+
+ADDITIONAL_MODULES:=
+ifeq ($(CONFIG_APACHE_HTTP2),y)
+ ADDITIONAL_MODULES += --enable-http2
+endif
+ifneq ($(CONFIG_APACHE_HTTP2),y)
+ ADDITIONAL_MODULES += --enable-http2=no
+endif
+
include $(INCLUDE_DIR)/package.mk
define Package/apache/Default
Server, it has grown to be the most popular web server on the Internet.
endef
+define Package/apache/config
+ source "$(SOURCE)/Config.in"
+endef
+
define Package/apache
$(call Package/apache/Default)
- DEPENDS:=+libapr +libaprutil +libpcre +libopenssl +unixodbc +zlib
+ DEPENDS:=+libapr +libaprutil +libpcre +libopenssl +unixodbc +zlib +APACHE_HTTP2:libnghttp2
endef
define Package/apache/description
TARGET_CFLAGS += $(FPIC)
TARGET_CPPFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
-TARGET_LDFLAGS += -lpthread
+TARGET_LDFLAGS += -lpthread
define Build/Configure
$(call Build/Configure/Default, \
--with-apr="$(STAGING_DIR)/usr/bin/apr-1-config" \
--with-apr-util="$(STAGING_DIR)/usr/bin/apu-1-config" \
--with-pcre="$(STAGING_DIR)/usr/bin/pcre-config" \
+ $(ADDITIONAL_MODULES) \
--enable-http \
--with-crypto \
--with-sqlit3="$(STAGING_DIR)/usr" \
--- /dev/null
+Description: Make builds reproducible
+ Don't use __DATE__ __TIME__. Use changelog date instead.
+ Sort exported symbols.
+Author: Jean-Michel Vourgère <nirgal@debian.org>
+Forwarded: no
+Last-Update: 2015-08-11
+
+Index: apache2/server/buildmark.c
+===================================================================
+--- apache2.orig/server/buildmark.c
++++ apache2/server/buildmark.c
+@@ -17,11 +17,7 @@
+ #include "ap_config.h"
+ #include "httpd.h"
+
+-#if defined(__DATE__) && defined(__TIME__)
+-static const char server_built[] = __DATE__ " " __TIME__;
+-#else
+-static const char server_built[] = "unknown";
+-#endif
++static const char server_built[] = "";
+
+ AP_DECLARE(const char *) ap_get_server_built()
+ {
+Index: apache2/server/Makefile.in
+===================================================================
+--- apache2.orig/server/Makefile.in
++++ apache2/server/Makefile.in
+@@ -1,3 +1,4 @@
++export LC_ALL = C
+
+ CLEAN_TARGETS = gen_test_char test_char.h \
+ ApacheCoreOS2.def httpd.exp export_files \
+@@ -80,8 +81,8 @@ httpd.exp: exports.c export_vars.h
+ @echo "#! ." > $@
+ @echo "* This file was AUTOGENERATED at build time." >> $@
+ @echo "* Please do not edit by hand." >> $@
+- $(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) exports.c | grep "ap_hack_" | grep -v apr_ | sed -e 's/^.*[)]\(.*\);$$/\1/' >> $@
+- $(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) export_vars.h | grep -v apr_ | sed -e 's/^\#[^!]*//' | sed -e '/^$$/d' >> $@
++ $(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) exports.c | grep "ap_hack_" | grep -v apr_ | sed -e 's/^.*[)]\(.*\);$$/\1/' | sort >> $@
++ $(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) export_vars.h | grep -v apr_ | sed -e 's/^\#[^!]*//' | sed -e '/^$$/d' | sort >> $@
+
+
+ # developer stuff
choice
prompt "Crypto Library"
depends on !ARIA2_OPENSSL
- default ARIA2_NOCRYPOTLIB
+ default ARIA2_NOCRYPTO
config ARIA2_NETTLE
bool "Nettle"
include $(TOPDIR)/rules.mk
PKG_NAME:=aria2
-PKG_VERSION:=1.32.0
-PKG_RELEASE:=3
+PKG_VERSION:=1.33.0
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/aria2/aria2/releases/download/release-$(PKG_VERSION)/
-PKG_HASH:=546e9194a9135d665fce572cb93c88f30fb5601d113bfa19951107ced682dc50
+PKG_HASH:=996e3fc2fd07ce2dd517e20a1f79b8b3dbaa5c7e27953b5fc19dae38f3874b8c
PKG_INSTALL:=1
PKG_MAINTAINER:=Imre Kaloz <kaloz@openwrt.org>, \
Additional details are available at
https://kb.isc.org/article/AA-00576/0/Filter-AAAA-option-in-BIND-9-.html
+config BIND_LIBJSON
+ bool
+ default n
+ prompt "Include libjson support in bind-server"
+ help
+ BIND 9 supports reporting statistics about usage. libjson
+ is required to report server statistics in JSON format.
+ Building with libjson support will require the libjson-c
+ package to be installed as well.
+
+config BIND_LIBXML2
+ bool
+ default n
+ prompt "Include libxml2 support in bind-server"
+ help
+ BIND 9 supports reporting statistics about usage.
+ libxml2 is required to report server statistics in XML
+ format. Building with libjson support will require the
+ libxml2 package to be installed as well.
+
endif
PKG_NAME:=bind
PKG_VERSION:=9.11.2
-PKG_RELEASE:=2
+PKG_RELEASE:=3
USERID:=bind=57:bind=57
PKG_MAINTAINER:=Noah Meyerhans <frodo@morgul.net>
PKG_USE_MIPS16:=0
PKG_CONFIG_DEPENDS := \
- CONFIG_BIND_ENABLE_FILTER_AAAA
+ CONFIG_BIND_ENABLE_FILTER_AAAA \
+ CONFIG_BIND_LIBJSON \
+ CONFIG_BIND_LIBXML2
+
+ifdef CONFIG_BIND_LIBXML2
+ PKG_BUILD_DEPENDS += libxml2
+endif
+ifdef CONFIG_BIND_LIBJSON
+ PKG_BUILD_DEPENDS += libjson-c
+endif
include $(INCLUDE_DIR)/package.mk
DEPENDS:=+libopenssl +zlib
TITLE:=bind shared libraries
URL:=https://www.isc.org/software/bind
+ifdef CONFIG_BIND_LIBJSON
+ DEPENDS+= +libjson-c
+endif
+ifdef CONFIG_BIND_LIBXML2
+ DEPENDS+= +libxml2
+endif
endef
define Package/bind-server
--disable-threads \
--disable-linux-caps \
--with-openssl="$(STAGING_DIR)/usr" \
- --with-libjson=no \
--with-libtool \
- --with-libxml2=no \
--without-lmdb \
--enable-epoll=yes \
--with-gost=no \
--enable-filter-aaaa
endif
+ifdef CONFIG_BIND_LIBJSON
+ CONFIGURE_ARGS += \
+ --with-libjson="$(STAGING_DIR)/usr"
+else
+ CONFIGURE_ARGS += \
+ --with-libjson=no
+endif
+
+ifdef CONFIG_BIND_LIBXML2
+ CONFIGURE_ARGS += \
+ --with-libxml2="$(STAGING_DIR)/usr"
+else
+ CONFIGURE_ARGS += \
+ --with-libxml2=no
+endif
+
CONFIGURE_VARS += \
BUILD_CC="$(TARGET_CC)" \
PKG_NAME:=clamav
PKG_VERSION:=0.99.2
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr> \
--with-group nogroup \
--with-pcre="$(STAGING_DIR)/usr/" \
--with-openssl="$(STAGING_DIR)/usr/" \
+ --with-zlib="$(STAGING_DIR)/usr/" \
+ --disable-zlib-vcheck \
+ --disable-clamdtop \
)
endef
+++ /dev/null
-#
-# Copyright (C) 2008-2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=dansguardian
-PKG_VERSION:=2.12.0.3
-PKG_RELEASE:=1
-
-PKG_LICENSE:=GPL-2.0
-PKG_MAINTAINER:=Luka Perkov <luka@openwrt.org>
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=@SF/dansguardian
-PKG_HASH:=c74e9a32b97f9a9a056fced3da23fe48fca2bc6aa9af670afe9a53dc819414f5
-
-PKG_BUILD_PARALLEL:=1
-PKG_INSTALL:=1
-
-include $(INCLUDE_DIR)/uclibc++.mk
-include $(INCLUDE_DIR)/package.mk
-
-define Package/dansguardian
- SECTION:=net
- DEPENDS:=+libpthread $(CXX_DEPENDS) +zlib
- CATEGORY:=Network
- SUBMENU:=Web Servers/Proxies
- TITLE:=DansGuardian
- URL:=http://dansguardian.org
-endef
-
-define Package/dansguardian/conffiles
-/etc/dansguardian/dansguardianf1.conf
-/etc/config/dansguardian
-endef
-
-CONFIGURE_VARS += \
- INCLUDES="" \
- CXXFLAGS="$$$$CXXFLAGS -fno-rtti" \
- LIBS="-lpthread" \
-
-define Build/Configure
- $(call Build/Configure/Default,\
- --disable-clamav \
- --with-sysconfsubdir=dansguardian \
- --with-proxyuser=root \
- --with-proxygroup=root \
- --disable-pcre \
- )
-endef
-
-define Package/dansguardian/install
- $(INSTALL_DIR) $(1)/usr/sbin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/dansguardian $(1)/usr/sbin/
-
- $(INSTALL_DIR) $(1)/etc
- $(CP) $(PKG_INSTALL_DIR)/etc/dansguardian $(1)/etc/
- $(INSTALL_CONF) ./files/dansguardianf1.conf $(1)/etc/dansguardian/dansguardianf1.conf
-
- $(INSTALL_DIR) $(1)/etc/config
- $(INSTALL_CONF) ./files/dansguardian.config $(1)/etc/config/dansguardian
-
- $(INSTALL_DIR) $(1)/usr/share/dansguardian
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/dansguardian/transparent1x1.gif $(1)/usr/share/dansguardian/
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/dansguardian/blockedflash.swf $(1)/usr/share/dansguardian/
-
- $(INSTALL_DIR) $(1)/usr/share/dansguardian/languages/ukenglish
- $(CP) $(PKG_INSTALL_DIR)/usr/share/dansguardian/languages/ukenglish/* $(1)/usr/share/dansguardian/languages/ukenglish/
-
- $(INSTALL_DIR) $(1)/etc/init.d/
- $(INSTALL_BIN) ./files/dansguardian.init $(1)/etc/init.d/dansguardian
-endef
-
-$(eval $(call BuildPackage,dansguardian))
+++ /dev/null
-config dansguardian 'dansguardian'
- option config_file '/etc/dansguardian/dansguardianf1.conf'
- option accessdeniedaddress 'http://YOURSERVER.YOURDOMAIN/cgi-bin/dansguardian.pl'
- option bannediplist '/etc/dansguardian/lists/bannediplist'
- option contentscanexceptions 'off'
- option contentscannertimeout '60'
- option createlistcachefiles 'on'
- option custombannedflashfile '/usr/share/dansguardian/blockedflash.swf'
- option custombannedimagefile '/usr/share/dansguardian/transparent1x1.gif'
- option deletedownloadedtempfiles 'on'
- option downloadmanager '/etc/dansguardian/downloadmanagers/default.conf'
- option exceptioniplist '/etc/dansguardian/lists/exceptioniplist'
- option filecachedir '/tmp'
- option filtergroups '1'
- option filtergroupslist '/etc/dansguardian/lists/filtergroupslist'
- option filterip ''
- option filterports '8080'
- option forcequicksearch 'off'
- option forwardedfor 'off'
- option hexdecodecontent 'off'
- option initialtrickledelay '20'
- option ipcfilename '/tmp/.dguardianipc'
- option ipipcfilename '/tmp/.dguardianipipc'
- option languagedir '/usr/share/dansguardian/languages'
- option language 'ukenglish'
- option logadblocks 'off'
- option logchildprocesshandling 'off'
- option logclienthostnames 'off'
- option logconnectionhandlingerrors 'on'
- option logexceptionhits '2'
- option logfileformat '1'
- option loglevel '2'
- option loglocation '/dev/null'
- option logsyslog 'on'
- option loguseragent 'off'
- option maxagechildren '500'
- option maxchildren '120'
- option maxcontentfilecachescansize '20000'
- option maxcontentfiltersize '256'
- option maxcontentramcachescansize '2000'
- option maxips '0'
- option maxsparechildren '32'
- option maxuploadsize '-1'
- option minchildren '8'
- option minsparechildren '4'
- option nodaemon 'off'
- option nologger 'off'
- option nonstandarddelimiter 'on'
- option perroomblockingdirectory '/etc/dansguardian/lists/bannedrooms/'
- option phrasefiltermode '2'
- option prefercachedlists 'off'
- option preforkchildren '6'
- option preservecase '0'
- option proxyip '127.0.0.1'
- option proxyport '3128'
- option proxytimeout '20'
- option recheckreplacedurls 'off'
- option reportinglevel '3'
- option reverseaddresslookups 'off'
- option reverseclientiplookups 'off'
- option scancleancache 'on'
- option showweightedfound 'on'
- option softrestart 'off'
- option trickledelay '10'
- option urlcacheage '900'
- option urlcachenumber '1000'
- option urlipcfilename '/tmp/.dguardianurlipc'
- option usecustombannedflash 'on'
- option usecustombannedimage 'on'
- option usexforwardedfor 'off'
- option weightedphrasemode '2'
+++ /dev/null
-#!/bin/sh /etc/rc.common
-# Copyright (C) 2015 OpenWrt.org
-
-START=90
-STOP=10
-
-USE_PROCD=1
-PROG=/usr/sbin/dansguardian
-CONFIGFILE="/tmp/dansguardian/dansguardian.conf"
-
-validate_dansguardian_section() {
- uci_validate_section dansguardian dansguardian "${1}" \
- 'config_file:string' \
- 'accessdeniedaddress:string' \
- 'bannediplist:string' \
- 'contentscanexceptions:string' \
- 'contentscannertimeout:uinteger' \
- 'createlistcachefiles:string' \
- 'custombannedflashfile:string' \
- 'custombannedimagefile:string' \
- 'deletedownloadedtempfiles:string' \
- 'downloadmanager:string' \
- 'exceptioniplist:string' \
- 'filecachedir:string' \
- 'filtergroups:uinteger' \
- 'filtergroupslist:string' \
- 'filterip:ipaddr' \
- 'filterports:port:8080' \
- 'forcequicksearch:string' \
- 'forwardedfor:string' \
- 'hexdecodecontent:string' \
- 'initialtrickledelay:uinteger' \
- 'ipcfilename:string' \
- 'ipipcfilename:string' \
- 'languagedir:string' \
- 'language:string' \
- 'logadblocks:string' \
- 'logchildprocesshandling:string' \
- 'logclienthostnames:string' \
- 'logconnectionhandlingerrors:string' \
- 'logexceptionhits:range(0,2)' \
- 'logfileformat:range(1,4)' \
- 'loglevel:range(0,3)' \
- 'loglocation:string' \
- 'loguseragent:string' \
- 'maxagechildren:uinteger' \
- 'maxchildren:uinteger' \
- 'maxcontentfilecachescansize:uinteger' \
- 'maxcontentfiltersize:uinteger' \
- 'maxcontentramcachescansize:uinteger' \
- 'maxips:uinteger' \
- 'maxsparechildren:uinteger' \
- 'maxuploadsize:integer' \
- 'minchildren:uinteger' \
- 'minsparechildren:uinteger' \
- 'nodaemon:string' \
- 'nologger:string' \
- 'nonstandarddelimiter:string' \
- 'perroomblockingdirectory:string' \
- 'phrasefiltermode:range(0,3)' \
- 'prefercachedlists:string' \
- 'preforkchildren:uinteger' \
- 'preservecase:range(0,2)' \
- 'proxyip:ipaddr' \
- 'proxyport:port:3128' \
- 'proxytimeout:range(20,30)' \
- 'recheckreplacedurls:string' \
- 'reportinglevel:range(-1,3)' \
- 'reverseaddresslookups:string' \
- 'reverseclientiplookups:string' \
- 'scancleancache:string' \
- 'showweightedfound:string' \
- 'softrestart:string' \
- 'trickledelay:uinteger' \
- 'urlcacheage:uinteger' \
- 'urlcachenumber:uinteger' \
- 'urlipcfilename:string' \
- 'usecustombannedflash:string' \
- 'usecustombannedimage:string' \
- 'usexforwardedfor:string' \
- 'weightedphrasemode:range(0,2)'
-}
-
-start_service() {
- local config_file accessdeniedaddress bannediplist contentscanexceptions contentscannertimeout \
- createlistcachefiles custombannedflashfile custombannedimagefile deletedownloadedtempfiles \
- downloadmanager exceptioniplist filecachedir filtergroups filtergroupslist filterip filterports \
- forcequicksearch forwardedfor hexdecodecontent initialtrickledelay ipcfilename ipipcfilename \
- language languagedir logadblocks logchildprocesshandling logclienthostnames logconnectionhandlingerrors \
- logexceptionhits logfileformat loglevel loguseragent maxagechildren maxchildren maxcontentfilecachescansize \
- maxcontentfiltersize maxcontentramcachescansize maxips maxsparechildren maxuploadsize minchildren minsparechildren \
- nodaemon nologger nonstandarddelimiter perroomblockingdirectory phrasefiltermode prefercachedlists preforkchildren \
- preservecase proxyip proxyport proxytimeout recheckreplacedurls reportinglevel reverseaddresslookups \
- reverseclientiplookups scancleancache showweightedfound softrestart trickledelay urlcacheage urlcachenumber \
- urlipcfilename usecustombannedflash usecustombannedimage usexforwardedfor weightedphrasemode
-
- validate_dansguardian_section dansguardian || {
- echo "validation failed"
- return 1
- }
-
- mkdir -p $(dirname $CONFIGFILE)
- ln -sf $config_file $(dirname $CONFIGFILE)
-
- echo "accessdeniedaddress = " $accessdeniedaddress > $CONFIGFILE
- echo "bannediplist = " $bannediplist >> $CONFIGFILE
- echo "contentscanexceptions = " $contentscanexceptions >> $CONFIGFILE
- echo "contentscannertimeout = " $contentscannertimeout >> $CONFIGFILE
- echo "createlistcachefiles = " $createlistcachefiles >> $CONFIGFILE
- echo "custombannedflashfile = " $custombannedflashfile >> $CONFIGFILE
- echo "custombannedimagefile = " $custombannedimagefile >> $CONFIGFILE
- echo "deletedownloadedtempfiles = " $deletedownloadedtempfiles >> $CONFIGFILE
- echo "downloadmanager = " $downloadmanager >> $CONFIGFILE
- echo "exceptioniplist = " $exceptioniplist >> $CONFIGFILE
- echo "filecachedir = " $filecachedir >> $CONFIGFILE
- echo "filtergroups = " $filtergroups >> $CONFIGFILE
- echo "filtergroupslist = " $filtergroupslist >> $CONFIGFILE
- echo "filterip = " $filterip >> $CONFIGFILE
- echo "filterports = " $filterports >> $CONFIGFILE
- echo "forcequicksearch = " $forcequicksearch >> $CONFIGFILE
- echo "forwardedfor = " $forwardedfor >> $CONFIGFILE
- echo "hexdecodecontent = " $hexdecodecontent >> $CONFIGFILE
- echo "initialtrickledelay = " $initialtrickledelay >> $CONFIGFILE
- echo "ipcfilename = " $ipcfilename >> $CONFIGFILE
- echo "ipipcfilename = " $ipipcfilename >> $CONFIGFILE
- echo "language = " $language >> $CONFIGFILE
- echo "languagedir = " $languagedir >> $CONFIGFILE
- echo "logadblocks = " $logadblocks >> $CONFIGFILE
- echo "logchildprocesshandling = " $logchildprocesshandling >> $CONFIGFILE
- echo "logclienthostnames = " $logclienthostnames >> $CONFIGFILE
- echo "logconnectionhandlingerrors = " $logconnectionhandlingerrors >> $CONFIGFILE
- echo "logexceptionhits = " $logexceptionhits >> $CONFIGFILE
- echo "logfileformat = " $logfileformat >> $CONFIGFILE
- echo "loglevel = " $loglevel >> $CONFIGFILE
- echo "loglocation = " $loglocation >> $CONFIGFILE
- echo "loguseragent = " $loguseragent >> $CONFIGFILE
- echo "maxagechildren = " $maxagechildren >> $CONFIGFILE
- echo "maxchildren = " $maxchildren >> $CONFIGFILE
- echo "maxcontentfilecachescansize = " $maxcontentfilecachescansize >> $CONFIGFILE
- echo "maxcontentfiltersize = " $maxcontentfiltersize >> $CONFIGFILE
- echo "maxcontentramcachescansize = " $maxcontentramcachescansize >> $CONFIGFILE
- echo "maxips = " $maxips >> $CONFIGFILE
- echo "maxsparechildren = " $maxsparechildren >> $CONFIGFILE
- echo "maxuploadsize = " $maxuploadsize >> $CONFIGFILE
- echo "minchildren = " $minchildren >> $CONFIGFILE
- echo "minsparechildren = " $minsparechildren >> $CONFIGFILE
- echo "nodaemon = " $nodaemon >> $CONFIGFILE
- echo "nologger = " $nologger >> $CONFIGFILE
- echo "nonstandarddelimiter = " $nonstandarddelimiter >> $CONFIGFILE
- echo "perroomblockingdirectory = " $perroomblockingdirectory >> $CONFIGFILE
- echo "phrasefiltermode = " $phrasefiltermode >> $CONFIGFILE
- echo "prefercachedlists = " $prefercachedlists >> $CONFIGFILE
- echo "preforkchildren = " $preforkchildren >> $CONFIGFILE
- echo "preservecase = " $preservecase >> $CONFIGFILE
- echo "proxyip = " $proxyip >> $CONFIGFILE
- echo "proxyport = " $proxyport >> $CONFIGFILE
- echo "proxytimeout = " $proxytimeout >> $CONFIGFILE
- echo "recheckreplacedurls = " $recheckreplacedurls >> $CONFIGFILE
- echo "reportinglevel = " $reportinglevel >> $CONFIGFILE
- echo "reverseaddresslookups = " $reverseaddresslookups >> $CONFIGFILE
- echo "reverseclientiplookups = " $reverseclientiplookups >> $CONFIGFILE
- echo "scancleancache = " $scancleancache >> $CONFIGFILE
- echo "showweightedfound = " $showweightedfound >> $CONFIGFILE
- echo "softrestart = " $softrestart >> $CONFIGFILE
- echo "trickledelay = " $trickledelay >> $CONFIGFILE
- echo "urlcacheage = " $urlcacheage >> $CONFIGFILE
- echo "urlcachenumber = " $urlcachenumber >> $CONFIGFILE
- echo "urlipcfilename = " $urlipcfilename >> $CONFIGFILE
- echo "usecustombannedflash = " $usecustombannedflash >> $CONFIGFILE
- echo "usecustombannedimage = " $usecustombannedimage >> $CONFIGFILE
- echo "usexforwardedfor = " $usexforwardedfor >> $CONFIGFILE
- echo "weightedphrasemode = " $weightedphrasemode >> $CONFIGFILE
-
- procd_open_instance
- procd_set_param command $PROG -N -c "$CONFIGFILE"
- procd_set_param file $CONFIGFILE
- procd_set_param respawn
- procd_close_instance
-}
-
-stop_service()
-{
- dansguardian -s | awk -F':' '{ print $2}' | xargs kill -9
-}
-
-service_triggers()
-{
- procd_add_reload_trigger "dansguardian"
- procd_add_validation validate_dansguardian_section
-}
+++ /dev/null
-# DansGuardian filter group config file for version 2.12.0.0
-
-
-# Filter group mode
-# This option determines whether members of this group have their web access
-# unfiltered, filtered, or banned. This mechanism replaces the "banneduserlist"
-# and "exceptionuserlist" files from previous versions.
-#
-# 0 = banned
-# 1 = filtered
-# 2 = unfiltered (exception)
-#
-# Only filter groups with a mode of 1 need to define phrase, URL, site, extension,
-# mimetype and PICS lists; in other modes, these options are ignored to conserve
-# memory.
-#
-# Defaults to 0 if unspecified.
-# Unauthenticated users are treated as being in the first filter group.
-groupmode = 1
-
-# Filter group name
-# Used to fill in the -FILTERGROUP- placeholder in the HTML template file, and to
-# name the group in the access logs
-# Defaults to empty string
-#groupname = ''
-
-# Content filtering files location
-bannedphraselist = '/etc/dansguardian/lists/bannedphraselist'
-weightedphraselist = '/etc/dansguardian/lists/weightedphraselist'
-exceptionphraselist = '/etc/dansguardian/lists/exceptionphraselist'
-bannedsitelist = '/etc/dansguardian/lists/bannedsitelist'
-greysitelist = '/etc/dansguardian/lists/greysitelist'
-exceptionsitelist = '/etc/dansguardian/lists/exceptionsitelist'
-bannedurllist = '/etc/dansguardian/lists/bannedurllist'
-greyurllist = '/etc/dansguardian/lists/greyurllist'
-exceptionurllist = '/etc/dansguardian/lists/exceptionurllist'
-exceptionregexpurllist = '/etc/dansguardian/lists/exceptionregexpurllist'
-bannedregexpurllist = '/etc/dansguardian/lists/bannedregexpurllist'
-picsfile = '/etc/dansguardian/lists/pics'
-contentregexplist = '/etc/dansguardian/lists/contentregexplist'
-urlregexplist = '/etc/dansguardian/lists/urlregexplist'
-
-# Filetype filtering
-#
-# Blanket download blocking
-# If enabled, all files will be blocked, unless they match the
-# exceptionextensionlist or exceptionmimetypelist.
-# These lists do not override virus scanning.
-# Exception lists defined above override all types of filtering, including
-# the blanket download block.
-# Defaults to disabled.
-# (on | off)
-#
-blockdownloads = off
-exceptionextensionlist = '/etc/dansguardian/lists/exceptionextensionlist'
-exceptionmimetypelist = '/etc/dansguardian/lists/exceptionmimetypelist'
-#
-# Use the following lists to block specific kinds of file downloads.
-# The two exception lists above can be used to override these.
-#
-bannedextensionlist = '/etc/dansguardian/lists/bannedextensionlist'
-bannedmimetypelist = '/etc/dansguardian/lists/bannedmimetypelist'
-#
-# In either file filtering mode, the following list can be used to override
-# MIME type & extension blocks for particular domains & URLs (trusted download sites).
-#
-exceptionfilesitelist = '/etc/dansguardian/lists/exceptionfilesitelist'
-exceptionfileurllist = '/etc/dansguardian/lists/exceptionfileurllist'
-
-# Categorise without blocking:
-# Supply categorised lists here and the category string shall be logged against
-# matching requests, but matching these lists does not perform any filtering
-# action.
-#logsitelist = '/etc/dansguardian/lists/logsitelist'
-#logurllist = '/etc/dansguardian/lists/logurllist'
-#logregexpurllist = '/etc/dansguardian/lists/logregexpurllist'
-
-# Outgoing HTTP header rules:
-# Optional lists for blocking based on, and modification of, outgoing HTTP
-# request headers. Format for headerregexplist is one modification rule per
-# line, similar to content/URL modifications. Format for
-# bannedregexpheaderlist is one regular expression per line, with matching
-# headers causing a request to be blocked.
-# Headers are matched/replaced on a line-by-line basis, not as a contiguous
-# block.
-# Use for example, to remove cookies or prevent certain user-agents.
-headerregexplist = '/etc/dansguardian/lists/headerregexplist'
-bannedregexpheaderlist = '/etc/dansguardian/lists/bannedregexpheaderlist'
-
-# Weighted phrase mode
-# Optional; overrides the weightedphrasemode option in dansguardian.conf
-# for this particular group. See documentation for supported values in
-# that file.
-#weightedphrasemode = 0
-
-# Naughtiness limit
-# This the limit over which the page will be blocked. Each weighted phrase is given
-# a value either positive or negative and the values added up. Phrases to do with
-# good subjects will have negative values, and bad subjects will have positive
-# values. See the weightedphraselist file for examples.
-# As a guide:
-# 50 is for young children, 100 for old children, 160 for young adults.
-naughtynesslimit = 50
-
-# Search term blocking
-# Search terms can be extracted from search URLs and filtered using the
-# bannedphraselist, weightedphraselist and exceptionphraselist, with a separate
-# threshold for blocking than that used for normal page content.
-# To do this, the first two options below must be enabled.
-#
-# Search engine regular expression list
-# List of regular expressions for matching search engine URLs. It is assumed
-# that the search terms themselves will be contained within the first submatch
-# of each expression.
-#searchengineregexplist = '/etc/dansguardian/lists/searchengineregexplist'
-#
-# Search term limit
-# The limit over which requests will be blocked for containing search terms
-# which match the weightedphraselist. This should usually be lower than the
-# 'naughtynesslimit' value above, because the amount of text being filtered
-# is only a few words, rather than a whole page.
-# This option must be uncommented if searchengineregexplist is uncommented.
-# A value of 0 here indicates that search terms should be extracted,
-# for logging/reporting purposes, but no filtering should be performed
-# on the resulting text.
-#searchtermlimit = 30
-#
-# Search term lists
-# If the three lines below are uncommented, search term blocking will use
-# the banned, weighted & exception phrases from these lists, instead of using
-# the same phrase lists as for page content. This is optional but recommended,
-# as weights for individual phrases in the "normal" lists may not be
-# appropriate for blocking when those phrases appear in a much smaller block
-# of text.
-# Please note that all or none of the below should be uncommented, not a
-# mixture.
-#bannedsearchtermlist = '/etc/dansguardian/lists/bannedsearchtermlist'
-#weightedsearchtermlist = '/etc/dansguardian/lists/weightedsearchtermlist'
-#exceptionsearchtermlist = '/etc/dansguardian/lists/exceptionsearchtermlist'
-
-# Category display threshold
-# This option only applies to pages blocked by weighted phrase filtering.
-# Defines the minimum score that must be accumulated within a particular
-# category in order for it to show up on the block pages' category list.
-# All categories under which the page scores positively will be logged; those
-# that were not displayed to the user appear in brackets.
-#
-# -1 = display only the highest scoring category
-# 0 = display all categories (default)
-# > 0 = minimum score for a category to be displayed
-categorydisplaythreshold = 0
-
-# Embedded URL weighting
-# When set to something greater than zero, this option causes URLs embedded within a
-# page's HTML (from links, image tags, etc.) to be extracted and checked against the
-# bannedsitelist and bannedurllist. Each link to a banned page causes the amount set
-# here to be added to the page's weighting.
-# The behaviour of this option with regards to multiple occurrences of a site/URL is
-# affected by the weightedphrasemode setting.
-#
-# NB: Currently, this feature uses regular expressions that require the PCRE library.
-# As such, it is only available if you compiled DansGuardian with '--enable-pcre=yes'.
-# You can check compile-time options by running 'dansguardian -v'.
-#
-# Set to 0 to disable.
-# Defaults to 0.
-# WARNING: This option is highly CPU intensive!
-embeddedurlweight = 0
-
-# Enable PICS rating support
-#
-# Defaults to disabled
-# (on | off)
-enablepics = off
-
-# Temporary Denied Page Bypass
-# This provides a link on the denied page to bypass the ban for a few minutes. To be
-# secure it uses a random hashed secret generated at daemon startup. You define the
-# number of seconds the bypass will function for before the deny will appear again.
-# To allow the link on the denied page to appear you will need to edit the template.html
-# or dansguardian.pl file for your language.
-# 300 = enable for 5 minutes
-# 0 = disable ( defaults to 0 )
-# -1 = enable but you require a separate program/CGI to generate a valid link
-bypass = 0
-
-# Temporary Denied Page Bypass Secret Key
-# Rather than generating a random key you can specify one. It must be more than 8 chars.
-# '' = generate a random one (recommended and default)
-# 'Mary had a little lamb.' = an example
-# '76b42abc1cd0fdcaf6e943dcbc93b826' = an example
-bypasskey = ''
-
-# Infection/Scan Error Bypass
-# Similar to the 'bypass' setting, but specifically for bypassing files scanned and found
-# to be infected, or files that trigger scanner errors - for example, archive types with
-# recognised but unsupported compression schemes, or corrupt archives.
-# The option specifies the number of seconds for which the bypass link will be valid.
-# 300 = enable for 5 minutes
-# 0 = disable (default)
-# -1 = enable, but require a separate program/CGI to generate a valid link
-infectionbypass = 0
-
-# Infection/Scan Error Bypass Secret Key
-# Same as the 'bypasskey' option, but used for infection bypass mode.
-infectionbypasskey = ''
-
-# Infection/Scan Error Bypass on Scan Errors Only
-# Enable this option to allow infectionbypass links only when virus scanning fails,
-# not when a file is found to contain a virus.
-# on = enable (default and highly recommended)
-# off = disable
-infectionbypasserrorsonly = on
-
-# Disable content scanning
-# If you enable this option you will disable content scanning for this group.
-# Content scanning primarily is AV scanning (if enabled) but could include
-# other types.
-# (on|off) default = off.
-disablecontentscan = off
-
-# Enable Deep URL Analysis
-# When enabled, DG looks for URLs within URLs, checking against the bannedsitelist and
-# bannedurllist. This can be used, for example, to block images originating from banned
-# sites from appearing in Google Images search results, as the original URLs are
-# embedded in the thumbnail GET requests.
-# (on|off) default = off
-deepurlanalysis = off
-
-# reportinglevel
-#
-# -1 = log, but do not block - Stealth mode
-# 0 = just say 'Access Denied'
-# 1 = report why but not what denied phrase
-# 2 = report fully
-# 3 = use HTML template file (accessdeniedaddress ignored) - recommended
-#
-# If defined, this overrides the global setting in dansguardian.conf for
-# members of this filter group.
-#
-#reportinglevel = 3
-
-# accessdeniedaddress is the address of your web server to which the cgi
-# dansguardian reporting script was copied. Only used in reporting levels
-# 1 and 2.
-#
-# This webserver must be either:
-# 1. Non-proxied. Either a machine on the local network, or listed as an
-# exception in your browser's proxy configuration.
-# 2. Added to the exceptionsitelist. Option 1 is preferable; this option is
-# only for users using both transparent proxying and a non-local server
-# to host this script.
-#
-# If defined, this overrides the global setting in dansguardian.conf for
-# members of this filter group.
-#
-#accessdeniedaddress = 'http://YOURSERVER.YOURDOMAIN/cgi-bin/dansguardian.pl'
-
-# HTML Template override
-# If defined, this specifies a custom HTML template file for members of this
-# filter group, overriding the global setting in dansguardian.conf. This is
-# only used in reporting level 3.
-#
-# The default template file path is <languagedir>/<language>/template.html
-# e.g. /usr/share/dansguardian/languages/ukenglish/template.html when using 'ukenglish'
-# language.
-#
-# This option generates a file path of the form:
-# <languagedir>/<language>/<htmltemplate>
-# e.g. /usr/share/dansguardian/languages/ukenglish/custom.html
-#
-#htmltemplate = 'custom.html'
-
-# Email reporting - original patch by J. Gauthier
-
-# Use SMTP
-# If on, will enable system wide events to be reported by email.
-# need to configure mail program (see 'mailer' in global config)
-# and email recipients
-# default usesmtp = off
-#!! Not compiled !!usesmtp = off
-
-# mailfrom
-# who the email would come from
-# example: mailfrom = 'dansguardian@mycompany.com'
-#!! Not compiled !!mailfrom = ''
-
-# avadmin
-# who the virus emails go to (if notify av is on)
-# example: avadmin = 'admin@mycompany.com'
-#!! Not compiled !!avadmin = ''
-
-# contentdmin
-# who the content emails go to (when thresholds are exceeded)
-# and contentnotify is on
-# example: contentadmin = 'admin@mycompany.com'
-#!! Not compiled !!contentadmin = ''
-
-# avsubject
-# Subject of the email sent when a virus is caught.
-# only applicable if notifyav is on
-# default avsubject = 'dansguardian virus block'
-#!! Not compiled !!avsubject = 'dansguardian virus block'
-
-# content
-# Subject of the email sent when violation thresholds are exceeded
-# default contentsubject = 'dansguardian violation'
-#!! Not compiled !!contentsubject = 'dansguardian violation'
-
-# notifyAV
-# This will send a notification, if usesmtp/notifyav is on, any time an
-# infection is found.
-# Important: If this option is off, viruses will still be recorded like a
-# content infraction.
-#!! Not compiled !!notifyav = off
-
-# notifycontent
-# This will send a notification, if usesmtp is on, based on thresholds
-# below
-#!! Not compiled !!notifycontent = off
-
-# thresholdbyuser
-# results are only predictable with user authenticated configs
-# if enabled the violation/threshold count is kept track of by the user
-#!! Not compiled !!thresholdbyuser = off
-
-#violations
-# number of violations before notification
-# setting to 0 will never trigger a notification
-#!! Not compiled !!violations = 0
-
-#threshold
-# this is in seconds. If 'violations' occur in 'threshold' seconds, then
-# a notification is made.
-# if this is set to 0, then whenever the set number of violations are made a
-# notifaction will be sent.
-#!! Not compiled !!threshold = 0
-
-#SSL certificate checking
-# Check that ssl certificates for servers on https connections are valid
-# and signed by a ca in the configured path
-sslcertcheck = off
-
-#SSL man in the middle
-# Forge ssl certificates for all sites, decrypt the data then re encrypt it
-# using a different private key. Used to filter ssl sites
-sslmitm = off
-
+++ /dev/null
---- a/configure
-+++ b/configure
-@@ -827,7 +827,7 @@ sysconfdir='${prefix}/etc'
- sharedstatedir='${prefix}/com'
- localstatedir='${prefix}/var'
- includedir='${prefix}/include'
--oldincludedir='/usr/include'
-+oldincludedir='${prefix}/usr/include'
- docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
- infodir='${datarootdir}/info'
- htmldir='${docdir}'
-@@ -5265,7 +5265,7 @@ $as_echo_n "checking for zlib... " >&6;
- # Check whether --with-zlib was given.
- if test "${with_zlib+set}" = set; then :
- withval=$with_zlib; # check for header & func (in library) in given prefix
-- CPPFLAGS="${CPPFLAGS} -I${withval}/include"
-+ CPPFLAGS="${CPPFLAGS}"
- if test "x$staticzlib" = "xtrue"; then
- LIBS="-Bstatic -L${withval} -lz -Bdynamic ${LIBS}"
- else
-@@ -7095,7 +7095,7 @@ $as_echo "#define ENABLE_NTLM /**/" >>co
- if test "${with_libiconv+set}" = set; then :
- withval=$with_libiconv; # check for header & func (in library) in given prefix
- if test "x$withval" != "x"; then
-- CPPFLAGS="${CPPFLAGS} -I${withval}/include"
-+ CPPFLAGS="${CPPFLAGS}"
- LIBS="-L${withval}/lib -liconv ${LIBS}"
- else
- LIBS="-liconv ${LIBS}"
+++ /dev/null
-Index: dansguardian-2.12.0.3/src/OptionContainer.cpp
-===================================================================
---- dansguardian-2.12.0.3.orig/src/OptionContainer.cpp
-+++ dansguardian-2.12.0.3/src/OptionContainer.cpp
-@@ -17,6 +17,7 @@
- #include <sstream>
- #include <syslog.h>
- #include <dirent.h>
-+#include <cstdlib>
-
- #include <unistd.h> // checkme: remove?
-
PKG_VERSION:=2.7.6
# Release == build
# increase on changes of services files or tld_names.dat
-PKG_RELEASE:=18
+PKG_RELEASE:=20
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
"dtdns.com" "http://www.dtdns.com/api/autodns.cfm?id=[DOMAIN]&pw=[PASSWORD]&ip=[IP]"
-"duckdns.org" "http://www.duckdns.org/update?domains=[USERNAME]&token=[PASSWORD]&ip=[IP]" "OK"
+"duckdns.org" "http://www.duckdns.org/update?domains=[DOMAIN]&token=[PASSWORD]&ip=[IP]" "OK"
"duiadns.net" "http://ip.duiadns.net/dynamic.duia?host=[DOMAIN]&password=[PASSWORD]&ip4=[IP]"
"dynu.com" "http://api.dynu.com/nic/update?hostname=[DOMAIN]&myip=[IP]&username=[USERNAME]&password=[PASSWORD]"
-"dynv6.com" "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv4=[IP]" "updated"
+"dynv6.com" "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv4=[IP]" "updated|unchanged"
"easydns.com" "http://[USERNAME]:[PASSWORD]@api.cp.easydns.com/dyn/generic.php?hostname=[DOMAIN]&myip=[IP]" "NOERROR"
"dynu.com" "http://api.dynu.com/nic/update?hostname=[DOMAIN]&myipv6=[IP]&username=[USERNAME]&password=[PASSWORD]"
-"dynv6.com" "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv6=[IP]" "updated"
+"dynv6.com" "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv6=[IP]" "updated|unchanged"
"goip.de" "http://www.goip.de/setip?username=[USERNAME]&password=[PASSWORD]&subdomain=[DOMAIN]&ip6=[IP]"
include $(TOPDIR)/rules.mk
PKG_NAME:=dhcpcd
-PKG_VERSION:=6.4.3
+PKG_VERSION:=6.11.5
PKG_RELEASE:=1
PKG_SOURCE_URL:=ftp://roy.marples.name/pub/dhcpcd \
http://roy.marples.name/downloads/dhcpcd
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=36ad01619ee81ac3815467d0157c38a14f5db464371326e97f719be362d5ab9c
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_HASH:=6f9674dc7e27e936cc787175404a6171618675ecfb6903ab9887b1b66a87d69e
PKG_LICENSE:=BSD-2c
PKG_LICENSE_FILES:=
-PKG_MAINTAINER:=Roy Marples <roy@marples.name>
+PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
* ARP ping profiles
endef
-CONFIGURE_ARGS+= --prefix=/ --sbindir=/sbin \
- --libexecdir=/lib/dhcpcd --dbdir=/var/dhcpcd
+CONFIGURE_ARGS+= \
+ --prefix=/ \
+ --sbindir=/sbin \
+ --libexecdir=/lib/dhcpcd \
+ --dbdir=/var/dhcpcd
define Package/dhcpcd/install
$(INSTALL_DIR) $(1)/sbin $(1)/etc $(1)/lib/dhcpcd/dhcpcd-hooks
+++ /dev/null
---- a/dhcp6.c
-+++ b/dhcp6.c
-@@ -1047,8 +1047,8 @@ logsend:
-
- ctx = ifp->ctx->ipv6;
- dst.sin6_scope_id = ifp->index;
-- ctx->sndhdr.msg_name = (caddr_t)&dst;
-- ctx->sndhdr.msg_iov[0].iov_base = (caddr_t)state->send;
-+ ctx->sndhdr.msg_name = (void *)&dst;
-+ ctx->sndhdr.msg_iov[0].iov_base = (void *)state->send;
- ctx->sndhdr.msg_iov[0].iov_len = state->send_len;
-
- /* Set the outbound interface */
PKG_NAME:=fwknop
PKG_VERSION:=2.6.9
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://www.cipherdyne.org/fwknop/download
config global
# option uci_enabled '1'
+config network
+# option network 'wan' # takes precedence over config.PCAP_INTF
+
config access
option SOURCE 'ANY'
option HMAC_KEY 'CHANGEME'
# Copyright (C) 2009-2014 fwknop developers and contributors. For a full
# list of contributors, see the file 'CREDITS'.
#
-. /lib/functions.sh
+
+USE_PROCD=1
START=95
FWKNOPD_BIN=/usr/sbin/fwknopd
-start()
+start_service()
{
- gen_confs
- if [ $UCI_ENABLED ]; then
- $FWKNOPD_BIN -c /var/etc/fwknopd.conf -a /var/etc/access.conf
- else
- $FWKNOPD_BIN
+ generate_configuration
+
+ procd_open_instance
+ procd_set_param command "$FWKNOPD_BIN" --foreground --syslog-enable
+ procd_set_param respawn
+
+ if [ $UCI_ENABLED -eq 1 ]; then
+ procd_append_param command -c /var/etc/fwknopd.conf
+ procd_append_param command -a /var/etc/access.conf
fi
-}
+ procd_append_param command -i "$DEPEND_IFNAME"
+ procd_set_param netdev "$DEPEND_IFNAME"
-stop()
-{
- $FWKNOPD_BIN -K
+ procd_close_instance
}
-restart()
+service_triggers()
{
- stop;
- sleep 1;
- start;
+ procd_add_reload_trigger "fwknopd"
}
-reload()
+get_bool()
{
- gen_confs
- $FWKNOPD_BIN -R
+ local _tmp="$1"
+ case "$_tmp" in
+ 1|on|true|yes|enabled) _tmp=1;;
+ 0|off|false|no|disabled) _tmp=0;;
+ *) _tmp="$2";;
+ esac
+ echo -n "$_tmp"
}
-gen_confs()
+generate_configuration()
{
[ -f /tmp/access.conf.tmp ] && rm /tmp/access.conf.tmp
- if [ -z "$( uci get fwknopd.@config[0].PCAP_INTF )" ]
- then
- . /lib/functions/network.sh
- network_get_physdev device wan
- uci set fwknopd.@config[0].PCAP_INTF="$device"
- uci commit
- fi
+
+ UCI_ENABLED=0
+ DEPEND_IFNAME=
+ local NETWORK=
+ local PCAP_INTF=
+ local USER_CONFIG_PATH=/etc/fwknop/fwknopd.conf
+ local DEFAULT_UCI_NETWORK=wan
+ local DEFAULT_FWKNOPD_IFNAME=eth0
+
config_cb() {
local type="$1"
local name="$2"
option_cb() {
local option="$1"
local value="$2"
- if [ "$option" = "uci_enabled" ] && [ "$value" -eq 1 ] ; then
+ if [ "$option" = "uci_enabled" ] && [ "$(get_bool "$value" 0)" -eq 1 ] ; then
> /var/etc/fwknopd.conf
> /var/etc/access.conf
chmod 600 /var/etc/fwknopd.conf
UCI_ENABLED=1
fi
}
+ elif [ "$type" = "network" ]; then
+ option_cb() {
+ local option="$1"
+ local value="$2"
+ if [ $UCI_ENABLED -eq 1 ] && [ $option = "network" ]; then
+ NETWORK="$value"
+ fi
+ }
elif [ "$type" = "config" ]; then
option_cb() {
local option="$1"
local value="$2"
- if [ $UCI_ENABLED ]; then
+ if [ $UCI_ENABLED -eq 1 ] && [ $option = "PCAP_INTF" ]; then
+ PCAP_INTF="$value"
+ echo "$option $value" >> /var/etc/fwknopd.conf #writing each option to fwknopd.conf
+ elif [ $UCI_ENABLED -eq 1 ]; then
echo "$option $value" >> /var/etc/fwknopd.conf #writing each option to fwknopd.conf
fi
}
option_cb() {
local option="$1"
local value="$2"
- if [ $UCI_ENABLED ] && [ $option = "SOURCE" ]; then
+ if [ $UCI_ENABLED -eq 1 ] && [ $option = "SOURCE" ]; then
echo "$option $value" >> /var/etc/access.conf #writing each option to access.conf
fi
- if [ $UCI_ENABLED ] && [ $option != "SOURCE" ]; then
+ if [ $UCI_ENABLED -eq 1 ] && [ $option != "SOURCE" ]; then
echo "$option $value" >> /tmp/access.conf.tmp #writing each option to access.conf
fi
}
+ else
+ option_cb() { return; }
+ if [ -z "$type" ]; then
+ # Finalize reading
+ if [ -f /tmp/access.conf.tmp ] ; then
+ cat /tmp/access.conf.tmp >> /var/etc/access.conf
+ rm /tmp/access.conf.tmp
+ fi
+ fi
fi
}
if [ -f /etc/config/fwknopd ]; then
config_load fwknopd
- if [ -f /tmp/access.conf.tmp ] ; then
- cat /tmp/access.conf.tmp >> /var/etc/access.conf
- rm /tmp/access.conf.tmp
- fi
fi
+ if [ $UCI_ENABLED -eq 0 ]; then
+ if [ -f $USER_CONFIG_PATH ] ; then
+ # Scan user configuration for PCAP_INTF settings
+ DEPEND_IFNAME="$( sed -ne '/^\s*PCAP_INTF\s\+/ { s/^\s*PCAP_INTF\s\+//; s/\s\+$//; p; q; }' /etc/fwknop/fwknopd.conf )"
+ if [ -n "$DEPEND_IFNAME" ]; then
+ logger -p daemon.debug -t "fwknopd[----]" "Found fwknopd.conf configuration, using PCAP_INTF interface $DEPEND_IFNAME"
+ else
+ logger -p daemon.info -t "fwknopd[----]" "No PCAP_INTF interface specified in fwknopd.conf, fwknopd's default $DEFAULT_FWKNOPD_IFNAME will be used"
+ DEPEND_IFNAME="$DEFAULT_FWKNOPD_IFNAME"
+ fi
+ else
+ logger -p daemon.error -t "fwknopd[----]" "No $USER_CONFIG_PATH found, not starting"
+ exit 1
+ fi
+ elif [ $UCI_ENABLED -eq 1 ]; then
+ if [ -n "$NETWORK" ] && [ -n "$PCAP_INTF" ]; then
+ logger -p daemon.warn -t "fwknopd[----]" "Specified both network and PCAP_INTF. Ignoring PCAP_INTF"
+ elif [ -z "$NETWORK" ] && [ -z "$PCAP_INTF" ]; then
+ # Fallback - compatibility with old script, which used wan interface by default
+ logger -p daemon.info -t "fwknopd[----]" "Neither network, nor PCAP_INTF interface specified, trying network $DEFAULT_UCI_NETWORK"
+ NETWORK="$DEFAULT_UCI_NETWORK"
+ fi
+
+ if [ -n "$NETWORK" ]; then
+ . /lib/functions/network.sh
+ network_get_physdev DEPEND_IFNAME "$NETWORK"
+ if [ -n "$DEPEND_IFNAME" ]; then
+ logger -p daemon.debug -t "fwknopd[----]" "Resolved network $NETWORK as interface $DEPEND_IFNAME"
+ else
+ logger -p daemon.warn -t "fwknopd[----]" "Cannot find interface for network $NETWORK, fwknopd's default $DEFAULT_FWKNOPD_IFNAME will be used"
+ DEPEND_IFNAME="$DEFAULT_FWKNOPD_IFNAME"
+ fi
+ elif [ -n "$PCAP_INTF" ]; then
+ DEPEND_IFNAME="$PCAP_INTF"
+ logger -p daemon.debug -t "fwknopd[----]" "Using configured PCAP_INTF interface $DEPEND_IFNAME"
+ fi
+ fi
}
include $(TOPDIR)/rules.mk
PKG_NAME:=git
-PKG_VERSION:=2.14.2
+PKG_VERSION:=2.15.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/software/scm/git/
-PKG_HASH:=50e9723996114ad1eec4dda89960d9fe34461749ae42031008a261fedd03c7a1
+PKG_HASH:=999c90fd7d45066992cdb87dda35bdff6dfc1d01496118ea718dfb866da4045c
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
define Package/git-http
$(call Package/git/Default)
- DEPENDS+=git +libcurl +ca-certificates
+ DEPENDS+= +git +libcurl +ca-certificates
TITLE:=Git HTTP commands
endef
define Package/git-gitweb
$(call Package/git/Default)
TITLE:=Git repository web interface
- DEPENDS:=git +perlbase-essential +perlbase-file +perlbase-fcntl +perlbase-encode +perlbase-digest +perlbase-time +perl-cgi
+ DEPENDS+= +git +perlbase-essential +perlbase-file +perlbase-fcntl +perlbase-encode +perlbase-digest +perlbase-time +perl-cgi
endef
define Package/git-gitweb/description
include $(TOPDIR)/rules.mk
PKG_NAME:=gnunet
-PKG_SOURCE_VERSION:=664aca2d29b15dd75967d2bb0298caf750993b6f
-PKG_MIRROR_HASH:=d3fd9f9275e3173b392ea3d151130fae9fb507986c5bd6a369303e0e1e0ab6d6
+PKG_SOURCE_VERSION:=a3dace8401c482f18bddbad37da108433c1b08c7
+PKG_MIRROR_HASH:=00ab1eaed040e8479a38b9bfa2a59f029d6273cb2e275b637d1c501200bbbfd9
-PKG_VERSION:=0.10.2-git-20171004-$(PKG_SOURCE_VERSION)
+PKG_VERSION:=0.10.2-git-20171108-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
include $(TOPDIR)/rules.mk
PKG_NAME:=gnurl
-PKG_VERSION:=7.55.1-4
+PKG_VERSION:=7.56.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://gnunet.org/sites/default/files
-PKG_HASH:=d4758822f84fe961d9253d3d7ff742c9cd0d39d5340d441b8014771eb95b8125
+PKG_HASH:=c8069972327e47fa7e4f36754cbaa5d27e75ebb3de11a9b10ba628c0e9d00b5e
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=haproxy
-PKG_VERSION:=1.7.8
-PKG_RELEASE:=18
+PKG_VERSION:=1.7.9
+PKG_RELEASE:=02
PKG_SOURCE:=haproxy-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.haproxy.org/download/1.7/src/
-PKG_HASH:=ec90153ccedd20ad4015d3eaf76b502ff1f61b431d54c22b8457b5784a9ae142
+PKG_HASH:=1072337e54fa188dc6e0cfe3ba4c2200b07082e321cbfe5a0882d85d54db068e
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
PKG_LICENSE:=GPL-2.0
URL:=http://haproxy.1wt.eu/
endef
-define Download/lua533
- FILE:=lua-5.3.3.tar.gz
+define Download/lua534
+ FILE:=lua-5.3.4.tar.gz
URL:=http://www.lua.org/ftp/
- HASH:=5113c06884f7de453ce57702abaac1d618307f33f6789fa870e87a59d772aca2
+ HASH:=f681aa518233bc407e23acf0f5887c884f17436f000d453b2491a9f11a52400c
endef
define Build/Prepare
$(call Build/Prepare/Default)
- tar -zxvf $(DL_DIR)/lua-5.3.3.tar.gz -C $(PKG_BUILD_DIR)
- ln -s $(PKG_BUILD_DIR)/lua-5.3.3 $(PKG_BUILD_DIR)/lua
+ifeq ($(ENABLE_LUA),y)
+ tar -zxvf $(DL_DIR)/lua-5.3.4.tar.gz -C $(PKG_BUILD_DIR)
+ ln -s $(PKG_BUILD_DIR)/lua-5.3.4 $(PKG_BUILD_DIR)/lua
+endif
endef
define Package/haproxy/Default/conffiles
This package is built without SSL support.
endef
+ENABLE_LUA:=y
+ifeq ($(CONFIG_mips),y)
+ ENABLE_LUA:=n
+endif
+
ifeq ($(CONFIG_avr32),y)
LINUX_TARGET:=linux26
else
ifeq ($(BUILD_VARIANT),ssl)
ADDON+=USE_OPENSSL=1
+ ADDON+=ADDLIB="-lcrypto -lm "
+else ifeq ($(CONFIG_mips),n)
ADDON+=USE_LUA=1
- ADDON+=LUA_LIB_NAME="lua533"
- ADDON+=LUA_INC="$(STAGING_DIR)/lua-5.3.3/include"
- ADDON+=LUA_LIB="$(STAGING_DIR)/lua-5.3.3/lib"
- ADDON+=ADDLIB="-lcrypto -lm "
+ ADDON+=LUA_LIB_NAME="lua534"
+ ADDON+=LUA_INC="$(STAGING_DIR)/lua-5.3.4/include"
+ ADDON+=LUA_LIB="$(STAGING_DIR)/lua-5.3.4/lib"
else
ADDON+=ADDLIB="-lm"
endif
-
-define Build/Compile
+ifeq ($(ENABLE_LUA),y)
+define Build/Compile/lua
$(MAKE) TARGET=$(LINUX_TARGET) -C $(PKG_BUILD_DIR)/lua \
- INSTALL_TOP="$(STAGING_DIR)/lua-5.3.3/" \
+ INSTALL_TOP="$(STAGING_DIR)/lua-5.3.4/" \
CC="$(TARGET_CC)" \
CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \
LDFLAGS="$(TARGET_LDFLAGS) -lncurses -lreadline" \
LD="$(TARGET_LD)" \
linux install
- mv $(STAGING_DIR)/lua-5.3.3/lib/liblua.a $(STAGING_DIR)/lua-5.3.3/lib/liblua533.a
+ mv $(STAGING_DIR)/lua-5.3.4/lib/liblua.a $(STAGING_DIR)/lua-5.3.4/lib/liblua534.a
+endef
+endif
+define Build/Compile
+ $(call Build/Compile/lua)
$(MAKE) TARGET=$(LINUX_TARGET) -C $(PKG_BUILD_DIR) \
DESTDIR="$(PKG_INSTALL_DIR)" \
CC="$(TARGET_CC)" \
Package/haproxy-nossl/install = $(Package/haproxy/install)
-
define Package/halog
MENU:=1
$(call Package/haproxy)
$(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/halog/halog $(1)/usr/bin/
endef
-$(eval $(call Download,lua533))
+$(eval $(call Download,lua534))
$(eval $(call BuildPackage,haproxy))
$(eval $(call BuildPackage,halog))
$(eval $(call BuildPackage,haproxy-nossl))
-
--- /dev/null
+From 912e8f18ef274fdda0a522b2aa8255bddd00fb7b Mon Sep 17 00:00:00 2001
+From: Willy Tarreau <w@1wt.eu>
+Date: Wed, 30 Aug 2017 07:35:35 +0200
+Subject: [PATCH] BUG/MEDIUM: connection: remove useless flag CO_FL_DATA_RD_SH
+
+This flag is both confusing and wrong. It is supposed to report the
+fact that the data layer has received a shutdown, but in fact this is
+reported by CO_FL_SOCK_RD_SH which is set by the transport layer after
+this condition is detected. The only case where the flag above is set
+is in the stream interface where CF_SHUTR is also set on the receiving
+channel.
+
+In addition, it was checked in the health checks code (while never set)
+and was always test jointly with CO_FL_SOCK_RD_SH everywhere, except in
+conn_data_read0_pending() which incorrectly doesn't match the second
+time it's called and is fortunately protected by an extra check on
+(ic->flags & CF_SHUTR).
+
+This patch gets rid of the flag completely. Now conn_data_read0_pending()
+accurately reports the fact that the transport layer has detected the end
+of the stream, regardless of the fact that this state was already consumed,
+and the stream interface watches ic->flags&CF_SHUTR to know if the channel
+was already closed by the upper layer (which it already used to do).
+
+The now unused conn_data_read0() function was removed.
+(cherry picked from commit 54e917cfa1e7b0539550ae32c48c76da2f169041)
+
+[wt: this happens to fix a real bug which occasionally strikes when
+ using http-reuse in the rare case where a server shuts down after
+ providing its response but before the connection is put back into
+ the idle pool, and it gets immediately recycled for another request,
+ without first passing through the idle handler, and the already
+ reported shutdown is never reported to the second transaction,
+ causing a loop to last for as long as the server timeout]
+---
+ contrib/debug/flags.c | 1 -
+ include/proto/connection.h | 8 +-------
+ include/types/connection.h | 2 +-
+ src/checks.c | 4 ++--
+ src/stream_interface.c | 11 +++++------
+ 5 files changed, 9 insertions(+), 17 deletions(-)
+
+diff --git a/contrib/debug/flags.c b/contrib/debug/flags.c
+index bc71bde9..19327f34 100644
+--- a/contrib/debug/flags.c
++++ b/contrib/debug/flags.c
+@@ -117,7 +117,6 @@ void show_conn_flags(unsigned int f)
+ SHOW_FLAG(f, CO_FL_SOCK_WR_SH);
+ SHOW_FLAG(f, CO_FL_SOCK_RD_SH);
+ SHOW_FLAG(f, CO_FL_DATA_WR_SH);
+- SHOW_FLAG(f, CO_FL_DATA_RD_SH);
+ SHOW_FLAG(f, CO_FL_WAKE_DATA);
+ SHOW_FLAG(f, CO_FL_INIT_DATA);
+ SHOW_FLAG(f, CO_FL_ADDR_TO_SET);
+diff --git a/include/proto/connection.h b/include/proto/connection.h
+index fce60259..eb68322a 100644
+--- a/include/proto/connection.h
++++ b/include/proto/connection.h
+@@ -413,12 +413,6 @@ static inline void conn_sock_read0(struct connection *c)
+ fdtab[c->t.sock.fd].linger_risk = 0;
+ }
+
+-static inline void conn_data_read0(struct connection *c)
+-{
+- c->flags |= CO_FL_DATA_RD_SH;
+- __conn_data_stop_recv(c);
+-}
+-
+ static inline void conn_sock_shutw(struct connection *c)
+ {
+ c->flags |= CO_FL_SOCK_WR_SH;
+@@ -450,7 +444,7 @@ static inline void conn_data_shutw_hard(struct connection *c)
+ /* detect sock->data read0 transition */
+ static inline int conn_data_read0_pending(struct connection *c)
+ {
+- return (c->flags & (CO_FL_DATA_RD_SH | CO_FL_SOCK_RD_SH)) == CO_FL_SOCK_RD_SH;
++ return (c->flags & CO_FL_SOCK_RD_SH) != 0;
+ }
+
+ /* detect data->sock shutw transition */
+diff --git a/include/types/connection.h b/include/types/connection.h
+index 02eac932..90e8e073 100644
+--- a/include/types/connection.h
++++ b/include/types/connection.h
+@@ -90,7 +90,7 @@ enum {
+ CO_FL_WAKE_DATA = 0x00008000, /* wake-up data layer upon activity at the transport layer */
+
+ /* flags used to remember what shutdown have been performed/reported */
+- CO_FL_DATA_RD_SH = 0x00010000, /* DATA layer was notified about shutr/read0 */
++ /* unused : 0x00010000 */
+ CO_FL_DATA_WR_SH = 0x00020000, /* DATA layer asked for shutw */
+ CO_FL_SOCK_RD_SH = 0x00040000, /* SOCK layer was notified about shutr/read0 */
+ CO_FL_SOCK_WR_SH = 0x00080000, /* SOCK layer asked for shutw */
+diff --git a/src/checks.c b/src/checks.c
+index ca3881a5..6c5e3cbc 100644
+--- a/src/checks.c
++++ b/src/checks.c
+@@ -839,7 +839,7 @@ static void event_srv_chk_r(struct connection *conn)
+ done = 0;
+
+ conn->xprt->rcv_buf(conn, check->bi, check->bi->size);
+- if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_DATA_RD_SH)) {
++ if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH)) {
+ done = 1;
+ if ((conn->flags & CO_FL_ERROR) && !check->bi->i) {
+ /* Report network errors only if we got no other data. Otherwise
+@@ -2892,7 +2892,7 @@ static void tcpcheck_main(struct connection *conn)
+ goto out_end_tcpcheck;
+
+ if (conn->xprt->rcv_buf(conn, check->bi, check->bi->size) <= 0) {
+- if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_DATA_RD_SH)) {
++ if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH)) {
+ done = 1;
+ if ((conn->flags & CO_FL_ERROR) && !check->bi->i) {
+ /* Report network errors only if we got no other data. Otherwise
+diff --git a/src/stream_interface.c b/src/stream_interface.c
+index 836487bd..aba49c94 100644
+--- a/src/stream_interface.c
++++ b/src/stream_interface.c
+@@ -1060,14 +1060,14 @@ static void si_conn_recv_cb(struct connection *conn)
+ if (conn->flags & CO_FL_ERROR)
+ return;
+
+- /* stop here if we reached the end of data */
+- if (conn_data_read0_pending(conn))
+- goto out_shutdown_r;
+-
+ /* maybe we were called immediately after an asynchronous shutr */
+ if (ic->flags & CF_SHUTR)
+ return;
+
++ /* stop here if we reached the end of data */
++ if (conn_data_read0_pending(conn))
++ goto out_shutdown_r;
++
+ cur_read = 0;
+
+ if ((ic->flags & (CF_STREAMER | CF_STREAMER_FAST)) && !ic->buf->o &&
+@@ -1153,7 +1153,7 @@ static void si_conn_recv_cb(struct connection *conn)
+ * that if such an event is not handled above in splice, it will be handled here by
+ * recv().
+ */
+- while (!(conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_DATA_RD_SH | CO_FL_WAIT_ROOM | CO_FL_HANDSHAKE))) {
++ while (!(conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_WAIT_ROOM | CO_FL_HANDSHAKE)) && !(ic->flags & CF_SHUTR)) {
+ max = channel_recv_max(ic);
+
+ if (!max) {
+@@ -1267,7 +1267,6 @@ static void si_conn_recv_cb(struct connection *conn)
+ if (ic->flags & CF_AUTO_CLOSE)
+ channel_shutw_now(ic);
+ stream_sock_read0(si);
+- conn_data_read0(conn);
+ return;
+ }
+
+--
+2.13.5
+
+++ /dev/null
-From fa73e6b0d5f64eb8a6fd8a1706d7ec03293a943e Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= <flecaille@haproxy.com>
-Date: Thu, 13 Jul 2017 09:07:09 +0200
-Subject: [PATCH 01/18] BUG/MINOR: peers: peer synchronization issue (with
- several peers sections).
-
-When several stick-tables were configured with several peers sections,
-only a part of them could be synchronized: the ones attached to the last
-parsed 'peers' section. This was due to the fact that, at least, the peer I/O handler
-refered to the wrong peer section list, in fact always the same: the last one parsed.
-
-The fact that the global peer section list was named "struct peers *peers"
-lead to this issue. This variable name is dangerous ;).
-
-So this patch renames global 'peers' variable to 'cfg_peers' to ensure that
-no such wrong references are still in use, then all the functions wich used
-old 'peers' variable have been modified to refer to the correct peer list.
-
-Must be backported to 1.6 and 1.7.
-(cherry picked from commit ed2b4a6b793d062000518e51ed71e014c649c313)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- include/types/peers.h | 2 +-
- src/cfgparse.c | 18 +++++++++---------
- src/haproxy.c | 10 +++++-----
- src/peers.c | 40 ++++++++++++++++++++--------------------
- src/proxy.c | 6 +++---
- 5 files changed, 38 insertions(+), 38 deletions(-)
-
-diff --git a/include/types/peers.h b/include/types/peers.h
-index 105dffb0..a77a0942 100644
---- a/include/types/peers.h
-+++ b/include/types/peers.h
-@@ -91,7 +91,7 @@ struct peers {
- };
-
-
--extern struct peers *peers;
-+extern struct peers *cfg_peers;
-
- #endif /* _TYPES_PEERS_H */
-
-diff --git a/src/cfgparse.c b/src/cfgparse.c
-index 8c0906bf..1b53006b 100644
---- a/src/cfgparse.c
-+++ b/src/cfgparse.c
-@@ -2124,7 +2124,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm)
- goto out;
- }
-
-- for (curpeers = peers; curpeers != NULL; curpeers = curpeers->next) {
-+ for (curpeers = cfg_peers; curpeers != NULL; curpeers = curpeers->next) {
- /*
- * If there are two proxies with the same name only following
- * combinations are allowed:
-@@ -2142,8 +2142,8 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm)
- goto out;
- }
-
-- curpeers->next = peers;
-- peers = curpeers;
-+ curpeers->next = cfg_peers;
-+ cfg_peers = curpeers;
- curpeers->conf.file = strdup(file);
- curpeers->conf.line = linenum;
- curpeers->last_change = now.tv_sec;
-@@ -2223,7 +2223,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm)
- if (strcmp(newpeer->id, localpeer) == 0) {
- /* Current is local peer, it define a frontend */
- newpeer->local = 1;
-- peers->local = newpeer;
-+ cfg_peers->local = newpeer;
-
- if (!curpeers->peers_fe) {
- if ((curpeers->peers_fe = calloc(1, sizeof(struct proxy))) == NULL) {
-@@ -8189,9 +8189,9 @@ int check_config_validity()
- }
-
- if (curproxy->table.peers.name) {
-- struct peers *curpeers = peers;
-+ struct peers *curpeers;
-
-- for (curpeers = peers; curpeers; curpeers = curpeers->next) {
-+ for (curpeers = cfg_peers; curpeers; curpeers = curpeers->next) {
- if (strcmp(curpeers->id, curproxy->table.peers.name) == 0) {
- free((void *)curproxy->table.peers.name);
- curproxy->table.peers.p = curpeers;
-@@ -9279,15 +9279,15 @@ out_uri_auth_compat:
- if (curproxy->table.peers.p)
- curproxy->table.peers.p->peers_fe->bind_proc |= curproxy->bind_proc;
-
-- if (peers) {
-- struct peers *curpeers = peers, **last;
-+ if (cfg_peers) {
-+ struct peers *curpeers = cfg_peers, **last;
- struct peer *p, *pb;
-
- /* Remove all peers sections which don't have a valid listener,
- * which are not used by any table, or which are bound to more
- * than one process.
- */
-- last = &peers;
-+ last = &cfg_peers;
- while (*last) {
- curpeers = *last;
-
-diff --git a/src/haproxy.c b/src/haproxy.c
-index 6d09aed4..25cea0cd 100644
---- a/src/haproxy.c
-+++ b/src/haproxy.c
-@@ -988,7 +988,7 @@ void init(int argc, char **argv)
- struct peers *pr;
- struct proxy *px;
-
-- for (pr = peers; pr; pr = pr->next)
-+ for (pr = cfg_peers; pr; pr = pr->next)
- if (pr->peers_fe)
- break;
-
-@@ -1217,11 +1217,11 @@ void init(int argc, char **argv)
- if (global.stats_fe)
- global.maxsock += global.stats_fe->maxconn;
-
-- if (peers) {
-+ if (cfg_peers) {
- /* peers also need to bypass global maxconn */
-- struct peers *p = peers;
-+ struct peers *p = cfg_peers;
-
-- for (p = peers; p; p = p->next)
-+ for (p = cfg_peers; p; p = p->next)
- if (p->peers_fe)
- global.maxsock += p->peers_fe->maxconn;
- }
-@@ -2067,7 +2067,7 @@ int main(int argc, char **argv)
- }
-
- /* we might have to unbind some peers sections from some processes */
-- for (curpeers = peers; curpeers; curpeers = curpeers->next) {
-+ for (curpeers = cfg_peers; curpeers; curpeers = curpeers->next) {
- if (!curpeers->peers_fe)
- continue;
-
-diff --git a/src/peers.c b/src/peers.c
-index 543c84c1..5b8a287a 100644
---- a/src/peers.c
-+++ b/src/peers.c
-@@ -171,7 +171,7 @@ enum {
- #define PEER_MINOR_VER 1
- #define PEER_DWNGRD_MINOR_VER 0
-
--struct peers *peers = NULL;
-+struct peers *cfg_peers = NULL;
- static void peer_session_forceshutdown(struct appctx *appctx);
-
- /* This function encode an uint64 to 'dynamic' length format.
-@@ -727,19 +727,19 @@ switchstate:
- /* if current peer is local */
- if (curpeer->local) {
- /* if current host need resyncfrom local and no process assined */
-- if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMLOCAL &&
-- !(peers->flags & PEERS_F_RESYNC_ASSIGN)) {
-+ if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMLOCAL &&
-+ !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) {
- /* assign local peer for a lesson, consider lesson already requested */
- curpeer->flags |= PEER_F_LEARN_ASSIGN;
-- peers->flags |= (PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-+ curpeers->flags |= (PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
- }
-
- }
-- else if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
-- !(peers->flags & PEERS_F_RESYNC_ASSIGN)) {
-+ else if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
-+ !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) {
- /* assign peer for a lesson */
- curpeer->flags |= PEER_F_LEARN_ASSIGN;
-- peers->flags |= PEERS_F_RESYNC_ASSIGN;
-+ curpeers->flags |= PEERS_F_RESYNC_ASSIGN;
- }
-
-
-@@ -807,7 +807,7 @@ switchstate:
- curpeer->statuscode = atoi(trash.str);
-
- /* Awake main task */
-- task_wakeup(peers->sync_task, TASK_WOKEN_MSG);
-+ task_wakeup(curpeers->sync_task, TASK_WOKEN_MSG);
-
- /* If status code is success */
- if (curpeer->statuscode == PEER_SESS_SC_SUCCESSCODE) {
-@@ -830,14 +830,14 @@ switchstate:
- curpeer->flags |= PEER_F_TEACH_PROCESS;
-
- }
-- else if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
-- !(peers->flags & PEERS_F_RESYNC_ASSIGN)) {
-+ else if ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FROMREMOTE &&
-+ !(curpeers->flags & PEERS_F_RESYNC_ASSIGN)) {
- /* If peer is remote and resync from remote is needed,
- and no peer currently assigned */
-
- /* assign peer for a lesson */
- curpeer->flags |= PEER_F_LEARN_ASSIGN;
-- peers->flags |= PEERS_F_RESYNC_ASSIGN;
-+ curpeers->flags |= PEERS_F_RESYNC_ASSIGN;
- }
-
- }
-@@ -950,8 +950,8 @@ switchstate:
-
- if (curpeer->flags & PEER_F_LEARN_ASSIGN) {
- curpeer->flags &= ~PEER_F_LEARN_ASSIGN;
-- peers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-- peers->flags |= (PEERS_F_RESYNC_LOCAL|PEERS_F_RESYNC_REMOTE);
-+ curpeers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-+ curpeers->flags |= (PEERS_F_RESYNC_LOCAL|PEERS_F_RESYNC_REMOTE);
- }
- curpeer->confirm++;
- }
-@@ -959,11 +959,11 @@ switchstate:
-
- if (curpeer->flags & PEER_F_LEARN_ASSIGN) {
- curpeer->flags &= ~PEER_F_LEARN_ASSIGN;
-- peers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-+ curpeers->flags &= ~(PEERS_F_RESYNC_ASSIGN|PEERS_F_RESYNC_PROCESS);
-
- curpeer->flags |= PEER_F_LEARN_NOTUP2DATE;
-- peers->resync_timeout = tick_add(now_ms, MS_TO_TICKS(5000));
-- task_wakeup(peers->sync_task, TASK_WOKEN_MSG);
-+ curpeers->resync_timeout = tick_add(now_ms, MS_TO_TICKS(5000));
-+ task_wakeup(curpeers->sync_task, TASK_WOKEN_MSG);
- }
- curpeer->confirm++;
- }
-@@ -1334,8 +1334,8 @@ incomplete:
-
- /* Need to request a resync */
- if ((curpeer->flags & PEER_F_LEARN_ASSIGN) &&
-- (peers->flags & PEERS_F_RESYNC_ASSIGN) &&
-- !(peers->flags & PEERS_F_RESYNC_PROCESS)) {
-+ (curpeers->flags & PEERS_F_RESYNC_ASSIGN) &&
-+ !(curpeers->flags & PEERS_F_RESYNC_PROCESS)) {
- unsigned char msg[2];
-
- /* Current peer was elected to request a resync */
-@@ -1351,7 +1351,7 @@ incomplete:
- appctx->st0 = PEER_SESS_ST_END;
- goto switchstate;
- }
-- peers->flags |= PEERS_F_RESYNC_PROCESS;
-+ curpeers->flags |= PEERS_F_RESYNC_PROCESS;
- }
-
- /* Nothing to read, now we start to write */
-@@ -1624,7 +1624,7 @@ incomplete:
-
- /* Current peer was elected to request a resync */
- msg[0] = PEER_MSG_CLASS_CONTROL;
-- msg[1] = ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FINISHED) ? PEER_MSG_CTRL_RESYNCFINISHED : PEER_MSG_CTRL_RESYNCPARTIAL;
-+ msg[1] = ((curpeers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FINISHED) ? PEER_MSG_CTRL_RESYNCFINISHED : PEER_MSG_CTRL_RESYNCPARTIAL;
- /* process final lesson message */
- repl = bi_putblk(si_ic(si), (char *)msg, sizeof(msg));
- if (repl <= 0) {
-diff --git a/src/proxy.c b/src/proxy.c
-index 78120d9b..bedc7ae0 100644
---- a/src/proxy.c
-+++ b/src/proxy.c
-@@ -1007,7 +1007,7 @@ void soft_stop(void)
- p = p->next;
- }
-
-- prs = peers;
-+ prs = cfg_peers;
- while (prs) {
- if (prs->peers_fe)
- stop_proxy(prs->peers_fe);
-@@ -1142,7 +1142,7 @@ void pause_proxies(void)
- p = p->next;
- }
-
-- prs = peers;
-+ prs = cfg_peers;
- while (prs) {
- if (prs->peers_fe)
- err |= !pause_proxy(prs->peers_fe);
-@@ -1176,7 +1176,7 @@ void resume_proxies(void)
- p = p->next;
- }
-
-- prs = peers;
-+ prs = cfg_peers;
- while (prs) {
- if (prs->peers_fe)
- err |= !resume_proxy(prs->peers_fe);
---
-2.13.0
-
+++ /dev/null
-From bcc483a9edfeb8ab69d1af83886d9e1323cffd06 Mon Sep 17 00:00:00 2001
-From: Thierry FOURNIER <thierry.fournier@ozon.io>
-Date: Wed, 12 Jul 2017 11:18:00 +0200
-Subject: [PATCH 02/18] BUG/MINOR: lua: In error case, the safe mode is not
- removed
-
-Just forgot of reset the safe mode. This have not consequences
-the safe mode just set a pointer on fucntion which is called only
-and initialises a longjmp.
-
-Out of lua execution, this longjmp is never executed and the
-function is never called.
-
-This patch should be backported in 1.6 and 1.7
-(cherry picked from commit 0a97620c080232a21ad7fce2c859a2edc9d7147e)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- src/hlua.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/hlua.c b/src/hlua.c
-index c862102d..4c1c2d21 100644
---- a/src/hlua.c
-+++ b/src/hlua.c
-@@ -854,6 +854,7 @@ int hlua_ctx_init(struct hlua *lua, struct task *task)
- lua->T = lua_newthread(gL.T);
- if (!lua->T) {
- lua->Tref = LUA_REFNIL;
-+ RESET_SAFE_LJMP(gL.T);
- return 0;
- }
- hlua_sethlua(lua);
---
-2.13.0
-
+++ /dev/null
-From 49d319a677432b69c6a69ef5331ae2ed592075c9 Mon Sep 17 00:00:00 2001
-From: Thierry FOURNIER <thierry.fournier@ozon.io>
-Date: Wed, 12 Jul 2017 13:41:33 +0200
-Subject: [PATCH 03/18] BUG/MINOR: lua: executes the function destroying the
- Lua session in safe mode
-
-When we destroy the Lua session, we manipulates Lua stack,
-so errors can raises. It will be better to catch these errors.
-
-This patch should be backported in 1.6 and 1.7
-(cherry picked from commit 75d0208009c3189b5d10793e08f27dd62a76c3ae)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- src/hlua.c | 17 +++++++++++++++--
- 1 file changed, 15 insertions(+), 2 deletions(-)
-
-diff --git a/src/hlua.c b/src/hlua.c
-index 4c1c2d21..2d312804 100644
---- a/src/hlua.c
-+++ b/src/hlua.c
-@@ -876,9 +876,15 @@ void hlua_ctx_destroy(struct hlua *lua)
- /* Purge all the pending signals. */
- hlua_com_purge(lua);
-
-+ if (!SET_SAFE_LJMP(lua->T))
-+ return;
- luaL_unref(lua->T, LUA_REGISTRYINDEX, lua->Mref);
-- luaL_unref(gL.T, LUA_REGISTRYINDEX, lua->Tref);
-+ RESET_SAFE_LJMP(lua->T);
-
-+ if (!SET_SAFE_LJMP(gL.T))
-+ return;
-+ luaL_unref(gL.T, LUA_REGISTRYINDEX, lua->Tref);
-+ RESET_SAFE_LJMP(gL.T);
- /* Forces a garbage collecting process. If the Lua program is finished
- * without error, we run the GC on the thread pointer. Its freed all
- * the unused memory.
-@@ -889,9 +895,16 @@ void hlua_ctx_destroy(struct hlua *lua)
- * the garbage collection.
- */
- if (lua->flags & HLUA_MUST_GC) {
-+ if (!SET_SAFE_LJMP(lua->T))
-+ return;
- lua_gc(lua->T, LUA_GCCOLLECT, 0);
-- if (lua_status(lua->T) != LUA_OK)
-+ RESET_SAFE_LJMP(lua->T);
-+ if (lua_status(lua->T) != LUA_OK) {
-+ if (!SET_SAFE_LJMP(gL.T))
-+ return;
- lua_gc(gL.T, LUA_GCCOLLECT, 0);
-+ RESET_SAFE_LJMP(gL.T);
-+ }
- }
-
- lua->T = NULL;
---
-2.13.0
-
+++ /dev/null
-From 2823f54f706f56304970313cb14a98a4ce20d5ab Mon Sep 17 00:00:00 2001
-From: Thierry FOURNIER <thierry.fournier@ozon.io>
-Date: Sun, 16 Jul 2017 20:48:54 +0200
-Subject: [PATCH 04/18] BUG/MAJOR: lua/socket: resources not detroyed when the
- socket is aborted
-
-In some cases, the socket is misused. The user can open socket and never
-close it, or open the socket and close it without sending data. This
-causes resources leak on all resources associated to the stream (buffer,
-spoe, ...)
-
-This is caused by the stream_shutdown function which is called outside
-of the stream execution process. Sometimes, the shtudown is required
-while the stream is not started, so the cleanup is ignored.
-
-This patch change the shutdown mode of the session. Now if the session is
-no longer used and the Lua want to destroy it, it just set a destroy flag
-and the session kill itself.
-
-This patch should be backported in 1.6 and 1.7
-
-(cherry picked from cmomit b13b20a19aacb039a33f886e38a181b00c9a6d41)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- include/types/applet.h | 1 +
- src/hlua.c | 16 ++++++++++++++--
- 2 files changed, 15 insertions(+), 2 deletions(-)
-
-diff --git a/include/types/applet.h b/include/types/applet.h
-index 46b2bc10..aee9167e 100644
---- a/include/types/applet.h
-+++ b/include/types/applet.h
-@@ -122,6 +122,7 @@ struct appctx {
- struct hlua_socket *socket;
- struct list wake_on_read;
- struct list wake_on_write;
-+ int die;
- } hlua;
- struct {
- struct hlua hlua;
-diff --git a/src/hlua.c b/src/hlua.c
-index 2d312804..eb003558 100644
---- a/src/hlua.c
-+++ b/src/hlua.c
-@@ -1544,6 +1544,15 @@ static void hlua_socket_handler(struct appctx *appctx)
- struct stream_interface *si = appctx->owner;
- struct connection *c = objt_conn(si_opposite(si)->end);
-
-+ if (appctx->ctx.hlua.die) {
-+ si_shutw(si);
-+ si_shutr(si);
-+ si_ic(si)->flags |= CF_READ_NULL;
-+ hlua_com_wake(&appctx->ctx.hlua.wake_on_read);
-+ hlua_com_wake(&appctx->ctx.hlua.wake_on_write);
-+ stream_shutdown(si_strm(si), SF_ERR_KILLED);
-+ }
-+
- /* If the connection object is not avalaible, close all the
- * streams and wakeup everithing waiting for.
- */
-@@ -1619,9 +1628,10 @@ __LJMP static int hlua_socket_gc(lua_State *L)
-
- /* Remove all reference between the Lua stack and the coroutine stream. */
- appctx = objt_appctx(socket->s->si[0].end);
-- stream_shutdown(socket->s, SF_ERR_KILLED);
- socket->s = NULL;
- appctx->ctx.hlua.socket = NULL;
-+ appctx->ctx.hlua.die = 1;
-+ appctx_wakeup(appctx);
-
- return 0;
- }
-@@ -1641,10 +1651,11 @@ __LJMP static int hlua_socket_close(lua_State *L)
- return 0;
-
- /* Close the stream and remove the associated stop task. */
-- stream_shutdown(socket->s, SF_ERR_KILLED);
- appctx = objt_appctx(socket->s->si[0].end);
- appctx->ctx.hlua.socket = NULL;
- socket->s = NULL;
-+ appctx->ctx.hlua.die = 1;
-+ appctx_wakeup(appctx);
-
- return 0;
- }
-@@ -2316,6 +2327,7 @@ __LJMP static int hlua_socket_new(lua_State *L)
-
- appctx->ctx.hlua.socket = socket;
- appctx->ctx.hlua.connected = 0;
-+ appctx->ctx.hlua.die = 0;
- LIST_INIT(&appctx->ctx.hlua.wake_on_write);
- LIST_INIT(&appctx->ctx.hlua.wake_on_read);
-
---
-2.13.0
-
+++ /dev/null
-From ea3b479be6cacb399a6541a00b1bdce17b0179d0 Mon Sep 17 00:00:00 2001
-From: Thierry FOURNIER <thierry.fournier@ozon.io>
-Date: Mon, 17 Jul 2017 00:44:40 +0200
-Subject: [PATCH 05/18] BUG/MEDIUM: lua: bad memory access
-
-We cannot perform garbage collection on unreferenced thread.
-This memory is now free and another Lua process can use it for
-other things.
-
-HAProxy is monothread, so this bug doesn't cause crash.
-
-This patch must be backported in 1.6 and 1.7
-(cherry picked from commit 7bd10d58d3aecf7cf1e5ee7df01193e07128a52d)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- src/hlua.c | 12 +++---------
- 1 file changed, 3 insertions(+), 9 deletions(-)
-
-diff --git a/src/hlua.c b/src/hlua.c
-index eb003558..a998860e 100644
---- a/src/hlua.c
-+++ b/src/hlua.c
-@@ -895,16 +895,10 @@ void hlua_ctx_destroy(struct hlua *lua)
- * the garbage collection.
- */
- if (lua->flags & HLUA_MUST_GC) {
-- if (!SET_SAFE_LJMP(lua->T))
-+ if (!SET_SAFE_LJMP(gL.T))
- return;
-- lua_gc(lua->T, LUA_GCCOLLECT, 0);
-- RESET_SAFE_LJMP(lua->T);
-- if (lua_status(lua->T) != LUA_OK) {
-- if (!SET_SAFE_LJMP(gL.T))
-- return;
-- lua_gc(gL.T, LUA_GCCOLLECT, 0);
-- RESET_SAFE_LJMP(gL.T);
-- }
-+ lua_gc(gL.T, LUA_GCCOLLECT, 0);
-+ RESET_SAFE_LJMP(gL.T);
- }
-
- lua->T = NULL;
---
-2.13.0
-
+++ /dev/null
-From 20850d19250eb530cab889bb9059a630b3f805a3 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Tue, 18 Jul 2017 06:56:40 +0200
-Subject: [PATCH 06/18] DOC: update CONTRIBUTING regarding optional parts and
- message format
-
-Make it clear that optional components must not break when disabled,
-that openssl is the only officially supported library and its support
-must not be broken, and that bug fixes must always be detailed.
-(cherry picked from commit 9d84cd602f4adb3954209eb14c94eea9254d1b5b)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- CONTRIBUTING | 21 ++++++++++++++++++++-
- 1 file changed, 20 insertions(+), 1 deletion(-)
-
-diff --git a/CONTRIBUTING b/CONTRIBUTING
-index 74a099bc..b2c2b493 100644
---- a/CONTRIBUTING
-+++ b/CONTRIBUTING
-@@ -69,6 +69,16 @@ code :
- Since most of these restrictions are just a matter of coding style, it is
- normally not a problem to comply.
-
-+When modifying some optional subsystem (SSL, Lua, compression, device detection
-+engines), please make sure the code continues to build (and to work) when these
-+features are disabled. Similarly, when modifying the SSL stack, please always
-+ensure that supported OpenSSL versions continue to build and to work, especially
-+if you modify support for alternate libraries. Clean support for the legacy
-+OpenSSL libraries is mandatory, support for its derivatives is a bonus and may
-+occasionally break eventhough a great care is taken. In other words, if you
-+provide a patch for OpenSSL you don't need to test its derivatives, but if you
-+provide a patch for a derivative you also need to test with OpenSSL.
-+
- If your work is very confidential and you can't publicly discuss it, you can
- also mail willy@haproxy.org directly about it, but your mail may be waiting
- several days in the queue before you get a response, if you get a response at
-@@ -441,13 +451,22 @@ do not think about them anymore after a few patches.
- way the subject is built. Please see the section below for more information
- regarding this formatting.
-
-- As a rule of thumb, your patch must never be made only of a subject line,
-+ As a rule of thumb, your patch MUST NEVER be made only of a subject line,
- it *must* contain a description. Even one or two lines, or indicating
- whether a backport is desired or not. It turns out that single-line commits
- are so rare in the Git world that they require special manual (hence
- painful) handling when they are backported, and at least for this reason
- it's important to keep this in mind.
-
-+ Each patch fixing a bug MUST be tagged with "BUG", a severity level, an
-+ indication of the affected subsystem and a brief description of the nature
-+ of the issue in the subject line, and a detailed analysis in the message
-+ body. The explanation of the user-visible impact and the need for
-+ backporting to stable branches or not are MANDATORY. Bug fixes with no
-+ indication will simply be rejected as they are very likely to cause more
-+ harm when nobody is able to tell whether or not the patch needs to be
-+ backported or can be reverted in case of regression.
-+
- 12) Discuss on the mailing list
-
- When submitting changes, please always CC the mailing list address so that
---
-2.13.0
-
+++ /dev/null
-From 8d99949c4c51d95c14fb2b09d18e1cff058f0c17 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Tue, 18 Jul 2017 06:58:16 +0200
-Subject: [PATCH 07/18] DOC: update the list of OpenSSL versions in the README
-
-1.1.0 is also supported nowadays. Also mention the best effort support
-for derivatives.
-(cherry picked from commit 7ab16868bc6e9d5ef879e1046effa035789835cc)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- README | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/README b/README
-index 839d06ec..8ad70e66 100644
---- a/README
-+++ b/README
-@@ -113,8 +113,12 @@ build fails due to missing symbols such as deflateInit(), then try again with
- Your are strongly encouraged to always use an up-to-date version of OpenSSL, as
- found on https://www.openssl.org/ as vulnerabilities are occasionally found and
- you don't want them on your systems. HAProxy is known to build correctly on all
--currently supported branches (0.9.8, 1.0.0, 1.0.1 and 1.0.2 at the time of
--writing). Branch 1.0.2 is recommended for the richest features.
-+currently supported branches (0.9.8, 1.0.0, 1.0.1, 1.0.2 and 1.1.0 at the time
-+of writing). Branch 1.0.2 is currently recommended for the best combination of
-+features and stability. Asynchronous engines require OpenSSL 1.1.0 though. It's
-+worth mentionning that some OpenSSL derivatives are also reported to work but
-+may occasionally break. Patches to fix them are welcome but please read the
-+CONTRIBUTING file first.
-
- To link OpenSSL statically against haproxy, build OpenSSL with the no-shared
- keyword and install it to a local directory, so your system is not affected :
---
-2.13.0
-
+++ /dev/null
-From 3e21b8d25ad148ef4e6544f28a8b2305f9484a7b Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Wed, 19 Jul 2017 19:05:29 +0200
-Subject: [PATCH 08/18] MINOR: tools: add a portable timegm() alternative
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-timegm() is not provided everywhere and the documentation on how to
-replace it is bogus as it proposes an inefficient and non-thread safe
-alternative.
-
-Here we reimplement everything needed to compute the number of seconds
-since Epoch based on the broken down fields in struct tm. It is only
-guaranteed to return correct values for correct inputs. It was successfully
-tested with all possible 32-bit values of time_t converted to struct tm
-using gmtime() and back to time_t using the legacy timegm() and this
-function, and both functions always produced the same result.
-
-Thanks to Benoît Garnier for an instructive discussion and detailed
-explanations of the various time functions, leading to this solution.
-(cherry picked from commit cb1949b8b30b8db7e05546da2939eff2b5973321)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- include/common/standard.h | 21 ++++++++++++++++++
- src/standard.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 75 insertions(+)
-
-diff --git a/include/common/standard.h b/include/common/standard.h
-index 87f90a65..c19c368b 100644
---- a/include/common/standard.h
-+++ b/include/common/standard.h
-@@ -624,6 +624,27 @@ static inline void get_gmtime(const time_t now, struct tm *tm)
- gmtime_r(&now, tm);
- }
-
-+/* Counts a number of elapsed days since 01/01/0000 based solely on elapsed
-+ * years and assuming the regular rule for leap years applies. It's fake but
-+ * serves as a temporary origin. It's worth remembering that it's the first
-+ * year of each period that is leap and not the last one, so for instance year
-+ * 1 sees 366 days since year 0 was leap. For this reason we have to apply
-+ * modular arithmetics which is why we offset the year by 399 before
-+ * subtracting the excess at the end. No overflow here before ~11.7 million
-+ * years.
-+ */
-+static inline unsigned int days_since_zero(unsigned int y)
-+{
-+ return y * 365 + (y + 399) / 4 - (y + 399) / 100 + (y + 399) / 400
-+ - 399 / 4 + 399 / 100;
-+}
-+
-+/* Returns the number of seconds since 01/01/1970 0:0:0 GMT for GMT date <tm>.
-+ * It is meant as a portable replacement for timegm() for use with valid inputs.
-+ * Returns undefined results for invalid dates (eg: months out of range 0..11).
-+ */
-+extern time_t my_timegm(const struct tm *tm);
-+
- /* This function parses a time value optionally followed by a unit suffix among
- * "d", "h", "m", "s", "ms" or "us". It converts the value into the unit
- * expected by the caller. The computation does its best to avoid overflows.
-diff --git a/src/standard.c b/src/standard.c
-index 8df1da6c..e1d414f3 100644
---- a/src/standard.c
-+++ b/src/standard.c
-@@ -2841,6 +2841,60 @@ char *localdate2str_log(char *dst, time_t t, struct tm *tm, size_t size)
- return dst;
- }
-
-+/* Returns the number of seconds since 01/01/1970 0:0:0 GMT for GMT date <tm>.
-+ * It is meant as a portable replacement for timegm() for use with valid inputs.
-+ * Returns undefined results for invalid dates (eg: months out of range 0..11).
-+ */
-+time_t my_timegm(const struct tm *tm)
-+{
-+ /* Each month has 28, 29, 30 or 31 days, or 28+N. The date in the year
-+ * is thus (current month - 1)*28 + cumulated_N[month] to count the
-+ * sum of the extra N days for elapsed months. The sum of all these N
-+ * days doesn't exceed 30 for a complete year (366-12*28) so it fits
-+ * in a 5-bit word. This means that with 60 bits we can represent a
-+ * matrix of all these values at once, which is fast and efficient to
-+ * access. The extra February day for leap years is not counted here.
-+ *
-+ * Jan : none = 0 (0)
-+ * Feb : Jan = 3 (3)
-+ * Mar : Jan..Feb = 3 (3 + 0)
-+ * Apr : Jan..Mar = 6 (3 + 0 + 3)
-+ * May : Jan..Apr = 8 (3 + 0 + 3 + 2)
-+ * Jun : Jan..May = 11 (3 + 0 + 3 + 2 + 3)
-+ * Jul : Jan..Jun = 13 (3 + 0 + 3 + 2 + 3 + 2)
-+ * Aug : Jan..Jul = 16 (3 + 0 + 3 + 2 + 3 + 2 + 3)
-+ * Sep : Jan..Aug = 19 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3)
-+ * Oct : Jan..Sep = 21 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3 + 2)
-+ * Nov : Jan..Oct = 24 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3 + 2 + 3)
-+ * Dec : Jan..Nov = 26 (3 + 0 + 3 + 2 + 3 + 2 + 3 + 3 + 2 + 3 + 2)
-+ */
-+ uint64_t extra =
-+ ( 0ULL << 0*5) + ( 3ULL << 1*5) + ( 3ULL << 2*5) + /* Jan, Feb, Mar, */
-+ ( 6ULL << 3*5) + ( 8ULL << 4*5) + (11ULL << 5*5) + /* Apr, May, Jun, */
-+ (13ULL << 6*5) + (16ULL << 7*5) + (19ULL << 8*5) + /* Jul, Aug, Sep, */
-+ (21ULL << 9*5) + (24ULL << 10*5) + (26ULL << 11*5); /* Oct, Nov, Dec, */
-+
-+ unsigned int y = tm->tm_year + 1900;
-+ unsigned int m = tm->tm_mon;
-+ unsigned long days = 0;
-+
-+ /* days since 1/1/1970 for full years */
-+ days += days_since_zero(y) - days_since_zero(1970);
-+
-+ /* days for full months in the current year */
-+ days += 28 * m + ((extra >> (m * 5)) & 0x1f);
-+
-+ /* count + 1 after March for leap years. A leap year is a year multiple
-+ * of 4, unless it's multiple of 100 without being multiple of 400. 2000
-+ * is leap, 1900 isn't, 1904 is.
-+ */
-+ if ((m > 1) && !(y & 3) && ((y % 100) || !(y % 400)))
-+ days++;
-+
-+ days += tm->tm_mday - 1;
-+ return days * 86400ULL + tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec;
-+}
-+
- /* This function check a char. It returns true and updates
- * <date> and <len> pointer to the new position if the
- * character is found.
---
-2.13.0
-
+++ /dev/null
-From df1655a6c0e4431317cc66c67693281092a952b0 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Wed, 19 Jul 2017 19:08:48 +0200
-Subject: [PATCH 09/18] BUILD: lua: replace timegm() with my_timegm() to fix
- build on Solaris 10
-
-Akhnin Nikita reported that Lua doesn't build on Solaris 10 because
-the code uses timegm() to parse a date, which is not provided there.
-The recommended way to implement timegm() is broken in the man page,
-as it is based on a change of the TZ environment variable at run time
-before calling the function (which is obviously not thread safe, and
-terribly inefficient).
-
-Here instead we rely on the new my_timegm() function, it should be
-sufficient for all known use cases.
-(cherry picked from commit abd9bb20b76818c9f461a82b72b10818736ff8b3)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- src/hlua_fcn.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
-index 58905d7d..fe899a4a 100644
---- a/src/hlua_fcn.c
-+++ b/src/hlua_fcn.c
-@@ -287,7 +287,7 @@ static int hlua_parse_date(lua_State *L, int (*fcn)(const char *, int, struct tm
- * the timezone from the broken-down time, it must be fixed
- * after the conversion.
- */
-- time = timegm(&tm);
-+ time = my_timegm(&tm);
- if (time == -1) {
- lua_pushnil(L);
- return 1;
---
-2.13.0
-
+++ /dev/null
-From e14ec1d816de60b648dd7cb6c55b665f5163156b Mon Sep 17 00:00:00 2001
-From: ben51degrees <ben@51degrees.com>
-Date: Wed, 19 Jul 2017 16:22:04 +0100
-Subject: [PATCH 10/18] DOC: Updated 51Degrees git URL to point to a stable
- version.
-
-The previously documented location doesn't work anymore and must not be
-used. Warning for backports, different branches are in use depending on
-the version (v3.2.10 for 1.7, v3.2.5 for 1.6).
-(cherry picked from commit ac752ff68cd3ac88a7a27ce17daa5c3f0c839694)
-
-Signed-off-by: Willy Tarreau <w@1wt.eu>
----
- doc/51Degrees-device-detection.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/doc/51Degrees-device-detection.txt b/doc/51Degrees-device-detection.txt
-index 1ee912d9..71b2eb76 100644
---- a/doc/51Degrees-device-detection.txt
-+++ b/doc/51Degrees-device-detection.txt
-@@ -14,7 +14,7 @@ headers as configurable parameters.
- In order to enable 51Degrees download the 51Degrees source code from the
- official github repository :
-
-- git clone https://github.com/51Degrees/Device-Detection
-+ git clone https://git.51Degrees.com/Device-Detection.git -b v3.2.10
-
- then run 'make' with USE_51DEGREES and 51DEGREES_SRC set. Both 51DEGREES_INC
- and 51DEGREES_LIB may additionally be used to force specific different paths
---
-2.13.0
-
+++ /dev/null
-From 9304b76fb37a36f6249ec963093d74210bd237f6 Mon Sep 17 00:00:00 2001
-From: Christopher Faulet <cfaulet@haproxy.com>
-Date: Tue, 18 Jul 2017 10:35:55 +0200
-Subject: [PATCH 11/18] BUG/MINOR: http: Set the response error state in
- http_sync_res_state
-
-This is just typo. It may only report a wrong response message state in
-"show errors" on the CLI.
-
-This patch must be backported in 1.7.
-
-(cherry picked from commit a3992e06a6e74142d9784d18d8cb3527fadb64d6)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/proto_http.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index 94c8d639..796955f5 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -5530,7 +5530,7 @@ int http_sync_res_state(struct stream *s)
- goto http_msg_closed;
- }
- else if (chn->flags & CF_SHUTW) {
-- txn->req.err_state = txn->req.msg_state;
-+ txn->rsp.err_state = txn->rsp.msg_state;
- txn->rsp.msg_state = HTTP_MSG_ERROR;
- s->be->be_counters.cli_aborts++;
- if (objt_server(s->target))
---
-2.13.0
-
+++ /dev/null
-From a49007a187ab7fddfcec58e1d9fc8a707e4531c9 Mon Sep 17 00:00:00 2001
-From: Christopher Faulet <cfaulet@haproxy.com>
-Date: Tue, 18 Jul 2017 11:18:46 +0200
-Subject: [PATCH 12/18] MINOR: http: Reorder/rewrite checks in
- http_resync_states
-
-The previous patch removed the forced symmetry of the TUNNEL mode during the
-state synchronization. Here, we take care to remove body analyzer only on the
-channel in TUNNEL mode. In fact, today, this change has no effect because both
-sides are switched in same time. But this way, with some changes, it will be
-possible to keep body analyzer on a side (to finish the states synchronization)
-with the other one in TUNNEL mode.
-
-WARNING: This patch will be used to fix a bug. The fix will be commited in a
-very next commit. So if the fix is backported, this one must be backported too.
-
-(cherry picked from commit f77bb539d4846ab278269b99a3165a5608ca0cf4)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/proto_http.c | 48 +++++++++++++++++++++++++++++-------------------
- 1 file changed, 29 insertions(+), 19 deletions(-)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index 796955f5..aaf9f648 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -5577,34 +5577,27 @@ int http_resync_states(struct stream *s)
-
- /* OK, both state machines agree on a compatible state.
- * There are a few cases we're interested in :
-- * - HTTP_MSG_TUNNEL on either means we have to disable both analysers
- * - HTTP_MSG_CLOSED on both sides means we've reached the end in both
- * directions, so let's simply disable both analysers.
-- * - HTTP_MSG_CLOSED on the response only means we must abort the
-- * request.
-- * - HTTP_MSG_CLOSED on the request and HTTP_MSG_DONE on the response
-- * with server-close mode means we've completed one request and we
-- * must re-initialize the server connection.
-+ * - HTTP_MSG_CLOSED on the response only or HTTP_MSG_ERROR on either
-+ * means we must abort the request.
-+ * - HTTP_MSG_TUNNEL on either means we have to disable analyser on
-+ * corresponding channel.
-+ * - HTTP_MSG_DONE or HTTP_MSG_CLOSED on the request and HTTP_MSG_DONE
-+ * on the response with server-close mode means we've completed one
-+ * request and we must re-initialize the server connection.
- */
--
-- if (txn->req.msg_state == HTTP_MSG_TUNNEL ||
-- txn->rsp.msg_state == HTTP_MSG_TUNNEL ||
-- (txn->req.msg_state == HTTP_MSG_CLOSED &&
-- txn->rsp.msg_state == HTTP_MSG_CLOSED)) {
-+ if (txn->req.msg_state == HTTP_MSG_CLOSED &&
-+ txn->rsp.msg_state == HTTP_MSG_CLOSED) {
- s->req.analysers &= AN_REQ_FLT_END;
- channel_auto_close(&s->req);
- channel_auto_read(&s->req);
- s->res.analysers &= AN_RES_FLT_END;
- channel_auto_close(&s->res);
- channel_auto_read(&s->res);
-- if (txn->req.msg_state == HTTP_MSG_TUNNEL && HAS_REQ_DATA_FILTERS(s))
-- s->req.analysers |= AN_REQ_FLT_XFER_DATA;
-- if (txn->rsp.msg_state == HTTP_MSG_TUNNEL && HAS_RSP_DATA_FILTERS(s))
-- s->res.analysers |= AN_RES_FLT_XFER_DATA;
-- }
-- else if ((txn->req.msg_state >= HTTP_MSG_DONE &&
-- (txn->rsp.msg_state == HTTP_MSG_CLOSED || (s->res.flags & CF_SHUTW))) ||
-- txn->rsp.msg_state == HTTP_MSG_ERROR ||
-+ }
-+ else if (txn->rsp.msg_state == HTTP_MSG_CLOSED ||
-+ txn->rsp.msg_state == HTTP_MSG_ERROR ||
- txn->req.msg_state == HTTP_MSG_ERROR) {
- s->res.analysers &= AN_RES_FLT_END;
- channel_auto_close(&s->res);
-@@ -5615,6 +5608,23 @@ int http_resync_states(struct stream *s)
- channel_auto_read(&s->req);
- channel_truncate(&s->req);
- }
-+ else if (txn->req.msg_state == HTTP_MSG_TUNNEL ||
-+ txn->rsp.msg_state == HTTP_MSG_TUNNEL) {
-+ if (txn->req.msg_state == HTTP_MSG_TUNNEL) {
-+ s->req.analysers &= AN_REQ_FLT_END;
-+ if (HAS_REQ_DATA_FILTERS(s))
-+ s->req.analysers |= AN_REQ_FLT_XFER_DATA;
-+ }
-+ if (txn->rsp.msg_state == HTTP_MSG_TUNNEL) {
-+ s->res.analysers &= AN_RES_FLT_END;
-+ if (HAS_RSP_DATA_FILTERS(s))
-+ s->res.analysers |= AN_RES_FLT_XFER_DATA;
-+ }
-+ channel_auto_close(&s->req);
-+ channel_auto_read(&s->req);
-+ channel_auto_close(&s->res);
-+ channel_auto_read(&s->res);
-+ }
- else if ((txn->req.msg_state == HTTP_MSG_DONE ||
- txn->req.msg_state == HTTP_MSG_CLOSED) &&
- txn->rsp.msg_state == HTTP_MSG_DONE &&
---
-2.13.0
-
+++ /dev/null
-From 1430a0c0f62fcff4303706f5baf2b544e00fcda3 Mon Sep 17 00:00:00 2001
-From: Christopher Faulet <cfaulet@haproxy.com>
-Date: Tue, 18 Jul 2017 10:48:24 +0200
-Subject: [PATCH 13/18] MINOR: http: Switch requests/responses in TUNNEL mode
- only by checking txn flags
-
-Today, the only way to have a request or a response in HTTP_MSG_TUNNEL state is
-to have the flag TX_CON_WANT_TUN set on the transaction. So this is a symmetric
-state. Both the request and the response are switch in same time in this
-state. This can be done only by checking transaction flags instead of relying on
-the other side state. This is the purpose of this patch.
-
-This way, if for any reason we need to switch only one side in TUNNEL mode, it
-will be possible. And to prepare asymmetric cases, we check channel flags in
-DONE _AND_ TUNNEL states.
-
-WARNING: This patch will be used to fix a bug. The fix will be commited in a
-very next commit. So if the fix is backported, this one must be backported too.
-
-(cherry picked from commit 4be9803914ae7156109c915659aad216e4a3c6c1)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/proto_http.c | 65 +++++++++++++++++++-------------------------------------
- 1 file changed, 22 insertions(+), 43 deletions(-)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index aaf9f648..00a92cdb 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -5294,7 +5294,7 @@ int http_sync_req_state(struct stream *s)
- unsigned int old_flags = chn->flags;
- unsigned int old_state = txn->req.msg_state;
-
-- if (unlikely(txn->req.msg_state < HTTP_MSG_BODY))
-+ if (unlikely(txn->req.msg_state < HTTP_MSG_DONE))
- return 0;
-
- if (txn->req.msg_state == HTTP_MSG_DONE) {
-@@ -5338,13 +5338,6 @@ int http_sync_req_state(struct stream *s)
- goto wait_other_side;
- }
-
-- if (txn->rsp.msg_state == HTTP_MSG_TUNNEL) {
-- /* if any side switches to tunnel mode, the other one does too */
-- channel_auto_read(chn);
-- txn->req.msg_state = HTTP_MSG_TUNNEL;
-- goto wait_other_side;
-- }
--
- /* When we get here, it means that both the request and the
- * response have finished receiving. Depending on the connection
- * mode, we'll have to wait for the last bytes to leave in either
-@@ -5377,20 +5370,7 @@ int http_sync_req_state(struct stream *s)
- }
- }
-
-- if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) {
-- /* if we've just closed an output, let's switch */
-- s->si[1].flags |= SI_FL_NOLINGER; /* we want to close ASAP */
--
-- if (!channel_is_empty(chn)) {
-- txn->req.msg_state = HTTP_MSG_CLOSING;
-- goto http_msg_closing;
-- }
-- else {
-- txn->req.msg_state = HTTP_MSG_CLOSED;
-- goto http_msg_closed;
-- }
-- }
-- goto wait_other_side;
-+ goto check_channel_flags;
- }
-
- if (txn->req.msg_state == HTTP_MSG_CLOSING) {
-@@ -5419,6 +5399,16 @@ int http_sync_req_state(struct stream *s)
- goto wait_other_side;
- }
-
-+ check_channel_flags:
-+ /* Here, we are in HTTP_MSG_DONE or HTTP_MSG_TUNNEL */
-+ if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) {
-+ /* if we've just closed an output, let's switch */
-+ s->si[1].flags |= SI_FL_NOLINGER; /* we want to close ASAP */
-+ txn->req.msg_state = HTTP_MSG_CLOSING;
-+ goto http_msg_closing;
-+ }
-+
-+
- wait_other_side:
- return txn->req.msg_state != old_state || chn->flags != old_flags;
- }
-@@ -5438,7 +5428,7 @@ int http_sync_res_state(struct stream *s)
- unsigned int old_flags = chn->flags;
- unsigned int old_state = txn->rsp.msg_state;
-
-- if (unlikely(txn->rsp.msg_state < HTTP_MSG_BODY))
-+ if (unlikely(txn->rsp.msg_state < HTTP_MSG_DONE))
- return 0;
-
- if (txn->rsp.msg_state == HTTP_MSG_DONE) {
-@@ -5461,14 +5451,6 @@ int http_sync_res_state(struct stream *s)
- goto wait_other_side;
- }
-
-- if (txn->req.msg_state == HTTP_MSG_TUNNEL) {
-- /* if any side switches to tunnel mode, the other one does too */
-- channel_auto_read(chn);
-- txn->rsp.msg_state = HTTP_MSG_TUNNEL;
-- chn->flags |= CF_NEVER_WAIT;
-- goto wait_other_side;
-- }
--
- /* When we get here, it means that both the request and the
- * response have finished receiving. Depending on the connection
- * mode, we'll have to wait for the last bytes to leave in either
-@@ -5506,18 +5488,7 @@ int http_sync_res_state(struct stream *s)
- txn->rsp.msg_state = HTTP_MSG_TUNNEL;
- }
-
-- if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) {
-- /* if we've just closed an output, let's switch */
-- if (!channel_is_empty(chn)) {
-- txn->rsp.msg_state = HTTP_MSG_CLOSING;
-- goto http_msg_closing;
-- }
-- else {
-- txn->rsp.msg_state = HTTP_MSG_CLOSED;
-- goto http_msg_closed;
-- }
-- }
-- goto wait_other_side;
-+ goto check_channel_flags;
- }
-
- if (txn->rsp.msg_state == HTTP_MSG_CLOSING) {
-@@ -5548,6 +5519,14 @@ int http_sync_res_state(struct stream *s)
- goto wait_other_side;
- }
-
-+ check_channel_flags:
-+ /* Here, we are in HTTP_MSG_DONE or HTTP_MSG_TUNNEL */
-+ if (chn->flags & (CF_SHUTW|CF_SHUTW_NOW)) {
-+ /* if we've just closed an output, let's switch */
-+ txn->rsp.msg_state = HTTP_MSG_CLOSING;
-+ goto http_msg_closing;
-+ }
-+
- wait_other_side:
- /* We force the response to leave immediately if we're waiting for the
- * other side, since there is no pending shutdown to push it out.
---
-2.13.0
-
+++ /dev/null
-From f82344c1cf20afcf77e8c3df8f9d341d659da93b Mon Sep 17 00:00:00 2001
-From: Christopher Faulet <cfaulet@haproxy.com>
-Date: Tue, 18 Jul 2017 11:42:08 +0200
-Subject: [PATCH 14/18] BUG/MEDIUM: http: Switch HTTP responses in TUNNEL mode
- when body length is undefined
-
-When the body length of a HTTP response is undefined, the HTTP parser is blocked
-in the body parsing. Before HAProxy 1.7, in this case, because
-AN_RES_HTTP_XFER_BODY is never set, there is no visible effect. When the server
-closes its connection to terminate the response, HAProxy catches it as a normal
-closure. Since 1.7, we always set this analyzer to enter at least once in
-http_response_forward_body. But, in the present case, when the server connection
-is closed, http_response_forward_body is called one time too many. The response
-is correctly sent to the client, but an error is catched and logged with "SD--"
-flags.
-
-To reproduce the bug, you can use the configuration "tests/test-fsm.cfg". The
-tests 3 and 21 hit the bug.
-
-Idea to fix the bug is to switch the response in TUNNEL mode without switching
-the request. This is possible because of previous patches.
-
-First, we need to detect responses with undefined body length during states
-synchronization. Excluding tunnelled transactions, when the response length is
-undefined, TX_CON_WANT_CLO is always set on the transaction. So, when states are
-synchronized, if TX_CON_WANT_CLO is set, the response is switched in TUNNEL mode
-and the request remains unchanged.
-
-Then, in http_msg_forward_body, we add a specific check to switch the response
-in DONE mode if the body length is undefined and if there is no data filter.
-
-This patch depends on following previous commits:
-
- * MINOR: http: Switch requests/responses in TUNNEL mode only by checking txn flags
- * MINOR: http: Reorder/rewrite checks in http_resync_states
-
-This patch must be backported in 1.7 with 2 previous ones.
-
-(cherry picked from commit 1486b0ab6de744e14ae684af105951345534f9ec)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/proto_http.c | 37 +++++++++++++++++++++++++------------
- 1 file changed, 25 insertions(+), 12 deletions(-)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index 00a92cdb..e776e4d5 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -5354,7 +5354,16 @@ int http_sync_req_state(struct stream *s)
- * let's enforce it now that we're not expecting any new
- * data to come. The caller knows the stream is complete
- * once both states are CLOSED.
-+ *
-+ * However, there is an exception if the response
-+ * length is undefined. In this case, we need to wait
-+ * the close from the server. The response will be
-+ * switched in TUNNEL mode until the end.
- */
-+ if (!(txn->rsp.flags & HTTP_MSGF_XFER_LEN) &&
-+ txn->rsp.msg_state != HTTP_MSG_CLOSED)
-+ goto check_channel_flags;
-+
- if (!(chn->flags & (CF_SHUTW|CF_SHUTW_NOW))) {
- channel_shutr_now(chn);
- channel_shutw_now(chn);
-@@ -5471,8 +5480,16 @@ int http_sync_res_state(struct stream *s)
- * let's enforce it now that we're not expecting any new
- * data to come. The caller knows the stream is complete
- * once both states are CLOSED.
-+ *
-+ * However, there is an exception if the response length
-+ * is undefined. In this case, we switch in TUNNEL mode.
- */
-- if (!(chn->flags & (CF_SHUTW|CF_SHUTW_NOW))) {
-+ if (!(txn->rsp.flags & HTTP_MSGF_XFER_LEN)) {
-+ channel_auto_read(chn);
-+ txn->rsp.msg_state = HTTP_MSG_TUNNEL;
-+ chn->flags |= CF_NEVER_WAIT;
-+ }
-+ else if (!(chn->flags & (CF_SHUTW|CF_SHUTW_NOW))) {
- channel_shutr_now(chn);
- channel_shutw_now(chn);
- }
-@@ -6952,14 +6969,6 @@ int http_response_forward_body(struct stream *s, struct channel *res, int an_bit
- if ((msg->flags & HTTP_MSGF_TE_CHNK) || (msg->flags & HTTP_MSGF_COMPRESSING))
- res->flags |= CF_EXPECT_MORE;
-
-- /* If there is neither content-length, nor transfer-encoding header
-- * _AND_ there is no data filtering, we can safely forward all data
-- * indefinitely. */
-- if (!(msg->flags & HTTP_MSGF_XFER_LEN) && !HAS_DATA_FILTERS(s, res)) {
-- buffer_flush(res->buf);
-- channel_forward_forever(res);
-- }
--
- /* the stream handler will take care of timeouts and errors */
- return 0;
-
-@@ -7036,9 +7045,13 @@ http_msg_forward_body(struct stream *s, struct http_msg *msg)
- goto missing_data_or_waiting;
- }
-
-- /* The server still sending data that should be filtered */
-- if (!(msg->flags & HTTP_MSGF_XFER_LEN) && !(chn->flags & CF_SHUTR))
-- goto missing_data_or_waiting;
-+ /* This check can only be true for a response. HTTP_MSGF_XFER_LEN is
-+ * always set for a request. */
-+ if (!(msg->flags & HTTP_MSGF_XFER_LEN)) {
-+ /* The server still sending data that should be filtered */
-+ if (!(chn->flags & CF_SHUTR) && HAS_DATA_FILTERS(s, chn))
-+ goto missing_data_or_waiting;
-+ }
-
- msg->msg_state = HTTP_MSG_ENDING;
-
---
-2.13.0
-
+++ /dev/null
-From af9b52e92be8ca6a07f9156dcb0b08dd2ad8db75 Mon Sep 17 00:00:00 2001
-From: Christopher Faulet <cfaulet@haproxy.com>
-Date: Thu, 20 Jul 2017 11:05:10 +0200
-Subject: [PATCH 15/18] BUG/MAJOR: http: Fix possible infinity loop in
- http_sync_(req|res)_state
-
-In commit "MINOR: http: Switch requests/responses in TUNNEL mode only by
-checking txn flags", it is possible to have an infinite loop on HTTP_MSG_CLOSING
-state.
-
-(cherry picked from commit 56d260916f61e48c8b2f1fd2f9431afac776d160)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/proto_http.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/proto_http.c b/src/proto_http.c
-index e776e4d5..4a030013 100644
---- a/src/proto_http.c
-+++ b/src/proto_http.c
-@@ -5394,8 +5394,8 @@ int http_sync_req_state(struct stream *s)
- else if (chn->flags & CF_SHUTW) {
- txn->req.err_state = txn->req.msg_state;
- txn->req.msg_state = HTTP_MSG_ERROR;
-- goto wait_other_side;
- }
-+ goto wait_other_side;
- }
-
- if (txn->req.msg_state == HTTP_MSG_CLOSED) {
-@@ -5523,8 +5523,8 @@ int http_sync_res_state(struct stream *s)
- s->be->be_counters.cli_aborts++;
- if (objt_server(s->target))
- objt_server(s->target)->counters.cli_aborts++;
-- goto wait_other_side;
- }
-+ goto wait_other_side;
- }
-
- if (txn->rsp.msg_state == HTTP_MSG_CLOSED) {
---
-2.13.0
-
+++ /dev/null
-From c00347899e9f0c3420f98c53eab1469644e28e06 Mon Sep 17 00:00:00 2001
-From: Nenad Merdanovic <nmerdan@haproxy.com>
-Date: Sun, 23 Jul 2017 22:04:58 -0400
-Subject: [PATCH 16/18] BUG/MINOR: lua: Fix Server.get_addr() port values
-
-The get_addr() method of the Lua Server class was using the
-'sockaddr_storage addr' member to get the port value. HAProxy does not
-store ports in this member as it uses a separate member, called
-'svc_port'.
-
-This fix should be backported to 1.7.
-
-(cherry picked from commit 3849473828f319829aff422d2fbbce0823e65d64)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/hlua_fcn.c | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
-index fe899a4a..0752220e 100644
---- a/src/hlua_fcn.c
-+++ b/src/hlua_fcn.c
-@@ -545,8 +545,7 @@ int hlua_server_get_addr(lua_State *L)
- addr, INET_ADDRSTRLEN);
- luaL_addstring(&b, addr);
- luaL_addstring(&b, ":");
-- snprintf(addr, INET_ADDRSTRLEN, "%d",
-- ntohs(((struct sockaddr_in *)&srv->addr)->sin_port));
-+ snprintf(addr, INET_ADDRSTRLEN, "%d", srv->svc_port);
- luaL_addstring(&b, addr);
- break;
- case AF_INET6:
-@@ -554,8 +553,7 @@ int hlua_server_get_addr(lua_State *L)
- addr, INET_ADDRSTRLEN);
- luaL_addstring(&b, addr);
- luaL_addstring(&b, ":");
-- snprintf(addr, INET_ADDRSTRLEN, "%d",
-- ntohs(((struct sockaddr_in6 *)&srv->addr)->sin6_port));
-+ snprintf(addr, INET_ADDRSTRLEN, "%d", srv->svc_port);
- luaL_addstring(&b, addr);
- break;
- case AF_UNIX:
---
-2.13.0
-
+++ /dev/null
-From e79fe9bc0ae363e91555f1ba64889e2ddf475b8e Mon Sep 17 00:00:00 2001
-From: Nenad Merdanovic <nmerdan@haproxy.com>
-Date: Sun, 23 Jul 2017 22:04:59 -0400
-Subject: [PATCH 17/18] BUG/MINOR: lua: Correctly use INET6_ADDRSTRLEN in
- Server.get_addr()
-
-The get_addr() method of the Lua Server class incorrectly used
-INET_ADDRSTRLEN for IPv6 addresses resulting in failing to convert
-longer IPv6 addresses to strings.
-
-This fix should be backported to 1.7.
-
-(cherry picked from commit a9f040453acc09e888c3f2dc983f15dcf3fa66e3)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/hlua_fcn.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
-index 0752220e..f8b9b5ec 100644
---- a/src/hlua_fcn.c
-+++ b/src/hlua_fcn.c
-@@ -550,7 +550,7 @@ int hlua_server_get_addr(lua_State *L)
- break;
- case AF_INET6:
- inet_ntop(AF_INET6, &((struct sockaddr_in6 *)&srv->addr)->sin6_addr,
-- addr, INET_ADDRSTRLEN);
-+ addr, INET6_ADDRSTRLEN);
- luaL_addstring(&b, addr);
- luaL_addstring(&b, ":");
- snprintf(addr, INET_ADDRSTRLEN, "%d", srv->svc_port);
---
-2.13.0
-
+++ /dev/null
-From dd18f945c26fc30872a52c66b06b5a0a86b10060 Mon Sep 17 00:00:00 2001
-From: Willy Tarreau <w@1wt.eu>
-Date: Mon, 24 Jul 2017 17:35:27 +0200
-Subject: [PATCH 18/18] BUG/MINOR: lua: always detach the tcp/http tasks before
- freeing them
-
-In hlua_{http,tcp}_applet_release(), a call to task_free() is performed
-to release the task, but no task_delete() is made on these tasks. Till
-now it wasn't much of a problem because this was normally not done with
-the task in the run queue, and the task was never put into the wait queue
-since it doesn't have any timer. But with threading it will become an
-issue. And not having this already prevents another bug from being fixed.
-
-Thanks to Christopher for spotting this one. A backport to 1.7 and 1.6 is
-preferred for safety.
-
-(cherry picked from commit bd7fc95edbce821f1d7b745a7b75deef4d6b1e27)
-Signed-off-by: William Lallemand <wlallemand@haproxy.org>
----
- src/hlua.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/hlua.c b/src/hlua.c
-index a998860e..67b9458c 100644
---- a/src/hlua.c
-+++ b/src/hlua.c
-@@ -5948,6 +5948,7 @@ error:
-
- static void hlua_applet_tcp_release(struct appctx *ctx)
- {
-+ task_delete(ctx->ctx.hlua_apptcp.task);
- task_free(ctx->ctx.hlua_apptcp.task);
- ctx->ctx.hlua_apptcp.task = NULL;
- hlua_ctx_destroy(&ctx->ctx.hlua_apptcp.hlua);
-@@ -6226,6 +6227,7 @@ error:
-
- static void hlua_applet_http_release(struct appctx *ctx)
- {
-+ task_delete(ctx->ctx.hlua_apphttp.task);
- task_free(ctx->ctx.hlua_apphttp.task);
- ctx->ctx.hlua_apphttp.task = NULL;
- hlua_ctx_destroy(&ctx->ctx.hlua_apphttp.hlua);
---
-2.13.0
-
PKG_NAME:=horst
PKG_VERSION:=5.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/br101/horst/archive/v$(PKG_VERSION)/
--- /dev/null
+Index: horst-5.1/conf_options.c
+===================================================================
+--- horst-5.1.orig/conf_options.c
++++ horst-5.1/conf_options.c
+@@ -519,7 +519,7 @@ void config_parse_file_and_cmdline(int a
+ conf_filename = optarg;
+ break;
+ case 'v':
+- printf("%s (build date: %s %s)\n", VERSION, __DATE__, __TIME__);
++ printf("%s\n", VERSION);
+ exit(0);
+ case 'h':
+ case '?':
+Index: horst-5.1/display-help.c
+===================================================================
+--- horst-5.1.orig/display-help.c
++++ horst-5.1/display-help.c
+@@ -36,7 +36,7 @@ void update_help_win(WINDOW *win)
+ print_centered(win, 2, COLS, "HORST - Horsts OLSR Radio Scanning Tool (or)");
+ print_centered(win, 3, COLS, "HORST - Highly Optimized Radio Scanning Tool");
+
+- print_centered(win, 5, COLS, "Version " VERSION " (build date " __DATE__ " " __TIME__ ")");
++ print_centered(win, 5, COLS, "Version " VERSION);
+ print_centered(win, 6, COLS, "(C) 2005-2016 Bruno Randolf, Licensed under the GPLv2");
+
+ mvwprintw(win, 8, 2, "Known IEEE802.11 Packet Types:");
--- /dev/null
+#
+# Copyright (C) 2015, 2016 gxcreator
+# Copyright (C) 2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=i2pd
+PKG_VERSION:=2.16.0
+PKG_RELEASE:=1
+PKG_BUILD_PARALLEL:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_URL:=https://github.com/PurpleI2P/i2pd.git
+PKG_SOURCE_VERSION:=$(PKG_VERSION)
+PKG_MIRROR_HASH:=e9dee670dc53d258919e1fb9444fcaeab0d380c438e71cd5323f08332b937918
+PKG_LICENSE:=BSD-3-clause
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/i2pd
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+libopenssl +boost +boost-system +boost-filesystem +boost-regex \
+ +boost-program_options +boost-date_time +libatomic +zlib
+ TITLE:=full-featured C++ implementation of I2P client
+ URL:=https://github.com/PurpleI2P/i2pd
+ MAINTAINER:=David Yang <mmyangfl@gmail.com>
+endef
+
+define Package/i2pd/description
+ I2P (Invisible Internet Protocol) is a universal anonymous network layer. All
+ communications over I2P are anonymous and end-to-end encrypted, participants
+ don't reveal their real IP addresses.
+endef
+
+define Package/i2pd/conffiles
+ /etc/i2pd/i2pd.conf
+ /etc/i2pd/subscriptions.txt
+ /etc/i2pd/tunnels.conf
+endef
+
+MAKE_FLAGS+=USE_AESNI=no USE_AVX=no
+
+define Package/i2pd/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/i2pd $(1)/usr/sbin
+ $(INSTALL_DIR) $(1)/etc/i2pd
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/i2pd.conf $(1)/etc/i2pd
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/subscriptions.txt $(1)/etc/i2pd
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/tunnels.conf $(1)/etc/i2pd
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/i2pd.init $(1)/etc/init.d/i2pd
+endef
+
+$(eval $(call BuildPackage,i2pd))
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2017 OpenWrt.org
+
+START=70
+STOP=70
+
+USE_PROCD=1
+PROG=/usr/sbin/i2pd
+
+
+start_service() {
+ procd_open_instance
+ procd_set_param command $PROG --conf=/etc/i2pd/i2pd.conf
+ procd_close_instance
+}
--- /dev/null
+--- a/Makefile.linux 2017-11-14 03:20:41.000000000 +0800
++++ b/Makefile.linux 2017-11-29 23:55:38.919136211 +0800
+@@ -44,7 +44,7 @@
+ LDLIBS += -lpthread -static-libstdc++ -static-libgcc -lrt -ldl
+ USE_AESNI := no
+ else
+- LDLIBS = -lcrypto -lssl -lz -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread
++ LDLIBS = -latomic -lcrypto -lssl -lz -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread
+ endif
+
+ # UPNP Support (miniupnpc 1.5 and higher)
include $(TOPDIR)/rules.mk
PKG_NAME:=irssi
-PKG_VERSION:=1.0.4
+PKG_VERSION:=1.0.5
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=https://github.com/irssi/irssi/releases/download/1.0.4/
-PKG_HASH:=b85c07dbafe178213eccdc69f5f8f0ac024dea01c67244668f91ec1c06b986ca
+PKG_SOURCE_URL:=https://github.com/irssi/irssi/releases/download/1.0.5/
+PKG_HASH:=c2556427e12eb06cabfed40839ac6f57eb8b1aa6365fab6dfcd331b7a04bb914
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_NAME:=jool
PKG_VERSION:=2017.03.09
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=a2c41119be251d4d962234fc78d7122568a5e62484969cc4e80229a0c7422fd4
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
+PKG_BUILD_DIR=$(KERNEL_BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
PKG_BUILD_PARALLEL:=1
PKG_BUILD_DEPENDS:=USE_UCLIBC:argp-standalone USE_MUSL:argp-standalone
include $(TOPDIR)/rules.mk
PKG_NAME:=keepalived
-PKG_VERSION:=1.2.19
-PKG_RELEASE:=2
+PKG_VERSION:=1.3.9
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:= http://www.keepalived.org/software
-PKG_HASH:=32fbae732c1cd854cacd7a930d4a26f5bad6372cdecb5e3139f0c17e87493853
+PKG_HASH:=d5bdd25530acf60989222fd92fbfd596e06ecc356a820f4c1015708b76a8d4f3
PKG_LICENSE:=GPL-2.0+
PKG_LICENSE_FILES:=COPYING
CATEGORY:=Network
TITLE:=Failover and monitoring daemon for LVS clusters
URL:=http://www.keepalived.org/
- DEPENDS:=+PACKAGE_libnl-genl:libnl-genl +libopenssl
+ DEPENDS:=+PACKAGE_libnl-genl:libnl-genl +libopenssl +libip4tc +IPV6:libip6tc +libxtables
endef
define Package/keepalived/description
define Package/keepalived/conffiles
/etc/keepalived/keepalived.conf
+/etc/config/keepalived
+/etc/keepalived.user
endef
CONFIGURE_ARGS+= \
- --enable-vrrp \
- --enable-fwmark \
--enable-sha1 \
--disable-lvs \
--disable-lvs-syncd \
--disable-snmp \
- --disable-debug \
- --disable-profile \
--with-kernel-dir="$(LINUX_DIR)/$(LINUX_UAPI_DIR)"
MAKE_FLAGS += \
$(INSTALL_BIN) ./files/keepalived.init $(1)/etc/init.d/keepalived
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/keepalived.config $(1)/etc/config/keepalived
+ $(INSTALL_DIR) $(1)/etc
+ $(INSTALL_CONF) ./files/keepalived.user $(1)/etc/keepalived.user
+ $(INSTALL_DIR) $(1)/etc/hotplug.d/keepalived
+ $(INSTALL_DATA) ./files/hotplug-user $(1)/etc/hotplug.d/keepalived/01-user
endef
$(eval $(call BuildPackage,keepalived))
--- /dev/null
+#!/bin/sh
+
+[ -f "/etc/keepalived.user" ] && {
+ /bin/sh /etc/keepalived.user "$@"
+}
+
+exit 0
config global_defs
- option alt_config_file "/etc/keepalived/keepalived.conf"
+# option alt_config_file "/etc/keepalived/keepalived.conf"
# list notification_email "acassen@firewall.loc"
# list notification_email "failover@firewall.loc"
# list notification_email "sysadmin@firewall.loc"
eval optval=\$$opt
[ -z "$optval" ] && continue
printf "$indent$opt" >> $KEEPALIVED_CONF
- [ "$no_val" == "0" ] && printf " $optval" >> $KEEPALIVED_CONF
+ [ "$no_val" == "0" ] && {
+ local words=$(echo "$optval" | wc -w)
+ if [ $words -gt 1 ]; then
+ printf " \"$optval\"" >> $KEEPALIVED_CONF
+ else
+ printf " $optval" >> $KEEPALIVED_CONF
+ fi
+ }
printf "\n" >> $KEEPALIVED_CONF
done
unset optval
printf "$indent}\n" >> $KEEPALIVED_CONF
}
+print_notify() {
+ local type=$1
+ shift
+ local name=$1
+ shift
+ for notify in $*; do
+ printf "$INDENT_1$notify" >> $KEEPALIVED_CONF
+ notify=$(echo $notify | tr 'a-z' 'A-Z')
+ printf " \"/bin/busybox env -i ACTION=$notify TYPE=$type NAME=$name /sbin/hotplug-call keepalived\"\n" >> $KEEPALIVED_CONF
+ done
+}
+
global_defs() {
local linkbeat_use_polling notification_email
group="$valid_group"
print_list_indent group
- print_elems_indent $1 $INDENT_1 notify_backup notify_master notify_fault \
- notify no_val_smtp_alert no_val_global_tracking
+ print_elems_indent $1 $INDENT_1 no_val_smtp_alert no_val_global_tracking
+
+ print_notify "GROUP" "$name" notify_backup notify_master \
+ notify_fault notify
+
config_section_close
}
print_elems_indent $1 $INDENT_1 use_vmac state interface \
mcast_src_ip unicast_src_ip virtual_router_id version priority \
- advert_int preempt_delay debug notify_backup \
- notify_master notify_fault notify_stop notify \
+ advert_int preempt_delay debug \
lvs_sync_daemon_interface garp_master_delay garp_master_refresh \
garp_master_repeat garp_master_refresh_repeat \
no_val_vmac_xmit_base no_val_native_ipv6 no_val_accept \
no_val_dont_track_primary no_val_smtp_alert no_val_nopreempt
+ print_notify "INSTANCE" "$name" notify_backup notify_master \
+ notify_fault notify_stop notify
+
# Handle virtual_ipaddress & virtual_ipaddress_excluded lists
for opt in virtual_ipaddress virtual_ipaddress_excluded; do
config_get $opt $1 $opt
printf "$INDENT_1}\n" >> $KEEPALIVED_CONF
done
- # Handle track_interface & track_script lists
- for opt in track_interface track_script; do
+ # Handle track_script lists
+ for opt in track_script; do
config_get $opt $1 $opt
eval optval=\$$opt
[ -z "$optval" ] && continue
printf "$INDENT_1}\n" >> $KEEPALIVED_CONF
done
+ # Handle track_interface lists
+ for opt in track_interface; do
+ config_get $opt $1 $opt
+ eval optval=\$$opt
+ [ -z "$optval" ] && continue
+ printf "$INDENT_1$opt {\n" >> $KEEPALIVED_CONF
+ for t in $optval; do
+ config_foreach print_track_elem_indent track_interface $t $INDENT_2
+ done
+ printf "$INDENT_1}\n" >> $KEEPALIVED_CONF
+ done
+
# Handle simple lists of strings (with no spaces in between)
for opt in unicast_peer; do
config_get $opt $1 $opt
--- /dev/null
+#!/bin/sh
+#
+# This file is interpreted as a shell script.
+# The first line of the script must be "#!/bin/sh" without quotes.
+# Lines beginning with # are comments and are not executed.
+#
+# There are three environment arguments that are passed to this script.
+#
+# $TYPE Set to INSTANCE or GROUP, depending on whether keepalived invoked the program from vrrp_instance or vrrp_sync_group.
+# $NAME Set to the name of the vrrp_instance or vrrp_sync_group.
+# $ACTION Set to the end state of the transition.
+# Valid values are:
+# $TYPE==INSTANCE: [ NOTIFY_BACKUP | NOTIFY_MASTER | NOTIFY_FAULT | NOTIFY_STOP | NOTIFY ]
+# $TYPE==GROUP: [ NOTIFY_BACKUP | NOTIFY_MASTER | NOTIFY_FAULT | NOTIFY ]
+++ /dev/null
-From dbb2cac9139954bd18813e88bfcb622ad3e93c54 Mon Sep 17 00:00:00 2001
-From: Stijn Tintel <stijn@linux-ipv6.be>
-Date: Tue, 10 May 2016 04:26:31 +0300
-Subject: [PATCH] vrrp: update struct msghdr
-
-The vrrp netlink code assumes an order for the members of struct msghdr.
-This breaks recvmsg and sendmsg with musl libc on mips64. Fix this by
-using designated initializers instead.
-
-Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
----
- keepalived/vrrp/vrrp_netlink.c | 15 ++++++++++++---
- 1 file changed, 12 insertions(+), 3 deletions(-)
-
-diff --git a/keepalived/vrrp/vrrp_netlink.c b/keepalived/vrrp/vrrp_netlink.c
-index b19e2e7..2c2fd59 100644
---- a/keepalived/vrrp/vrrp_netlink.c
-+++ b/keepalived/vrrp/vrrp_netlink.c
-@@ -416,8 +416,12 @@ netlink_parse_info(int (*filter) (struct sockaddr_nl *, struct nlmsghdr *),
- char buf[4096];
- struct iovec iov = { buf, sizeof buf };
- struct sockaddr_nl snl;
-- struct msghdr msg =
-- { (void *) &snl, sizeof snl, &iov, 1, NULL, 0, 0 };
-+ struct msghdr msg = {
-+ .msg_name = &snl,
-+ .msg_namelen = sizeof(snl),
-+ .msg_iov = &iov,
-+ .msg_iovlen = 1,
-+ };
- struct nlmsghdr *h;
-
- status = recvmsg(nl->fd, &msg, 0);
-@@ -538,7 +542,12 @@ netlink_talk(nl_handle_t *nl, struct nlmsghdr *n)
- int ret, flags;
- struct sockaddr_nl snl;
- struct iovec iov = { (void *) n, n->nlmsg_len };
-- struct msghdr msg = { (void *) &snl, sizeof snl, &iov, 1, NULL, 0, 0 };
-+ struct msghdr msg = {
-+ .msg_name = &snl,
-+ .msg_namelen = sizeof(snl),
-+ .msg_iov = &iov,
-+ .msg_iovlen = 1,
-+ };
-
- memset(&snl, 0, sizeof snl);
- snl.nl_family = AF_NETLINK;
---
-2.10.2
-
+++ /dev/null
-From eaabcc1b09cccff2f8815d03da4d5778ab6bbd17 Mon Sep 17 00:00:00 2001
-From: Quentin Armitage <quentin@armitage.org.uk>
-Date: Mon, 16 May 2016 23:09:13 +0100
-Subject: [PATCH] Reinstate initialisation of msghdr fields
-
-Commit dbb2cac removed initialisation of the struct msghdr msg_control,
-msg_controllen and msg_flags fields. This commit reinstates initialisation
-of those fields.
-
-Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
----
- keepalived/vrrp/vrrp_netlink.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/keepalived/vrrp/vrrp_netlink.c b/keepalived/vrrp/vrrp_netlink.c
-index 2c2fd59..62c37d6 100644
---- a/keepalived/vrrp/vrrp_netlink.c
-+++ b/keepalived/vrrp/vrrp_netlink.c
-@@ -421,6 +421,9 @@ netlink_parse_info(int (*filter) (struct sockaddr_nl *, struct nlmsghdr *),
- .msg_namelen = sizeof(snl),
- .msg_iov = &iov,
- .msg_iovlen = 1,
-+ .msg_control = NULL,
-+ .msg_controllen = 0,
-+ .msg_flags = 0
- };
- struct nlmsghdr *h;
-
-@@ -547,6 +550,9 @@ netlink_talk(nl_handle_t *nl, struct nlmsghdr *n)
- .msg_namelen = sizeof(snl),
- .msg_iov = &iov,
- .msg_iovlen = 1,
-+ .msg_control = NULL,
-+ .msg_controllen = 0,
-+ .msg_flags = 0
- };
-
- memset(&snl, 0, sizeof snl);
---
-2.10.2
-
include $(TOPDIR)/rules.mk
PKG_NAME:=knot
-PKG_VERSION:=2.3.3
+PKG_VERSION:=2.5.6
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://secure.nic.cz/files/knot-dns/
-PKG_HASH:=a929bce3b957a81776b1db7b43b0e4473339bf16be8dbba5abb4b0593bf43c94
+PKG_HASH:=37d1625c2aaefe2394c85f6742a6ae9421e8348318c13119a6c451796c387cfc
PKG_MAINTAINER:=Daniel Salzman <daniel.salzman@nic.cz>
PKG_LICENSE:=GPL-3.0 LGPL-2.0 0BSD MIT OLDAP-2.8
SECTION:=libs
CATEGORY:=Libraries
TITLE:=Knot DNS
+ DEPENDS=+libpthread
URL:=https://www.knot-dns.cz
endef
CATEGORY:=Network
SUBMENU:=IP Addresses and Names
TITLE:=Knot DNS
+ DEPENDS=+libatomic
URL:=https://www.knot-dns.cz
- USERID:=knot=5353:knot=5353
-endef
-
-define Package/knot-libdnssec
- $(call Package/knot-lib/Default)
- TITLE+= DNSSEC library
- DEPENDS=+libpthread +libgnutls +jansson
endef
-define Package/knot-libknot
+define Package/knot-libs
$(call Package/knot-lib/Default)
- TITLE+= library
- DEPENDS=+libpthread +knot-libdnssec
+ TITLE+= common DNS and DNSSEC libraries
+ DEPENDS+=+libgnutls
endef
define Package/knot-libzscanner
$(call Package/knot-lib/Default)
TITLE+= zone parser library
- DEPENDS=+libpthread
endef
define Package/knot
$(call Package/knot/Default)
- TITLE+= server
- DEPENDS=+liburcu +libedit +knot-libdnssec +knot-libknot +knot-libzscanner
+ TITLE+= server with control utility
+ DEPENDS+=+libedit +liburcu +knot-libs +knot-libzscanner
+ EXTRA_DEPENDS:=knot-libs (=$(PKG_VERSION)-$(PKG_RELEASE)), \
+ knot-libzscanner (=$(PKG_VERSION)-$(PKG_RELEASE))
+ USERID:=knot=5353:knot=5353
endef
define Package/knot-dig
$(call Package/knot/Default)
TITLE+= advanced DNS lookup utility
- DEPENDS=+knot-libdnssec +knot-libknot
+ DEPENDS+=+libedit +knot-libs
+ EXTRA_DEPENDS:=knot-libs (=$(PKG_VERSION)-$(PKG_RELEASE))
endef
define Package/knot-host
$(call Package/knot/Default)
TITLE+= simple DNS lookup utility
- DEPENDS=+knot-libdnssec +knot-libknot
+ DEPENDS+=+libedit +knot-libs
+ EXTRA_DEPENDS:=knot-libs (=$(PKG_VERSION)-$(PKG_RELEASE))
endef
define Package/knot-nsupdate
$(call Package/knot/Default)
TITLE+= dynamic DNS update utility
- DEPENDS=+knot-libdnssec +knot-libknot +knot-libzscanner
-endef
-
-define Package/knot-nsec3hash
- $(call Package/knot/Default)
- TITLE+= simple NSEC3 hash utility
- DEPENDS=+knot-libdnssec
+ DEPENDS+=+libedit +knot-libs +knot-libzscanner
+ EXTRA_DEPENDS:=knot-libs (=$(PKG_VERSION)-$(PKG_RELEASE)), \
+ knot-libzscanner (=$(PKG_VERSION)-$(PKG_RELEASE))
endef
define Package/knot-zonecheck
$(call Package/knot/Default)
TITLE+= zonefile check utility
- DEPENDS=+liburcu +knot-libdnssec +knot-libknot +knot-libzscanner
+ DEPENDS+=+libedit +liburcu +knot-libs +knot-libzscanner
+ EXTRA_DEPENDS:=knot-libs (=$(PKG_VERSION)-$(PKG_RELEASE)), \
+ knot-libzscanner (=$(PKG_VERSION)-$(PKG_RELEASE))
endef
define Package/knot-keymgr
$(call Package/knot/Default)
TITLE+= DNSSEC key management utility
- DEPENDS=+liburcu +knot-libdnssec +knot-libknot +knot-libzscanner
+ DEPENDS+=+libedit +liburcu +knot-libs +knot-libzscanner
+ EXTRA_DEPENDS:=knot-libs (=$(PKG_VERSION)-$(PKG_RELEASE)), \
+ knot-libzscanner (=$(PKG_VERSION)-$(PKG_RELEASE))
endef
define Package/knot-tests
$(call Package/knot/Default)
TITLE+= tests
- DEPENDS=+liburcu +libedit +knot-libdnssec +knot-libknot +knot-libzscanner
+ DEPENDS+=+libedit +liburcu +knot-libs +knot-libzscanner
+ EXTRA_DEPENDS:=knot-libs (=$(PKG_VERSION)-$(PKG_RELEASE)), \
+ knot-libzscanner (=$(PKG_VERSION)-$(PKG_RELEASE))
endef
-define Package/knot-libdnssec/description
- Knot DNS DNSSEC library.
+define Package/knot-libs/description
+ Knot DNS common DNS and DNSSEC libraries.
endef
-define Package/knot-libknot/description
- Knot DNS library.
-endef
-
-define Package/knot-libdnssec/description
+define Package/knot-libzscanner/description
Knot DNS zone parser library.
endef
Knot DNS dynamic DNS update utility.
endef
-define Package/knot-nsec3hash/description
- Knot DNS simple NSEC3 hash utility.
-endef
-
define Package/knot-zonecheck/description
Knot DNS zonefile check utility.
endef
--with-rundir=/var/run/knot \
--with-storage=/var/lib/knot \
--with-configdir=/etc/knot \
- --with-timer-mapsize=50 \
- --with-conf-mapsize=50
+ --with-conf-mapsize=20
TARGET_CFLAGS += -DPSELECT_COMPAT -DNDEBUG
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc $(1)/usr/lib/pkgconfig/
endef
-define Package/knot-libdnssec/install
+define Package/knot-libs/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libdnssec.so.* $(1)/usr/lib/
-endef
-
-define Package/knot-libknot/install
- $(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libknot.so.* $(1)/usr/lib/
endef
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/knsupdate $(1)/usr/bin/
endef
-define Package/knot-nsec3hash/install
- $(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/knsec3hash $(1)/usr/bin/
-endef
-
define Package/knot-zonecheck/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kzonecheck $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/libtap/runtests $(1)/usr/share/knot/tap/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/libtap/tap/libtap.sh $(1)/usr/share/knot/tap/
- $(INSTALL_DIR) $(1)/usr/share/knot/tests
- find $(PKG_BUILD_DIR)/tests/.libs -maxdepth 1 -executable -type f | \
- xargs -I{} basename {} | \
- xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/.libs/{} $(1)/usr/share/knot/tests/test_{}
-
- $(INSTALL_DIR) $(1)/usr/share/knot/tests/dnssec
- find $(PKG_BUILD_DIR)/src/dnssec/tests -maxdepth 1 -executable -type f | \
- xargs -I{} basename {} | \
- xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/src/dnssec/tests/{} $(1)/usr/share/knot/tests/dnssec/test_{}
-
- $(INSTALL_DIR) $(1)/usr/share/knot/tests/contrib
- find $(PKG_BUILD_DIR)/tests/contrib/.libs -maxdepth 1 -executable -type f | \
- xargs -I{} basename {} | \
- xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/contrib/.libs/{} $(1)/usr/share/knot/tests/contrib/{}
+ $(INSTALL_DIR) $(1)/usr/share/knot/tests
- $(INSTALL_DIR) $(1)/usr/share/knot/tests/libknot
- find $(PKG_BUILD_DIR)/tests/libknot/.libs -maxdepth 1 -executable -type f | \
- xargs -I{} basename {} | \
- xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/libknot/.libs/{} $(1)/usr/share/knot/tests/libknot/{}
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/zscanner/tests/.libs/zscanner-tool $(1)/usr/share/knot/tests/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/zscanner/tests/unittests $(1)/usr/share/knot/tests/test_zscanner
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/src/zscanner/tests/TESTS $(1)/usr/share/knot/tests/
+ cp -a $(PKG_BUILD_DIR)/src/zscanner/tests/data $(1)/usr/share/knot/tests/
- $(INSTALL_DIR) $(1)/usr/share/knot/tests/modules
- find $(PKG_BUILD_DIR)/tests/modules/.libs -maxdepth 1 -executable -type f | \
+ find $(PKG_BUILD_DIR)/src/dnssec/tests -maxdepth 1 -executable -type f | \
xargs -I{} basename {} | \
- xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/modules/.libs/{} $(1)/usr/share/knot/tests/modules/test_{}
+ xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/src/dnssec/tests/{} $(1)/usr/share/knot/tests/dnssec_test_{}
- $(INSTALL_DIR) $(1)/usr/share/knot/tests/utils
- find $(PKG_BUILD_DIR)/tests/utils/.libs -maxdepth 1 -executable -type f | \
+ find $(PKG_BUILD_DIR)/tests/.libs -maxdepth 1 -executable -type f | \
xargs -I{} basename {} | \
- xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/utils/.libs/{} $(1)/usr/share/knot/tests/utils/{}
+ xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/.libs/{} $(1)/usr/share/knot/tests/{}
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/zscanner/tests/.libs/zscanner-tool $(1)/usr/share/knot/tests/
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/zscanner/tests/unittests $(1)/usr/share/knot/tests/test_zscanner
- $(INSTALL_DATA) $(PKG_BUILD_DIR)/src/zscanner/tests/TESTS $(1)/usr/share/knot/tests/
- cp -a $(PKG_BUILD_DIR)/src/zscanner/tests/data $(1)/usr/share/knot/tests/
+ for module in contrib libknot modules utils; do \
+ find $(PKG_BUILD_DIR)/tests/$$$${module}/.libs -maxdepth 1 -executable -type f | \
+ xargs -I{} basename {} | \
+ xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/$$$${module}/.libs/{} \
+ $(1)/usr/share/knot/tests/$$$${module}_{}; \
+ done
endef
-$(eval $(call BuildPackage,knot-libdnssec))
-$(eval $(call BuildPackage,knot-libknot))
+$(eval $(call BuildPackage,knot-libs))
$(eval $(call BuildPackage,knot-libzscanner))
$(eval $(call BuildPackage,knot))
$(eval $(call BuildPackage,knot-dig))
$(eval $(call BuildPackage,knot-host))
$(eval $(call BuildPackage,knot-nsupdate))
-$(eval $(call BuildPackage,knot-nsec3hash))
$(eval $(call BuildPackage,knot-zonecheck))
$(eval $(call BuildPackage,knot-keymgr))
$(eval $(call BuildPackage,knot-tests))
#!/bin/sh
cd `dirname "$0"`/tests
-../tap/runtests -b /tmp ./contrib/test_* ./dnssec/test_* ./libknot/test_* ./modules/test_* ./utils/test_* ./test_*
+../tap/runtests -b /tmp ./*test_*
ret=$?
cd -
diff --git a/samples/knot.sample.conf.in b/samples/knot.sample.conf.in
-index e07c8a7..ecc13ad 100644
+index e07c8a7..8e057b0 100644
--- a/samples/knot.sample.conf.in
+++ b/samples/knot.sample.conf.in
@@ -9,7 +9,7 @@ server:
log:
# Log info and more serious events to syslog.
+@@ -33,7 +33,9 @@ acl:
+ # action: notify
+
+ template:
+-# - id: default
++ - id: default
++ max-journal-db-size: 20M
++ max-timer-db-size: 5M
+ # storage: "@storage_dir@"
+
+ zone:
+++ /dev/null
-diff --git a/src/contrib/files.c b/src/contrib/files.c
-index 8aee482..12f36ca 100644
---- a/src/contrib/files.c
-+++ b/src/contrib/files.c
-@@ -24,6 +24,10 @@
- #include <sys/stat.h>
- #include <unistd.h>
-
-+#ifndef O_NOFOLLOW
-+#define O_NOFOLLOW 0
-+#endif
-+
- static bool special_name(const char *name)
- {
- return strcmp(name, ".") == 0 || strcmp(name, "..") == 0;
include $(TOPDIR)/rules.mk
PKG_NAME:=linknx
-PKG_VERSION:=0.0.1.33
-PKG_RELEASE:=2
+PKG_VERSION:=0.0.1.34
+PKG_RELEASE:=1
PKG_MAINTAINER:=Othmar Truniger <github@truniger.ch>
PKG_LICENSE:=GPL-2.0+
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/linknx/linknx.git
-PKG_SOURCE_VERSION:=6166831eff645f21a7fd22ec3f7855f36005b8d9
+PKG_SOURCE_VERSION:=831ed395e232ead88e92cdf19f12e227e80e22cf
PKG_SOURCE_SUBDIR:=$(PKG_NAME)
PKG_SOURCE:=$(PKG_NAME)-${PKG_VERSION}.tar.xz
-PKG_MIRROR_HASH:=9d38d3a5b4bd935f841fbacf0ee00a9bb9e75ac7a7e7609864254ebb5bbdb960
+PKG_MIRROR_HASH:=1c53d181b5577d759b4d0faa5a267dd0a040d9fee1bfc6ad9545374b9002900f
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
PKG_BUILD_DEPENDS:=argp-standalone
PKG_NAME:=mDNSResponder
PKG_VERSION:=576.30.4
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=mDNSResponder-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://opensource.apple.com/tarballs/mDNSResponder/
-diff --git a/.gitignore b/.gitignore
-new file mode 100644
-index 0000000..920cdfc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+mDNSPosix/build
+mDNSPosix/objects
+
-diff --git a/Clients/Makefile b/Clients/Makefile
-index 383af31..925c20e 100755
--- a/Clients/Makefile
+++ b/Clients/Makefile
-@@ -34,7 +34,7 @@ TARGETS = build/dns-sd build/dns-sd64
+@@ -36,7 +36,7 @@ TARGETS = build/dns-sd build/dns-sd64
LIBS =
else
TARGETS = build/dns-sd
endif
all: $(TARGETS)
-diff --git a/mDNSPosix/PosixDaemon.c b/mDNSPosix/PosixDaemon.c
-index 88b3292..e86a6c7 100644
--- a/mDNSPosix/PosixDaemon.c
+++ b/mDNSPosix/PosixDaemon.c
@@ -37,6 +37,11 @@
if (mStatus_NoError == err)
err = MainLoop(&mDNSStorage);
-diff --git a/mDNSPosix/Responder.c b/mDNSPosix/Responder.c
-index 3996b7b..e58d8eb 100755
--- a/mDNSPosix/Responder.c
+++ b/mDNSPosix/Responder.c
-@@ -603,7 +603,8 @@ static mStatus RegisterServicesInFile(const char *filePath)
+@@ -603,7 +603,8 @@ static mStatus RegisterServicesInFile(co
status = mStatus_UnknownErr;
}
return status;
}
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 6effa12..7c1d6eb 100755
--- a/mDNSPosix/mDNSPosix.c
+++ b/mDNSPosix/mDNSPosix.c
-@@ -138,7 +138,7 @@ mDNSlocal void SockAddrTomDNSAddr(const struct sockaddr *const sa, mDNSAddr *ipA
+@@ -138,7 +138,7 @@ mDNSlocal void SockAddrTomDNSAddr(const
// mDNS core calls this routine when it needs to send a packet.
mDNSexport mStatus mDNSPlatformSendUDP(const mDNS *const m, const void *const msg, const mDNSu8 *const end,
mDNSIPPort dstPort, mDNSBool useBackgroundTrafficClass)
{
int err = 0;
-@@ -583,9 +583,17 @@ mDNSlocal void FreePosixNetworkInterface(PosixNetworkInterface *intf)
+@@ -583,9 +583,17 @@ mDNSlocal void FreePosixNetworkInterface
{
assert(intf != NULL);
if (intf->intfName != NULL) free((void *)intf->intfName);
#endif
// Move interface to the RecentInterfaces list for a minute
-@@ -724,6 +732,29 @@ mDNSlocal int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interf
+@@ -724,6 +732,29 @@ mDNSlocal int SetupSocket(struct sockadd
if (err < 0) { err = errno; perror("setsockopt - IP_MULTICAST_TTL"); }
}
// And start listening for packets
if (err == 0)
{
-@@ -805,6 +836,29 @@ mDNSlocal int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interf
+@@ -805,6 +836,29 @@ mDNSlocal int SetupSocket(struct sockadd
if (err < 0) { err = errno; perror("setsockopt - IPV6_MULTICAST_HOPS"); }
}
// And start listening for packets
if (err == 0)
{
-@@ -836,7 +890,12 @@ mDNSlocal int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interf
+@@ -836,7 +890,12 @@ mDNSlocal int SetupSocket(struct sockadd
}
// Clean up
assert((err == 0) == (*sktPtr != -1));
return err;
}
-@@ -938,19 +997,14 @@ mDNSlocal int SetupInterfaceList(mDNS *const m)
+@@ -942,19 +1001,14 @@ mDNSlocal int SetupInterfaceList(mDNS *c
int err = 0;
struct ifi_info *intfList = get_ifi_info(AF_INET, mDNStrue);
struct ifi_info *firstLoopback = NULL;
#endif
if (err == 0)
-@@ -1026,7 +1080,7 @@ mDNSlocal mStatus OpenIfNotifySocket(int *pFD)
+@@ -1030,7 +1084,7 @@ mDNSlocal mStatus OpenIfNotifySocket(int
/* Subscribe the socket to Link & IP addr notifications. */
mDNSPlatformMemZero(&snl, sizeof snl);
snl.nl_family = AF_NETLINK;
ret = bind(sock, (struct sockaddr *) &snl, sizeof snl);
if (0 == ret)
*pFD = sock;
-@@ -1104,11 +1158,18 @@ mDNSlocal mDNSu32 ProcessRoutingNotification(int sd)
+@@ -1108,11 +1162,18 @@ mDNSlocal mDNSu32 ProcessRoutingNo
PrintNetLinkMsg(pNLMsg);
#endif
// Advance pNLMsg to the next message in the buffer
if ((pNLMsg->nlmsg_flags & NLM_F_MULTI) != 0 && pNLMsg->nlmsg_type != NLMSG_DONE)
-@@ -1279,8 +1340,12 @@ mDNSexport mStatus mDNSPlatformInit(mDNS *const m)
+@@ -1283,8 +1344,12 @@ mDNSexport mStatus mDNSPlatformInit(mDNS
if (err == mStatus_NoError) err = SetupSocket(&sa, zeroIPPort, 0, &m->p->unicastSocket6);
#endif
// Tell mDNS core about DNS Servers
mDNS_Lock(m);
-@@ -1313,9 +1378,17 @@ mDNSexport void mDNSPlatformClose(mDNS *const m)
+@@ -1317,9 +1382,17 @@ mDNSexport void mDNSPlatformClose(mDNS *
{
assert(m != NULL);
ClearInterfaceList(m);
#endif
}
-@@ -1571,14 +1644,14 @@ mDNSexport mStatus mDNSPlatformClearSPSMACAddr(void)
+@@ -1575,14 +1648,14 @@ mDNSexport mStatus mDNSPlatformClearS
mDNSexport mDNSu16 mDNSPlatformGetUDPPort(UDPSocket *sock)
{
(void) sock; // unused
return mDNSfalse;
}
-diff --git a/mDNSPosix/mDNSUNP.c b/mDNSPosix/mDNSUNP.c
-index b392fc7..f551ad5 100755
--- a/mDNSPosix/mDNSUNP.c
+++ b/mDNSPosix/mDNSUNP.c
@@ -63,6 +63,7 @@
/* Converts a prefix length to IPv6 network mask */
void plen_to_mask(int plen, char *addr) {
-@@ -86,7 +87,7 @@ struct ifi_info *get_ifi_info_linuxv6(int family, int doaliases)
+@@ -86,7 +87,7 @@ struct ifi_info *get_ifi_info_linuxv6(in
FILE *fp;
char addr[8][5];
int flags, myflags, index, plen, scope;
char addr6[32+7+1]; /* don't forget the seven ':' */
struct addrinfo hints, *res0;
struct sockaddr_in6 *sin6;
-@@ -94,7 +95,8 @@ struct ifi_info *get_ifi_info_linuxv6(int family, int doaliases)
+@@ -94,7 +95,8 @@ struct ifi_info *get_ifi_info_linuxv6(in
int err;
int sockfd = -1;
struct ifreq ifr;
res0=NULL;
ifihead = NULL;
ifipnext = &ifihead;
-@@ -106,11 +108,12 @@ struct ifi_info *get_ifi_info_linuxv6(int family, int doaliases)
+@@ -106,11 +108,12 @@ struct ifi_info *get_ifi_info_linuxv6(in
goto gotError;
}
while (fscanf(fp,
}
return(ifihead); /* pointer to first structure in linked list */
}
-diff --git a/mDNSShared/dnsextd_parser.y b/mDNSShared/dnsextd_parser.y
-index 18c5990..d4b63ce 100644
--- a/mDNSShared/dnsextd_parser.y
+++ b/mDNSShared/dnsextd_parser.y
@@ -15,6 +15,8 @@
--- /dev/null
+--- a/Clients/dns-sd.c
++++ b/Clients/dns-sd.c
+@@ -1811,7 +1811,7 @@ Fail:
+
+ // NOT static -- otherwise the compiler may optimize it out
+ // The "@(#) " pattern is a special prefix the "what" command looks for
+-const char VersionString_SCCS[] = "@(#) dns-sd " STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")";
++const char VersionString_SCCS[] = "@(#) dns-sd " STRINGIFY(mDNSResponderVersion);
+
+ #if _BUILDING_XCODE_PROJECT_
+ // If the process crashes, then this string will be magically included in the automatically-generated crash log
+--- a/mDNSPosix/PosixDaemon.c
++++ b/mDNSPosix/PosixDaemon.c
+@@ -289,9 +289,9 @@ asm (".desc ___crashreporter_info__, 0x1
+
+ // For convenience when using the "strings" command, this is the last thing in the file
+ #if mDNSResponderVersion > 1
+-mDNSexport const char mDNSResponderVersionString_SCCS[] = "@(#) mDNSResponder-" STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")";
++mDNSexport const char mDNSResponderVersionString_SCCS[] = "@(#) mDNSResponder-" STRINGIFY(mDNSResponderVersion);
+ #elif MDNS_VERSIONSTR_NODTS
+ mDNSexport const char mDNSResponderVersionString_SCCS[] = "@(#) mDNSResponder (Engineering Build)";
+ #else
+-mDNSexport const char mDNSResponderVersionString_SCCS[] = "@(#) mDNSResponder (Engineering Build) (" __DATE__ " " __TIME__ ")";
++mDNSexport const char mDNSResponderVersionString_SCCS[] = "@(#) mDNSResponder (Engineering Build)";
+ #endif
+--- a/mDNSShared/Java/JNISupport.c
++++ b/mDNSShared/Java/JNISupport.c
+@@ -1069,4 +1069,4 @@ exit:
+
+ // NOT static -- otherwise the compiler may optimize it out
+ // The "@(#) " pattern is a special prefix the "what" command looks for
+-const char VersionString_SCCS[] = "@(#) libjdns_sd " STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")";
++const char VersionString_SCCS[] = "@(#) libjdns_sd " STRINGIFY(mDNSResponderVersion);
+--- a/mDNSShared/dnsextd.c
++++ b/mDNSShared/dnsextd.c
+@@ -3141,7 +3141,7 @@ mDNS mDNSStorage;
+
+ // For convenience when using the "strings" command, this is the last thing in the file
+ // The "@(#) " pattern is a special prefix the "what" command looks for
+-const char mDNSResponderVersionString_SCCS[] = "@(#) dnsextd " STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")";
++const char mDNSResponderVersionString_SCCS[] = "@(#) dnsextd " STRINGIFY(mDNSResponderVersion);
+
+ #if _BUILDING_XCODE_PROJECT_
+ // If the process crashes, then this string will be magically included in the automatically-generated crash log
+--- a/mDNSShared/dnssd_clientlib.c
++++ b/mDNSShared/dnssd_clientlib.c
+@@ -363,4 +363,4 @@ DNSServiceErrorType DNSSD_API TXTRecordG
+
+ // NOT static -- otherwise the compiler may optimize it out
+ // The "@(#) " pattern is a special prefix the "what" command looks for
+-const char VersionString_SCCS_libdnssd[] = "@(#) libdns_sd " STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")";
++const char VersionString_SCCS_libdnssd[] = "@(#) libdns_sd " STRINGIFY(mDNSResponderVersion);
include $(TOPDIR)/rules.mk
PKG_NAME:=memcached
-PKG_VERSION:=1.5.1
+PKG_VERSION:=1.5.2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://memcached.org/files
-PKG_HASH:=a87908936b51d1bd3ef10a2347eef5647f003b63407a5d8161fa7928b1cd6b5c
+PKG_HASH:=9ac93113bdb5d037e79c61277386564ac2e5e31d49e594f11e554e4c149b7245
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_NAME:=mii-tool
PKG_VERSION=2016-10-06-$(PKG_SOURCE_VERSION)
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=git://git.code.sf.net/p/net-tools/code
--- /dev/null
+--- a/iptunnel.c 2016-07-10 20:15:29.000000000 +0200
++++ b/iptunnel.c 2017-10-19 19:51:09.172782821 +0200
+@@ -26,7 +26,6 @@
+ #include <sys/socket.h>
+ #include <sys/ioctl.h>
+ #include <netinet/in.h>
+-#include <netinet/ip.h>
+ #include <arpa/inet.h>
+ #include <net/if.h>
+ #include <net/if_arp.h>
--- /dev/null
+#
+# Copyright (C) 2017 Roger Pueyo Centelles <roger.pueyo@guifi.net>
+#
+# This is free software, licensed under the GNU General Public License v3
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=mikrotik_btest
+PKG_VERSION:=0.5.1
+PKG_RELEASE:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/kadosch/mikrotik_btest.git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=02a0e7df411b5e7775fe2795709996a30afb7f47
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_MIRROR_HASH:=f72e1c8e2d98ca9e1c6a7fba35838a4a3c25b2dcd4bd8b10b67662003b3a14d1
+
+PKG_LICENSE:=GPLv3
+PKG_LICENSE_FILES:=COPYING
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/mikrotik-btest
+ SECTION:=net
+ CATEGORY:=Network
+ TITLE:=Bandwidth test client for Mikrotik BTest server
+ DEPENDS:=+libpthread +librt
+ URL:=https://github.com/kadosch/mikrotik_btest.git
+ MAINTAINER:=Roger Pueyo Centelles <roger.pueyo@guifi.net>
+endef
+
+define Package/mikrotik-btest/description
+ A bandwidth test client compatible with Mikrotik's RouterOS BTest server.
+endef
+
+define Package/mikrotik-btest/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/mikrotik_btest $(1)/usr/bin/mikrotik_btest
+endef
+
+$(eval $(call BuildPackage,mikrotik-btest))
include $(TOPDIR)/rules.mk
PKG_NAME:=mwan3
-PKG_VERSION:=2.6.6
+PKG_VERSION:=2.6.9
PKG_RELEASE:=1
PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
PKG_LICENSE:=GPLv2
ip addr del "${src_ip}/32" dev lo 1>/dev/null 2>&1
}
-usleep 10000
+sleep 1
[ "$ACTION" = "ifup" ] && {
network_get_ipaddr src_ip "${local_source}"
if [ "$family" = "ipv4" ]; then
ubus call network.interface.${INTERFACE}_4 status &>/dev/null
if [ "$?" -eq "0" ]; then
- network_get_gateway gateway ${INTERFACE}_4
network_get_ipaddr src_ip ${INTERFACE}_4
else
- network_get_gateway gateway $INTERFACE
network_get_ipaddr src_ip ${INTERFACE}
fi
+ [ -n "$src_ip" ] || src_ip="0.0.0.0"
elif [ "$family" = "ipv6" ]; then
ubus call network.interface.${INTERFACE}_6 status &>/dev/null
if [ "$?" -eq "0" ]; then
- network_get_gateway6 gateway ${INTERFACE}_6
network_get_ipaddr6 src_ip ${INTERFACE}_6
else
- network_get_gateway6 gateway ${INTERFACE}
network_get_ipaddr6 src_ip ${INTERFACE}
fi
+ [ -n "$src_ip" ] || src_ip="::"
fi
-
- [ -n "$gateway" ] || exit 9
fi
if [ "$initial_state" = "offline" ]; then
--- /dev/null
+#!/bin/sh
+
+get_uptime() {
+ local uptime=$(cat /proc/uptime)
+ echo "${uptime%%.*}"
+}
MWAN3_STATUS_DIR="/var/run/mwan3"
MWAN3TRACK_STATUS_DIR="/var/run/mwan3track"
+DEFAULT_LOWEST_METRIC=256
[ -d $MWAN3_STATUS_DIR ] || mkdir -p $MWAN3_STATUS_DIR/iface_state
# mwan3's MARKing mask (at least 3 bits should be set)
mwan3_create_iface_iptables()
{
- local id family src_ip src_ipv6
+ local id family
config_get family $1 family ipv4
mwan3_get_iface_id id $1
[ -n "$id" ] || return 0
if [ "$family" == "ipv4" ]; then
-
- ubus call network.interface.${1}_4 status &>/dev/null
- if [ "$?" -eq "0" ]; then
- network_get_ipaddr src_ip ${1}_4
- else
- network_get_ipaddr src_ip $1
- fi
-
$IPS -! create mwan3_connected list:set
if ! $IPT4 -S mwan3_ifaces_in &> /dev/null; then
$IPT4 -A mwan3_ifaces_in -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_in_$1
$IPT4 -F mwan3_iface_out_$1
- $IPT4 -A mwan3_iface_out_$1 -s $src_ip -m mark --mark 0x0/$MMX_MASK -m comment --comment "$1" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
+ $IPT4 -A mwan3_iface_out_$1 -o $2 -m mark --mark 0x0/$MMX_MASK -m comment --comment "$1" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
$IPT4 -D mwan3_ifaces_out -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_out_$1 &> /dev/null
$IPT4 -A mwan3_ifaces_out -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_out_$1
fi
if [ "$family" == "ipv6" ]; then
-
- ubus call network.interface.${1}_6 status &>/dev/null
- if [ "$?" -eq "0" ]; then
- network_get_ipaddr6 src_ipv6 ${1}_6
- else
- network_get_ipaddr6 src_ipv6 $1
- fi
-
$IPS -! create mwan3_connected_v6 hash:net family inet6
if ! $IPT6 -S mwan3_ifaces_in &> /dev/null; then
$IPT6 -A mwan3_ifaces_in -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_in_$1
$IPT6 -F mwan3_iface_out_$1
- $IPT6 -A mwan3_iface_out_$1 -s $src_ipv6 -m mark --mark 0x0/$MMX_MASK -m comment --comment "$1" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
+ $IPT6 -A mwan3_iface_out_$1 -o $2 -m mark --mark 0x0/$MMX_MASK -m comment --comment "$1" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
$IPT6 -D mwan3_ifaces_out -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_out_$1 &> /dev/null
$IPT6 -A mwan3_ifaces_out -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_out_$1
[ -n "$id" ] || return 0
if [ "$family" == "ipv4" ]; then
- ubus call network.interface.${1}_4 status &>/dev/null
- if [ "$?" -eq "0" ]; then
+ if ubus call network.interface.${1}_4 status &>/dev/null; then
network_get_gateway route_args ${1}_4
else
network_get_gateway route_args $1
fi
- route_args="via $route_args dev $2"
+ if [ -n "$route_args" -a "$route_args" != "0.0.0.0" ]; then
+ route_args="via $route_args"
+ else
+ route_args=""
+ fi
$IP4 route flush table $id
- $IP4 route add table $id default $route_args
+ $IP4 route add table $id default $route_args dev $2
fi
if [ "$family" == "ipv6" ]; then
-
- ubus call network.interface.${1}_6 status &>/dev/null
- if [ "$?" -eq "0" ]; then
+ if ubus call network.interface.${1}_6 status &>/dev/null; then
network_get_gateway6 route_args ${1}_6
else
network_get_gateway6 route_args $1
fi
- route_args="via $route_args dev $2"
+ if [ -n "$route_args" -a "$route_args" != "::" ]; then
+ route_args="via $route_args"
+ else
+ route_args=""
+ fi
$IP6 route flush table $id
- $IP6 route add table $id default $route_args
+ $IP6 route add table $id default $route_args dev $2
fi
}
config_get weight $1 weight 1
[ -n "$iface" ] || return 0
+ [ "$metric" -gt $DEFAULT_LOWEST_METRIC ] && $LOG warn "Member interface $iface has >$DEFAULT_LOWEST_METRIC metric. Not appending to policy" && return 0
mwan3_get_iface_id id $iface
esac
done
- lowest_metric_v4=256
+ lowest_metric_v4=$DEFAULT_LOWEST_METRIC
total_weight_v4=0
- lowest_metric_v6=256
+ lowest_metric_v6=$DEFAULT_LOWEST_METRIC
total_weight_v6=0
config_list_foreach $1 use_member mwan3_set_policy
. /lib/functions.sh
. /lib/functions/network.sh
. /usr/share/libubox/jshn.sh
+. /lib/mwan3/common.sh
MWAN3TRACK_STATUS_DIR="/var/run/mwan3track"
time_p="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/TIME")"
[ -z "${time_p}" ] || {
- time_n="$(date +'%s')"
+ time_n="$(get_uptime)"
let age=time_n-time_p
}
#!/bin/sh
. /lib/functions.sh
+. /lib/mwan3/common.sh
LOG="logger -t $(basename "$0")[$$] -p"
INTERFACE=""
validate_track_method() {
case "$1" in
ping)
- # Assume that ping is installed
+ which ping 1>/dev/null 2>&1 || {
+ $LOG warn "Missing ping. Please install iputils-ping package or enable ping util and recompile busybox."
+ return 1
+ }
;;
arping)
which arping 1>/dev/null 2>&1 || {
$LOG warn "Missing httping. Please install httping package."
return 1
}
+ [ -n "$2" -a "$2" != "0.0.0.0" -a "$2" != "::" ] || {
+ $LOG warn "Cannot determine source IP for the interface which is required by httping."
+ return 1
+ }
;;
*)
$LOG warn "Unsupported tracking method: $track_method"
config_load mwan3
config_get track_method $1 track_method ping
- validate_track_method $track_method || {
- $LOG warn "Using ping to track interface $INTERFACE avaliability"
+ validate_track_method $track_method $SRC_IP || {
track_method=ping
+ if validate_track_method $track_method; then
+ $LOG warn "Using ping to track interface $INTERFACE avaliability"
+ else
+ $LOG err "No track method avaliable"
+ exit 1
+ fi
}
config_get reliability $1 reliability 1
config_get count $1 count 1
echo "${lost}" > /var/run/mwan3track/$1/LOST
echo "${score}" > /var/run/mwan3track/$1/SCORE
echo "${turn}" > /var/run/mwan3track/$1/TURN
- echo "$(date +'%s')" > /var/run/mwan3track/$1/TIME
+ echo "$(get_uptime)" > /var/run/mwan3track/$1/TIME
host_up_count=0
sleep "${sleep_time}" &
include $(TOPDIR)/rules.mk
PKG_NAME:=nbd
-PKG_VERSION:=3.11
+PKG_VERSION:=3.16.2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@SF/nbd
-PKG_HASH:=14420f74cb16dc609a9302ed1efd653064bed7a8357e9d73daabc33608e3f2a0
+PKG_HASH:=422f62bdf6e6b973bd82083dc52b6577396fe00aa6607837ac464e476124155b
PKG_LICENSE:=GPL-2.0+
PKG_MAINTAINER:=Marcin Jurkowski <marcin1j@gmail.com>
endef
CONFIGURE_ARGS += \
- --disable-glibtest
+ --disable-glibtest \
+ --without-gnutls
TARGET_CFLAGS += --std=gnu99 -DNODAEMON
--- /dev/null
+--- a/configure.ac
++++ b/configure.ac
+@@ -210,7 +210,11 @@ dnl ;;
+ dnl esac
+ dnl fi
+
+-PKG_CHECK_MODULES(GnuTLS, [gnutls >= 2.12.0],[HAVE_GNUTLS=1],[HAVE_GNUTLS=0])
++AC_ARG_WITH([gnutls], AS_HELP_STRING([--with-gnutls], [Build with GnuTLS]))
++AS_IF([test "x$with_gnutls" = "xyes"], [
++ PKG_CHECK_MODULES(GnuTLS, [gnutls >= 2.12.0],[HAVE_GNUTLS=1],[HAVE_GNUTLS=0])
++])
++
+ if test x$HAVE_GNUTLS = x1; then
+ AC_DEFINE(HAVE_GNUTLS, 1, [Define to 1 if you have a GnuTLS version of 2.12 or above])
+ else
--- /dev/null
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -35,7 +35,7 @@ nbd_client_CFLAGS = $(client_flags) @Gnu
+ nbd_client_LDADD = $(client_libs) @GnuTLS_LIBS@
+ else
+ nbd_client_SOURCES = $(client_srcs)
+-nbd_client_CFLAGS = $(client_flags)
++nbd_client_CFLAGS = $(client_flags) -DNOTLS -DPROG_NAME='"nbd-client"'
+ nbd_client_LDADD = $(client_libs)
+ endif
+ endif
PKG_LICENSE:=BSD-3-Clause
PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
-PKG_VERSION:=0.4.0
+PKG_VERSION:=0.4.3
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=d028c1f931819db4b3e3cb1fd2d349a4fd5c0459
-PKG_MIRROR_HASH:=7f5b3ad49aaf2a8ceea2c17a37e276f5694af570ef904cfc5a6f53d295809cef
+PKG_SOURCE_VERSION:=e7c821cde14df31a03d23293f84e0aed9cb1a457
+PKG_MIRROR_HASH:=88a4c06e9cdb81879de7311138acbfe9fe5207db14fbb93c5ba4d6947d616aec
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/CESNET/Netopeer2.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
+++ /dev/null
-Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/server/ietf_netconf_server.c
-===================================================================
---- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/server/ietf_netconf_server.c
-+++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/server/ietf_netconf_server.c
-@@ -1161,8 +1161,8 @@ feature_change_ietf_netconf_server(const
- {
- int rc, rc2 = 0;
- const char *path = NULL;
-- sr_val_iter_t *sr_iter;
-- sr_val_t *sr_val;
-+ sr_val_t *values;
-+ size_t value_cnt;
-
- assert(feature_name);
-
-@@ -1180,26 +1180,26 @@ feature_change_ietf_netconf_server(const
- return EXIT_SUCCESS;
- }
-
-- rc = sr_get_items_iter(np2srv.sr_sess.srs, path, &sr_iter);
-+ rc =sr_get_items(np2srv.sr_sess.srs, path, &values, &value_cnt);
- if (rc != SR_ERR_OK) {
- ERR("Failed to get \"%s\" values iterator from sysrepo (%s).", sr_strerror(rc));
- return EXIT_FAILURE;
- }
-
-- while ((rc = sr_get_item_next(np2srv.sr_sess.srs, sr_iter, &sr_val)) == SR_ERR_OK) {
-- if (sr_val->type == SR_LIST_T) {
-+ size_t i;
-+ for(i = 0; i < value_cnt; i++) {
-+ if (values[i].type == SR_LIST_T) {
- /* no semantic meaning */
- continue;
- }
-
-- rc2 = module_change_resolve(np2srv.sr_sess.srs, SR_OP_CREATED, NULL, sr_val, NULL, NULL);
-- sr_free_val(sr_val);
-+ rc2 = module_change_resolve(np2srv.sr_sess.srs, SR_OP_CREATED, NULL, &values[i], NULL, NULL);
- if (rc2) {
- ERR("Failed to enable nodes depending on the \"%s\" ietf-netconf-server feature.", feature_name);
- break;
- }
- }
-- sr_free_val_iter(sr_iter);
-+ sr_free_values(values, value_cnt);
- if (rc2) {
- return EXIT_FAILURE;
- } else if ((rc != SR_ERR_OK) && (rc != SR_ERR_NOT_FOUND)) {
+++ /dev/null
-Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/CMakeLists.txt
-===================================================================
---- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/CMakeLists.txt
-+++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/CMakeLists.txt
-@@ -67,6 +67,9 @@ if(NOT MAN_INSTALL_DIR)
- set(MAN_INSTALL_DIR share/man)
- endif()
-
-+include(CheckFunctionExists)
-+check_function_exists(eaccess HAVE_EACCESS)
-+
- # install binary
- install(TARGETS netopeer2-cli DESTINATION ${BIN_INSTALL_DIR})
-
-Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/commands.c
-===================================================================
---- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/commands.c
-+++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/commands.c
-@@ -37,6 +37,10 @@
- # include <openssl/x509v3.h>
- #endif
-
-+#ifndef HAVE_EACCESS
-+#define eaccess access
-+#endif
-+
- #include "commands.h"
- #include "configuration.h"
- #include "completion.h"
-Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/completion.c
-===================================================================
---- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/completion.c
-+++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/completion.c
-@@ -27,6 +27,10 @@
-
- #include <nc_client.h>
-
-+#ifndef HAVE_EACCESS
-+#define eaccess access
-+#endif
-+
- #include "commands.h"
- #include "linenoise/linenoise.h"
-
-Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/configuration.c
-===================================================================
---- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/configuration.c
-+++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/configuration.c
-@@ -28,6 +28,10 @@
- #include <libyang/libyang.h>
- #include <nc_client.h>
-
-+#ifndef HAVE_EACCESS
-+#define eaccess access
-+#endif
-+
- #include "configuration.h"
- #include "commands.h"
- #include "linenoise/linenoise.h"
+++ /dev/null
-Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/CMakeLists.txt
-===================================================================
---- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/CMakeLists.txt
-+++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/CMakeLists.txt
-@@ -69,6 +69,10 @@ endif()
-
- include(CheckFunctionExists)
- check_function_exists(eaccess HAVE_EACCESS)
-+check_function_exists(mkstemps HAVE_MKSTEMPS)
-+if(HAVE_MKSTEMPS)
-+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_MKSTEMPS")
-+endif(HAVE_MKSTEMPS)
-
- # install binary
- install(TARGETS netopeer2-cli DESTINATION ${BIN_INSTALL_DIR})
-Index: netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/completion.c
-===================================================================
---- netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459.orig/cli/completion.c
-+++ netopeer2-0.4.0-d028c1f931819db4b3e3cb1fd2d349a4fd5c0459/cli/completion.c
-@@ -120,6 +120,7 @@ readinput(const char *instruction, const
- char* tmpname = NULL, *input = NULL, *old_content = NULL, *ptr, *ptr2;
-
- /* Create a unique temporary file */
-+#ifdef HAVE_MKSTEMPS
- if (asprintf(&tmpname, "/tmp/tmpXXXXXX.xml") == -1) {
- ERROR(__func__, "asprintf() failed (%s).", strerror(errno));
- goto fail;
-@@ -129,6 +130,23 @@ readinput(const char *instruction, const
- ERROR(__func__, "Failed to create a temporary file (%s).", strerror(errno));
- goto fail;
- }
-+#else
-+ if (asprintf(&tmpname, "/tmp/tmpXXXXXX") == -1) {
-+ ERROR(__func__, "asprintf() failed (%s).", strerror(errno));
-+ goto fail;
-+ }
-+ /* cannot fail */
-+ mktemp(tmpname);
-+ if (asprintf(&tmpname, ".xml") == -1) {
-+ ERROR(__func__, "asprintf() failed (%s).", strerror(errno));
-+ goto fail;
-+ }
-+ tmpfd = open(tmpname, O_RDWR | O_CREAT | O_EXCL, 0600);
-+ if (tmpfd == -1) {
-+ ERROR(__func__, "Failed to create a temporary file (%s).", strerror(errno));
-+ goto fail;
-+ }
-+#endif /* #ifdef HAVE_MKSTEMPS */
-
- /* Read the old content, if any */
- if (old_tmp != NULL) {
include $(TOPDIR)/rules.mk
PKG_NAME:=nfs-kernel-server
-PKG_VERSION:=2.1.1
+PKG_VERSION:=2.2.1
PKG_RELEASE:=1
-PKG_HASH:=0a28416948516c26f3bfe90425b0de09b79364dc1f508bf1dda8de66e1edbb09
+PKG_HASH:=0d819d8da358bea6e005e1a6cf0f6fa0c5507a78747d36bc87a0182e6af14291
PKG_SOURCE_URL:=@SF/nfs
PKG_SOURCE:=nfs-utils-$(PKG_VERSION).tar.bz2
CONFIGURE_VARS += \
libblkid_cv_is_recent=yes \
+ ac_cv_lib_resolv___res_querydomain=yes \
CONFIG_SQLITE3_TRUE="\#" \
CONFIG_NFSDCLD_TRUE="\#"
Musl will always return something with getservbyport so we cannot skip
ports that returns non-null.
-diff --git a/utils/statd/rmtcall.c b/utils/statd/rmtcall.c
-index fd576d9..d72a0bf 100644
--- a/utils/statd/rmtcall.c
+++ b/utils/statd/rmtcall.c
-@@ -90,8 +90,10 @@ statd_get_socket(void)
+@@ -93,8 +93,10 @@ statd_get_socket(void)
__func__);
break;
}
if (se == NULL)
+#endif
break;
- /* rather not use that port, try again */
+ if (retries == MAX_BRP_RETRIES) {
--- /dev/null
+--- a/support/misc/file.c
++++ b/support/misc/file.c
+@@ -27,6 +27,7 @@
+ #include <dirent.h>
+ #include <stdlib.h>
+ #include <stdbool.h>
++#include <limits.h>
+
+ #include "xlog.h"
+ #include "misc.h"
PKG_LICENSE:=GPLv3
PKG_MAINTAINER:=Steven Hessing <steven.hessing@gmail.com>
-PKG_SOURCE_VERSION:=0.5.2
+PKG_SOURCE_VERSION:=0.5.5
PKG_SOURCE_URL:=https://github.com/noddos/noddos/releases/download/v$(PKG_SOURCE_VERSION)/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.xz
-PKG_HASH:=63fe85fc4a588da2d71b7b7db68f1c80ba19520467a3800bdb43bc516a6cff72
+PKG_HASH:=1f5be0c1015b0407036eecc8449d60d2abcacec442bba55db85fc32e89f754db
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION)
CATEGORY:=Network
TITLE:=noddos -- device-aware cloud-powered firewall
URL:=https://www.noddos.io/
- DEPENDS:=+libstdcpp +libnetfilter-conntrack +libcurl +libopenssl +openssl-util +ca-bundle +ca-certificates +wget +bzip2 +libtins +ipset +libpthread
+ DEPENDS:=+libstdcpp +libnetfilter-conntrack +libcurl +libopenssl +openssl-util +ca-bundle +ca-certificates +wget +bzip2 +libtins +ipset +libpthread +libyaml-cpp
endef
define Package/noddos/description
-Noddos discovers what devices you have in your network and tailors the firewall rules based on whitelisted flows for that device. Noddos downloads the firewall rules periodically from the cloud. In order to support creating these firewall rules, noddos can optionally upload anonimized traffic statistics for each device to the cloud.
+Noddos discovers what devices you have in your network and tailors the firewall rules based on whitelisted flows for that device. Noddos downloads the firewall rules periodically from the cloud. In order to support creating these firewall rules, noddos can, after opt-in, upload anonimized traffic statistics for each device to the cloud. The Luci interface is available in the luci-apps-noddos package. For information, visit https://www.noddos.io/
endef
define Package/noddos/conffiles
- /etc/config/noddos
+ /etc/config/noddos
endef
define Package/noddos/install
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/makenoddoscert.sh $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/noddos.init $(1)/etc/init.d/noddos
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/noddos.uciconfig $(1)/etc/config/noddos
- $(INSTALL_DATA) $(PKG_BUILD_DIR)/files/noddos.conf-base $(1)/etc/noddos
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/files/noddos.yml-base $(1)/etc/noddos
$(INSTALL_DATA) $(PKG_BUILD_DIR)/files/noddosconfig.pem $(1)/etc/noddos
- $(INSTALL_DATA) $(PKG_BUILD_DIR)/files/noddos.conf-base $(1)/etc/noddos
endef
define Package/noddos/prerm
if [ -z "$${IPKG_INSTROOT}" ]; then
echo "Removing noddos data directory"
rm -rf /var/lib/noddos
- if [ -f /var/etc/noddos.conf ]; then
- rm /var/etc/noddos.conf
+ if [ -f /var/etc/noddos.yml ]; then
+ rm /var/etc/noddos.yml
fi
fi
exit 0
include $(TOPDIR)/rules.mk
PKG_NAME:=ocserv
-PKG_VERSION:=0.11.8
+PKG_VERSION:=0.11.9
PKG_RELEASE:=1
PKG_USE_MIPS16:=0
PKG_BUILD_DIR :=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=ftp://ftp.infradead.org/pub/ocserv/
-PKG_HASH:=735b9b88a004d5bc8a91d4093d07ea0e2c9fac370a35d84beccc394ed24420c7
+PKG_HASH:=23e274fd6a0e44df90eeb79276b1057f6508a2b4a842ce2f589a8353a51268eb
PKG_LICENSE:=GPLv2+
PKG_LICENSE_FILES:=COPYING
PKG_NAME:=openconnect
PKG_VERSION:=7.08
-PKG_RELEASE:=4
+PKG_RELEASE:=7
PKG_USE_MIPS16:=0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
SECTION:=net
CATEGORY:=Network
DEPENDS:=+libxml2 +kmod-tun +resolveip +vpnc-scripts +OPENCONNECT_OPENSSL:libopenssl +OPENCONNECT_OPENSSL:p11-kit +OPENCONNECT_OPENSSL:libp11 +OPENCONNECT_GNUTLS:libgnutls +OPENCONNECT_STOKEN:libstoken
- TITLE:=OpenConnect VPN client (Cisco AnyConnect compatible)
+ TITLE:=OpenConnect VPN client (Cisco AnyConnect and Juniper/Pulse compatible)
MAINTAINER:=Nikos Mavrogiannopoulos <n.mavrogiannopoulos@gmail.com>
URL:=http://www.infradead.org/openconnect/
SUBMENU:=VPN
endef
define Package/openconnect/description
- A VPN client compatible with Cisco's AnyConnect SSL VPN and ocserv.
+ A VPN client compatible with Cisco's AnyConnect SSL VPN, ocserv and Juniper (Pulse secure).
OpenConnect is a client that follows the Cisco's AnyConnect SSL VPN protocol,
which is supported by IOS 12.4(9)T or later on Cisco SR500, 870, 880, 1800,
2800, 3800, 7200 Series and Cisco 7301 Routers, as well as the OpenConnect
- VPN server.
+ VPN server. It has later been ported to support the Juniper SSL VPN which
+ is now known as Pulse Connect Secure.
endef
CONFIGURE_ARGS += \
To setup a VPN connection, add the following to /etc/config/network:
config interface 'MYVPN'
- option proto 'openconnect'
- option interface 'wan'
- option server 'vpn.example.com'
- option port '4443'
- option username 'test'
- option password 'secret'
- option serverhash 'AE7FF6A0426F0A0CD0A02EB9EC3C5066FAEB0B25'
+ option proto 'openconnect'
+ option interface 'wan'
+ option server 'vpn.example.com'
+ option port '4443'
+ option username 'test'
+ option password 'secret'
+ option serverhash 'AE7FF6A0426F0A0CD0A02EB9EC3C5066FAEB0B25'
option defaultroute '0'
- option authgroup 'DEFAULT'
+ option authgroup 'DEFAULT'
# For second factor auth:
#option password2 'my-fixed-2fa-password'
# RSA tokens, must be built with stoken support
- #option token_mode 'rsa'
- #option token_secret 'secret'
+ #option token_mode 'rsa'
+ #option token_secret 'secret'
# HOTP/TOTP tokens
- #option token_mode 'hotp'
- #option token_secret '00'
+ #option token_mode 'hotp'
+ #option token_secret '00'
+
+ # tokens from script
+ #option token_mode 'script'
+ #option token_script '/lib/custom/getocpass.sh'
+
+ # Juniper vpn support
+ #option juniper '1'
The additional files are also used:
/etc/openconnect/user-cert-vpn-MYVPN.pem: The user certificate
Note that you need to configure the firewall to allow communication between
the MYVPN interface and lan.
-
There is a luci plugin to allow configuring an openconnect interface from
the web environment; see the luci-proto-openconnect package.
proto_config_add_string "server"
proto_config_add_int "port"
proto_config_add_int "mtu"
+ proto_config_add_int "juniper"
+ proto_config_add_string "interface"
proto_config_add_string "username"
proto_config_add_string "serverhash"
proto_config_add_string "authgroup"
proto_config_add_string "password2"
proto_config_add_string "token_mode"
proto_config_add_string "token_secret"
+ proto_config_add_string "token_script"
proto_config_add_string "os"
proto_config_add_string "csd_wrapper"
no_device=1
proto_openconnect_setup() {
local config="$1"
- json_get_vars server port username serverhash authgroup password password2 token_mode token_secret os csd_wrapper mtu
+ json_get_vars server port interface username serverhash authgroup password password2 token_mode token_secret token_script os csd_wrapper mtu juniper
grep -q tun /proc/modules || insmod tun
ifname="vpn-$config"
logger -t "openconnect" "adding host dependency for $server at $config"
for ip in $(resolveip -t 10 "$server"); do
logger -t "openconnect" "adding host dependency for $ip at $config"
- proto_add_host_dependency "$config" "$ip"
+ proto_add_host_dependency "$config" "$ip" "$interface"
done
[ -n "$port" ] && port=":$port"
append cmdline "--cafile /etc/openconnect/ca-vpn-$config.pem"
append cmdline "--no-system-trust"
}
+
+ if [ "${juniper:-0}" -gt 0 ]; then
+ append cmdline "--juniper"
+ fi
+
[ -n "$serverhash" ] && {
append cmdline " --servercert=$serverhash"
append cmdline "--no-system-trust"
}
[ -n "$authgroup" ] && append cmdline "--authgroup $authgroup"
[ -n "$username" ] && append cmdline "-u $username"
- [ -n "$password" ] && {
+ [ -n "$password" ] || [ "$token_mode" = "script" ] && {
umask 077
mkdir -p /var/etc
pwfile="/var/etc/openconnect-$config.passwd"
- echo "$password" > "$pwfile"
- [ -n "$password2" ] && echo "$password2" >> "$pwfile"
+ [ -n "$password" ] && {
+ echo "$password" > "$pwfile"
+ [ -n "$password2" ] && echo "$password2" >> "$pwfile"
+ }
+ [ "$token_mode" = "script" ] && {
+ $token_script > "$pwfile" 2> /dev/null || {
+ logger -t openconenct "Cannot get password from script '$token_script'"
+ proto_setup_failed "$config"
+ }
+ }
append cmdline "--passwd-on-stdin"
}
- [ -n "$token_mode" ] && append cmdline "--token-mode=$token_mode"
+ [ -n "$token_mode" -a "$token_mode" != "script" ] && append cmdline "--token-mode=$token_mode"
[ -n "$token_secret" ] && append cmdline "--token-secret=$token_secret"
[ -n "$os" ] && append cmdline "--os=$os"
[ -n "$csd_wrapper" ] && [ -x "$csd_wrapper" ] && append cmdline "--csd-wrapper=$csd_wrapper"
#
# Copyright (C) 2013 Julius Schulz-Zander <julius@net.t-labs.tu-berlin.de>
-# Copyright (C) 2014 OpenWrt.org
+# Copyright (C) 2014-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=openvswitch
PKG_RELEASE:=1
-PKG_VERSION:=2.7.2
+PKG_VERSION:=2.8.1
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=COPYING
PKG_USE_MIPS16:=0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://openvswitch.org/releases/
-PKG_HASH:=fe36c86ed52f6f7c17b01cdbb7ae37bf521cc5c2e50997b618f3f742485f655b
+PKG_HASH:=8d1c439e26d7044f0ec823c7fef1b00b7c6465da0b83a7d0cf3191ed1dc43893
PKG_BUILD_DEPENDS:=python/host python-six/host
PKG_CONFIG_DEPENDS:=CONFIG_PACKAGE_openvswitch-python
to conserve some room and allow more configurability.
endef
+define Package/openvswitch-ovn-base
+ $(call Package/openvswitch/Default)
+ TITLE:=Open Virtual Networking (base)
+ DEPENDS:=+openvswitch-base
+endef
+
+define Package/openvswitch-ovn-base/description
+ Provides the main userspace components required for Open Virtual Networking
+ over Open vSwitch.
+endef
+
+OVN_BIN_TOOLS:=ovn-controller ovn-controller-vtep ovn-detrace \
+ ovn-docker-overlay-driver ovn-docker-underlay-driver \
+ ovn-nbctl ovn-sbctl ovn-trace
+define Package/openvswitch-ovn
+ $(call Package/openvswitch/Default)
+ TITLE:=Open Virtual Networking (base)
+ DEPENDS:=+openvswitch-ovn-base $(foreach t,$(OVN_BIN_TOOLS),+openvswitch-$(t))
+endef
+
+define Package/openvswitch-ovn/description
+ Provides all the components required for Open Virtual Networking
+ (including the tools)
+endef
+
+define Package/openvswitch-vtep
+ $(call Package/openvswitch/Default)
+ TITLE:=Open vSwitch VXLAN Tunnel End Point
+ DEPENDS:=+openvswitch-base
+endef
+
+define Package/openvswitch-vtep/description
+ This schema specifies relations that a VTEP can use to integrate physi‐
+ cal ports into logical switches maintained by a network virtualization
+ controller such as NSX.
+endef
+
define Package/openvswitch-python
$(call Package/openvswitch/Default)
TITLE:=Open vSwitch Python Support
Provides bindings and libraries for using Python to manipulate/work with Open vSwitch.
endef
-OVS_BIN_TOOLS:=ovs-appctl ovs-ofctl ovs-dpctl ovs-vsctl ovsdb-client
+OVS_BIN_TOOLS:= \
+ ovsdb-client ovs-l3ping ovs-dpctl-top \
+ ovs-tcpdump ovs-tcpundump ovs-pcap ovs-parse-backtrace
define Package/openvswitch
$(call Package/openvswitch/Default)
TITLE:=Open vSwitch Userspace Package
define Package/openvswitch/description
Provides the main userspace components required for Open vSwitch to function.
- Includes also the main OVS utilities (ovs-appctl, ovs-vsctl, etc).
+ Includes also most of OVS utilities.
endef
define KernelPackage/openvswitch
TARGET_CFLAGS += -flto -std=gnu99
-CONFIGURE_VARS += KARCH=$(LINUX_KARCH)
+CONFIGURE_VARS += \
+ ovs_cv_flake8=no \
+ ovs_cv_python3=no \
+ KARCH=$(LINUX_KARCH)
+
MAKE_FLAGS += \
ARCH="$(LINUX_KARCH)" \
PYTHONPATH="$(HOST_PYTHONPATH)" \
PYTHON="$(HOST_PYTHON_BIN)"
define OvsBinUtility
- define Package/openvswitch-$(1)
+ define Package/openvswitch-$(2)
$(call Package/openvswitch/Default)
- TITLE:=$(2)
- DEPENDS:=+openvswitch-base
+ TITLE:=$(3)
+ DEPENDS:=+$(1) $(4)
endef
- define Package/openvswitch-$(1)/description
- $(2)
+ define Package/openvswitch-$(2)/description
+ $(3)
endef
- define Package/openvswitch-$(1)/install
+ define Package/openvswitch-$(2)/install
$(INSTALL_DIR) $$(1)/usr/bin/ ;\
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(1) $$(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(2) $$(1)/usr/bin/
endef
endef
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libsflow*.so* $(1)/usr/lib/
$(INSTALL_DIR) $(1)/usr/bin/
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ovsdb-tool $(1)/usr/bin/
+ $(foreach bin,ovsdb-tool ovs-appctl ovs-ofctl ovs-dpctl ovs-vsctl ovs-pki, \
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(bin) $(1)/usr/bin/ ; )
$(INSTALL_DIR) $(1)/usr/sbin/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ovs-vswitchd $(1)/usr/sbin/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ovsdb-server $(1)/usr/sbin/
- $(INSTALL_DIR) $(1)/usr/share/openvswitch/
- $(INSTALL_CONF) $(PKG_INSTALL_DIR)/usr/share/openvswitch/vswitch.ovsschema $(1)/usr/share/openvswitch/
+ $(INSTALL_DIR) $(1)/usr/share/openvswitch/scripts
+ $(INSTALL_CONF) \
+ $(PKG_INSTALL_DIR)/usr/share/openvswitch/vswitch.ovsschema \
+ $(1)/usr/share/openvswitch/
+ $(INSTALL_DATA) \
+ $(PKG_INSTALL_DIR)/usr/share/openvswitch/scripts/ovs-lib \
+ $(1)/usr/share/openvswitch/scripts
+ $(INSTALL_BIN) \
+ $(PKG_INSTALL_DIR)/usr/share/openvswitch/scripts/ovs-ctl \
+ $(1)/usr/share/openvswitch/scripts
+endef
+
+define Package/openvswitch-ovn-base/install
+ $(INSTALL_DIR) $(1)/usr/lib/ $(1)/usr/bin/ $(1)/usr/share/openvswitch/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libovn*.so* $(1)/usr/lib/
+
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ovn-northd $(1)/usr/bin/
+
+ $(INSTALL_CONF) $(PKG_INSTALL_DIR)/usr/share/openvswitch/ovn-nb.ovsschema $(1)/usr/share/openvswitch/
+ $(INSTALL_CONF) $(PKG_INSTALL_DIR)/usr/share/openvswitch/ovn-sb.ovsschema $(1)/usr/share/openvswitch/
+endef
+
+define Package/openvswitch-vtep/install
+ $(INSTALL_DIR) $(1)/usr/lib/ $(1)/usr/bin/ $(1)/usr/share/openvswitch/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/vtep-ctl $(1)/usr/bin/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libvtep*.so* $(1)/usr/lib/
+ $(INSTALL_CONF) $(PKG_INSTALL_DIR)/usr/share/openvswitch/vtep.ovsschema $(1)/usr/share/openvswitch/
endef
define Package/openvswitch-python/install
$(CP) $(PKG_INSTALL_DIR)/usr/share/openvswitch/python/ovs/* $(1)/usr/lib/python$(PYTHON_VERSION)/ovs
endef
+define Package/openvswitch-ovn/install
+ :
+endef
+
define Package/openvswitch/install
:
endef
-$(eval $(call OvsBinUtility,ovs-appctl,Open vSwitch app control utility))
-$(eval $(call OvsBinUtility,ovs-ofctl,Open vSwitch OpenFlow control utility))
-$(eval $(call OvsBinUtility,ovs-dpctl,Open vSwitch datapath management utility))
-$(eval $(call OvsBinUtility,ovs-vsctl,Open vSwitch ovs-vswitchd management utility))
-$(eval $(call OvsBinUtility,ovsdb-client,Open vSwitch database JSON-RPC client))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-appctl,Open vSwitch app control utility))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-ofctl,Open vSwitch OpenFlow control utility))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-dpctl,Open vSwitch datapath management utility))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-vsctl,Open vSwitch ovs-vswitchd management utility))
+$(eval $(call OvsBinUtility,openvswitch-base,ovsdb-client,Open vSwitch database JSON-RPC client))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-l3ping,Check network deployment for L3 tunneling problems))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-docker,Open vSwitch docker tool))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-dpctl-top,Top like behavior for ovs-dpctl dump-flows))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-pki,OpenFlow public key infrastructure management utility))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-tcpdump,Dump traffic from an Open vSwitch port using tcpdump))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-tcpundump,Convert ``tcpdump -xx`` output to hex strings))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-pcap,Print packets from a pcap file as hex))
+$(eval $(call OvsBinUtility,openvswitch-base,ovs-parse-backtrace,parses ovs-appctl backtrace output))
+
+$(eval $(call OvsBinUtility,openvswitch-ovn-base,ovn-controller,Open Virtual Network local controller))
+$(eval $(call OvsBinUtility,openvswitch-ovn-base,ovn-controller-vtep,Open Virtual Network local controller for vtep enabled physical switches,+openvswitch-vtep))
+$(eval $(call OvsBinUtility,openvswitch-ovn-base,ovn-detrace,Convert ``ovs-appctl ofproto/trace`` output to combine OVN logical flow information))
+$(eval $(call OvsBinUtility,openvswitch-ovn-base,ovn-docker-overlay-driver,OVN Docker overlay driver utility))
+$(eval $(call OvsBinUtility,openvswitch-ovn-base,ovn-docker-underlay-driver,OVN Docker underlay driver utility))
+$(eval $(call OvsBinUtility,openvswitch-ovn-base,ovn-nbctl,Open Virtual Network northbound db management utility))
+$(eval $(call OvsBinUtility,openvswitch-ovn-base,ovn-sbctl,Utility for querying and configuring OVN_Southbound data‐base))
+$(eval $(call OvsBinUtility,openvswitch-ovn-base,ovn-trace,Open Virtual Network logical network tracing utility))
$(foreach t,$(OVS_BIN_TOOLS),$(eval $(call BuildPackage,openvswitch-$(t))))
+$(foreach t,$(OVN_BIN_TOOLS),$(eval $(call BuildPackage,openvswitch-$(t))))
$(eval $(call BuildPackage,openvswitch-base))
+$(eval $(call BuildPackage,openvswitch-ovn-base))
+$(eval $(call BuildPackage,openvswitch-ovn))
+$(eval $(call BuildPackage,openvswitch-vtep))
$(eval $(call BuildPackage,openvswitch-python))
$(eval $(call BuildPackage,openvswitch))
$(eval $(call KernelPackage,openvswitch))
#!/bin/sh /etc/rc.common
# Copyright (C) 2013 Julius Schulz-Zander <julius@net.t-labs.tu-berlin.de>
-# Copyright (C) 2014 OpenWrt.org
+# Copyright (C) 2014-2017 OpenWrt.org
START=15
-USE_PROCD=1
-start_service() {
- [ -x /var/run/openvswitch ] || mkdir -p /var/run/openvswitch
- [ -e /etc/openvswitch/conf.db ] || {
- /usr/bin/ovsdb-tool create /etc/openvswitch/conf.db /usr/share/openvswitch/vswitch.ovsschema
- }
+start() {
+ /usr/share/openvswitch/scripts/ovs-ctl start
+}
- # ovsdb-server
- procd_open_instance
- procd_set_param command /usr/sbin/ovsdb-server
- procd_append_param command --remote=punix:/var/run/db.sock
- procd_append_param command --remote=db:Open_vSwitch,Open_vSwitch,manager_options
- procd_append_param command --pidfile=/var/run/ovsdb-server.pid
- procd_set_param respawn
- procd_append_param respawn 3600
- procd_append_param respawn 5
- procd_append_param respawn -1
- procd_set_param nice
- procd_append_param nice -10
- procd_close_instance
+stop() {
+ /usr/share/openvswitch/scripts/ovs-ctl stop
+}
- # ovs-vswitchd
- procd_open_instance
- procd_set_param command /usr/sbin/ovs-vswitchd
- procd_append_param command --pidfile=/var/run/ovs-vswitchd.pid
- procd_set_param respawn
- procd_append_param respawn 3600
- procd_append_param respawn 5
- procd_append_param respawn -1
- procd_set_param nice
- procd_append_param nice -10
- procd_close_instance
+restart() {
+ /usr/share/openvswitch/scripts/ovs-ctl restart
+}
+status() {
+ /usr/share/openvswitch/scripts/ovs-ctl status
}
--- /dev/null
+diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in
+index dc1d02c..61ecf2f 100755
+--- a/utilities/ovs-ctl.in
++++ b/utilities/ovs-ctl.in
+@@ -108,7 +108,7 @@ set_system_ids () {
+ esac
+ set "$@" external-ids:system-id="\"$SYSTEM_ID\""
+
+- set "$@" external-ids:hostname="\"$(hostname -f)\""
++ set "$@" external-ids:hostname="\"$(cat /proc/sys/kernel/hostname)\""
+
+ set "$@" external-ids:rundir="\"$rundir\""
+
+diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in
+index 8665698..7931bc6 100644
+--- a/utilities/ovs-lib.in
++++ b/utilities/ovs-lib.in
+@@ -157,7 +157,11 @@ install_dir () {
+ [ "${OVS_USER##*:}" != "" ] && INSTALL_GROUP="${OVS_USER##*:}"
+
+ if test ! -d "$DIR"; then
+- install -d -m "$INSTALL_MODE" -o "$INSTALL_USER" -g "$INSTALL_GROUP" "$DIR"
++ mkdir -p "$DIR"
++ [ -n "$INSTALL_MODE" ] && chmod "$INSTALL_MODE" "$DIR"
++ local OWN="$INSTALL_USER"
++ [ -n "$OWN" ] && [ -n "$INSTALL_GROUP" ] && OWN="${OWN}:${INSTALL_GROUP}"
++ [ -n "$OWN" ] && chown "$OWN" "$DIR"
+ restorecon "$DIR" >/dev/null 2>&1
+ fi
+ }
+++ /dev/null
---- a/tests/test-ovn.c
-+++ b/tests/test-ovn.c
-@@ -1043,7 +1043,7 @@ wait_pid(pid_t *pids, int *n)
- int status;
- pid_t pid;
-
-- pid = waitpid(WAIT_ANY, &status, 0);
-+ pid = waitpid(-1, &status, 0);
- if (pid < 0) {
- ovs_fatal(errno, "waitpid failed");
- } else if (WIFEXITED(status)) {
--- /dev/null
+# Copyright (C) 2017 Yousong Zhou
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=pixiewps
+PKG_VERSION:=1.4.1
+PKG_RELEASE:=1
+PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://github.com/wiire-a/pixiewps/releases/download/v$(PKG_VERSION)
+PKG_HASH:=8b61b9d94e26c07ab08a01eacd200576375c08139f9d781b5fdbb587ddd33528
+
+PKG_LICENSE:=GPL-3.0
+PKG_LICENSE_FILES:=LICENSE.md
+
+include $(INCLUDE_DIR)/package.mk
+MAKE_PATH:=src
+
+define Package/pixiewps
+ SECTION:=net
+ CATEGORY:=Network
+ SUBMENU:=wireless
+ TITLE:=An offline WPS bruteforce utility
+ URL:=https://github.com/wiire-a/pixiewps
+ DEPENDS:=+libpthread
+endef
+
+define Package/pixiewps/description
+ Pixiewps is a tool written in C used to bruteforce offline the WPS PIN
+ exploiting the low or non-existing entropy of some Access Points, the so-called
+ "pixie-dust attack" discovered by Dominique Bongard in summer 2014. It is
+ meant for educational purposes only.
+endef
+
+define Package/pixiewps/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/pixiewps $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,pixiewps))
PKG_NAME:=polipo
PKG_VERSION:=1.1.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.pps.jussieu.fr/~jch/software/files/$(PKG_NAME)/
by a larger group.
endef
+TARGET_CFLAGS += -DHAVE_IPv6
+
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \
CC="$(TARGET_CC)" \
#
# Copyright (C) 2012-2015 OpenWrt.org
+# Copyright (C) 2017 Yousong Zhou
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=reaver
-PKG_VERSION:=1.4
-PKG_RELEASE:=3
+PKG_VERSION:=1.6.3
+PKG_RELEASE:=1
PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/reaver-wps
-PKG_HASH:=add3050a4a05fe0ab6bfb291ee2de8e9b8a85f1e64ced93ee27a75744954b22d
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://github.com/t6x/reaver-wps-fork-t6x/releases/download/v$(PKG_VERSION)
+PKG_HASH:=191f785f53030e4803260ada1a29ca4b42c848d56f6f3982e320d03b6117aaf2
+
PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=docs/LICENSE
PKG_USE_MIPS16:=0
PKG_AUTOMAKE_PATHS:=src
PKG_FIXUP:=autoreconf
include $(INCLUDE_DIR)/package.mk
-
CONFIGURE_PATH:=src
MAKE_PATH:=src
-EXTRA_CFLAGS=$(TARGET_CPPFLAGS)
define Package/reaver
SECTION:=net
CATEGORY:=Network
SUBMENU:=wireless
TITLE:=Efficient brute force attack against Wifi Protected Setup
- URL:=https://code.google.com/p/reaver-wps/
- DEPENDS:=+libpcap +libsqlite3
+ URL:=https://github.com/t6x/reaver-wps-fork-t6x
+ DEPENDS:=+libpcap
endef
define Package/reaver/description
- Reaver targets the external registrar functionality mandated by the WiFi
- Protected Setup specification.
- Access points will provide authenticated registrars with their current
- wireless configuration (including the WPA PSK), and also accept a new
- configuration from the registrar.
+ Reaver has been designed to be a robust and practical attack against Wi-Fi
+ Protected Setup (WPS) registrar PINs in order to recover WPA/WPA2
+ passphrases. It has been tested against a wide variety of access points and
+ WPS implementations.
+
+ This is reaver-wps-fork-t6x, a community forked version, which has included
+ various bug fixes and additional attack method (the offline Pixie Dust
+ attack).
endef
define Package/reaver/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/{reaver,wash} $(1)/usr/bin/
- $(INSTALL_DIR) $(1)/etc/reaver
- $(INSTALL_DATA) $(PKG_BUILD_DIR)/src/reaver.db $(1)/etc/reaver/
endef
$(eval $(call BuildPackage,reaver))
+++ /dev/null
-From 4e7af9f022996cb0a03b30f6af265b757807dfa2 Mon Sep 17 00:00:00 2001
-From: Paul Fertser <fercerpav@gmail.com>
-Date: Wed, 27 Jun 2012 17:44:55 +0400
-Subject: [PATCH 1/3] wpscrack: big-endian fixes
-
-This should fix access to the radiotap, 802.11, LLC/SNAP and WFA
-headers' fields. Run-time tested on an ar71xx BE system.
-
-Signed-off-by: Paul Fertser <fercerpav@gmail.com>
----
- src/80211.c | 65 +++++++++++++++++++------------
- src/builder.c | 23 +++++------
- src/defs.h | 116 +++++++++++++++++++++++++++++++++++++++-----------------
- src/exchange.c | 23 ++++++-----
- src/wpsmon.c | 13 ++++--
- 5 files changed, 151 insertions(+), 89 deletions(-)
-
-diff --git a/src/80211.c b/src/80211.c
-index c2aff59..19f1e92 100644
---- a/src/80211.c
-+++ b/src/80211.c
-@@ -90,17 +90,19 @@ void read_ap_beacon()
- if(header.len >= MIN_BEACON_SIZE)
- {
- rt_header = (struct radio_tap_header *) radio_header(packet, header.len);
-- frame_header = (struct dot11_frame_header *) (packet + rt_header->len);
--
-+ size_t rt_header_len = __le16_to_cpu(rt_header->len);
-+ frame_header = (struct dot11_frame_header *) (packet + rt_header_len);
-+
- if(is_target(frame_header))
- {
-- if(frame_header->fc.type == MANAGEMENT_FRAME && frame_header->fc.sub_type == SUBTYPE_BEACON)
-+ if((frame_header->fc & __cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) ==
-+ __cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON))
- {
-- beacon = (struct beacon_management_frame *) (packet + rt_header->len + sizeof(struct dot11_frame_header));
-+ beacon = (struct beacon_management_frame *) (packet + rt_header_len + sizeof(struct dot11_frame_header));
- set_ap_capability(beacon->capability);
-
- /* Obtain the SSID and channel number from the beacon packet */
-- tag_offset = rt_header->len + sizeof(struct dot11_frame_header) + sizeof(struct beacon_management_frame);
-+ tag_offset = rt_header_len + sizeof(struct dot11_frame_header) + sizeof(struct beacon_management_frame);
- channel = parse_beacon_tags(packet, header.len);
-
- /* If no channel was manually specified, switch to the AP's current channel */
-@@ -135,29 +137,31 @@ int8_t signal_strength(const u_char *packet, size_t len)
- {
- header = (struct radio_tap_header *) packet;
-
-- if((header->flags & SSI_FLAG) == SSI_FLAG)
-+ uint32_t flags = __le32_to_cpu(header->flags);
-+
-+ if((flags & SSI_FLAG) == SSI_FLAG)
- {
-- if((header->flags & TSFT_FLAG) == TSFT_FLAG)
-+ if((flags & TSFT_FLAG) == TSFT_FLAG)
- {
- offset += TSFT_SIZE;
- }
-
-- if((header->flags & FLAGS_FLAG) == FLAGS_FLAG)
-+ if((flags & FLAGS_FLAG) == FLAGS_FLAG)
- {
- offset += FLAGS_SIZE;
- }
-
-- if((header->flags & RATE_FLAG) == RATE_FLAG)
-+ if((flags & RATE_FLAG) == RATE_FLAG)
- {
- offset += RATE_SIZE;
- }
-
-- if((header->flags & CHANNEL_FLAG) == CHANNEL_FLAG)
-+ if((flags & CHANNEL_FLAG) == CHANNEL_FLAG)
- {
- offset += CHANNEL_SIZE;
- }
-
-- if((header->flags & FHSS_FLAG) == FHSS_FLAG)
-+ if((flags & FHSS_FLAG) == FHSS_FLAG)
- {
- offset += FHSS_FLAG;
- }
-@@ -196,11 +200,13 @@ int is_wps_locked()
- if(header.len >= MIN_BEACON_SIZE)
- {
- rt_header = (struct radio_tap_header *) radio_header(packet, header.len);
-- frame_header = (struct dot11_frame_header *) (packet + rt_header->len);
-+ size_t rt_header_len = __le16_to_cpu(rt_header->len);
-+ frame_header = (struct dot11_frame_header *) (packet + rt_header_len);
-
- if(memcmp(frame_header->addr3, get_bssid(), MAC_ADDR_LEN) == 0)
- {
-- if(frame_header->fc.type == MANAGEMENT_FRAME && frame_header->fc.sub_type == SUBTYPE_BEACON)
-+ if((frame_header->fc & __cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) ==
-+ __cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON))
- {
- if(parse_wps_parameters(packet, header.len, &wps))
- {
-@@ -411,24 +417,30 @@ int associate_recv_loop()
- if(header.len >= MIN_AUTH_SIZE)
- {
- rt_header = (struct radio_tap_header *) radio_header(packet, header.len);
-- dot11_frame = (struct dot11_frame_header *) (packet + rt_header->len);
-+ size_t rt_header_len = __le16_to_cpu(rt_header->len);
-+ dot11_frame = (struct dot11_frame_header *) (packet + rt_header_len);
-
- if((memcmp(dot11_frame->addr3, get_bssid(), MAC_ADDR_LEN) == 0) &&
- (memcmp(dot11_frame->addr1, get_mac(), MAC_ADDR_LEN) == 0))
- {
-- if(dot11_frame->fc.type == MANAGEMENT_FRAME)
-+ if((dot11_frame->fc & __cpu_to_le16(IEEE80211_FCTL_FTYPE)) ==
-+ __cpu_to_le16(IEEE80211_FTYPE_MGMT))
- {
-- auth_frame = (struct authentication_management_frame *) (packet + sizeof(struct dot11_frame_header) + rt_header->len);
-- assoc_frame = (struct association_response_management_frame *) (packet + sizeof(struct dot11_frame_header) + rt_header->len);
-+ auth_frame = (struct authentication_management_frame *) (packet + sizeof(struct dot11_frame_header) + rt_header_len);
-+ assoc_frame = (struct association_response_management_frame *) (packet + sizeof(struct dot11_frame_header) + rt_header_len);
-
- /* Did we get an authentication packet with a successful status? */
-- if((dot11_frame->fc.sub_type == SUBTYPE_AUTHENTICATION) && (auth_frame->status == AUTHENTICATION_SUCCESS))
-+ if((dot11_frame->fc & __cpu_to_le16(IEEE80211_FCTL_STYPE)) ==
-+ __cpu_to_le16(IEEE80211_STYPE_AUTH)
-+ && (auth_frame->status == __cpu_to_le16(AUTHENTICATION_SUCCESS)))
- {
- ret_val = AUTH_OK;
- break;
- }
- /* Did we get an association packet with a successful status? */
-- else if((dot11_frame->fc.sub_type == SUBTYPE_ASSOCIATION) && (assoc_frame->status == ASSOCIATION_SUCCESS))
-+ else if((dot11_frame->fc & __cpu_to_le16(IEEE80211_FCTL_STYPE)) ==
-+ __cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP)
-+ && (assoc_frame->status == __cpu_to_le16(ASSOCIATION_SUCCESS)))
- {
- ret_val = ASSOCIATE_OK;
- break;
-@@ -455,13 +467,14 @@ enum encryption_type supported_encryption(const u_char *packet, size_t len)
- if(len > MIN_BEACON_SIZE)
- {
- rt_header = (struct radio_tap_header *) radio_header(packet, len);
-- beacon = (struct beacon_management_frame *) (packet + rt_header->len + sizeof(struct dot11_frame_header));
-- offset = tag_offset = rt_header->len + sizeof(struct dot11_frame_header) + sizeof(struct beacon_management_frame);
-+ size_t rt_header_len = __le16_to_cpu(rt_header->len);
-+ beacon = (struct beacon_management_frame *) (packet + rt_header_len + sizeof(struct dot11_frame_header));
-+ offset = tag_offset = rt_header_len + sizeof(struct dot11_frame_header) + sizeof(struct beacon_management_frame);
-
- tag_len = len - tag_offset;
- tag_data = (const u_char *) (packet + tag_offset);
-
-- if((beacon->capability & CAPABILITY_WEP) == CAPABILITY_WEP)
-+ if((__le16_to_cpu(beacon->capability) & CAPABILITY_WEP) == CAPABILITY_WEP)
- {
- enc = WEP;
-
-@@ -509,7 +522,7 @@ int parse_beacon_tags(const u_char *packet, size_t len)
- struct radio_tap_header *rt_header = NULL;
-
- rt_header = (struct radio_tap_header *) radio_header(packet, len);
-- tag_offset = rt_header->len + sizeof(struct dot11_frame_header) + sizeof(struct beacon_management_frame);
-+ tag_offset = __le16_to_cpu(rt_header->len) + sizeof(struct dot11_frame_header) + sizeof(struct beacon_management_frame);
-
- if(tag_offset < len)
- {
-@@ -548,7 +561,7 @@ int parse_beacon_tags(const u_char *packet, size_t len)
- {
- if(ie_len == 1)
- {
-- memcpy((int *) &channel, channel_data, ie_len);
-+ channel = *(uint8_t*)channel_data;
- }
- free(channel_data);
- }
-@@ -603,13 +616,13 @@ int check_fcs(const u_char *packet, size_t len)
- if(len > 4)
- {
- /* Get the packet's reported FCS (last 4 bytes of the packet) */
-- memcpy((uint32_t *) &fcs, (packet + (len-4)), 4);
-+ fcs = __le32_to_cpu(*(uint32_t*)(packet + (len-4)));
-
- /* FCS is not calculated over the radio tap header */
- if(has_rt_header())
- {
- rt_header = (struct radio_tap_header *) packet;
-- offset += rt_header->len;
-+ offset += __le16_to_cpu(rt_header->len);
- }
-
- if(len > offset)
-diff --git a/src/builder.c b/src/builder.c
-index 37f2de7..6bf89e7 100644
---- a/src/builder.c
-+++ b/src/builder.c
-@@ -44,9 +44,8 @@ const void *build_radio_tap_header(size_t *len)
- memset((void *) buf, 0, sizeof(struct radio_tap_header));
- rt_header = (struct radio_tap_header *) buf;
-
-- rt_header->len = sizeof(struct radio_tap_header);
--
-- *len = rt_header->len;
-+ *len = sizeof(struct radio_tap_header);
-+ rt_header->len = __cpu_to_le16(*len);
- }
-
- return buf;
-@@ -67,9 +66,9 @@ const void *build_dot11_frame_header(uint16_t fc, size_t *len)
-
- frag_seq += SEQ_MASK;
-
-- header->duration = DEFAULT_DURATION;
-- memcpy((void *) &header->fc, (void *) &fc, sizeof(struct frame_control));
-- header->frag_seq = frag_seq;
-+ header->duration = __cpu_to_le16(DEFAULT_DURATION);
-+ header->fc = __cpu_to_le16(fc);
-+ header->frag_seq = __cpu_to_le16(frag_seq);
-
- memcpy((void *) header->addr1, get_bssid(), MAC_ADDR_LEN);
- memcpy((void *) header->addr2, get_mac(), MAC_ADDR_LEN);
-@@ -91,8 +90,8 @@ const void *build_authentication_management_frame(size_t *len)
- memset((void *) buf, 0, *len);
- frame = (struct authentication_management_frame *) buf;
-
-- frame->algorithm = OPEN_SYSTEM;
-- frame->sequence = 1;
-+ frame->algorithm = __cpu_to_le16(OPEN_SYSTEM);
-+ frame->sequence = __cpu_to_le16(1);
- frame->status = 0;
- }
-
-@@ -111,8 +110,8 @@ const void *build_association_management_frame(size_t *len)
- memset((void *) buf, 0, *len);
- frame = (struct association_request_management_frame *) buf;
-
-- frame->capability = get_ap_capability();
-- frame->listen_interval = LISTEN_INTERVAL;
-+ frame->capability = __cpu_to_le16(get_ap_capability());
-+ frame->listen_interval = __cpu_to_le16(LISTEN_INTERVAL);
- }
-
- return buf;
-@@ -133,7 +132,7 @@ const void *build_llc_header(size_t *len)
- header->dsap = LLC_SNAP;
- header->ssap = LLC_SNAP;
- header->control_field = UNNUMBERED_FRAME;
-- header->type = DOT1X_AUTHENTICATION;
-+ header->type = __cpu_to_be16(DOT1X_AUTHENTICATION);
-
- }
-
-@@ -279,7 +278,7 @@ const void *build_wfa_header(uint8_t op_code, size_t *len)
- header = (struct wfa_expanded_header *) buf;
-
- memcpy(header->id, WFA_VENDOR_ID, sizeof(header->id));
-- header->type = SIMPLE_CONFIG;
-+ header->type = __cpu_to_be32(SIMPLE_CONFIG);
- header->opcode = op_code;
- }
-
-diff --git a/src/defs.h b/src/defs.h
-index b2f45ea..0c628e7 100644
---- a/src/defs.h
-+++ b/src/defs.h
-@@ -41,6 +41,7 @@
- #include <string.h>
- #include <time.h>
- #include <pcap.h>
-+#include <asm/byteorder.h>
-
- #include "wps.h"
-
-@@ -65,10 +66,10 @@
- #define MANAGEMENT_FRAME 0x00
- #define SUBTYPE_BEACON 0x08
-
--#define DOT1X_AUTHENTICATION 0x8E88
-+#define DOT1X_AUTHENTICATION 0x888E
- #define DOT1X_EAP_PACKET 0x00
-
--#define SIMPLE_CONFIG 0x01000000
-+#define SIMPLE_CONFIG 0x00000001
-
- #define P1_SIZE 10000
- #define P2_SIZE 1000
-@@ -282,66 +283,111 @@ enum wfa_elements
- WEP_TRANSMIT_KEY = 0x10064
- };
-
-+#define IEEE80211_FCTL_VERS 0x0003
-+#define IEEE80211_FCTL_FTYPE 0x000c
-+#define IEEE80211_FCTL_STYPE 0x00f0
-+#define IEEE80211_FCTL_TODS 0x0100
-+#define IEEE80211_FCTL_FROMDS 0x0200
-+#define IEEE80211_FCTL_MOREFRAGS 0x0400
-+#define IEEE80211_FCTL_RETRY 0x0800
-+#define IEEE80211_FCTL_PM 0x1000
-+#define IEEE80211_FCTL_MOREDATA 0x2000
-+#define IEEE80211_FCTL_PROTECTED 0x4000
-+#define IEEE80211_FCTL_ORDER 0x8000
-+
-+#define IEEE80211_SCTL_FRAG 0x000F
-+#define IEEE80211_SCTL_SEQ 0xFFF0
-+
-+#define IEEE80211_FTYPE_MGMT 0x0000
-+#define IEEE80211_FTYPE_CTL 0x0004
-+#define IEEE80211_FTYPE_DATA 0x0008
-+
-+/* management */
-+#define IEEE80211_STYPE_ASSOC_REQ 0x0000
-+#define IEEE80211_STYPE_ASSOC_RESP 0x0010
-+#define IEEE80211_STYPE_REASSOC_REQ 0x0020
-+#define IEEE80211_STYPE_REASSOC_RESP 0x0030
-+#define IEEE80211_STYPE_PROBE_REQ 0x0040
-+#define IEEE80211_STYPE_PROBE_RESP 0x0050
-+#define IEEE80211_STYPE_BEACON 0x0080
-+#define IEEE80211_STYPE_ATIM 0x0090
-+#define IEEE80211_STYPE_DISASSOC 0x00A0
-+#define IEEE80211_STYPE_AUTH 0x00B0
-+#define IEEE80211_STYPE_DEAUTH 0x00C0
-+#define IEEE80211_STYPE_ACTION 0x00D0
-+
-+/* control */
-+#define IEEE80211_STYPE_BACK_REQ 0x0080
-+#define IEEE80211_STYPE_BACK 0x0090
-+#define IEEE80211_STYPE_PSPOLL 0x00A0
-+#define IEEE80211_STYPE_RTS 0x00B0
-+#define IEEE80211_STYPE_CTS 0x00C0
-+#define IEEE80211_STYPE_ACK 0x00D0
-+#define IEEE80211_STYPE_CFEND 0x00E0
-+#define IEEE80211_STYPE_CFENDACK 0x00F0
-+
-+/* data */
-+#define IEEE80211_STYPE_DATA 0x0000
-+#define IEEE80211_STYPE_DATA_CFACK 0x0010
-+#define IEEE80211_STYPE_DATA_CFPOLL 0x0020
-+#define IEEE80211_STYPE_DATA_CFACKPOLL 0x0030
-+#define IEEE80211_STYPE_NULLFUNC 0x0040
-+#define IEEE80211_STYPE_CFACK 0x0050
-+#define IEEE80211_STYPE_CFPOLL 0x0060
-+#define IEEE80211_STYPE_CFACKPOLL 0x0070
-+#define IEEE80211_STYPE_QOS_DATA 0x0080
-+#define IEEE80211_STYPE_QOS_DATA_CFACK 0x0090
-+#define IEEE80211_STYPE_QOS_DATA_CFPOLL 0x00A0
-+#define IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0
-+#define IEEE80211_STYPE_QOS_NULLFUNC 0x00C0
-+#define IEEE80211_STYPE_QOS_CFACK 0x00D0
-+#define IEEE80211_STYPE_QOS_CFPOLL 0x00E0
-+#define IEEE80211_STYPE_QOS_CFACKPOLL 0x00F0
-+
- #pragma pack(1)
- struct radio_tap_header
- {
- uint8_t revision;
- uint8_t pad;
-- uint16_t len;
-- uint32_t flags;
--};
--
--struct frame_control
--{
-- unsigned version : 2;
-- unsigned type : 2;
-- unsigned sub_type : 4;
--
-- unsigned to_ds : 1;
-- unsigned from_ds : 1;
-- unsigned more_frag : 1;
-- unsigned retry : 1;
-- unsigned pwr_mgt : 1;
-- unsigned more_data : 1;
-- unsigned protected_frame : 1;
-- unsigned order : 1;
-+ __le16 len;
-+ __le32 flags;
- };
-
- struct dot11_frame_header
- {
-- struct frame_control fc;
-- uint16_t duration;
-+ __le16 fc;
-+ __le16 duration;
- unsigned char addr1[MAC_ADDR_LEN];
- unsigned char addr2[MAC_ADDR_LEN];
- unsigned char addr3[MAC_ADDR_LEN];
-- uint16_t frag_seq;
-+ __le16 frag_seq;
- };
-
- struct authentication_management_frame
- {
-- uint16_t algorithm;
-- uint16_t sequence;
-- uint16_t status;
-+ __le16 algorithm;
-+ __le16 sequence;
-+ __le16 status;
- };
-
- struct association_request_management_frame
- {
-- uint16_t capability;
-- uint16_t listen_interval;
-+ __le16 capability;
-+ __le16 listen_interval;
- };
-
- struct association_response_management_frame
- {
-- uint16_t capability;
-- uint16_t status;
-- uint16_t id;
-+ __le16 capability;
-+ __le16 status;
-+ __le16 id;
- };
-
- struct beacon_management_frame
- {
- unsigned char timestamp[TIMESTAMP_LEN];
-- uint16_t beacon_interval;
-- uint16_t capability;
-+ __le16 beacon_interval;
-+ __le16 capability;
- };
-
- struct llc_header
-@@ -350,7 +396,7 @@ struct llc_header
- uint8_t ssap;
- uint8_t control_field;
- unsigned char org_code[3];
-- uint16_t type;
-+ __be16 type;
- };
-
- struct dot1X_header
-@@ -371,7 +417,7 @@ struct eap_header
- struct wfa_expanded_header
- {
- unsigned char id[3];
-- uint32_t type;
-+ __be32 type;
- uint8_t opcode;
- uint8_t flags;
- };
-diff --git a/src/exchange.c b/src/exchange.c
-index 23c87e9..4f9a82b 100644
---- a/src/exchange.c
-+++ b/src/exchange.c
-@@ -306,26 +306,27 @@ enum wps_type process_packet(const u_char *packet, struct pcap_pkthdr *header)
-
- /* Cast the radio tap and 802.11 frame headers and parse out the Frame Control field */
- rt_header = (struct radio_tap_header *) packet;
-- frame_header = (struct dot11_frame_header *) (packet+rt_header->len);
-+ size_t rt_header_len = __le16_to_cpu(rt_header->len);
-+ frame_header = (struct dot11_frame_header *) (packet+rt_header_len);
-
- /* Does the BSSID/source address match our target BSSID? */
- if(memcmp(frame_header->addr3, get_bssid(), MAC_ADDR_LEN) == 0)
- {
- /* Is this a data packet sent to our MAC address? */
-- if(frame_header->fc.type == DATA_FRAME &&
-- frame_header->fc.sub_type == SUBTYPE_DATA &&
-- (memcmp(frame_header->addr1, get_mac(), MAC_ADDR_LEN) == 0))
-+ if (((frame_header->fc & __cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) ==
-+ __cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA)) &&
-+ (memcmp(frame_header->addr1, get_mac(), MAC_ADDR_LEN) == 0))
- {
- llc = (struct llc_header *) (packet +
-- rt_header->len +
-+ rt_header_len +
- sizeof(struct dot11_frame_header)
- );
-
- /* All packets in our exchanges will be 802.1x */
-- if(llc->type == DOT1X_AUTHENTICATION)
-+ if(llc->type == __cpu_to_be16(DOT1X_AUTHENTICATION))
- {
- dot1x = (struct dot1X_header *) (packet +
-- rt_header->len +
-+ rt_header_len +
- sizeof(struct dot11_frame_header) +
- sizeof(struct llc_header)
- );
-@@ -334,7 +335,7 @@ enum wps_type process_packet(const u_char *packet, struct pcap_pkthdr *header)
- if(dot1x->type == DOT1X_EAP_PACKET && (header->len >= EAP_PACKET_SIZE))
- {
- eap = (struct eap_header *) (packet +
-- rt_header->len +
-+ rt_header_len +
- sizeof(struct dot11_frame_header) +
- sizeof(struct llc_header) +
- sizeof(struct dot1X_header)
-@@ -366,7 +367,7 @@ enum wps_type process_packet(const u_char *packet, struct pcap_pkthdr *header)
- else if((eap->type == EAP_EXPANDED) && (header->len > WFA_PACKET_SIZE))
- {
- wfa = (struct wfa_expanded_header *) (packet +
-- rt_header->len +
-+ rt_header_len +
- sizeof(struct dot11_frame_header) +
- sizeof(struct llc_header) +
- sizeof(struct dot1X_header) +
-@@ -374,14 +375,14 @@ enum wps_type process_packet(const u_char *packet, struct pcap_pkthdr *header)
- );
-
- /* Verify that this is a WPS message */
-- if(wfa->type == SIMPLE_CONFIG)
-+ if(wfa->type == __cpu_to_be32(SIMPLE_CONFIG))
- {
- wps_msg_len = (size_t) ntohs(eap->len) -
- sizeof(struct eap_header) -
- sizeof(struct wfa_expanded_header);
-
- wps_msg = (const void *) (packet +
-- rt_header->len +
-+ rt_header_len +
- sizeof(struct dot11_frame_header) +
- sizeof(struct llc_header) +
- sizeof(struct dot1X_header) +
-diff --git a/src/wpsmon.c b/src/wpsmon.c
-index d976924..22a394f 100644
---- a/src/wpsmon.c
-+++ b/src/wpsmon.c
-@@ -295,7 +295,8 @@ void parse_wps_settings(const u_char *packet, struct pcap_pkthdr *header, char *
- }
-
- rt_header = (struct radio_tap_header *) radio_header(packet, header->len);
-- frame_header = (struct dot11_frame_header *) (packet + rt_header->len);
-+ size_t rt_header_len = __le16_to_cpu(rt_header->len);
-+ frame_header = (struct dot11_frame_header *) (packet + rt_header_len);
-
- /* If a specific BSSID was specified, only parse packets from that BSSID */
- if(!is_target(frame_header))
-@@ -323,15 +324,17 @@ void parse_wps_settings(const u_char *packet, struct pcap_pkthdr *header, char *
- channel_changed = 1;
- }
-
-- if(frame_header->fc.sub_type == PROBE_RESPONSE ||
-- frame_header->fc.sub_type == SUBTYPE_BEACON)
-+ unsigned fsub_type = frame_header->fc & __cpu_to_le16(IEEE80211_FCTL_STYPE);
-+
-+ if(fsub_type == __cpu_to_le16(IEEE80211_STYPE_PROBE_RESP) ||
-+ fsub_type == __cpu_to_le16(IEEE80211_STYPE_BEACON))
- {
- wps_parsed = parse_wps_parameters(packet, header->len, wps);
- }
-
- if(!is_done(bssid) && (get_channel() == channel || source == PCAP_FILE))
- {
-- if(frame_header->fc.sub_type == SUBTYPE_BEACON &&
-+ if(fsub_type == __cpu_to_le16(IEEE80211_STYPE_BEACON) &&
- mode == SCAN &&
- !passive &&
- should_probe(bssid))
-@@ -369,7 +372,7 @@ void parse_wps_settings(const u_char *packet, struct pcap_pkthdr *header, char *
- * If there was no WPS information, then the AP does not support WPS and we should ignore it from here on.
- * If this was a probe response, then we've gotten all WPS info we can get from this AP and should ignore it from here on.
- */
-- if(!wps_parsed || frame_header->fc.sub_type == PROBE_RESPONSE)
-+ if(!wps_parsed || fsub_type == __cpu_to_le16(IEEE80211_STYPE_PROBE_RESP))
- {
- mark_ap_complete(bssid);
- }
---
-1.7.7
-
+++ /dev/null
-From cd444949f3176790101b8bdc9656831a03d8c01d Mon Sep 17 00:00:00 2001
-From: Paul Fertser <fercerpav@gmail.com>
-Date: Tue, 10 Jul 2012 11:13:29 +0400
-Subject: [PATCH 2/3] Use the current directory for storing and loading
- sessions
-
-This allows the user to always explicitely choose (by changing the
-current directory before launching the program) where the session
-files should go. Useful e.g. to avoid hogging the precious space on
-embedded devices, just cd /tmp before starting the app.
-
-Signed-off-by: Paul Fertser <fercerpav@gmail.com>
----
- src/session.c | 16 +++-------------
- 1 files changed, 3 insertions(+), 13 deletions(-)
-
-diff --git a/src/session.c b/src/session.c
-index d3af0c3..308f213 100644
---- a/src/session.c
-+++ b/src/session.c
-@@ -62,7 +62,7 @@ int restore_session()
- memset(file, 0, FILENAME_MAX);
-
- bssid = mac2str(get_bssid(), '\0');
-- snprintf(file, FILENAME_MAX, "%s/%s.%s", CONF_DIR, bssid, CONF_EXT);
-+ snprintf(file, FILENAME_MAX, "%s.%s", bssid, CONF_EXT);
- free(bssid);
- }
-
-@@ -199,18 +199,8 @@ int save_session()
- }
- else
- {
-- /*
-- * If the configuration directory exists, save the session file there; else, save it to the
-- * current working directory.
-- */
-- if(configuration_directory_exists())
-- {
-- snprintf((char *) &file_name, FILENAME_MAX, "%s/%s.%s", CONF_DIR, bssid, CONF_EXT);
-- }
-- else
-- {
-- snprintf((char *) &file_name, FILENAME_MAX, "%s.%s", bssid, CONF_EXT);
-- }
-+ /* save session to the current directory */
-+ snprintf((char *) &file_name, FILENAME_MAX, "%s.%s", bssid, CONF_EXT);
- }
-
- /* Don't bother saving anything if nothing has been done */
---
-1.7.7
-
+++ /dev/null
-From 638bb8d70d6c7e5dc99975e0bf57d8ce0455e2cc Mon Sep 17 00:00:00 2001
-From: Paul Fertser <fercerpav@gmail.com>
-Date: Tue, 10 Jul 2012 11:25:00 +0400
-Subject: [PATCH 3/3] wash/wpsmon: use less useless spaces in output to fit
- narrow terminals
-
-Signed-off-by: Paul Fertser <fercerpav@gmail.com>
----
- src/wpsmon.c | 6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/wpsmon.c b/src/wpsmon.c
-index 22a394f..e0948b3 100644
---- a/src/wpsmon.c
-+++ b/src/wpsmon.c
-@@ -262,8 +262,8 @@ void monitor(char *bssid, int passive, int source, int channel, int mode)
-
- if(!header_printed)
- {
-- cprintf(INFO, "BSSID Channel RSSI WPS Version WPS Locked ESSID\n");
-- cprintf(INFO, "---------------------------------------------------------------------------------------------------------------\n");
-+ cprintf(INFO, "BSSID Channel RSSI WPS Version WPS Locked ESSID\n");
-+ cprintf(INFO, "--------------------------------------------------------------------------------------\n");
- header_printed = 1;
- }
-
-@@ -360,7 +360,7 @@ void parse_wps_settings(const u_char *packet, struct pcap_pkthdr *header, char *
- break;
- }
-
-- cprintf(INFO, "%17s %2d %.2d %d.%d %s %s\n", bssid, channel, rssi, (wps->version >> 4), (wps->version & 0x0F), lock_display, ssid);
-+ cprintf(INFO, "%17s %2d %.2d %d.%d %s %s\n", bssid, channel, rssi, (wps->version >> 4), (wps->version & 0x0F), lock_display, ssid);
- }
-
- if(probe_sent)
---
-1.7.7
-
+++ /dev/null
-From a8edcc1ce2a55e0e02ee13c46c6a5f22dd7920e9 Mon Sep 17 00:00:00 2001
-From: "cheffner@tacnetsol.com"
- <cheffner@tacnetsol.com@027a3e96-2d37-f1c0-85d6-5ce5a08386c2>
-Date: Tue, 27 Mar 2012 16:25:10 +0000
-Subject: [PATCH] Fixed probe request bug in wash.
-
-git-svn-id: http://reaver-wps.googlecode.com/svn/trunk@113 027a3e96-2d37-f1c0-85d6-5ce5a08386c2
----
- src/wpsmon.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/src/wpsmon.c b/src/wpsmon.c
-index da688b9..d976924 100644
---- a/src/wpsmon.c
-+++ b/src/wpsmon.c
-@@ -132,6 +132,11 @@ int main(int argc, char *argv[])
- usage(argv[0]);
- goto end;
- }
-+ else if(get_iface())
-+ {
-+ /* Get the MAC address of the specified interface */
-+ read_iface_mac();
-+ }
-
- if(get_iface() && source == PCAP_FILE)
- {
-@@ -300,6 +305,7 @@ void parse_wps_settings(const u_char *packet, struct pcap_pkthdr *header, char *
-
- set_ssid(NULL);
- bssid = (char *) mac2str(frame_header->addr3, ':');
-+ set_bssid((unsigned char *) frame_header->addr3);
-
- if(bssid)
- {
-@@ -383,6 +389,7 @@ void parse_wps_settings(const u_char *packet, struct pcap_pkthdr *header, char *
-
- end:
- if(wps) free(wps);
-+ set_bssid((unsigned char *) NULL_MAC);
-
- return;
- }
---
-2.6.4
-
+++ /dev/null
-From 811f5c0b0a226edfbf5aa2f316e083f30ec3cd8d Mon Sep 17 00:00:00 2001
-From: Yousong Zhou <yszhou4tech@gmail.com>
-Date: Tue, 18 Aug 2015 14:34:26 +0800
-Subject: [PATCH] Include <sys/types.h> for definition of u_char.
-
-Fixes build with musl-libc.
-
-Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
----
- src/libwps/libwps.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/libwps/libwps.h b/src/libwps/libwps.h
-index b04dd8b..bdd7b9a 100755
---- a/src/libwps/libwps.h
-+++ b/src/libwps/libwps.h
-@@ -17,6 +17,7 @@
- #include <stdio.h>
- #include <string.h>
- #include <arpa/inet.h>
-+#include <sys/types.h>
-
- #define LIBWPS_MAX_STR_LEN 256
-
---
-1.7.10.4
-
+++ /dev/null
---- a/src/init.c.orig 2016-12-08 13:23:17.386891467 +0800
-+++ b/src/init.c 2016-12-08 13:23:20.850892551 +0800
-@@ -121,7 +121,7 @@ pcap_t *capture_init(char *capture_sourc
- pcap_t *handle = NULL;
- char errbuf[PCAP_ERRBUF_SIZE] = { 0 };
-
-- handle = pcap_open_live(capture_source, BUFSIZ, 1, 0, errbuf);
-+ handle = pcap_open_live(capture_source, 65536, 1, 0, errbuf);
- if(!handle)
- {
- handle = pcap_open_offline(capture_source, errbuf);
+++ /dev/null
-Index: reaver-1.4/src/wps/Makefile
-===================================================================
---- reaver-1.4.orig/src/wps/Makefile
-+++ reaver-1.4/src/wps/Makefile
-@@ -4,31 +4,31 @@ INC=-I../utils -I ../
- all: wps_attr_build.o wps_attr_parse.o wps_attr_process.o wps.o wps_common.o wps_dev_attr.o wps_enrollee.o wps_registrar.o wps_ufd.o
-
- wps_attr_build.o:
-- $(CC) $(INC) wps_attr_build.c -c
-+ $(CC) $(CFLAGS) $(INC) wps_attr_build.c -c
-
- wps_attr_parse.o:
-- $(CC) $(INC) wps_attr_parse.c -c
-+ $(CC) $(CFLAGS) $(INC) wps_attr_parse.c -c
-
- wps_attr_process.o:
-- $(CC) $(INC) wps_attr_process.c -c
-+ $(CC) $(CFLAGS) $(INC) wps_attr_process.c -c
-
- wps.o:
-- $(CC) $(INC) wps.c -c
-+ $(CC) $(CFLAGS) $(INC) wps.c -c
-
- wps_common.o:
-- $(CC) $(INC) wps_common.c -c
-+ $(CC) $(CFLAGS) $(INC) wps_common.c -c
-
- wps_dev_attr.o:
-- $(CC) $(INC) wps_dev_attr.c -c
-+ $(CC) $(CFLAGS) $(INC) wps_dev_attr.c -c
-
- wps_enrollee.o:
-- $(CC) $(INC) wps_enrollee.c -c
-+ $(CC) $(CFLAGS) $(INC) wps_enrollee.c -c
-
- wps_registrar.o:
-- $(CC) $(INC) wps_registrar.c -c
-+ $(CC) $(CFLAGS) $(INC) wps_registrar.c -c
-
- wps_ufd.o:
-- $(CC) $(INC) wps_ufd.c -c
-+ $(CC) $(CFLAGS) $(INC) wps_ufd.c -c
-
- clean:
- rm -f *.o
include $(TOPDIR)/rules.mk
PKG_NAME:=seafile-ccnet
-PKG_VERSION:=6.0.7
+PKG_VERSION:=6.2.2
PKG_RELEASE=$(PKG_SOURCE_VERSION)-1
PKG_LICENSE:=GPL-3.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/haiwen/ccnet-server.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=a0de32b9cfeca98ab93d84cacbe9d315d7ecca35
+PKG_SOURCE_VERSION:=6b9d7e2920aa9b807f9efe9038439b57ce949ecc
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=b7ac0e5775aff91746e7bfc297b6cf788c9e7372084e28762467f8bd75cee2f8
+PKG_MIRROR_HASH:=8aed6d2283ac7b3148f9b5c82b1d992ed36dc5193000cf727bdcfae7446ce1fe
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
DEPENDS:=+libsearpc +libevent2 +libopenssl \
+glib2 +python +libzdb +libuuid \
+libpthread +libsqlite3 +jansson $(ICONV_DEPENDS)
- EXTRA_DEPENDS:=libsearpc (=6.0.7-8998e7b2c5587f0b94c48db24e2952d08def5add-1)
+ EXTRA_DEPENDS:=libsearpc (=6.2.2-8998e7b2c5587f0b94c48db24e2952d08def5add-1)
endef
define Package/seafile-ccnet/description
include $(TOPDIR)/rules.mk
PKG_NAME:=seafile-seahub
-PKG_VERSION:=6.0.7
-PKG_RELEASE=$(PKG_SOURCE_VERSION)-2
+PKG_VERSION:=6.2.2
+PKG_RELEASE=$(PKG_SOURCE_VERSION)-1
PKG_LICENSE:=Apache-2.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/haiwen/seahub.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=2cf75b17a372216a88842172f769d61f621416fd
+PKG_SOURCE_VERSION:=120e7a299e77968f1af48ea2dcf4bd9b909c426f
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=69e90cff3bb63967bca1bd04c8e25ff6f89aa5dba595df29854115c3560d9804
+PKG_MIRROR_HASH:=511500c40dd7b1009f77109c6df810df1cf2c17a84a8f6841d592a9e05d22064
include $(INCLUDE_DIR)/package.mk
$(call include_mk, python-package.mk)
-diff -rupN seafile-seahub-5.1.1.orig/Makefile seafile-seahub-5.1.1/Makefile
---- seafile-seahub-5.1.1.orig/Makefile 2016-04-26 23:59:48.000000000 +0200
-+++ seafile-seahub-5.1.1/Makefile 2016-04-28 09:03:35.507105416 +0200
+diff -rupN seafile-seahub-6.2.2.orig/Makefile seafile-seahub-6.2.2/Makefile
+--- seafile-seahub-6.2.2.orig/Makefile 2017-10-22 22:28:22.000000000 +0200
++++ seafile-seahub-6.2.2/Makefile 2017-10-22 22:46:18.007470936 +0200
@@ -1,3 +1,6 @@
+include $(TOPDIR)/rules.mk
+$(call include_mk, python-package.mk)
PROJECT=seahub
develop: setup-git
-@@ -9,7 +12,7 @@ dist: locale uglify statici18n collectst
+@@ -9,7 +12,9 @@ dist: locale uglify statici18n collectst
locale:
@echo "--> Compile locales"
-- django-admin.py compilemessages
+- django-admin.py compilemessages && cd seahub/two_factor && django-admin.py compilemessages
++ $(call HostPython,,$(STAGING_DIR)/usr/bin/django-admin.py compilemessages)
++ cd seahub/two_factor
+ $(call HostPython,,$(STAGING_DIR)/usr/bin/django-admin.py compilemessages)
@echo ""
uglify:
-@@ -19,7 +22,7 @@ uglify:
+@@ -19,17 +24,17 @@ uglify:
statici18n:
@echo "--> Generate JS locale files in static/scripts/i18n"
collectstatic:
@echo "--> Collect django static files to media/assets"
+ rm -rf media/assets 2> /dev/null
+- python manage.py collectstatic --noinput
++ $(call HostPython,,manage.py collectstatic --noinput)
+
+ compressstatic:
+ @echo "--> Compress static files(css) to media/CACHE"
+ rm -rf media/CACHE 2> /dev/null
+- python manage.py compress
++ $(call HostPython,,manage.py compress)
+
+ clean:
+ @echo '--> Cleaning media/static cache & dist'
include $(TOPDIR)/rules.mk
PKG_NAME:=seafile-server
-PKG_VERSION:=6.0.7
-PKG_RELEASE=$(PKG_SOURCE_VERSION)-3
+PKG_VERSION:=6.2.2
+PKG_RELEASE=$(PKG_SOURCE_VERSION)-1
PKG_LICENSE:=GPL-3.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/haiwen/seafile-server.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=715f072c1bbc78eedddcaf7748e28c83c3f4dbc6
+PKG_SOURCE_VERSION:=6978d2cb2e05cc774370b4d06c9f0a864df71936
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=eaba9296a1fbc4429bacc6234e3e643da7b8f7950ba42c9b9b5b1d58c38c4273
+PKG_MIRROR_HASH:=99aa9c41641d7c0ffe18bbab75418b1347dd9e156124472bbee5a6dda09a8057
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
DEPENDS:=+libarchive +libopenssl +glib2 +libsearpc +seafile-ccnet +seafile-seahub +sqlite3-cli +python-mysql +python-urllib3 \
+jansson +libevent2 +libevent2-openssl +zlib +libzdb +libsqlite3 +libmysqlclient \
+libpthread +libuuid +bash +procps-ng +procps-ng-pkill +SEAFILE_FUSE_SUPPORT:libfuse $(ICONV_DEPENDS)
- EXTRA_DEPENDS:=seafile-ccnet (=6.0.7-a0de32b9cfeca98ab93d84cacbe9d315d7ecca35-1), seafile-seahub (=6.0.7-2cf75b17a372216a88842172f769d61f621416fd-2)
+ EXTRA_DEPENDS:=seafile-ccnet (=6.2.2-6b9d7e2920aa9b807f9efe9038439b57ce949ecc-1), seafile-seahub (=6.2.2-120e7a299e77968f1af48ea2dcf4bd9b909c426f-1)
MENU:=1
endef
$(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
$(CP) $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/seafile/ $(1)$(PYTHON_PKG_DIR)/
$(CP) $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/seaserv/ $(1)$(PYTHON_PKG_DIR)/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/libseafile.so* $(1)/usr/lib/
$(CP) $(PKG_BUILD_DIR)/scripts/seaf-gc.sh $(1)/usr/share/seafile/seafile-server/
$(CP) $(PKG_BUILD_DIR)/scripts/seaf-fsck.sh $(1)/usr/share/seafile/seafile-server/
ifeq ($(CONFIG_SEAFILE_FUSE_SUPPORT),y)
$(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR)
$(CP) $(PKG_INSTALL_DIR)/usr/include/seafile/ $(1)/usr/include/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libseafile.pc $(1)/usr/lib/pkgconfig/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/libseafile.so* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/seafile/ $(1)$(PYTHON_PKG_DIR)/
$(CP) $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/seaserv/ $(1)$(PYTHON_PKG_DIR)/
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=ser2net
-PKG_VERSION:=3.4
-PKG_RELEASE:=2
+PKG_VERSION:=3.5
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/ser2net
-PKG_HASH:=d846066e27c3072565990745d030357aa0c278f96b7d1d4f59023347c1db8824
+PKG_HASH:=ba9e1d60a89fd7ed075553b4a2074352902203f7fbd9b65b15048c05f0e3f3be
PKG_LICENSE:=GPL-2.0+
PKG_LICENSE_FILES:=COPYING
+++ /dev/null
-From 8614cf0ad4a017184285e814a704322f59a28869 Mon Sep 17 00:00:00 2001
-From: Michael Heimpold <mhei@heimpold.de>
-Date: Wed, 12 Apr 2017 23:36:17 +0200
-Subject: [PATCH] dataxfer.c: fix possible buffer overruns caused by
- gai_strerror
-
-This fixes a possible buffer overrun that could occur due to
-gai_strerror() returning a string which is longer than the portbuff
-array, i.e. longer than 32 byte.
-
-Reported-by: David Thornley <david.thornley@touchstargroup.com>
-Signed-off-by: Michael Heimpold <mhei@heimpold.de>
-Signed-off-by: Corey Minyard <cminyard@mvista.com>
-
-diff --git a/dataxfer.c b/dataxfer.c
-index 3d1e713..988f4e4 100644
---- a/dataxfer.c
-+++ b/dataxfer.c
-@@ -3702,18 +3702,20 @@ showshortport(struct controller_info *cntlr, port_info_t *port)
- portbuff, sizeof(portbuff),
- NI_NUMERICHOST | NI_NUMERICSERV);
- if (err) {
-- strcpy(buffer, "*err*");
-- sprintf(portbuff, "%s", gai_strerror(err));
-+ snprintf(buffer, sizeof(buffer), "*err*,%s", gai_strerror(err));
-+ count = controller_outputf(cntlr, "%s", buffer);
-+ } else {
-+ count = controller_outputf(cntlr, "%s,%s", buffer, portbuff);
- }
-- bytes_recv = netcon->bytes_received;
-- bytes_sent = netcon->bytes_sent;
-
-- count = controller_outputf(cntlr, "%s,%s", buffer, portbuff);
- while (count < 23) {
- controller_outs(cntlr, " ");
- count++;
- }
-
-+ bytes_recv = netcon->bytes_received;
-+ bytes_sent = netcon->bytes_sent;
-+
- controller_outputf(cntlr, "%-22s ", port->io.devname);
- controller_outputf(cntlr, "%-14s ", state_str[port->net_to_dev_state]);
- controller_outputf(cntlr, "%-14s ", state_str[port->dev_to_net_state]);
-@@ -3758,11 +3760,12 @@ showport(struct controller_info *cntlr, port_info_t *port)
- portbuff, sizeof(portbuff),
- NI_NUMERICHOST | NI_NUMERICSERV);
- if (err) {
-- strcpy(buffer, "*err*");
-- sprintf(portbuff, "%s", gai_strerror(err));
-+ snprintf(buffer, sizeof(buffer), "*err*,%s", gai_strerror(err));
-+ controller_outputf(cntlr, " connected to: %s\r\n", buffer);
-+ } else {
-+ controller_outputf(cntlr, " connected to: %s,%s\r\n",
-+ buffer, portbuff);
- }
-- controller_outputf(cntlr, " connected to: %s,%s\r\n",
-- buffer, portbuff);
- controller_outputf(cntlr, " bytes read from TCP: %d\r\n",
- netcon->bytes_received);
- controller_outputf(cntlr, " bytes written to TCP: %d\r\n",
---
-2.7.4
-
+++ /dev/null
-From b303432f2dbd6a20afa99cb462aa0a1bb740b86d Mon Sep 17 00:00:00 2001
-From: Michael Heimpold <mhei@heimpold.de>
-Date: Wed, 12 Apr 2017 23:43:18 +0200
-Subject: [PATCH] dataxfer.c: truncate error message to fit the column width
-
-gai_strerror() could return a string which is longer than our current
-column width of "Remote address". To make the output nice again,
-truncate the error string in this case.
-
-Signed-off-by: Michael Heimpold <mhei@heimpold.de>
-Signed-off-by: Corey Minyard <cminyard@mvista.com>
-
-diff --git a/dataxfer.c b/dataxfer.c
-index 988f4e4..75c2777 100644
---- a/dataxfer.c
-+++ b/dataxfer.c
-@@ -3703,6 +3703,10 @@ showshortport(struct controller_info *cntlr, port_info_t *port)
- NI_NUMERICHOST | NI_NUMERICSERV);
- if (err) {
- snprintf(buffer, sizeof(buffer), "*err*,%s", gai_strerror(err));
-+ /* gai_strerror could return an elongated string which could break
-+ our pretty formatted output below, so truncate the string nicely */
-+ if (strlen(buffer) > 22)
-+ strcpy(&buffer[22 - 3], "...");
- count = controller_outputf(cntlr, "%s", buffer);
- } else {
- count = controller_outputf(cntlr, "%s,%s", buffer, portbuff);
---
-2.7.4
-
+++ /dev/null
-From 81f3991e232fd45b05ff52b5091393532e4305e5 Mon Sep 17 00:00:00 2001
-From: Michael Heimpold <mhei@heimpold.de>
-Date: Thu, 13 Apr 2017 20:29:10 +0200
-Subject: [PATCH] dataxfer.c: adjust "Remote address" column width
-
-In case we are connected to an IPv6 address the current column width
-is too small to take the complete address and port number so adjust it.
-
-Signed-off-by: Michael Heimpold <mhei@heimpold.de>
-Signed-off-by: Corey Minyard <cminyard@mvista.com>
-
-diff --git a/dataxfer.c b/dataxfer.c
-index 75c2777..9955403 100644
---- a/dataxfer.c
-+++ b/dataxfer.c
-@@ -3674,6 +3674,9 @@ clear_old_port_config(int curr_config)
- UNLOCK(ports_lock);
- }
-
-+#define REMOTEADDR_COLUMN_WIDTH \
-+ (INET6_ADDRSTRLEN - 1 /* terminating NUL */ + 1 /* comma */ + 5 /* strlen("65535") */)
-+
- /* Print information about a port to the control port given in cntlr. */
- static void
- showshortport(struct controller_info *cntlr, port_info_t *port)
-@@ -3705,14 +3708,14 @@ showshortport(struct controller_info *cntlr, port_info_t *port)
- snprintf(buffer, sizeof(buffer), "*err*,%s", gai_strerror(err));
- /* gai_strerror could return an elongated string which could break
- our pretty formatted output below, so truncate the string nicely */
-- if (strlen(buffer) > 22)
-- strcpy(&buffer[22 - 3], "...");
-+ if (strlen(buffer) > REMOTEADDR_COLUMN_WIDTH)
-+ strcpy(&buffer[REMOTEADDR_COLUMN_WIDTH - 3], "...");
- count = controller_outputf(cntlr, "%s", buffer);
- } else {
- count = controller_outputf(cntlr, "%s,%s", buffer, portbuff);
- }
-
-- while (count < 23) {
-+ while (count < REMOTEADDR_COLUMN_WIDTH + 1) {
- controller_outs(cntlr, " ");
- count++;
- }
-@@ -3878,10 +3881,11 @@ showshortports(struct controller_info *cntlr, char *portspec)
- port_info_t *port;
-
- controller_outputf(cntlr,
-- "%-22s %-6s %7s %-22s %-22s %-14s %-14s %9s %9s %9s %9s %s\r\n",
-+ "%-22s %-6s %7s %-*s %-22s %-14s %-14s %9s %9s %9s %9s %s\r\n",
- "Port name",
- "Type",
- "Timeout",
-+ REMOTEADDR_COLUMN_WIDTH,
- "Remote address",
- "Device",
- "TCP to device",
---
-2.7.4
-
+++ /dev/null
-From 1479d3acc7ffb77225ea294f83a8d3fbdadfece6 Mon Sep 17 00:00:00 2001
-From: Michael Heimpold <mhei@heimpold.de>
-Date: Thu, 13 Apr 2017 20:37:35 +0200
-Subject: [PATCH] dataxfer.c: in case port is not connected display this
- directly
-
-In this case we don't bother to call into getnameinfo but show
-directly "unconnected", this prevents showing an error message.
-
-Signed-off-by: Michael Heimpold <mhei@heimpold.de>
-Signed-off-by: Corey Minyard <cminyard@mvista.com>
-
-diff --git a/dataxfer.c b/dataxfer.c
-index 9955403..d6a59d9 100644
---- a/dataxfer.c
-+++ b/dataxfer.c
-@@ -3700,19 +3700,23 @@ showshortport(struct controller_info *cntlr, port_info_t *port)
- if (!netcon)
- netcon = &(port->netcons[0]);
-
-- err = getnameinfo(netcon->raddr, netcon->raddrlen,
-- buffer, sizeof(buffer),
-- portbuff, sizeof(portbuff),
-- NI_NUMERICHOST | NI_NUMERICSERV);
-- if (err) {
-- snprintf(buffer, sizeof(buffer), "*err*,%s", gai_strerror(err));
-- /* gai_strerror could return an elongated string which could break
-- our pretty formatted output below, so truncate the string nicely */
-- if (strlen(buffer) > REMOTEADDR_COLUMN_WIDTH)
-- strcpy(&buffer[REMOTEADDR_COLUMN_WIDTH - 3], "...");
-- count = controller_outputf(cntlr, "%s", buffer);
-+ if (port->net_to_dev_state != PORT_UNCONNECTED) {
-+ err = getnameinfo(netcon->raddr, netcon->raddrlen,
-+ buffer, sizeof(buffer),
-+ portbuff, sizeof(portbuff),
-+ NI_NUMERICHOST | NI_NUMERICSERV);
-+ if (err) {
-+ snprintf(buffer, sizeof(buffer), "*err*,%s", gai_strerror(err));
-+ /* gai_strerror could return an elongated string which could break
-+ our pretty formatted output below, so truncate the string nicely */
-+ if (strlen(buffer) > REMOTEADDR_COLUMN_WIDTH)
-+ strcpy(&buffer[REMOTEADDR_COLUMN_WIDTH - 3], "...");
-+ count = controller_outputf(cntlr, "%s", buffer);
-+ } else {
-+ count = controller_outputf(cntlr, "%s,%s", buffer, portbuff);
-+ }
- } else {
-- count = controller_outputf(cntlr, "%s,%s", buffer, portbuff);
-+ count = controller_outputf(cntlr, "unconnected");
- }
-
- while (count < REMOTEADDR_COLUMN_WIDTH + 1) {
-@@ -3762,21 +3766,25 @@ showport(struct controller_info *cntlr, port_info_t *port)
- controller_outputf(cntlr, " timeout: %d\r\n", port->timeout);
-
- for_each_connection(port, netcon) {
-- err = getnameinfo(netcon->raddr, netcon->raddrlen,
-- buffer, sizeof(buffer),
-- portbuff, sizeof(portbuff),
-- NI_NUMERICHOST | NI_NUMERICSERV);
-- if (err) {
-- snprintf(buffer, sizeof(buffer), "*err*,%s", gai_strerror(err));
-- controller_outputf(cntlr, " connected to: %s\r\n", buffer);
-+ if (port->net_to_dev_state != PORT_UNCONNECTED) {
-+ err = getnameinfo(netcon->raddr, netcon->raddrlen,
-+ buffer, sizeof(buffer),
-+ portbuff, sizeof(portbuff),
-+ NI_NUMERICHOST | NI_NUMERICSERV);
-+ if (err) {
-+ snprintf(buffer, sizeof(buffer), "*err*,%s", gai_strerror(err));
-+ controller_outputf(cntlr, " connected to: %s\r\n", buffer);
-+ } else {
-+ controller_outputf(cntlr, " connected to: %s,%s\r\n",
-+ buffer, portbuff);
-+ }
-+ controller_outputf(cntlr, " bytes read from TCP: %d\r\n",
-+ netcon->bytes_received);
-+ controller_outputf(cntlr, " bytes written to TCP: %d\r\n",
-+ netcon->bytes_sent);
- } else {
-- controller_outputf(cntlr, " connected to: %s,%s\r\n",
-- buffer, portbuff);
-+ controller_outputf(cntlr, " unconnected\r\n");
- }
-- controller_outputf(cntlr, " bytes read from TCP: %d\r\n",
-- netcon->bytes_received);
-- controller_outputf(cntlr, " bytes written to TCP: %d\r\n",
-- netcon->bytes_sent);
- }
-
- controller_outputf(cntlr, " device: %s\r\n", port->io.devname);
---
-2.7.4
-
# - check if default mode has changed from being tcp_only
#
PKG_NAME:=shadowsocks-libev
-PKG_VERSION:=3.1.0
+PKG_VERSION:=3.1.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-libev/releases/download/v$(PKG_VERSION)
-PKG_HASH:=3b6493ebdcfff1eb31faf34d164d57049f7253ff5bffafa6ce2263c9ac123f31
+PKG_HASH:=24a002c100fbe9b4481e3134273cb1a2f25a4026eb030760e7e7eb57f8466ef6
PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
PKG_NAME:=socat
PKG_VERSION:=1.7.3.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://www.dest-unreach.org/socat/download
sc_cv_termios_ispeed="no" \
sc_cv_sys_crdly_shift=9 \
sc_cv_sys_tabdly_shift=11 \
- sc_cv_sys_csize_shift=4
+ sc_cv_sys_csize_shift=4 \
+ BUILD_DATE=$(SOURCE_DATE_EPOCH)
define Package/socat/install
$(INSTALL_DIR) $(1)/usr/bin
include $(TOPDIR)/rules.mk
PKG_NAME:=squid
-PKG_VERSION:=3.5.12
+PKG_VERSION:=3.5.27
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0
-PKG_MAINTAINER:=Luka Perkov <luka@openwrt.org>
+PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=http://www.squid-cache.org/Versions/v3/3.5/
-PKG_HASH:=8bc83f3869f7404aefb10883109e28443255cf6dde50a13904c7954619707a42
+PKG_SOURCE_URL:=http://www3.us.squid-cache.org/Versions/v3/3.5/ \
+ http://www2.pl.squid-cache.org/Versions/v3/3.5/ \
+ http://www.squid-cache.org/Versions/v3/3.5/
+PKG_HASH:=5ddb4367f2dc635921f9ca7a59d8b87edb0412fa203d1543393ac3c7f9fef0ec
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
URL:=http://www.squid-cache.org/
+ MENU:=1
endef
define Package/squid
$(call Package/squid/Default)
- MENU:=1
DEPENDS:=+libopenssl +libpthread +librt +libltdl +libstdcpp
TITLE:=full-featured Web proxy cache
endef
--- a/src/Makefile.in
+++ b/src/Makefile.in
-@@ -7761,3 +7761,3 @@ cache_cf.o: cf_parser.cci
+@@ -7984,7 +7984,7 @@ cache_cf.o: cf_parser.cci
+
+ # cf_gen builds the configuration files.
cf_gen$(EXEEXT): $(cf_gen_SOURCES) $(cf_gen_DEPENDENCIES) cf_gen_defines.cci
- $(BUILDCXX) $(BUILDCXXFLAGS) -o $@ $(srcdir)/cf_gen.cc -I$(srcdir) -I$(top_builddir)/include/ -I$(top_builddir)/src
+ g++ -o $@ $(srcdir)/cf_gen.cc -I$(srcdir) -I$(top_builddir)/include/ -I$(top_builddir)/src
+ # squid.conf.default is built by cf_gen when making cf_parser.cci
+ squid.conf.default squid.conf.documented: cf_parser.cci
--- a/configure
+++ b/configure
-@@ -20133,3 +20133,3 @@ if test "$cross_compiling" = yes; then :
+@@ -20842,7 +20842,7 @@ else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
+_as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
-@@ -28289,3 +28289,3 @@ else
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+@@ -29142,7 +29142,7 @@ else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
+_as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
-@@ -28314,3 +28314,3 @@ else
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+@@ -29167,7 +29167,7 @@ else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
+_as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+++ /dev/null
---- a/src/mime.conf.default
-+++ b/src/mime.conf.default
-@@ -1,20 +1,3 @@
--## Copyright (C) 1996-2015 The Squid Software Foundation and contributors
--##
--## Squid software is distributed under GPLv2+ license and includes
--## contributions from numerous individuals and organizations.
--## Please see the COPYING and CONTRIBUTORS files for details.
--##
--#
--# This file associates URL patterns for servers or services
--# that don't automatically include Content-Type (like ftp) with a mime type
--# and a graphical icon.
--#
--# Content-Encodings are taken from section 3.1 of RFC2068 (HTTP/1.1)
--#
--# This file has the format :
--#
--# regexp content-type icon encoding mode actions
--#--------------------------------------------------------------------------------------------------------
- \.gif$ image/gif silk/image.png - image +download
- \.mime$ www/mime silk/page_white_text.png - ascii +download
- ^internal-dirup$ - silk/arrow_up.png - -
-@@ -191,6 +174,4 @@ README text/plain silk/information.pn
- \.xml$ text/xml silk/page_world.png - ascii +download
- \.xsl$ text/xml silk/layout.png - ascii +download
- \.xyz$ chemical/x-xyz silk/chart_line.png - image +download
--#
--# the default
- . text/plain silk/bullet_red.png - image +download +view
include $(TOPDIR)/rules.mk
PKG_NAME:=sshfs
-PKG_VERSION:=2.8
+PKG_VERSION:=2.10
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=Zoltan HERPAI <wigyori@uid0.hu>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://github.com/libfuse/sshfs/releases/download/$(PKG_NAME)_$(PKG_VERSION)
-PKG_HASH:=7f689174d02e6b7e2631306fda4fb8e6b4483102d1bce82b3cdafba33369ad22
+PKG_SOURCE_URL:=https://github.com/libfuse/sshfs/releases/download/$(PKG_NAME)-$(PKG_VERSION)
+PKG_HASH:=70845dde2d70606aa207db5edfe878e266f9c193f1956dd10ba1b7e9a3c8d101
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
/etc/sslh.conf
endef
-define Build/Compile
- $(MAKE) -C $(PKG_BUILD_DIR) \
- CC="$(TARGET_CC)" \
- CFLAGS="$(TARGET_CFLAGS)" \
- CPPFLAGS="$(TARGET_CPPFLAGS)" \
- LDFLAGS="$(TARGET_LDFLAGS)" \
- ENABLE_REGEX=1 \
- USELIBCONFIG=1 \
- USELIBWRAP= \
- USELIBPCRE= \
- $(if $(CONFIG_USE_GLIBC),USELIBPCRE=,USELIBPCRE=1)\
- all
-endef
+MAKE_FLAGS += \
+ $(if $(CONFIG_USE_GLIBC),USELIBPCRE=,USELIBPCRE=1)
define Package/sslh/install
$(INSTALL_DIR) $(1)/usr/sbin
include $(TOPDIR)/rules.mk
PKG_NAME:=strongswan
-PKG_VERSION:=5.6.0
+PKG_VERSION:=5.6.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=a14dc0d92634ed52730bfc76a76db30943a28ed3c65a560066e1e9f785827b13
+PKG_HASH:=e0c282d8ad418609c5dfb5e8efa01b28b95ef3678070ed47bf2a229f55f4ab53
PKG_SOURCE_URL:=http://download.strongswan.org/ http://download2.strongswan.org/
PKG_LICENSE:=GPL-2.0+
PKG_MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
PKG_NAME:=sysrepo
-PKG_VERSION:=0.7.0
+PKG_VERSION:=0.7.1
PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=7aa2f18d234267403147df92c0005c871f0aa840
-PKG_MIRROR_HASH:=31125596ae1c4dbf8dd48c639bf78043060ab1b89678c860eb2b10606fe4b686
+PKG_SOURCE_VERSION:=0b36f308574a60d7ee36b1a3118b999618bb40d8
+PKG_MIRROR_HASH:=d28ff0356b6ac4b934bb45ff77973efe7964b86a54270d11e1fd06a2af9bdbc8
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/sysrepo/sysrepo.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
stop_service()
{
+ kill -9 `ps | grep netopeer2-server | grep -v grep | awk '{print $1}'` >/dev/null 2>&1
service_stop ${PROG_PLUGIN}
service_stop ${PROG_DEAMON}
+ rm -rf /var/run/sysrepo-subscriptions/*
}
PKG_NAME:=tcpproxy
PKG_VERSION:=1.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.spreadspace.org/tcpproxy/releases/
echo '#define TCPPROXY_config_h_INCLUDED' >> config.h; \
echo '' >> config.h; \
echo '#define VERSION_STRING_0 "tcpproxy version '`cat $(PKG_BUILD_DIR)/version`'"' >> config.h; \
- echo '#define VERSION_STRING_1 "built on '`hostname`', '`date +"%d.%m.%Y %H:%M:%S %Z"`'"' >> config.h; \
echo '' >> config.h; \
echo '#define TARGET "linux"' >> config.h; \
echo '#define PREFIX "/usr"' >> config.h; \
--- /dev/null
+Index: tcpproxy-1.2/src/configure
+===================================================================
+--- tcpproxy-1.2.orig/src/configure 2017-12-03 13:12:34.483712208 +0100
++++ tcpproxy-1.2/src/configure 2017-12-03 13:13:56.677386919 +0100
+@@ -195,9 +195,6 @@
+ fi
+ fi
+
+-HOSTNAME=`hostname`
+-DATE=`date +"%d.%m.%Y %H:%M:%S %Z"`
+-
+ cat > config.h <<EOF
+ /*
+ * tcpproxy config header
+@@ -211,7 +208,6 @@
+ #define TCPPROXY_config_h_INCLUDED
+
+ #define VERSION_STRING_0 "tcpproxy version $VERSION"
+-#define VERSION_STRING_1 "built on $HOSTNAME, $DATE"
+
+ #define TARGET "$TARGET"
+ #define PREFIX "$PREFIX"
+Index: tcpproxy-1.2/src/options.c
+===================================================================
+--- tcpproxy-1.2.orig/src/options.c 2015-05-14 00:14:22.000000000 +0200
++++ tcpproxy-1.2/src/options.c 2017-12-03 13:14:37.442219952 +0100
+@@ -326,11 +326,9 @@
+ {
+ printf("%s\n", VERSION_STRING_0);
+ #if defined(__clang__)
+- printf("%s, using CLANG %s\n", VERSION_STRING_1, __clang_version__);
++ printf("using CLANG %s\n", __clang_version__);
+ #elif defined(__GNUC__)
+- printf("%s, using GCC %d.%d.%d\n", VERSION_STRING_1, __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
+-#else
+- printf("%s\n", VERSION_STRING_1);
++ printf("using GCC %d.%d.%d\n", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
+ #endif
+ }
+
include $(TOPDIR)/rules.mk
PKG_NAME:=tcpreplay
-PKG_VERSION:=4.2.3
+PKG_VERSION:=4.2.5
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/appneta/tcpreplay/releases/download/v$(PKG_VERSION)
-PKG_HASH:=68d8d49dab5bf58b2e8d244eee1ee7f2379d967da19fe97dd9d59bcf40a22abc
+PKG_HASH:=941026be34e1db5101d3d22ebddd6fff76179a1ee81e273338f533ba4eca89d7
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=docs/LICENSE
include $(TOPDIR)/rules.mk
PKG_NAME:=tinc
-PKG_VERSION:=1.0.32
+PKG_VERSION:=1.0.33
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.tinc-vpn.org/packages
-PKG_HASH:=4db24feaff8db4bbb7edb7a4b8f5f8edc39b26eb5feccc99e8e67a6960c05587
+PKG_HASH:=7f6f5dc6444bc651ac635c81f4745bcce581bbd1d45ed60cbdc4ee11bebb10f4
PKG_INSTALL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=tor
-PKG_VERSION:=0.2.9.12
+PKG_VERSION:=0.3.1.9
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://dist.torproject.org/ \
https://archive.torproject.org/tor-package-archive
-PKG_HASH:=6e7466625d53812f23c2ad60a873c5855f63f756fde0fc5cbeda8d32cee1086b
+PKG_HASH:=6e1b04f7890e782fd56014a0de5075e4ab29b52a35d8bca1f6b80c93f58f3d26
PKG_MAINTAINER:=Hauke Mehrtens <hauke@hauke-m.de>
PKG_LICENSE_FILES:=LICENSE
--disable-libscrypt \
--disable-unittests \
--disable-largefile \
+ --disable-lzma \
--with-tor-user=tor \
--with-tor-group=tor
## The port on which Tor will listen for local connections from Tor
## controller applications, as documented in control-spec.txt.
-@@ -204,3 +204,4 @@
- ## address manually to your friends, uncomment this line:
- #PublishServerDescriptor 0
+@@ -218,3 +218,4 @@
+ #%include /etc/torrc.d/
+ #%include /etc/torrc.custom
+User tor
PKG_NAME:=transmission
PKG_VERSION:=2.92+git
-PKG_RELEASE:=4
+PKG_RELEASE:=5
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/transmission/transmission.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=35fea28d1a37875ef7480ac061754df617805b19
+PKG_SOURCE_VERSION:=5b29fe15561d40c40cbee635446df6b33e18d2c2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
-PKG_MIRROR_HASH:=aeeb8dfd918bd2cf4fb6fbdf58bd822e9b509df1ba5ec408888edd161123ef8e
+PKG_MIRROR_HASH:=f99982ae68564da9bf6ad4407285aff2e29508e4fd801ff56f86a8b3dae01819
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
CATEGORY:=Network
TITLE:=BitTorrent client
URL:=http://www.transmissionbt.com
- MAINTAINER:=Cezary Jackiewicz <cezary@eko.one.pl>
+ MAINTAINER:=Rosen Penev <rosenp@gmail.com>
endef
define Package/transmission-daemon/Default
$(INSTALL_BIN) files/transmission.init $(1)/etc/init.d/transmission
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) files/transmission.config $(1)/etc/config/transmission
+ $(INSTALL_DIR) $(1)/etc/sysctl.d/
+ $(INSTALL_CONF) files/transmission.sysctl $(1)/etc/sysctl.d/20-transmission.conf
endef
Package/transmission-daemon-mbedtls/install = $(Package/transmission-daemon-openssl/install)
--- /dev/null
+net.core.rmem_max = 4194304
+net.core.wmem_max = 1048576
+++ /dev/null
---- a/libtransmission/bitfield.c
-+++ b/libtransmission/bitfield.c
-@@ -6,6 +6,8 @@
- *
- */
-
-+#define __NEED_ssize_t
-+
- #include <assert.h>
- #include <string.h> /* memset */
-
-@@ -13,6 +15,7 @@
- #include "bitfield.h"
- #include "utils.h" /* tr_new0 () */
-
-+
- const tr_bitfield TR_BITFIELD_INIT = { NULL, 0, 0, 0, false, false };
-
- /****
---- a/libtransmission/fdlimit.h
-+++ b/libtransmission/fdlimit.h
-@@ -10,6 +10,8 @@
- #error only libtransmission should #include this header.
- #endif
-
-+#define __NEED_off_t
-+
- #include "transmission.h"
- #include "file.h"
- #include "net.h"
--- /dev/null
+diff --git a/daemon/daemon.c b/daemon/daemon.c
+index 7b2a3b425..5b19d105a 100644
+--- a/daemon/daemon.c
++++ b/daemon/daemon.c
+@@ -715,12 +715,7 @@ static int daemon_start(void* raw_arg, bool foreground)
+ }
+
+ #ifdef HAVE_SYSLOG
+-
+- if (!foreground)
+- {
+- openlog(MY_NAME, LOG_CONS | LOG_PID, LOG_DAEMON);
+- }
+-
++ openlog(MY_NAME, LOG_CONS | LOG_PID, LOG_DAEMON);
+ #endif
+
+ /* Create new timer event to report daemon status */
+@@ -772,11 +767,8 @@ cleanup:
+ /* shutdown */
+ #ifdef HAVE_SYSLOG
+
+- if (!foreground)
+- {
+ syslog(LOG_INFO, "%s", "Closing session");
+ closelog();
+- }
+
+ #endif
+
PKG_NAME:=uanytun
PKG_VERSION:=0.3.5
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.anytun.org/download/
--- /dev/null
+Index: uanytun-0.3.5/src/options.c
+===================================================================
+--- uanytun-0.3.5.orig/src/options.c
++++ uanytun-0.3.5/src/options.c
+@@ -481,7 +481,6 @@ void options_print_usage()
+ void options_print_version()
+ {
+ printf("%s\n", VERSION_STRING_0);
+- printf("%s\n", VERSION_STRING_1);
+ }
+
+ void options_print(options_t* opt)
include $(TOPDIR)/rules.mk
PKG_NAME:=wget
-PKG_VERSION:=1.18
+PKG_VERSION:=1.19.2
PKG_RELEASE:=2
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
-PKG_HASH:=b5b55b75726c04c06fe253daec9329a6f1a3c0c1878e3ea76ebfebc139ea9cc1
-PKG_MAINTAINER:=Maxim Storchak <m.storchak@gmail.com>
+PKG_HASH:=4f4a673b6d466efa50fbfba796bd84a46ae24e370fa562ede5b21ab53c11a920
+PKG_MAINTAINER:=Peter Wagner <tripolar@gmx.at>
PKG_LICENSE:=GPL-3.0+
PKG_LICENSE_FILES:=COPYING
CONFIGURE_ARGS+= \
--disable-rpath \
--disable-iri \
+ --with-included-libunistring \
--without-libuuid
CONFIGURE_VARS += \
+++ /dev/null
-#
-# Copyright (C) 2016-2017 Jason A. Donenfeld <Jason@zx2c4.com>
-# Copyright (C) 2016 Baptiste Jonglez <openwrt@bitsofnetworks.org>
-# 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.
-
-include $(TOPDIR)/rules.mk
-include $(INCLUDE_DIR)/kernel.mk
-
-PKG_NAME:=wireguard
-
-PKG_VERSION:=0.0.20171005
-PKG_RELEASE:=1
-
-PKG_SOURCE:=WireGuard-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=https://git.zx2c4.com/WireGuard/snapshot/
-PKG_HASH:=832a3b7cbb510f6986fd0c3a6b2d86bc75fc9f23b6754d8f46bc58ea8e02d608
-
-PKG_LICENSE:=GPL-2.0
-PKG_LICENSE_FILES:=COPYING
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/WireGuard-$(PKG_VERSION)
-PKG_BUILD_PARALLEL:=1
-PKG_USE_MIPS16:=0
-
-# Wireguard's makefile needs this to know where to build the kernel module
-export KERNELDIR:=$(LINUX_DIR)
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/wireguard/Default
- SECTION:=net
- CATEGORY:=Network
- SUBMENU:=VPN
- URL:=https://www.wireguard.com
- MAINTAINER:=Baptiste Jonglez <openwrt@bitsofnetworks.org>, \
- Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>, \
- Dan Luedtke <mail@danrl.com>, \
- Jason A. Donenfeld <Jason@zx2c4.com>
-endef
-
-define Package/wireguard/Default/description
- WireGuard is a novel VPN that runs inside the Linux Kernel and utilizes
- state-of-the-art cryptography. It aims to be faster, simpler, leaner, and
- more useful than IPSec, while avoiding the massive headache. It intends to
- be considerably more performant than OpenVPN. WireGuard is designed as a
- general purpose VPN for running on embedded interfaces and super computers
- alike, fit for many different circumstances. It uses UDP.
-endef
-
-define Package/wireguard
- $(call Package/wireguard/Default)
- TITLE:=Wireguard meta-package
- DEPENDS:=+wireguard-tools +kmod-wireguard
-endef
-
-include $(INCLUDE_DIR)/kernel-defaults.mk
-include $(INCLUDE_DIR)/package-defaults.mk
-
-# Used by Build/Compile/Default
-MAKE_PATH:=src/tools
-
-define Build/Compile
- $(MAKE) $(KERNEL_MAKEOPTS) M="$(PKG_BUILD_DIR)/src" modules
- $(call Build/Compile/Default)
-endef
-
-define Package/wireguard/install
- true
-endef
-
-define Package/wireguard/description
- $(call Package/wireguard/Default/description)
-endef
-
-define Package/wireguard-tools
- $(call Package/wireguard/Default)
- TITLE:=Wireguard userspace control program (wg)
- DEPENDS:=+libmnl
-endef
-
-define Package/wireguard-tools/description
- $(call Package/wireguard/Default/description)
-
- This package provides the userspace control program for wireguard, `wg`,
- and a netifd protocol helper.
-endef
-
-define Package/wireguard-tools/install
- $(INSTALL_DIR) $(1)/usr/bin/
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/tools/wg $(1)/usr/bin/
- $(INSTALL_DIR) $(1)/lib/netifd/proto/
- $(INSTALL_BIN) ./files/wireguard.sh $(1)/lib/netifd/proto/
-endef
-
-define KernelPackage/wireguard
- SECTION:=kernel
- CATEGORY:=Kernel modules
- SUBMENU:=Network Support
- TITLE:=Wireguard kernel module
- DEPENDS:=+IPV6:kmod-udptunnel6 +kmod-udptunnel4
- FILES:= $(PKG_BUILD_DIR)/src/wireguard.$(LINUX_KMOD_SUFFIX)
- AUTOLOAD:=$(call AutoProbe,wireguard)
-endef
-
-define KernelPackage/wireguard/description
- $(call Package/wireguard/Default/description)
-
- This package provides the kernel module for wireguard.
-endef
-
-$(eval $(call BuildPackage,wireguard))
-$(eval $(call BuildPackage,wireguard-tools))
-$(eval $(call KernelPackage,wireguard))
+++ /dev/null
-#!/bin/sh
-# Copyright 2016-2017 Dan Luedtke <mail@danrl.com>
-# Licensed to the public under the Apache License 2.0.
-
-
-WG=/usr/bin/wg
-if [ ! -x $WG ]; then
- logger -t "wireguard" "error: missing wireguard-tools (${WG})"
- exit 0
-fi
-
-
-[ -n "$INCLUDE_ONLY" ] || {
- . /lib/functions.sh
- . ../netifd-proto.sh
- init_proto "$@"
-}
-
-
-proto_wireguard_init_config() {
- proto_config_add_string "private_key"
- proto_config_add_int "listen_port"
- proto_config_add_int "mtu"
- proto_config_add_string "fwmark"
- available=1
- no_proto_task=1
-}
-
-
-proto_wireguard_setup_peer() {
- local peer_config="$1"
-
- local public_key
- local preshared_key
- local allowed_ips
- local route_allowed_ips
- local endpoint_host
- local endpoint_port
- local persistent_keepalive
-
- config_get public_key "${peer_config}" "public_key"
- config_get preshared_key "${peer_config}" "preshared_key"
- config_get allowed_ips "${peer_config}" "allowed_ips"
- config_get_bool route_allowed_ips "${peer_config}" "route_allowed_ips" 0
- config_get endpoint_host "${peer_config}" "endpoint_host"
- config_get endpoint_port "${peer_config}" "endpoint_port"
- config_get persistent_keepalive "${peer_config}" "persistent_keepalive"
-
- # peer configuration
- echo "[Peer]" >> "${wg_cfg}"
- echo "PublicKey=${public_key}" >> "${wg_cfg}"
- if [ "${preshared_key}" ]; then
- echo "PresharedKey=${preshared_key}" >> "${wg_cfg}"
- fi
- for allowed_ip in $allowed_ips; do
- echo "AllowedIPs=${allowed_ip}" >> "${wg_cfg}"
- done
- if [ "${endpoint_host}" ]; then
- case "${endpoint_host}" in
- *:*)
- endpoint="[${endpoint_host}]"
- ;;
- *)
- endpoint="${endpoint_host}"
- ;;
- esac
- if [ "${endpoint_port}" ]; then
- endpoint="${endpoint}:${endpoint_port}"
- else
- endpoint="${endpoint}:51820"
- fi
- echo "Endpoint=${endpoint}" >> "${wg_cfg}"
- fi
- if [ "${persistent_keepalive}" ]; then
- echo "PersistentKeepalive=${persistent_keepalive}" >> "${wg_cfg}"
- fi
-
- # add routes for allowed ips
- if [ ${route_allowed_ips} -ne 0 ]; then
- for allowed_ip in ${allowed_ips}; do
- case "${allowed_ip}" in
- *:*/*)
- proto_add_ipv6_route "${allowed_ip%%/*}" "${allowed_ip##*/}"
- ;;
- *.*/*)
- proto_add_ipv4_route "${allowed_ip%%/*}" "${allowed_ip##*/}"
- ;;
- *:*)
- proto_add_ipv6_route "${allowed_ip%%/*}" "128"
- ;;
- *.*)
- proto_add_ipv4_route "${allowed_ip%%/*}" "32"
- ;;
- esac
- done
- fi
-}
-
-
-proto_wireguard_setup() {
- local config="$1"
- local wg_dir="/tmp/wireguard"
- local wg_cfg="${wg_dir}/${config}"
-
- local private_key
- local listen_port
- local mtu
-
- # load configuration
- config_load network
- config_get private_key "${config}" "private_key"
- config_get listen_port "${config}" "listen_port"
- config_get addresses "${config}" "addresses"
- config_get mtu "${config}" "mtu"
- config_get fwmark "${config}" "fwmark"
-
- # create interface
- ip link del dev "${config}" 2>/dev/null
- ip link add dev "${config}" type wireguard
-
- if [ "${mtu}" ]; then
- ip link set mtu "${mtu}" dev "${config}"
- fi
-
- proto_init_update "${config}" 1
-
- # generate configuration file
- umask 077
- mkdir -p "${wg_dir}"
- echo "[Interface]" > "${wg_cfg}"
- echo "PrivateKey=${private_key}" >> "${wg_cfg}"
- if [ "${listen_port}" ]; then
- echo "ListenPort=${listen_port}" >> "${wg_cfg}"
- fi
- if [ "${fwmark}" ]; then
- echo "FwMark=${fwmark}" >> "${wg_cfg}"
- fi
- config_foreach proto_wireguard_setup_peer "wireguard_${config}"
-
- # apply configuration file
- ${WG} setconf ${config} "${wg_cfg}"
- WG_RETURN=$?
-
- # delete configuration file
- rm -f "${wg_cfg}"
-
- # check status
- if [ ${WG_RETURN} -ne 0 ]; then
- sleep 5
- proto_setup_failed "${config}"
- exit 1
- fi
-
- # add ip addresses
- for address in ${addresses}; do
- case "${address}" in
- *:*/*)
- proto_add_ipv6_address "${address%%/*}" "${address##*/}"
- ;;
- *.*/*)
- proto_add_ipv4_address "${address%%/*}" "${address##*/}"
- ;;
- *:*)
- proto_add_ipv6_address "${address%%/*}" "128"
- ;;
- *.*)
- proto_add_ipv4_address "${address%%/*}" "32"
- ;;
- esac
- done
-
- # endpoint dependency
- wg show "${config}" endpoints | \
- sed -E 's/\[?([0-9.:a-f]+)\]?:([0-9]+)/\1 \2/' | \
- while IFS=$'\t ' read -r key address port; do
- [ -n "${port}" ] || continue
- proto_add_host_dependency "${config}" "${address}"
- done
-
- proto_send_update "${config}"
-}
-
-
-proto_wireguard_teardown() {
- local config="$1"
- ip link del dev "${config}" >/dev/null 2>&1
-}
-
-
-[ -n "$INCLUDE_ONLY" ] || {
- add_protocol wireguard
-}
include $(TOPDIR)/rules.mk
PKG_NAME:=xl2tpd
-PKG_VERSION:=devel-20151125
-PKG_RELEASE:=3
+PKG_VERSION:=1.3.10
+PKG_RELEASE:=1
PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=LICENSE
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/xelerance/xl2tpd.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=e2065bf0fc22ba33001ad503c01bba01648024a8
+PKG_SOURCE_VERSION:=090d1bef577cabdb3495d76acd814733fa66ef57
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_MIRROR_HASH:=8b15c0069cdab7080796f92f86c84b79e430679ce77fb6ea95749fe932bb87c4
+PKG_MIRROR_HASH:=bcddc10e28a74dec607e67cbbea97220f6bfd696b0378a7c30ec8a3e0ac86be1
+
+PKG_BUILD_DEPENDS:=libpcap
PKG_INSTALL:=1
main goal of this protocol is to tunnel PPP frame trough an IP network.
endef
-# Use optimization options from OpenWrt build system
-MAKE_FLAGS += OFLAGS=""
-
ifneq (0,0)
# debugging options from Makefile of xl2tpd package
EXTRA_CFLAGS += \
#
-
-lock
noauth
debug
dump
novjccomp
nopcomp
noaccomp
+mtu 1400
+mru 1400
+require-mschap-v2
+lcp-echo-interval 20
+lcp-echo-failure 5
+connect-delay 5000
+nodefaultroute
+noipdefault
+proxyarp
+++ /dev/null
---- a/Makefile
-+++ b/Makefile
-@@ -97,7 +97,8 @@ OSFLAGS+= -DUSE_KERNEL
-
- IPFLAGS?= -DIP_ALLOCATION
-
--CFLAGS+= $(DFLAGS) -Os -fno-builtin -Wall -DSANITY $(OSFLAGS) $(IPFLAGS)
-+OFLAGS=-Os
-+CFLAGS+= $(DFLAGS) $(OFLAGS) -fno-builtin -Wall -DSANITY $(OSFLAGS) $(IPFLAGS)
- HDRS=l2tp.h avp.h misc.h control.h call.h scheduler.h file.h aaa.h md5.h
- OBJS=xl2tpd.o pty.o misc.o control.o avp.o call.o network.o avpsend.o scheduler.o file.o aaa.o md5.o
- SRCS=${OBJS:.o=.c} ${HDRS}
+++ /dev/null
---- a/Makefile
-+++ b/Makefile
-@@ -113,10 +113,10 @@ BINDIR?=$(DESTDIR)${PREFIX}/bin
- MANDIR?=$(DESTDIR)${PREFIX}/share/man
-
-
--all: $(EXEC) pfc $(CONTROL_EXEC)
-+all: $(EXEC) $(CONTROL_EXEC)
-
- clean:
-- rm -f $(OBJS) $(EXEC) pfc.o pfc $(CONTROL_EXEC)
-+ rm -f $(OBJS) $(EXEC) $(CONTROL_EXEC)
-
- $(EXEC): $(OBJS) $(HDRS)
- $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
-@@ -124,14 +124,10 @@ $(EXEC): $(OBJS) $(HDRS)
- $(CONTROL_EXEC): $(CONTROL_SRCS)
- $(CC) $(CFLAGS) $(LDFLAGS) $(CONTROL_SRCS) -o $@
-
--pfc:
-- $(CC) $(CFLAGS) -c contrib/pfc.c
-- $(CC) $(LDFLAGS) -o pfc pfc.o -lpcap $(LDLIBS)
--
- romfs:
- $(ROMFSINST) /bin/$(EXEC)
-
--install: ${EXEC} pfc ${CONTROL_EXEC}
-+install: ${EXEC} ${CONTROL_EXEC}
- install -d -m 0755 ${SBINDIR}
- install -m 0755 $(EXEC) ${SBINDIR}/$(EXEC)
- install -d -m 0755 ${MANDIR}/man5
-@@ -139,11 +135,6 @@ install: ${EXEC} pfc ${CONTROL_EXEC}
- install -m 0644 doc/xl2tpd.8 ${MANDIR}/man8/
- install -m 0644 doc/xl2tpd.conf.5 doc/l2tp-secrets.5 \
- ${MANDIR}/man5/
-- # pfc
-- install -d -m 0755 ${BINDIR}
-- install -m 0755 pfc ${BINDIR}/pfc
-- install -d -m 0755 ${MANDIR}/man1
-- install -m 0644 contrib/pfc.1 ${MANDIR}/man1/
- # control exec
- install -d -m 0755 ${SBINDIR}
- install -m 0755 $(CONTROL_EXEC) ${SBINDIR}/$(CONTROL_EXEC)
+++ /dev/null
---- a/xl2tpd.c
-+++ b/xl2tpd.c
-@@ -30,7 +30,7 @@
- #include <errno.h>
- #include <unistd.h>
- #include <time.h>
--#if (__GLIBC__ < 2)
-+#if defined (__GLIBC__) && (__GLIBC__ < 2)
- # if defined(FREEBSD) || defined(OPENBSD)
- # include <sys/signal.h>
- # elif defined(LINUX)
+++ /dev/null
-From 97adf987cf230e47a4800c2f0a0940a1d0d98109 Mon Sep 17 00:00:00 2001
-From: wendy2001011 <wendy2001011@163.com>
-Date: Thu, 9 Feb 2017 17:32:14 +0800
-Subject: [PATCH] xl2tpd-control: fix xl2tpd hanged up in "fopen"
-
-This is a fix for xl2tpd hanged up in "fopen" result fifo while working
-on xl2tpd with OpenWrt.
-
-Root cause is as followings,
-1. xl2tpd-control open result fifo ##fifo readers=1
-2. xl2tpd-control read result fifo
-3. xl2tpd-control close result fifo ##fifo readers=0
-4. xl2tpd fopen result fifo ##xl2tpd is hanged up here to wait readers
-5. xl2tpd-control unlink result fifo
-
-The fix replaces the order of "unlink" and "close" when cleaning up to
-avoid hang up issue in fopen, and add the retry waiting when reading
-result fifo.
-
-[Yousong Zhou: 2s as the timeout and 10ms as the check interval]
----
- xl2tpd-control.c | 23 +++++++++++++++++++++--
- 1 file changed, 21 insertions(+), 2 deletions(-)
-
-diff --git a/xl2tpd-control.c b/xl2tpd-control.c
-index 9fcab76..b8bf822 100644
---- a/xl2tpd-control.c
-+++ b/xl2tpd-control.c
-@@ -35,6 +35,7 @@
-
- #define TUNNEL_REQUIRED 1
- #define TUNNEL_NOT_REQUIRED 0
-+#define TIMEOUT 2000000 //timeout is 2s
-
- char result_filename[128];
- int result_fd = -1;
-@@ -149,9 +150,9 @@ void help()
- void cleanup(void)
- {
- /* cleaning up */
-- if (result_fd >= 0)
-- close (result_fd);
- unlink (result_filename);
-+ if (result_fd >= 0)
-+ close (result_fd);
- }
-
- int main (int argc, char *argv[])
-@@ -340,6 +341,7 @@ void print_error (int level, const char *fmt, ...)
- va_end (args);
- }
-
-+
- int read_result(int result_fd, char* buf, ssize_t size)
- {
- /* read result from result_fd */
-@@ -348,6 +350,11 @@ int read_result(int result_fd, char* buf, ssize_t size)
- */
- ssize_t readed = 0;
- ssize_t len;
-+ int write_pipe = 0;
-+ struct timeval tvs;
-+ struct timeval tve;
-+ unsigned long diff;
-+ gettimeofday(&tvs, NULL);
-
- do
- {
-@@ -360,8 +367,20 @@ int read_result(int result_fd, char* buf, ssize_t size)
- "error: can't read command result: %s\n", strerror (errno));
- break;
- } else if (len == 0) {
-+ if(!write_pipe) {
-+ gettimeofday(&tve, NULL);
-+ diff = (tve.tv_sec - tvs.tv_sec) * 1000000 + (tve.tv_usec - tvs.tv_usec);
-+ if (diff >= TIMEOUT) {
-+ print_error (DEBUG_LEVEL, "error: read timout\n");
-+ break;
-+ } else {
-+ usleep(10000);
-+ continue;
-+ }
-+ }
- break;
- } else {
-+ write_pipe = 1;
- readed += len;
- if ((size - readed) <= 0)
- break;
---
-2.6.4
-
--- /dev/null
+menu "Configuration"
+ depends on PACKAGE_fdk-aac
+
+config FDK-AAC_OPTIMIZE_SPEED
+ bool "Optimize for speed"
+ default n
+ help
+ This enables additional optmization and
+ increases performance considerably at
+ the expense of binary size.
+
+endmenu
include $(TOPDIR)/rules.mk
PKG_NAME:=fdk-aac
-PKG_VERSION:=0.1.5
+PKG_VERSION:=0.1.5-20171030
PKG_RELEASE:=1
PKG_MAINTAINER:=Daniel Engberg <daniel.engberg.lists@pyret.net>
PKG_LICENSE:=Fraunhofer-FDK-AAC-for-Android
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=https://github.com/mstorsjo/fdk-aac/
PKG_SOURCE_SUBDIR=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=74c1a2a4f831285cbd93ec1427f1670d3c5c5e52
+PKG_SOURCE_VERSION:=1e3515e03e2dbdbd48dacc31ef75d25c201a4c51
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_MIRROR_HASH:=d2ff3ca03842e96f3f18619f8a27ea03fb5d1e2266e4010cbb4803bf6e1fe62b
+PKG_MIRROR_HASH:=80ac4644e07d5101f8e17e73df3dba4c69e143f5f9054ac3a201fb44a5fec8d0
PKG_FIXUP:=autoreconf
+PKG_CONFIG_DEPENDS:= CONFIG_FDK-AAC_OPTIMIZE_SPEED
+
+ifeq ($(CONFIG_FDK-AAC_OPTIMIZE_SPEED),y)
+ TARGET_CFLAGS := $(filter-out -Os,$(TARGET_CFLAGS))
+ TARGET_CFLAGS += $(TARGET_CFLAGS) -O2 -flto
+ TARGET_CXXFLAGS := $(filter-out -Os,$(TARGET_CXXFLAGS))
+ TARGET_CXXFLAGS += $(TARGET_CXXFLAGS) -O2 -flto
+ TARGET_LDFLAGS += $(TARGET_LDFLAGS) -flto
+endif
+
include $(INCLUDE_DIR)/package.mk
define Package/fdk-aac
Port of the Fraunhofer FDK AAC Codec Library for Android
endef
+define Package/fdk-aac/config
+ source "$(SOURCE)/Config.in"
+endef
+
define Package/fdk-aac/install
$(INSTALL_DIR) $(1)/usr/lib/
$(CP) $(PKG_BUILD_DIR)/.libs/*.so* $(1)/usr/lib/
--- /dev/null
+menu "Configuration"
+ depends on PACKAGE_lame-lib
+
+config LAME-LIB_OPTIMIZE_SPEED
+ bool "Optimize for speed"
+ default n
+ help
+ This enables additional experimental
+ optmization and increases performance
+ considerably at the expense of binary size.
+
+endmenu
include $(TOPDIR)/rules.mk
PKG_NAME:=lame
-PKG_VERSION:=3.99.5
-PKG_RELEASE:=2
+PKG_VERSION:=3.100
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/lame
-PKG_HASH:=24346b4158e4af3bd9f2e194bb23eb473c75fb7377011523353196b19b9a23ff
+PKG_HASH:=ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175b1da1e
PKG_FIXUP:=autoreconf
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
PKG_LICENSE:=LGPL-2.0
PKG_LICENSE_FILES:=COPYING LICENSE
+PKG_CONFIG_DEPENDS:= CONFIG_LAME-LIB_OPTIMIZE_SPEED
+
include $(INCLUDE_DIR)/package.mk
PKG_INSTALL=1
$(call Package/lame/Default)
TITLE:=lame
MENU:=1
- DEPENDS += +libncurses
+ DEPENDS += +libncurses +lame-lib
endef
define Package/lame/description
lame mp3 encoder
endef
+define Package/lame-lib/config
+ source "$(SOURCE)/Config.in"
+endef
+
define Package/lame-lib
$(call Package/lame/Default)
TITLE:=lame-lib
lame mp3 encoder libs
endef
-CONFIG_VARS+=NASM=no
-
ifeq ($(ARCH),i386)
TARGET_CFLAGS+=-msse
endif
+ifeq ($(CONFIG_LAME-LIB_OPTIMIZE_SPEED),y)
+ TARGET_CFLAGS += $(TARGET_CFLAGS) -O3 -ffast-math
+ TARGET_CFLAGS := $(filter-out -Os,$(TARGET_CFLAGS))
+endif
+
+CONFIGURE_ARGS += --disable-gtktest --disable-static
+
define Package/lame/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/lame $(1)/usr/bin/
+++ /dev/null
---- a/configure.in
-+++ b/configure.in
-@@ -393,7 +393,7 @@ CONFIG_MATH_LIB="${USE_LIBM}"
-
- dnl configure use of features
-
--AM_PATH_GTK(1.2.0, HAVE_GTK="yes", HAVE_GTK="no")
-+HAVE_GTK="no"
-
- dnl ElectricFence malloc debugging
- AC_MSG_CHECKING(use of ElectricFence malloc debugging)
---- a/frontend/Makefile.am
-+++ b/frontend/Makefile.am
-@@ -35,7 +35,7 @@ lame_SOURCES = lame_main.c $(common_sour
- mp3rtp_SOURCES = mp3rtp.c rtp.c $(common_sources)
- mp3x_SOURCES = mp3x.c gtkanal.c gpkplotting.c $(common_sources)
-
--CFLAGS = @CFLAGS@ @GTK_CFLAGS@ @FRONTEND_CFLAGS@ @SNDFILE_CFLAGS@
-+CFLAGS = @CFLAGS@ @FRONTEND_CFLAGS@ @SNDFILE_CFLAGS@
- LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@ @SNDFILE_LIBS@
-
- INCLUDES = -I$(top_srcdir)/libmp3lame -I$(top_srcdir)/include -I$(top_builddir)
---- a/frontend/Makefile.in
-+++ b/frontend/Makefile.in
-@@ -99,7 +99,7 @@ AUTOMAKE = @AUTOMAKE@
- AWK = @AWK@
- CC = @CC@
- CCDEPMODE = @CCDEPMODE@
--CFLAGS = @CFLAGS@ @GTK_CFLAGS@ @FRONTEND_CFLAGS@ @SNDFILE_CFLAGS@
-+CFLAGS = @CFLAGS@ @FRONTEND_CFLAGS@ @SNDFILE_CFLAGS@
- CONFIG_DEFS = @CONFIG_DEFS@
- CONFIG_MATH_LIB = @CONFIG_MATH_LIB@
- CPP = @CPP@
include $(TOPDIR)/rules.mk
PKG_NAME:=mpg123
-PKG_VERSION:=1.25.6
+PKG_VERSION:=1.25.7
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@SF/mpg123
-PKG_HASH:=0f0458c9b87799bc2c9bf9455279cc4d305e245db43b51a39ef27afe025c5a8e
+PKG_HASH:=31b15ebcf26111b874732e07c8e60de5053ee555eea15fb70c657a4f9f0344f3
PKG_MAINTAINER:=Zoltan HERPAI <wigyori@uid0.hu>
PKG_FIXUP:=libtool
--- /dev/null
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=opus-tools
+PKG_VERSION:=0.1.10
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://downloads.xiph.org/releases/opus/
+PKG_HASH:=a2357532d19471b70666e0e0ec17d514246d8b3cb2eb168f68bb0f6fd372b28c
+
+PKG_LICENSE:=BSD-2-Clause
+PKG_LICENSE_FILES:=COPYING
+PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>, \
+ Nicolas Thill <nico@openwrt.org>
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/opus-tools
+ SECTION:=sound
+ CATEGORY:=Sound
+ DEPENDS:=+libogg +libopus
+ TITLE:=OPUS Codec tools
+ URL:=http://opus-codec.org/
+endef
+
+define Package/opus-tools/description
+ This package provides command-line utilities to encode, inspect,
+ and decode .opus files.
+endef
+
+CONFIGURE_ARGS += \
+ --without-flac \
+
+define Package/opus-tools/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/opus{dec,enc,info} $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,opus-tools))
include $(TOPDIR)/rules.mk
PKG_NAME:=pulseaudio
-PKG_VERSION:=11.0
-PKG_RELEASE:=2
+PKG_VERSION:=11.1
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=http://freedesktop.org/software/pulseaudio/releases/
-PKG_HASH:=072305d4018fc5e75bb1b45ee6b938fa52fc9fd27493bf327415ef89ed14c969
+PKG_SOURCE_URL:=https://freedesktop.org/software/pulseaudio/releases/
+PKG_HASH:=f2521c525a77166189e3cb9169f75c2ee2b82fa3fcf9476024fbc2c3a6c9cd9e
PKG_LICENSE:=LGPL-2.1+
PKG_LICENSE_FILES:=GPL LICENSE
PKG_NAME:=sox
PKG_VERSION:=14.4.2
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@SF/sox
--- /dev/null
+--- a/src/libsox.c
++++ b/src/libsox.c
+@@ -65,8 +65,6 @@ sox_version_info_t const * sox_version_i
+ #else
+ NULL,
+ #endif
+- /* sox_time */
+- __DATE__ " " __TIME__,
+ /* sox_distro */
+ #ifdef DISTRO
+ DISTRO,
+--- a/src/sox.h
++++ b/src/sox.h
+@@ -1321,7 +1321,6 @@ typedef struct sox_version_info_t {
+ sox_uint32_t version_code; /**< version number = 0x140400 */
+ char const * version; /**< version string = sox_version(), for example, "14.4.0" */
+ char const * version_extra;/**< version extra info or null = "PACKAGE_EXTRA", for example, "beta" */
+- char const * time; /**< build time = "__DATE__ __TIME__", for example, "Jan 7 2010 03:31:50" */
+ char const * distro; /**< distro or null = "DISTRO", for example, "Debian" */
+ char const * compiler; /**< compiler info or null, for example, "msvc 160040219" */
+ char const * arch; /**< arch, for example, "1248 48 44 L OMP" */
+--- a/src/sox.c
++++ b/src/sox.c
+@@ -1828,8 +1828,6 @@ static void display_SoX_version(FILE * f
+ info->version_extra ? info->version_extra : "");
+
+ if (sox_globals.verbosity > 3) {
+- if (info->time)
+- fprintf(file, "time: %s\n", info->time);
+ if (info->distro)
+ fprintf(file, "issue: %s\n", info->distro);
+ #if HAVE_SYS_UTSNAME_H
include $(TOPDIR)/rules.mk
PKG_NAME:=acpid
-PKG_VERSION:=2.0.27
+PKG_VERSION:=2.0.28
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@SF/acpid2
-PKG_HASH:=820c223e53cc11d9d7229fb1ffc2c2205f1054082c80f83f5a4ec4df16d3a616
+PKG_HASH:=980c3a54b0d3f2fd49fd845a0584c5c2abeaab9e9ac09fcbb68686bbb57a7110
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=at
-PKG_VERSION:=3.1.16
-PKG_RELEASE:=2
+PKG_VERSION:=3.1.20
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/a/at
-PKG_HASH:=cb9af59c6a54edce9536ba629841055409d1f89d8ae26494727a97141fb4d5c1
+PKG_HASH:=0871923cab73050b98ace020664eb2ddc1e669e4166b5abb64d864d02fcefab9
PKG_LICENSE:=GPL-2.0+ GPL-3.0+ ISC
PKG_LICENSE_FILES:=COPYING Copyright
--- /dev/null
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=attendedsysupgrade-common
+PKG_VERSION:=0.1
+PKG_RELEASE:=2
+PKG_LICENSE:=GPL-2.0
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/attendedsysupgrade-common
+ SECTION:=utils
+ CATEGORY:=Base system
+ TITLE:=Common files neede by attendedsysupgrade packages
+ MAINTAINER:=Paul Spooren <paul@spooren.de>
+ DEPENDS:=+rpcd +rpcd-mod-rpcsys
+endef
+
+define Package/attendedsysupgrade-common/description
+ Common needed files for attendedsysupgrade tool
+
+ Manages dependencies and brings settings used by clients.
+
+ UCI options:
+
+ attendedsysupgrade.server.url
+ URL of compatible upgrade server [1]
+
+ attendedsysupgrade.client.upgrade_packages
+ Client should request image also if no new release but new packages upgrade are available.
+
+ attendedsysupgrade.client.advanced_mode
+ Offer advanced options like editing packages before request and show additional information.
+
+ attendedsysupgrade.client.auto_search
+ Tells the client to automattically search for upgrades
+ This can be done when opening luci or login in to console - depends on client.
+
+ [1]: https://github.com/aparcar/gsoc17-attended-sysupgrade
+endef
+
+define Build/Compile
+endef
+
+define Build/Configure
+endef
+
+define Package/attendedsysupgrade-common/install
+ $(INSTALL_DIR) $(1)/etc/uci-defaults/
+ $(INSTALL_BIN) ./files/attendedsysupgrade.defaults $(1)/etc/uci-defaults/attendedsysupgrade
+endef
+
+$(eval $(call BuildPackage,attendedsysupgrade-common))
--- /dev/null
+#!/bin/sh
+
+[ -e /etc/config/attendedsysupgrade ] && return 0
+
+touch /etc/config/attendedsysupgrade
+
+uci -q batch <<EOF
+set attendedsysupgrade.server=server
+set attendedsysupgrade.server.url='https://example.org'
+
+set attendedsysupgrade.client=client
+set attendedsysupgrade.client.upgrade_packages='1'
+set attendedsysupgrade.client.auto_search='0'
+set attendedsysupgrade.client.advanced_mode='0'
+
+commit attendedsysupgrade
+EOF
--- /dev/null
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=auc
+PKG_VERSION:=0.0.8
+PKG_RELEASE=1
+PKG_LICENSE:=GPL-3.0
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/auc
+ SECTION:=base
+ CATEGORY:=Base system
+ TITLE:=Attended sysUpgrade CLI (EXPERIMENTAL)
+ DEPENDS:=+attendedsysupgrade-common +libblobmsg-json +libubox +libubus \
+ +libuci +libuclient +rpcd-mod-rpcsys
+endef
+
+define Package/auc/description
+ CLI client for attended-sysupgrade
+endef
+
+define Package/auc/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/auc $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,auc))
--- /dev/null
+cmake_minimum_required(VERSION 2.6)
+
+PROJECT(auc C)
+ADD_DEFINITIONS(-Os -ggdb -Wall --std=gnu99 -Wmissing-declarations)
+
+SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
+
+find_library(json NAMES json-c json)
+
+ADD_EXECUTABLE(auc auc.c)
+TARGET_LINK_LIBRARIES(auc uci ubox ubus uclient blobmsg_json ${json})
+INSTALL(TARGETS auc RUNTIME DESTINATION sbin)
--- /dev/null
+/*
+ * auc - attendedsysUpgrade CLI
+ * Copyright (C) 2017 Daniel Golle <daniel@makrotopia.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#define _GNU_SOURCE
+#define AUC_VERSION "0.0.8"
+
+#include <fcntl.h>
+#include <dlfcn.h>
+#include <glob.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <uci.h>
+#include <uci_blob.h>
+#include <json-c/json.h>
+#include <libubox/ulog.h>
+#include <libubox/list.h>
+#include <libubox/vlist.h>
+#include <libubox/blobmsg_json.h>
+#include <libubox/avl-cmp.h>
+#include <libubox/uclient.h>
+#include <libubox/uclient-utils.h>
+#include <libubus.h>
+
+#define REQ_TIMEOUT 15
+#define APIOBJ_CHECK "api/upgrade-check"
+#define APIOBJ_REQUEST "api/upgrade-request"
+
+static char user_agent[80];
+static char *serverurl;
+static int upgrade_packages;
+static struct ustream_ssl_ctx *ssl_ctx;
+static const struct ustream_ssl_ops *ssl_ops;
+static off_t out_bytes;
+static off_t out_len;
+static off_t out_offset;
+static bool cur_resume;
+static int output_fd = -1;
+static int retry, imagebuilder, building, ibready;
+static char *board_name = NULL;
+static char *target = NULL, *subtarget = NULL;
+static char *distribution = NULL, *version = NULL, *revision = NULL;
+static int uptodate;
+static char *filename = NULL;
+static int debug = 0;
+
+/*
+ * policy for ubus call system board
+ * see procd/system.c
+ */
+enum {
+ BOARD_KERNEL,
+ BOARD_HOSTNAME,
+ BOARD_SYSTEM,
+ BOARD_MODEL,
+ BOARD_BOARD_NAME,
+ BOARD_RELEASE,
+ __BOARD_MAX,
+};
+
+static const struct blobmsg_policy board_policy[__BOARD_MAX] = {
+ [BOARD_KERNEL] = { .name = "kernel", .type = BLOBMSG_TYPE_STRING },
+ [BOARD_HOSTNAME] = { .name = "hostname", .type = BLOBMSG_TYPE_STRING },
+ [BOARD_SYSTEM] = { .name = "system", .type = BLOBMSG_TYPE_STRING },
+ [BOARD_MODEL] = { .name = "model", .type = BLOBMSG_TYPE_STRING },
+ [BOARD_BOARD_NAME] = { .name = "board_name", .type = BLOBMSG_TYPE_STRING },
+ [BOARD_RELEASE] = { .name = "release", .type = BLOBMSG_TYPE_TABLE },
+};
+
+/*
+ * policy for release information in system board reply
+ * see procd/system.c
+ */
+enum {
+ RELEASE_DISTRIBUTION,
+ RELEASE_VERSION,
+ RELEASE_REVISION,
+ RELEASE_CODENAME,
+ RELEASE_TARGET,
+ RELEASE_DESCRIPTION,
+ __RELEASE_MAX,
+};
+
+static const struct blobmsg_policy release_policy[__RELEASE_MAX] = {
+ [RELEASE_DISTRIBUTION] = { .name = "distribution", .type = BLOBMSG_TYPE_STRING },
+ [RELEASE_VERSION] = { .name = "version", .type = BLOBMSG_TYPE_STRING },
+ [RELEASE_REVISION] = { .name = "revision", .type = BLOBMSG_TYPE_STRING },
+ [RELEASE_CODENAME] = { .name = "codename", .type = BLOBMSG_TYPE_STRING },
+ [RELEASE_TARGET] = { .name = "target", .type = BLOBMSG_TYPE_STRING },
+ [RELEASE_DESCRIPTION] = { .name = "description", .type = BLOBMSG_TYPE_STRING },
+};
+
+/*
+ * policy for packagelist
+ * see rpcd/sys.c
+ */
+enum {
+ PACKAGELIST_PACKAGES,
+ __PACKAGELIST_MAX,
+};
+
+static const struct blobmsg_policy packagelist_policy[__PACKAGELIST_MAX] = {
+ [PACKAGELIST_PACKAGES] = { .name = "packages", .type = BLOBMSG_TYPE_TABLE },
+};
+
+/*
+ * policy for upgrade_test
+ * see rpcd/sys.c
+ */
+enum {
+ UPGTEST_CODE,
+ UPGTEST_STDOUT,
+ __UPGTEST_MAX,
+};
+
+static const struct blobmsg_policy upgtest_policy[__UPGTEST_MAX] = {
+ [UPGTEST_CODE] = { .name = "code", .type = BLOBMSG_TYPE_INT32 },
+ [UPGTEST_STDOUT] = { .name = "stdout", .type = BLOBMSG_TYPE_STRING },
+};
+
+
+/*
+ * policy to extract version from upgrade-check response
+ */
+enum {
+ CHECK_VERSION,
+ CHECK_UPGRADES,
+ __CHECK_MAX,
+};
+
+static const struct blobmsg_policy check_policy[__CHECK_MAX] = {
+ [CHECK_VERSION] = { .name = "version", .type = BLOBMSG_TYPE_STRING },
+ [CHECK_UPGRADES] = { .name = "upgrades", .type = BLOBMSG_TYPE_TABLE },
+};
+
+/*
+ * policy for upgrade-request response
+ * parse download information for the ready image.
+ */
+enum {
+ IMAGE_REQHASH,
+ IMAGE_FILESIZE,
+ IMAGE_URL,
+ IMAGE_CHECKSUM,
+ IMAGE_FILES,
+ IMAGE_SYSUPGRADE,
+ __IMAGE_MAX,
+};
+
+static const struct blobmsg_policy image_policy[__IMAGE_MAX] = {
+ [IMAGE_REQHASH] = { .name = "request_hash", .type = BLOBMSG_TYPE_STRING },
+ [IMAGE_FILESIZE] = { .name = "filesize", .type = BLOBMSG_TYPE_INT32 },
+ [IMAGE_URL] = { .name = "url", .type = BLOBMSG_TYPE_STRING },
+ [IMAGE_CHECKSUM] = { .name = "checksum", .type = BLOBMSG_TYPE_STRING },
+ [IMAGE_FILES] = { .name = "files", .type = BLOBMSG_TYPE_STRING },
+ [IMAGE_SYSUPGRADE] = { .name = "sysupgrade", .type = BLOBMSG_TYPE_STRING },
+};
+
+/*
+ * load serverurl from UCI
+ */
+static int load_config() {
+ static struct uci_context *uci_ctx;
+ static struct uci_package *uci_attendedsysupgrade;
+ struct uci_section *uci_s;
+
+ uci_ctx = uci_alloc_context();
+ if (!uci_ctx)
+ return -1;
+
+ uci_ctx->flags &= ~UCI_FLAG_STRICT;
+
+ if (uci_load(uci_ctx, "attendedsysupgrade", &uci_attendedsysupgrade) ||
+ !uci_attendedsysupgrade) {
+ fprintf(stderr, "Failed to load attendedsysupgrade config\n");
+ return -1;
+ }
+
+ uci_s = uci_lookup_section(uci_ctx, uci_attendedsysupgrade, "server");
+ if (!uci_s) {
+ fprintf(stderr, "Failed to read server url from config\n");
+ return -1;
+ }
+ serverurl = strdup(uci_lookup_option_string(uci_ctx, uci_s, "url"));
+
+ uci_s = uci_lookup_section(uci_ctx, uci_attendedsysupgrade, "client");
+ if (!uci_s) {
+ fprintf(stderr, "Failed to read client config\n");
+ return -1;
+ }
+ upgrade_packages = atoi(uci_lookup_option_string(uci_ctx, uci_s, "upgrade_packages"));
+
+ uci_free_context(uci_ctx);
+
+ return 0;
+}
+
+
+/**
+ * UBUS response callbacks
+ */
+
+/*
+ * rpc-sys packagelist
+ * append packagelist response to blobbuf given in req->priv
+ */
+static void pkglist_cb(struct ubus_request *req, int type, struct blob_attr *msg) {
+ struct blob_buf *buf = (struct blob_buf *)req->priv;
+ struct blob_attr *tb[__PACKAGELIST_MAX];
+
+ blobmsg_parse(packagelist_policy, __PACKAGELIST_MAX, tb, blob_data(msg), blob_len(msg));
+
+ if (!tb[PACKAGELIST_PACKAGES]) {
+ fprintf(stderr, "No packagelist received\n");
+ return;
+ }
+
+ blobmsg_add_field(buf, BLOBMSG_TYPE_TABLE, "packages", blobmsg_data(tb[PACKAGELIST_PACKAGES]), blobmsg_data_len(tb[PACKAGELIST_PACKAGES]));
+};
+
+/*
+ * system board
+ * append append board information to blobbuf given in req->priv
+ * populate board and release global strings
+ */
+static void board_cb(struct ubus_request *req, int type, struct blob_attr *msg) {
+ struct blob_buf *buf = (struct blob_buf *)req->priv;
+ struct blob_attr *tb[__BOARD_MAX];
+ struct blob_attr *rel[__RELEASE_MAX];
+
+ blobmsg_parse(board_policy, __BOARD_MAX, tb, blob_data(msg), blob_len(msg));
+
+ if (!tb[BOARD_BOARD_NAME]) {
+ fprintf(stderr, "No board name received\n");
+ return;
+ }
+ board_name = strdup(blobmsg_get_string(tb[BOARD_BOARD_NAME]));
+
+ if (!tb[BOARD_RELEASE]) {
+ fprintf(stderr, "No release received\n");
+ return;
+ }
+
+ blobmsg_parse(release_policy, __RELEASE_MAX, rel,
+ blobmsg_data(tb[BOARD_RELEASE]), blobmsg_data_len(tb[BOARD_RELEASE]));
+
+ if (!rel[RELEASE_TARGET]) {
+ fprintf(stderr, "No target received\n");
+ return;
+ }
+
+ target = strdup(blobmsg_get_string(rel[RELEASE_TARGET]));
+ subtarget = strchr(target, '/');
+ *subtarget++ = '\0';
+
+ distribution = strdup(blobmsg_get_string(rel[RELEASE_DISTRIBUTION]));
+ version = strdup(blobmsg_get_string(rel[RELEASE_VERSION]));
+ revision = strdup(blobmsg_get_string(rel[RELEASE_REVISION]));
+
+ blobmsg_add_string(buf, "distro", distribution);
+ blobmsg_add_string(buf, "target", target);
+ blobmsg_add_string(buf, "subtarget", subtarget);
+ blobmsg_add_string(buf, "version", version);
+}
+
+/*
+ * rpc-sys upgrade_test
+ * check if downloaded file is accepted by sysupgrade
+ */
+static void upgtest_cb(struct ubus_request *req, int type, struct blob_attr *msg) {
+ int *valid = (int *)req->priv;
+ struct blob_attr *tb[__UPGTEST_MAX];
+
+ blobmsg_parse(upgtest_policy, __UPGTEST_MAX, tb, blob_data(msg), blob_len(msg));
+
+ if (!tb[UPGTEST_CODE]) {
+ fprintf(stderr, "No sysupgrade test return code received\n");
+ return;
+ }
+
+ *valid = (blobmsg_get_u32(tb[UPGTEST_CODE]) == 0)?1:0;
+ if (*valid == 0)
+ fprintf(stderr, "%s", blobmsg_get_string(tb[UPGTEST_STDOUT]));
+};
+
+/**
+ * uclient stuff
+ */
+static int open_output_file(const char *path, uint64_t resume_offset)
+{
+ char *filename = NULL;
+ int flags;
+ int ret;
+
+ if (cur_resume)
+ flags = O_RDWR;
+ else
+ flags = O_WRONLY | O_EXCL;
+
+ flags |= O_CREAT;
+
+ filename = uclient_get_url_filename(path, "firmware.bin");
+
+ fprintf(stderr, "Writing to '%s'\n", filename);
+ ret = open(filename, flags, 0644);
+ if (ret < 0)
+ goto free;
+
+ if (resume_offset &&
+ lseek(ret, resume_offset, SEEK_SET) < 0) {
+ fprintf(stderr, "Failed to seek %"PRIu64" bytes in output file\n", resume_offset);
+ close(ret);
+ ret = -1;
+ goto free;
+ }
+
+ out_offset = resume_offset;
+ out_bytes += resume_offset;
+
+free:
+ free(filename);
+ return ret;
+}
+
+struct jsonblobber {
+ json_tokener *tok;
+ struct blob_buf *outbuf;
+};
+
+static void request_done(struct uclient *cl)
+{
+ struct jsonblobber *jsb = (struct jsonblobber *)cl->priv;
+ if (jsb) {
+ json_tokener_free(jsb->tok);
+ free(jsb);
+ };
+
+ uclient_disconnect(cl);
+ uloop_end();
+}
+
+static void header_done_cb(struct uclient *cl)
+{
+ enum {
+ H_RANGE,
+ H_LEN,
+ H_IBSTATUS,
+ H_IBQUEUEPOS,
+ __H_MAX
+ };
+ static const struct blobmsg_policy policy[__H_MAX] = {
+ [H_RANGE] = { .name = "content-range", .type = BLOBMSG_TYPE_STRING },
+ [H_LEN] = { .name = "content-length", .type = BLOBMSG_TYPE_STRING },
+ [H_IBSTATUS] = { .name = "x-imagebuilder-status", .type = BLOBMSG_TYPE_STRING },
+ [H_IBQUEUEPOS] = { .name = "x-build-queue-position", .type = BLOBMSG_TYPE_STRING },
+ };
+ struct blob_attr *tb[__H_MAX];
+ uint64_t resume_offset = 0, resume_end, resume_size;
+ char *ibstatus;
+ unsigned int queuepos = 0;
+
+ if (uclient_http_redirect(cl)) {
+ fprintf(stderr, "Redirected to %s on %s\n", cl->url->location, cl->url->host);
+
+ return;
+ }
+
+ if (cl->status_code == 204 && cur_resume) {
+ /* Resume attempt failed, try normal download */
+ cur_resume = false;
+ //init_request(cl);
+ return;
+ }
+
+ if (debug)
+ fprintf(stderr, "headers:\n%s\n", blobmsg_format_json_indent(cl->meta, true, 0));
+
+ blobmsg_parse(policy, __H_MAX, tb, blob_data(cl->meta), blob_len(cl->meta));
+
+ switch (cl->status_code) {
+ case 400:
+ request_done(cl);
+ break;
+ case 412:
+ fprintf(stderr, "target not found.\n");
+ request_done(cl);
+ break;
+ case 413:
+ fprintf(stderr, "image too big.\n");
+ request_done(cl);
+ break;
+ case 416:
+ fprintf(stderr, "File download already fully retrieved; nothing to do.\n");
+ request_done(cl);
+ break;
+ case 422:
+ fprintf(stderr, "unknown package requested.\n");
+ request_done(cl);
+ break;
+ case 501:
+ fprintf(stderr, "ImageBuilder didn't produce sysupgrade file.\n");
+ request_done(cl);
+ break;
+ case 204:
+ fprintf(stderr, "system is up to date.\n");
+ uptodate=1;
+ break;
+ case 206:
+ if (!cur_resume) {
+ fprintf(stderr, "Error: Partial content received, full content requested\n");
+ request_done(cl);
+ break;
+ }
+
+ if (!tb[H_RANGE]) {
+ fprintf(stderr, "Content-Range header is missing\n");
+ break;
+ }
+
+ if (sscanf(blobmsg_get_string(tb[H_RANGE]),
+ "bytes %"PRIu64"-%"PRIu64"/%"PRIu64,
+ &resume_offset, &resume_end, &resume_size) != 3) {
+ fprintf(stderr, "Content-Range header is invalid\n");
+ break;
+ }
+ case 202:
+ if (!tb[H_IBSTATUS])
+ break;
+
+ ibstatus = blobmsg_get_string(tb[H_IBSTATUS]);
+
+ if (!strncmp(ibstatus, "queue", 6)) {
+ if (!imagebuilder) {
+ fprintf(stderr, "server is dispatching build job\n");
+ imagebuilder=1;
+ } else {
+ if (tb[H_IBQUEUEPOS]) {
+ queuepos = atoi(blobmsg_get_string(tb[H_IBQUEUEPOS]));
+ fprintf(stderr, "build is in queue position %u.\n", queuepos);
+ }
+ }
+ retry=1;
+ } else if (!strncmp(ibstatus, "building", 9)) {
+ if (!building) {
+ fprintf(stderr, "server is now building image...\n");
+ building=1;
+ }
+ retry=1;
+ } else if (!strncmp(ibstatus, "initialize", 11)) {
+ if (!ibready) {
+ fprintf(stderr, "server is setting up ImageBuilder...\n");
+ ibready=1;
+ }
+ retry=1;
+ } else {
+ fprintf(stderr, "unrecognized remote imagebuilder status '%s'\n", ibstatus);
+ }
+ // fall through
+ case 200:
+ if (cl->priv)
+ break;
+
+ if (tb[H_LEN])
+ out_len = strtoul(blobmsg_get_string(tb[H_LEN]), NULL, 10);
+
+ output_fd = open_output_file(cl->url->location, resume_offset);
+ if (output_fd < 0) {
+ perror("Cannot open output file");
+ request_done(cl);
+ }
+ break;
+
+ default:
+ fprintf(stderr, "HTTP error %d\n", cl->status_code);
+ request_done(cl);
+ break;
+ }
+}
+
+static void read_data_cb(struct uclient *cl)
+{
+ char buf[256];
+ int len;
+ json_object *jsobj;
+ struct blob_buf *outbuf = NULL;
+ json_tokener *tok = NULL;
+ struct jsonblobber *jsb = (struct jsonblobber *)cl->priv;
+
+ if (!jsb) {
+ while (1) {
+ len = uclient_read(cl, buf, sizeof(buf));
+ if (!len)
+ return;
+
+ out_bytes += len;
+ write(output_fd, buf, len);
+ }
+ return;
+ }
+
+ outbuf = jsb->outbuf;
+ tok = jsb->tok;
+
+ while (1) {
+ len = uclient_read(cl, buf, sizeof(buf));
+ if (!len)
+ break;
+
+ out_bytes += len;
+
+ jsobj = json_tokener_parse_ex(tok, buf, len);
+
+ if (json_tokener_get_error(tok) == json_tokener_continue)
+ continue;
+
+ if (json_tokener_get_error(tok) != json_tokener_success)
+ break;
+
+ if (jsobj)
+ {
+ if (json_object_get_type(jsobj) == json_type_object)
+ blobmsg_add_object(outbuf, jsobj);
+
+ json_object_put(jsobj);
+ break;
+ }
+ }
+}
+
+static void eof_cb(struct uclient *cl)
+{
+ if (!cl->data_eof && !uptodate) {
+ fprintf(stderr, "Connection reset prematurely\n");
+ }
+ request_done(cl);
+}
+
+static void handle_uclient_error(struct uclient *cl, int code)
+{
+ const char *type = "Unknown error";
+
+ switch(code) {
+ case UCLIENT_ERROR_CONNECT:
+ type = "Connection failed";
+ break;
+ case UCLIENT_ERROR_TIMEDOUT:
+ type = "Connection timed out";
+ break;
+ case UCLIENT_ERROR_SSL_INVALID_CERT:
+ type = "Invalid SSL certificate";
+ break;
+ case UCLIENT_ERROR_SSL_CN_MISMATCH:
+ type = "Server hostname does not match SSL certificate";
+ break;
+ default:
+ break;
+ }
+
+ fprintf(stderr, "Connection error: %s\n", type);
+
+ request_done(cl);
+}
+
+static const struct uclient_cb check_cb = {
+ .header_done = header_done_cb,
+ .data_read = read_data_cb,
+ .data_eof = eof_cb,
+ .error = handle_uclient_error,
+};
+
+static int server_request(const char *url, struct blob_buf *inbuf, struct blob_buf *outbuf) {
+ struct uclient *ucl;
+ struct jsonblobber *jsb = NULL;
+ int rc = -1;
+ char *post_data;
+ out_offset = 0;
+ out_bytes = 0;
+ out_len = 0;
+
+ uloop_init();
+
+ ucl = uclient_new(url, NULL, &check_cb);
+ if (outbuf) {
+ jsb = malloc(sizeof(struct jsonblobber));
+ jsb->outbuf = outbuf;
+ jsb->tok = json_tokener_new();
+ };
+
+ uclient_http_set_ssl_ctx(ucl, ssl_ops, ssl_ctx, 1);
+ ucl->timeout_msecs = REQ_TIMEOUT * 1000;
+ ucl->priv = jsb;
+ rc = uclient_connect(ucl);
+ if (rc)
+ return rc;
+
+ rc = uclient_http_set_request_type(ucl, inbuf?"POST":"GET");
+ if (rc)
+ return rc;
+
+ uclient_http_reset_headers(ucl);
+ uclient_http_set_header(ucl, "User-Agent", user_agent);
+ if (inbuf) {
+ uclient_http_set_header(ucl, "Content-Type", "text/json");
+ post_data = blobmsg_format_json(inbuf->head, true);
+ uclient_write(ucl, post_data, strlen(post_data));
+ }
+ rc = uclient_request(ucl);
+ if (rc)
+ return rc;
+
+ uloop_run();
+ uloop_done();
+ uclient_free(ucl);
+
+ return 0;
+}
+
+/**
+ * ustream-ssl
+ */
+static int init_ustream_ssl(void) {
+ void *dlh;
+ glob_t gl;
+ int i;
+
+ dlh = dlopen("libustream-ssl.so", RTLD_LAZY | RTLD_LOCAL);
+ if (!dlh)
+ return -1;
+
+ ssl_ops = dlsym(dlh, "ustream_ssl_ops");
+ if (!ssl_ops)
+ return -1;
+
+ ssl_ctx = ssl_ops->context_new(false);
+
+ glob("/etc/ssl/certs/*.crt", 0, NULL, &gl);
+ if (!gl.gl_pathc)
+ return -2;
+
+ for (i = 0; i < gl.gl_pathc; i++)
+ ssl_ops->context_add_ca_crt_file(ssl_ctx, gl.gl_pathv[i]);
+
+ return 0;
+}
+
+/**
+ * use busybox md5sum (from jow's luci-ng)
+ */
+static char *md5sum(const char *file) {
+ pid_t pid;
+ int fds[2];
+ static char md5[33];
+
+ if (pipe(fds))
+ return NULL;
+
+ switch ((pid = fork()))
+ {
+ case -1:
+ return NULL;
+
+ case 0:
+ uloop_done();
+
+ dup2(fds[1], 1);
+
+ close(0);
+ close(2);
+ close(fds[0]);
+ close(fds[1]);
+
+ if (execl("/bin/busybox", "/bin/busybox", "md5sum", file, NULL));
+ return NULL;
+
+ break;
+
+ default:
+ memset(md5, 0, sizeof(md5));
+ read(fds[0], md5, 32);
+ waitpid(pid, NULL, 0);
+ close(fds[0]);
+ close(fds[1]);
+ }
+
+ return md5;
+}
+
+static int ask_user(void)
+{
+ fprintf(stderr, "Are you sure you want to continue the upgrade process? [N/y] ");
+ if (getchar() != 'y')
+ return -1;
+ return 0;
+}
+
+static void print_package_updates(struct blob_attr *upgrades) {
+ struct blob_attr *cur;
+ struct blob_attr *tb[2];
+ int rem;
+
+ static struct blobmsg_policy policy[2] = {
+ { .type = BLOBMSG_TYPE_STRING },
+ { .type = BLOBMSG_TYPE_STRING },
+ };
+
+ blobmsg_for_each_attr(cur, upgrades, rem) {
+ blobmsg_parse_array(policy, ARRAY_SIZE(policy), tb, blobmsg_data(cur), blobmsg_data_len(cur));
+ if (!tb[0] || !tb[1])
+ continue;
+
+ fprintf(stdout, "\t%s (%s -> %s)\n", blobmsg_name(cur),
+ blobmsg_get_string(tb[1]), blobmsg_get_string(tb[0]));
+ };
+}
+
+/* this main function is too big... todo: split */
+int main(int args, char *argv[]) {
+ unsigned char argc=1;
+ static struct blob_buf checkbuf, reqbuf, imgbuf, upgbuf;
+ struct ubus_context *ctx = ubus_connect(NULL);
+ uint32_t id;
+ int rc;
+ int queuepos, valid, use_get;
+ char url[256];
+ char *newversion = NULL;
+ struct blob_attr *tb[__IMAGE_MAX];
+ struct blob_attr *tbc[__CHECK_MAX];
+ unsigned int filesize;
+ char *checksum = NULL;
+ struct stat imgstat;
+
+ snprintf(user_agent, sizeof(user_agent), "%s (%s)", argv[0], AUC_VERSION);
+ fprintf(stdout, "%s\n", user_agent);
+
+ while (argc<args) {
+ if (!strncmp(argv[argc], "-h", 3) ||
+ !strncmp(argv[argc], "--help", 7)) {
+ fprintf(stdout, "%s: Attended sysUpgrade CLI client\n", argv[0]);
+ fprintf(stdout, "Usage: auc [-d] [-h]\n");
+ fprintf(stdout, " -d\tenable debugging output\n");
+ fprintf(stdout, " -h\toutput help\n");
+ return 0;
+ }
+ if (!strncmp(argv[argc], "-d", 3))
+ debug = 1;
+ argc++;
+ };
+
+ if (!ctx) {
+ fprintf(stderr, "failed to connect to ubus.\n");
+ return -1;
+ }
+ if (load_config()) {
+ rc=-1;
+ goto freeubus;
+ }
+
+ if (chdir("/tmp")) {
+ rc=-1;
+ goto freeconfig;
+ }
+
+ rc = init_ustream_ssl();
+ if (rc == -2) {
+ fprintf(stderr, "No CA certificates loaded, please install ca-certificates\n");
+ rc=-1;
+ goto freessl;
+ }
+
+ if (rc || !ssl_ctx) {
+ fprintf(stderr, "SSL support not available, please install ustream-ssl\n");
+ rc=-1;
+ goto freessl;
+ }
+
+ blobmsg_buf_init(&checkbuf);
+ blobmsg_buf_init(&reqbuf);
+ blobmsg_buf_init(&imgbuf);
+ blobmsg_buf_init(&upgbuf);
+
+ if (ubus_lookup_id(ctx, "system", &id) ||
+ ubus_invoke(ctx, id, "board", NULL, board_cb, &checkbuf, 3000)) {
+ fprintf(stderr, "cannot request board info from procd\n");
+ rc=-1;
+ goto freebufs;
+ }
+
+ if (ubus_lookup_id(ctx, "rpc-sys", &id) ||
+ ubus_invoke(ctx, id, "packagelist", NULL, pkglist_cb, &checkbuf, 3000)) {
+ fprintf(stderr, "cannot request packagelist from rpcd\n");
+ rc=-1;
+ goto freeboard;
+ }
+
+ blobmsg_add_u32(&checkbuf, "upgrade_packages", upgrade_packages);
+
+ fprintf(stdout, "running %s %s %s on %s/%s (%s)\n", distribution,
+ version, revision, target, subtarget, board_name);
+
+ fprintf(stdout, "checking %s for release upgrade%s\n", serverurl,
+ upgrade_packages?" or updated packages":"");
+
+ blobmsg_add_string(&reqbuf, "distro", distribution);
+ blobmsg_add_string(&reqbuf, "target", target);
+ blobmsg_add_string(&reqbuf, "subtarget", subtarget);
+ blobmsg_add_string(&reqbuf, "board", board_name);
+
+ snprintf(url, sizeof(url), "%s/%s", serverurl, APIOBJ_CHECK);
+ uptodate=0;
+
+ do {
+ retry=0;
+ if (debug)
+ fprintf(stderr, "requesting:\n%s\n", blobmsg_format_json_indent(checkbuf.head, true, 0));
+ if (server_request(url, &checkbuf, &reqbuf)) {
+ fprintf(stderr, "failed to connect to server\n");
+ rc=-1;
+ goto freeboard;
+ };
+
+ if (retry)
+ sleep(3);
+ } while(retry);
+
+ if (debug)
+ fprintf(stderr, "reply:\n%s\n", blobmsg_format_json_indent(reqbuf.head, true, 0));
+
+ blobmsg_parse(check_policy, __CHECK_MAX, tbc, blob_data(reqbuf.head), blob_len(reqbuf.head));
+
+ if (!tbc[CHECK_VERSION] && !tbc[CHECK_UPGRADES]) {
+ if (!uptodate) {
+ fprintf(stderr, "server reply invalid.\n");
+ rc=-1;
+ goto freeboard;
+ }
+ rc=0;
+ goto freeboard;
+ }
+ if (tbc[CHECK_VERSION]) {
+ newversion = blobmsg_get_string(tbc[CHECK_VERSION]);
+ fprintf(stdout, "new %s release %s found.\n", distribution, newversion);
+ } else {
+ fprintf(stdout, "staying on %s release version %s\n", distribution, version);
+ blobmsg_add_string(&reqbuf, "version", version);
+ };
+
+ if (tbc[CHECK_UPGRADES]) {
+ fprintf(stdout, "package updates:\n");
+ print_package_updates(tbc[CHECK_UPGRADES]);
+ }
+
+ rc = ask_user();
+ if (rc)
+ goto freeboard;
+
+ snprintf(url, sizeof(url), "%s/%s", serverurl, APIOBJ_REQUEST);
+
+ imagebuilder = 0;
+ building = 0;
+ use_get = 0;
+
+ do {
+ retry = 0;
+
+ if (debug && !use_get)
+ fprintf(stderr, "requesting:\n%s\n", blobmsg_format_json_indent(reqbuf.head, true, 0));
+
+ server_request(url, use_get?NULL:&reqbuf, &imgbuf);
+ blobmsg_parse(image_policy, __IMAGE_MAX, tb, blob_data(imgbuf.head), blob_len(imgbuf.head));
+
+ if (!use_get && tb[IMAGE_REQHASH]) {
+ snprintf(url, sizeof(url), "%s/%s/%s", serverurl,
+ APIOBJ_REQUEST,
+ blobmsg_get_string(tb[IMAGE_REQHASH]));
+ if (debug)
+ fprintf(stderr, "polling via GET %s\n", url);
+
+ retry=1;
+ use_get=1;
+ }
+
+ if (retry) {
+ blob_buf_free(&imgbuf);
+ blobmsg_buf_init(&imgbuf);
+ sleep(3);
+ }
+ } while(retry || queuepos);
+
+ if (debug)
+ fprintf(stderr, "reply:\n%s\n", blobmsg_format_json_indent(imgbuf.head, true, 0));
+
+ if (!tb[IMAGE_SYSUPGRADE]) {
+ fprintf(stderr, "no sysupgrade image returned\n");
+ rc=-1;
+ goto freeboard;
+ }
+ strncpy(url, blobmsg_get_string(tb[IMAGE_SYSUPGRADE]), sizeof(url));
+
+ if (!tb[IMAGE_FILESIZE]) {
+ fprintf(stderr, "no image size returned\n");
+ rc=-1;
+ goto freeboard;
+ }
+ filesize = blobmsg_get_u32(tb[IMAGE_FILESIZE]);
+
+ if (!tb[IMAGE_CHECKSUM]) {
+ fprintf(stderr, "no image checksum returned\n");
+ rc=-1;
+ goto freeboard;
+ }
+ checksum = blobmsg_get_string(tb[IMAGE_CHECKSUM]);
+ server_request(url, NULL, NULL);
+/* usign signature is not yet implemented! */
+// strncat(url, ".sig", sizeof(url));
+// server_request(url, NULL, NULL);
+ filename = uclient_get_url_filename(url, "firmware.bin");
+
+ if (stat(filename, &imgstat)) {
+ fprintf(stderr, "image download failed\n");
+ rc=-1;
+ goto freeboard;
+ }
+
+ if ((intmax_t)imgstat.st_size != filesize) {
+ fprintf(stderr, "file size mismatch\n");
+ unlink(filename);
+ rc=-1;
+ goto freeboard;
+ }
+
+ if (strncmp(checksum, md5sum(filename), 33)) {
+ fprintf(stderr, "image checksum mismatch\n");
+ unlink(filename);
+ rc=-1;
+ goto freeboard;
+ };
+
+ if (strcmp(filename, "firmware.bin")) {
+ if (rename(filename, "firmware.bin")) {
+ fprintf(stderr, "can't rename to firmware.bin\n");
+ unlink(filename);
+ rc=-1;
+ goto freeboard;
+ }
+ }
+
+ valid = 0;
+ ubus_invoke(ctx, id, "upgrade_test", NULL, upgtest_cb, &valid, 3000);
+ if (!valid) {
+ rc=-1;
+ goto freeboard;
+ }
+
+ blobmsg_add_u8(&upgbuf, "keep", 1);
+ fprintf(stdout, "invoking sysupgrade\n");
+ ubus_invoke(ctx, id, "upgrade_start", upgbuf.head, NULL, NULL, 3000);
+
+freeboard:
+ free(board_name);
+ free(target);
+ /* subtarget is a pointer within target, don't free */
+ free(distribution);
+ free(version);
+ free(revision);
+
+freebufs:
+ blob_buf_free(&checkbuf);
+ blob_buf_free(&reqbuf);
+ blob_buf_free(&imgbuf);
+ blob_buf_free(&upgbuf);
+
+freessl:
+ if (ssl_ctx)
+ ssl_ops->context_free(ssl_ctx);
+
+freeconfig:
+ free(serverurl);
+
+freeubus:
+ ubus_free(ctx);
+
+ return rc;
+}
PKG_NAME:=avrdude
PKG_VERSION:=6.3
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SAVANNAH/$(PKG_NAME)
--- /dev/null
+Description: no CPP macro timestamps
+ Reporducible builds project support, see:
+ http://wiki.debian.org/ReproducibleBuilds/TimestampsFromCPPMacros
+Author: Milan Kupcevic <milan@debian.org>
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/main.c
++++ b/main.c
+@@ -679,10 +679,10 @@
+ * Print out an identifying string so folks can tell what version
+ * they are running
+ */
+- avrdude_message(MSG_NOTICE, "\n%s: Version %s, compiled on %s at %s\n"
++ avrdude_message(MSG_NOTICE, "\n%s: Version %s\n"
+ "%sCopyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/\n"
+ "%sCopyright (c) 2007-2014 Joerg Wunsch\n\n",
+- progname, version, __DATE__, __TIME__, progbuf, progbuf);
++ progname, version, progbuf, progbuf);
+ avrdude_message(MSG_NOTICE, "%sSystem wide configuration file is \"%s\"\n",
+ progbuf, sys_config);
+
include $(TOPDIR)/rules.mk
-BASE_VERSION:=4.3
+BASE_VERSION:=4.4
PKG_NAME:=bash
-PKG_VERSION:=$(BASE_VERSION).42
+PKG_VERSION:=$(BASE_VERSION).12
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(BASE_VERSION).tar.gz
PKG_SOURCE_URL:=@GNU/bash
-PKG_HASH:=afc687a28e0e24dc21b988fa159ff9dbcf6b7caa92ade8645cc6d5605cd024d4
+PKG_HASH:=d86b3392c1202e8ff5a423b302e6284db7f8f435ea9f39b5b1b20fd3ac36dfcb
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BASE_VERSION)
PKG_LICENSE:=GPL-3.0+
---- a/execute_cmd.c
-+++ b/execute_cmd.c
-@@ -2369,7 +2369,11 @@ execute_pipeline (command, asynchronous,
+Index: bash-4.4/execute_cmd.c
+===================================================================
+--- bash-4.4.orig/execute_cmd.c
++++ bash-4.4/execute_cmd.c
+@@ -2459,7 +2459,11 @@ execute_pipeline (command, asynchronous,
/* If the `lastpipe' option is set with shopt, and job control is not
enabled, execute the last element of non-async pipelines in the
current shell environment. */
---- a/configure
-+++ b/configure
-@@ -5430,8 +5430,7 @@ if test $opt_readline = yes; then
+Index: bash-4.4/configure
+===================================================================
+--- bash-4.4.orig/configure
++++ bash-4.4/configure
+@@ -5420,8 +5420,7 @@ if test $opt_readline = yes; then
# static version specified as -llibname to override the
# dynamic version
case "${host_os}" in
esac
fi
else
---- a/configure.ac
-+++ b/configure.ac
-@@ -578,8 +578,7 @@ if test $opt_readline = yes; then
+Index: bash-4.4/configure.ac
+===================================================================
+--- bash-4.4.orig/configure.ac
++++ bash-4.4/configure.ac
+@@ -573,8 +573,7 @@ if test $opt_readline = yes; then
# static version specified as -llibname to override the
# dynamic version
case "${host_os}" in
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-001
-
-Bug-Reported-by: NBaH <nbah@sfr.fr>
-Bug-Reference-ID: <ler0b5$iu9$1@speranza.aioe.org>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html
-
-Bug-Description:
-
-A missing check for a valid option prevented `test -R' from working. There
-is another problem that causes bash to look up the wrong variable name when
-processing the argument to `test -R'.
-
-Patch (apply with `patch -p0'):
-
---- a/test.c
-+++ b/test.c
-@@ -646,8 +646,8 @@ unary_test (op, arg)
- return (v && invisible_p (v) == 0 && var_isset (v) ? TRUE : FALSE);
-
- case 'R':
-- v = find_variable (arg);
-- return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE);
-+ v = find_variable_noref (arg);
-+ return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE);
- }
-
- /* We can't actually get here, but this shuts up gcc. */
-@@ -723,6 +723,7 @@ test_unop (op)
- case 'o': case 'p': case 'r': case 's': case 't':
- case 'u': case 'v': case 'w': case 'x': case 'z':
- case 'G': case 'L': case 'O': case 'S': case 'N':
-+ case 'R':
- return (1);
- }
-
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 0
-+#define PATCHLEVEL 1
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/lib/readline/history.c
+===================================================================
+--- bash-4.4.orig/lib/readline/history.c
++++ bash-4.4/lib/readline/history.c
+@@ -57,6 +57,8 @@ extern int errno;
+ /* How big to make the_history when we first allocate it. */
+ #define DEFAULT_HISTORY_INITIAL_SIZE 502
+
++#define MAX_HISTORY_INITIAL_SIZE 8192
++
+ /* The number of slots to increase the_history by. */
+ #define DEFAULT_HISTORY_GROW_SIZE 50
+
+@@ -307,7 +309,9 @@ add_history (string)
+ if (history_size == 0)
+ {
+ if (history_stifled && history_max_entries > 0)
+- history_size = history_max_entries + 2;
++ history_size = (history_max_entries > MAX_HISTORY_INITIAL_SIZE)
++ ? MAX_HISTORY_INITIAL_SIZE
++ : history_max_entries + 2;
+ else
+ history_size = DEFAULT_HISTORY_INITIAL_SIZE;
+ the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 0
++#define PATCHLEVEL 1
+
+ #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-002
-
-Bug-Reported-by: Moe Tunes <moetunes42@gmail.com>
-Bug-Reference-ID: <53103F49.3070100@gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html
-
-Bug-Description:
-
-A change to save state while running the DEBUG trap caused pipelines to hang
-on systems which need process group synchronization while building pipelines.
-
-Patch (apply with `patch -p0'):
-
---- a/trap.c
-+++ b/trap.c
-@@ -920,7 +920,8 @@ _run_trap_internal (sig, tag)
- subst_assign_varlist = 0;
-
- #if defined (JOB_CONTROL)
-- save_pipeline (1); /* XXX only provides one save level */
-+ if (sig != DEBUG_TRAP) /* run_debug_trap does this */
-+ save_pipeline (1); /* XXX only provides one save level */
- #endif
-
- /* If we're in a function, make sure return longjmps come here, too. */
-@@ -940,7 +941,8 @@ _run_trap_internal (sig, tag)
- trap_exit_value = last_command_exit_value;
-
- #if defined (JOB_CONTROL)
-- restore_pipeline (1);
-+ if (sig != DEBUG_TRAP) /* run_debug_trap does this */
-+ restore_pipeline (1);
- #endif
-
- subst_assign_varlist = save_subst_varlist;
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 1
-+#define PATCHLEVEL 2
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 1
++#define PATCHLEVEL 2
+
+ #endif /* _PATCHLEVEL_H_ */
+Index: bash-4.4/subst.c
+===================================================================
+--- bash-4.4.orig/subst.c
++++ bash-4.4/subst.c
+@@ -5931,6 +5931,7 @@ read_comsub (fd, quoted, rflag)
+ char *istring, buf[128], *bufp, *s;
+ int istring_index, istring_size, c, tflag, skip_ctlesc, skip_ctlnul;
+ ssize_t bufn;
++ int nullbyte;
+
+ istring = (char *)NULL;
+ istring_index = istring_size = bufn = tflag = 0;
+@@ -5938,6 +5939,8 @@ read_comsub (fd, quoted, rflag)
+ for (skip_ctlesc = skip_ctlnul = 0, s = ifs_value; s && *s; s++)
+ skip_ctlesc |= *s == CTLESC, skip_ctlnul |= *s == CTLNUL;
+
++ nullbyte = 0;
++
+ /* Read the output of the command through the pipe. This may need to be
+ changed to understand multibyte characters in the future. */
+ while (1)
+@@ -5956,7 +5959,11 @@ read_comsub (fd, quoted, rflag)
+ if (c == 0)
+ {
+ #if 1
+- internal_warning ("%s", _("command substitution: ignored null byte in input"));
++ if (nullbyte == 0)
++ {
++ internal_warning ("%s", _("command substitution: ignored null byte in input"));
++ nullbyte = 1;
++ }
+ #endif
+ continue;
+ }
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-003
-
-Bug-Reported-by: Anatol Pomozov <anatol.pomozov@gmail.com>
-Bug-Reference-ID: <CAOMFOmXy3mT2So5GQ5F-smCVArQuAeBwZ2QKzgCtMeXJoDeYOQ@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html
-
-Bug-Description:
-
-When in callback mode, some readline commands can cause readline to seg
-fault by passing invalid contexts to callback functions.
-
-Patch (apply with `patch -p0'):
-
---- a/lib/readline/readline.c
-+++ b/lib/readline/readline.c
-@@ -744,7 +744,8 @@ _rl_dispatch_callback (cxt)
- r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ));
-
- RL_CHECK_SIGNALS ();
-- if (r == 0) /* success! */
-+ /* We only treat values < 0 specially to simulate recursion. */
-+ if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */
- {
- _rl_keyseq_chain_dispose ();
- RL_UNSETSTATE (RL_STATE_MULTIKEY);
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 2
-+#define PATCHLEVEL 3
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/lib/glob/sm_loop.c
+===================================================================
+--- bash-4.4.orig/lib/glob/sm_loop.c
++++ bash-4.4/lib/glob/sm_loop.c
+@@ -330,6 +330,12 @@ PARSE_COLLSYM (p, vp)
+ for (pc = 0; p[pc]; pc++)
+ if (p[pc] == L('.') && p[pc+1] == L(']'))
+ break;
++ if (p[pc] == 0)
++ {
++ if (vp)
++ *vp = INVALID;
++ return (p + pc);
++ }
+ val = COLLSYM (p, pc);
+ if (vp)
+ *vp = val;
+@@ -483,6 +489,9 @@ BRACKMATCH (p, test, flags)
+ c = *p++;
+ c = FOLD (c);
+
++ if (c == L('\0'))
++ return ((test == L('[')) ? savep : (CHAR *)0);
++
+ if ((flags & FNM_PATHNAME) && c == L('/'))
+ /* [/] can never match when matching a pathname. */
+ return (CHAR *)0;
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 2
++#define PATCHLEVEL 3
+
+ #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-004
-
-Bug-Reported-by: Daan van Rossum <daan@flash.uchicago.edu>
-Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu>
-Bug-Reference-URL:
-
-Bug-Description:
-
-The `.' command in vi mode cannot undo multi-key commands beginning with
-`c', `d', and `y' (command plus motion specifier).
-
-Patch (apply with `patch -p0'):
-
---- a/lib/readline/readline.c
-+++ b/lib/readline/readline.c
-@@ -965,7 +965,7 @@ _rl_dispatch_subseq (key, map, got_subse
- #if defined (VI_MODE)
- if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
- key != ANYOTHERKEY &&
-- rl_key_sequence_length == 1 && /* XXX */
-+ _rl_dispatching_keymap == vi_movement_keymap &&
- _rl_vi_textmod_command (key))
- _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
- #endif
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 3
-+#define PATCHLEVEL 4
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/jobs.c
+===================================================================
+--- bash-4.4.orig/jobs.c
++++ bash-4.4/jobs.c
+@@ -453,6 +453,21 @@ cleanup_the_pipeline ()
+ discard_pipeline (disposer);
+ }
+
++void
++discard_last_procsub_child ()
++{
++ PROCESS *disposer;
++ sigset_t set, oset;
++
++ BLOCK_CHILD (set, oset);
++ disposer = last_procsub_child;
++ last_procsub_child = (PROCESS *)NULL;
++ UNBLOCK_CHILD (oset);
++
++ if (disposer)
++ discard_pipeline (disposer);
++}
++
+ struct pipeline_saver *
+ alloc_pipeline_saver ()
+ {
+Index: bash-4.4/jobs.h
+===================================================================
+--- bash-4.4.orig/jobs.h
++++ bash-4.4/jobs.h
+@@ -190,6 +190,7 @@ extern JOB **jobs;
+ extern void making_children __P((void));
+ extern void stop_making_children __P((void));
+ extern void cleanup_the_pipeline __P((void));
++extern void discard_last_procsub_child __P((void));
+ extern void save_pipeline __P((int));
+ extern PROCESS *restore_pipeline __P((int));
+ extern void start_pipeline __P((void));
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 3
++#define PATCHLEVEL 4
+
+ #endif /* _PATCHLEVEL_H_ */
+Index: bash-4.4/subst.c
+===================================================================
+--- bash-4.4.orig/subst.c
++++ bash-4.4/subst.c
+@@ -5808,10 +5808,7 @@ process_substitute (string, open_for_rea
+ {
+ #if defined (JOB_CONTROL)
+ if (last_procsub_child)
+- {
+- discard_pipeline (last_procsub_child);
+- last_procsub_child = (PROCESS *)NULL;
+- }
++ discard_last_procsub_child ();
+ last_procsub_child = restore_pipeline (0);
+ #endif
+
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-005
-
-Bug-Reported-by: David Sines <dave.gma@googlemail.com>
-Bug-Reference-ID: <CAO3BAa_CK_Rgkhdfzs+NJ4KFYdB9qW3pvXQK0xLCi6GMmDU8bw@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html
-
-Bug-Description:
-
-When in Posix mode, bash did not correctly interpret the ANSI-C-style
-$'...' quoting mechanism when performing pattern substitution word
-expansions within double quotes.
-
-Patch (apply with `patch -p0'):
-
---- a/parse.y
-+++ b/parse.y
-@@ -3398,7 +3398,7 @@ parse_matched_pair (qc, open, close, len
- within a double-quoted ${...} construct "an even number of
- unescaped double-quotes or single-quotes, if any, shall occur." */
- /* This was changed in Austin Group Interp 221 */
-- if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
-+ if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
- continue;
-
- /* Could also check open == '`' if we want to parse grouping constructs
---- a/y.tab.c
-+++ b/y.tab.c
-@@ -5710,7 +5710,7 @@ parse_matched_pair (qc, open, close, len
- within a double-quoted ${...} construct "an even number of
- unescaped double-quotes or single-quotes, if any, shall occur." */
- /* This was changed in Austin Group Interp 221 */
-- if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
-+ if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
- continue;
-
- /* Could also check open == '`' if we want to parse grouping constructs
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 4
-+#define PATCHLEVEL 5
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/builtins/evalstring.c
+===================================================================
+--- bash-4.4.orig/builtins/evalstring.c
++++ bash-4.4/builtins/evalstring.c
+@@ -104,12 +104,9 @@ should_suppress_fork (command)
+ running_trap == 0 &&
+ *bash_input.location.string == '\0' &&
+ command->type == cm_simple &&
+-#if 0
+ signal_is_trapped (EXIT_TRAP) == 0 &&
+ signal_is_trapped (ERROR_TRAP) == 0 &&
+-#else
+ any_signals_trapped () < 0 &&
+-#endif
+ command->redirects == 0 && command->value.Simple->redirects == 0 &&
+ ((command->flags & CMD_TIME_PIPELINE) == 0) &&
+ ((command->flags & CMD_INVERT_RETURN) == 0));
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 4
++#define PATCHLEVEL 5
+
+ #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-006
-
-Bug-Reported-by: Eduardo A . Bustamante Lopez <dualbus@gmail.com>
-Bug-Reference-ID: <20140228170013.GA16015@dualbus.me>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html
-
-Bug-Description:
-
-A shell that started with job control active but was not interactive left
-the terminal in the wrong process group when exiting, causing its parent
-shell to get a stop signal when it attempted to read from the terminal.
-
-Patch (apply with `patch -p0'):
-
---- a/jobs.c
-+++ b/jobs.c
-@@ -4374,7 +4374,7 @@ without_job_control ()
- void
- end_job_control ()
- {
-- if (interactive_shell) /* XXX - should it be interactive? */
-+ if (interactive_shell || job_control) /* XXX - should it be just job_control? */
- {
- terminate_stopped_jobs ();
-
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 5
-+#define PATCHLEVEL 6
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/builtins/pushd.def
+===================================================================
+--- bash-4.4.orig/builtins/pushd.def
++++ bash-4.4/builtins/pushd.def
+@@ -365,7 +365,7 @@ popd_builtin (list)
+ break;
+ }
+
+- if (which > directory_list_offset || (directory_list_offset == 0 && which == 0))
++ if (which > directory_list_offset || (which < -directory_list_offset) || (directory_list_offset == 0 && which == 0))
+ {
+ pushd_error (directory_list_offset, which_word ? which_word : "");
+ return (EXECUTION_FAILURE);
+@@ -387,6 +387,11 @@ popd_builtin (list)
+ remove that directory from the list and shift the remainder
+ of the list into place. */
+ i = (direction == '+') ? directory_list_offset - which : which;
++ if (i < 0 || i > directory_list_offset)
++ {
++ pushd_error (directory_list_offset, which_word ? which_word : "");
++ return (EXECUTION_FAILURE);
++ }
+ free (pushd_directory_list[i]);
+ directory_list_offset--;
+
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 5
++#define PATCHLEVEL 6
+
+ #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-007
-
-Bug-Reported-by: geir.hauge@gmail.com
-Bug-Reference-ID: <20140318093650.B181C1C5B0B@gina.itea.ntnu.no>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00095.html
-
-Bug-Description:
-
-Using compound assignments for associative arrays like
-
-assoc=( [x]= [y]=bar )
-
-left the value corresponding to the key `x' NULL. This caused subsequent
-lookups to interpret it as unset.
-
-Patch (apply with `patch -p0'):
-
---- a/arrayfunc.c
-+++ b/arrayfunc.c
-@@ -597,6 +597,11 @@ assign_compound_array_list (var, nlist,
- if (assoc_p (var))
- {
- val = expand_assignment_string_to_string (val, 0);
-+ if (val == 0)
-+ {
-+ val = (char *)xmalloc (1);
-+ val[0] = '\0'; /* like do_assignment_internal */
-+ }
- free_val = 1;
- }
-
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 6
-+#define PATCHLEVEL 7
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/bashline.c
+===================================================================
+--- bash-4.4.orig/bashline.c
++++ bash-4.4/bashline.c
+@@ -142,7 +142,7 @@ static int executable_completion __P((co
+ static rl_icppfunc_t *save_directory_hook __P((void));
+ static void restore_directory_hook __P((rl_icppfunc_t));
+
+-static int directory_exists __P((const char *));
++static int directory_exists __P((const char *, int));
+
+ static void cleanup_expansion_error __P((void));
+ static void maybe_make_readline_line __P((char *));
+@@ -3102,18 +3102,20 @@ restore_directory_hook (hookf)
+ rl_directory_rewrite_hook = hookf;
+ }
+
+-/* Check whether not the (dequoted) version of DIRNAME, with any trailing slash
+- removed, exists. */
++/* Check whether not DIRNAME, with any trailing slash removed, exists. If
++ SHOULD_DEQUOTE is non-zero, we dequote the directory name first. */
+ static int
+-directory_exists (dirname)
++directory_exists (dirname, should_dequote)
+ const char *dirname;
++ int should_dequote;
+ {
+ char *new_dirname;
+ int dirlen, r;
+ struct stat sb;
+
+- /* First, dequote the directory name */
+- new_dirname = bash_dequote_filename ((char *)dirname, rl_completion_quote_character);
++ /* We save the string and chop the trailing slash because stat/lstat behave
++ inconsistently if one is present. */
++ new_dirname = should_dequote ? bash_dequote_filename ((char *)dirname, rl_completion_quote_character) : savestring (dirname);
+ dirlen = STRLEN (new_dirname);
+ if (new_dirname[dirlen - 1] == '/')
+ new_dirname[dirlen - 1] = '\0';
+@@ -3145,7 +3147,7 @@ bash_filename_stat_hook (dirname)
+ else if (t = mbschr (local_dirname, '`')) /* XXX */
+ should_expand_dirname = '`';
+
+- if (should_expand_dirname && directory_exists (local_dirname))
++ if (should_expand_dirname && directory_exists (local_dirname, 0))
+ should_expand_dirname = 0;
+
+ if (should_expand_dirname)
+@@ -3155,7 +3157,7 @@ bash_filename_stat_hook (dirname)
+ have to worry about restoring this setting. */
+ global_nounset = unbound_vars_is_error;
+ unbound_vars_is_error = 0;
+- wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */
++ wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */
+ unbound_vars_is_error = global_nounset;
+ if (wl)
+ {
+@@ -3244,13 +3246,13 @@ bash_directory_completion_hook (dirname)
+ should_expand_dirname = '`';
+ }
+
+- if (should_expand_dirname && directory_exists (local_dirname))
++ if (should_expand_dirname && directory_exists (local_dirname, 1))
+ should_expand_dirname = 0;
+
+ if (should_expand_dirname)
+ {
+ new_dirname = savestring (local_dirname);
+- wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */
++ wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */
+ if (wl)
+ {
+ *dirname = string_list (wl);
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 6
++#define PATCHLEVEL 7
+
+ #endif /* _PATCHLEVEL_H_ */
+Index: bash-4.4/subst.c
+===================================================================
+--- bash-4.4.orig/subst.c
++++ bash-4.4/subst.c
+@@ -9458,6 +9458,10 @@ add_twochars:
+ tword->flags |= word->flags & (W_ASSIGNARG|W_ASSIGNRHS); /* affects $@ */
+ if (word->flags & W_COMPLETE)
+ tword->flags |= W_COMPLETE; /* for command substitutions */
++ if (word->flags & W_NOCOMSUB)
++ tword->flags |= W_NOCOMSUB;
++ if (word->flags & W_NOPROCSUB)
++ tword->flags |= W_NOPROCSUB;
+
+ temp = (char *)NULL;
+
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-008
-
-Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
-Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html
-
-Bug-Description:
-
-Some extended glob patterns incorrectly matched filenames with a leading
-dot, regardless of the setting of the `dotglob' option.
-
-Patch (apply with `patch -p0'):
-
---- a/lib/glob/gmisc.c
-+++ b/lib/glob/gmisc.c
-@@ -210,6 +210,7 @@ extglob_pattern_p (pat)
- case '+':
- case '!':
- case '@':
-+ case '?':
- return (pat[1] == LPAREN);
- default:
- return 0;
---- a/lib/glob/glob.c
-+++ b/lib/glob/glob.c
-@@ -179,42 +179,50 @@ extglob_skipname (pat, dname, flags)
- char *pat, *dname;
- int flags;
- {
-- char *pp, *pe, *t;
-- int n, r;
-+ char *pp, *pe, *t, *se;
-+ int n, r, negate;
-
-+ negate = *pat == '!';
- pp = pat + 2;
-- pe = pp + strlen (pp) - 1; /*(*/
-- if (*pe != ')')
-- return 0;
-- if ((t = strchr (pp, '|')) == 0) /* easy case first */
-+ se = pp + strlen (pp) - 1; /* end of string */
-+ pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
-+ /* we should check for invalid extglob pattern here */
-+ /* if pe != se we have more of the pattern at the end of the extglob
-+ pattern. Check the easy case first ( */
-+ if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
- {
- *pe = '\0';
-+#if defined (HANDLE_MULTIBYTE)
-+ r = mbskipname (pp, dname, flags);
-+#else
- r = skipname (pp, dname, flags); /*(*/
-+#endif
- *pe = ')';
- return r;
- }
-+
-+ /* check every subpattern */
- while (t = glob_patscan (pp, pe, '|'))
- {
- n = t[-1];
- t[-1] = '\0';
-+#if defined (HANDLE_MULTIBYTE)
-+ r = mbskipname (pp, dname, flags);
-+#else
- r = skipname (pp, dname, flags);
-+#endif
- t[-1] = n;
- if (r == 0) /* if any pattern says not skip, we don't skip */
- return r;
- pp = t;
- } /*(*/
-
-- if (pp == pe) /* glob_patscan might find end of pattern */
-+ /* glob_patscan might find end of pattern */
-+ if (pp == se)
- return r;
-
-- *pe = '\0';
--# if defined (HANDLE_MULTIBYTE)
-- r = mbskipname (pp, dname, flags); /*(*/
--# else
-- r = skipname (pp, dname, flags); /*(*/
--# endif
-- *pe = ')';
-- return r;
-+ /* but if it doesn't then we didn't match a leading dot */
-+ return 0;
- }
- #endif
-
-@@ -277,20 +285,23 @@ wextglob_skipname (pat, dname, flags)
- int flags;
- {
- #if EXTENDED_GLOB
-- wchar_t *pp, *pe, *t, n;
-- int r;
-+ wchar_t *pp, *pe, *t, n, *se;
-+ int r, negate;
-
-+ negate = *pat == L'!';
- pp = pat + 2;
-- pe = pp + wcslen (pp) - 1; /*(*/
-- if (*pe != L')')
-- return 0;
-- if ((t = wcschr (pp, L'|')) == 0)
-+ se = pp + wcslen (pp) - 1; /*(*/
-+ pe = glob_patscan_wc (pp, se, 0);
-+
-+ if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
- {
- *pe = L'\0';
- r = wchkname (pp, dname); /*(*/
- *pe = L')';
- return r;
- }
-+
-+ /* check every subpattern */
- while (t = glob_patscan_wc (pp, pe, '|'))
- {
- n = t[-1];
-@@ -305,10 +316,8 @@ wextglob_skipname (pat, dname, flags)
- if (pp == pe) /* glob_patscan_wc might find end of pattern */
- return r;
-
-- *pe = L'\0';
-- r = wchkname (pp, dname); /*(*/
-- *pe = L')';
-- return r;
-+ /* but if it doesn't then we didn't match a leading dot */
-+ return 0;
- #else
- return (wchkname (pat, dname));
- #endif
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 7
-+#define PATCHLEVEL 8
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/expr.c
+===================================================================
+--- bash-4.4.orig/expr.c
++++ bash-4.4/expr.c
+@@ -578,24 +578,23 @@ expcond ()
+ rval = cval = explor ();
+ if (curtok == QUES) /* found conditional expr */
+ {
+- readtok ();
+- if (curtok == 0 || curtok == COL)
+- evalerror (_("expression expected"));
+ if (cval == 0)
+ {
+ set_noeval = 1;
+ noeval++;
+ }
+
++ readtok ();
++ if (curtok == 0 || curtok == COL)
++ evalerror (_("expression expected"));
++
+ val1 = EXP_HIGHEST ();
+
+ if (set_noeval)
+ noeval--;
+ if (curtok != COL)
+ evalerror (_("`:' expected for conditional expression"));
+- readtok ();
+- if (curtok == 0)
+- evalerror (_("expression expected"));
++
+ set_noeval = 0;
+ if (cval)
+ {
+@@ -603,7 +602,11 @@ expcond ()
+ noeval++;
+ }
+
++ readtok ();
++ if (curtok == 0)
++ evalerror (_("expression expected"));
+ val2 = expcond ();
++
+ if (set_noeval)
+ noeval--;
+ rval = cval ? val1 : val2;
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 7
++#define PATCHLEVEL 8
+
+ #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-009
-
-Bug-Reported-by: Matthias Klose <doko@debian.org>
-Bug-Reference-ID: <53346FC8.6090005@debian.org>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00171.html
-
-Bug-Description:
-
-There is a problem with unsigned sign extension when attempting to reallocate
-the input line when it is fewer than 3 characters long and there has been a
-history expansion. The sign extension causes the shell to not reallocate the
-line, which results in a segmentation fault when it writes past the end.
-
-Patch (apply with `patch -p0'):
-
---- a/parse.y
-+++ b/parse.y
-@@ -2424,7 +2424,7 @@ shell_getc (remove_quoted_newline)
- not already end in an EOF character. */
- if (shell_input_line_terminator != EOF)
- {
-- if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
-+ if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
- shell_input_line = (char *)xrealloc (shell_input_line,
- 1 + (shell_input_line_size += 2));
-
---- a/y.tab.c
-+++ b/y.tab.c
-@@ -4736,7 +4736,7 @@ shell_getc (remove_quoted_newline)
- not already end in an EOF character. */
- if (shell_input_line_terminator != EOF)
- {
-- if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
-+ if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
- shell_input_line = (char *)xrealloc (shell_input_line,
- 1 + (shell_input_line_size += 2));
-
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 8
-+#define PATCHLEVEL 9
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/lib/readline/history.c
+===================================================================
+--- bash-4.4.orig/lib/readline/history.c
++++ bash-4.4/lib/readline/history.c
+@@ -279,6 +279,7 @@ add_history (string)
+ const char *string;
+ {
+ HIST_ENTRY *temp;
++ int new_length;
+
+ if (history_stifled && (history_length == history_max_entries))
+ {
+@@ -295,13 +296,9 @@ add_history (string)
+
+ /* Copy the rest of the entries, moving down one slot. Copy includes
+ trailing NULL. */
+-#if 0
+- for (i = 0; i < history_length; i++)
+- the_history[i] = the_history[i + 1];
+-#else
+ memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *));
+-#endif
+
++ new_length = history_length;
+ history_base++;
+ }
+ else
+@@ -315,7 +312,7 @@ add_history (string)
+ else
+ history_size = DEFAULT_HISTORY_INITIAL_SIZE;
+ the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
+- history_length = 1;
++ new_length = 1;
+ }
+ else
+ {
+@@ -325,14 +322,15 @@ add_history (string)
+ the_history = (HIST_ENTRY **)
+ xrealloc (the_history, history_size * sizeof (HIST_ENTRY *));
+ }
+- history_length++;
++ new_length = history_length + 1;
+ }
+ }
+
+ temp = alloc_history_entry ((char *)string, hist_inittime ());
+
+- the_history[history_length] = (HIST_ENTRY *)NULL;
+- the_history[history_length - 1] = temp;
++ the_history[new_length] = (HIST_ENTRY *)NULL;
++ the_history[new_length - 1] = temp;
++ history_length = new_length;
+ }
+
+ /* Change the time stamp of the most recent history entry to STRING. */
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 8
++#define PATCHLEVEL 9
+
+ #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-010
-
-Bug-Reported-by: Albert Shih <Albert.Shih@obspm.fr>
-Bug-Reference-ID: Wed, 5 Mar 2014 23:01:40 +0100
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html
-
-Bug-Description:
-
-Patch (apply with `patch -p0'):
-
-This patch changes the behavior of programmable completion to compensate
-for two assumptions made by the bash-completion package. Bash-4.3 changed
-to dequote the argument to programmable completion only under certain
-circumstances, to make the behavior of compgen more consistent when run
-from the command line -- closer to the behavior when run by a shell function
-run as part of programmable completion. Bash-completion can pass quoted
-arguments to compgen when the original word to be completed was not quoted,
-expecting programmable completion to dequote the word before attempting
-completion.
-
-This patch fixes two cases:
-
-1. An empty string that bash-completion passes to compgen as a quoted null
- string ('').
-
-2. An unquoted word that bash-completion quotes using single quotes or
- backslashes before passing it to compgen.
-
-In these cases, since readline did not detect a quote character in the original
-word to be completed, bash-4.3
-
---- a/externs.h
-+++ b/externs.h
-@@ -324,6 +324,7 @@ extern char *sh_un_double_quote __P((cha
- extern char *sh_backslash_quote __P((char *, const char *, int));
- extern char *sh_backslash_quote_for_double_quotes __P((char *));
- extern int sh_contains_shell_metas __P((char *));
-+extern int sh_contains_quotes __P((char *));
-
- /* declarations for functions defined in lib/sh/spell.c */
- extern int spname __P((char *, char *));
---- a/lib/sh/shquote.c
-+++ b/lib/sh/shquote.c
-@@ -311,3 +311,17 @@ sh_contains_shell_metas (string)
-
- return (0);
- }
-+
-+int
-+sh_contains_quotes (string)
-+ char *string;
-+{
-+ char *s;
-+
-+ for (s = string; s && *s; s++)
-+ {
-+ if (*s == '\'' || *s == '"' || *s == '\\')
-+ return 1;
-+ }
-+ return 0;
-+}
---- a/pcomplete.c
-+++ b/pcomplete.c
-@@ -183,6 +183,7 @@ ITEMLIST it_variables = { LIST_DYNAMIC,
-
- COMPSPEC *pcomp_curcs;
- const char *pcomp_curcmd;
-+const char *pcomp_curtxt;
-
- #ifdef DEBUG
- /* Debugging code */
-@@ -753,6 +754,32 @@ pcomp_filename_completion_function (text
- quoted strings. */
- dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
- }
-+ /* Intended to solve a mismatched assumption by bash-completion. If
-+ the text to be completed is empty, but bash-completion turns it into
-+ a quoted string ('') assuming that this code will dequote it before
-+ calling readline, do the dequoting. */
-+ else if (iscompgen && iscompleting &&
-+ pcomp_curtxt && *pcomp_curtxt == 0 &&
-+ text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 &&
-+ rl_filename_dequoting_function)
-+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
-+ /* Another mismatched assumption by bash-completion. If compgen is being
-+ run as part of bash-completion, and the argument to compgen is not
-+ the same as the word originally passed to the programmable completion
-+ code, dequote the argument if it has quote characters. It's an
-+ attempt to detect when bash-completion is quoting its filename
-+ argument before calling compgen. */
-+ /* We could check whether gen_shell_function_matches is in the call
-+ stack by checking whether the gen-shell-function-matches tag is in
-+ the unwind-protect stack, but there's no function to do that yet.
-+ We could simply check whether we're executing in a function by
-+ checking variable_context, and may end up doing that. */
-+ else if (iscompgen && iscompleting && rl_filename_dequoting_function &&
-+ pcomp_curtxt && text &&
-+ STREQ (pcomp_curtxt, text) == 0 &&
-+ variable_context &&
-+ sh_contains_quotes (text)) /* guess */
-+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
- else
- dfn = savestring (text);
- }
-@@ -1522,7 +1549,7 @@ gen_progcomp_completions (ocmd, cmd, wor
- COMPSPEC **lastcs;
- {
- COMPSPEC *cs, *oldcs;
-- const char *oldcmd;
-+ const char *oldcmd, *oldtxt;
- STRINGLIST *ret;
-
- cs = progcomp_search (ocmd);
-@@ -1545,14 +1572,17 @@ gen_progcomp_completions (ocmd, cmd, wor
-
- oldcs = pcomp_curcs;
- oldcmd = pcomp_curcmd;
-+ oldtxt = pcomp_curtxt;
-
- pcomp_curcs = cs;
- pcomp_curcmd = cmd;
-+ pcomp_curtxt = word;
-
- ret = gen_compspec_completions (cs, cmd, word, start, end, foundp);
-
- pcomp_curcs = oldcs;
- pcomp_curcmd = oldcmd;
-+ pcomp_curtxt = oldtxt;
-
- /* We need to conditionally handle setting *retryp here */
- if (retryp)
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 9
-+#define PATCHLEVEL 10
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/builtins/read.def
+===================================================================
+--- bash-4.4.orig/builtins/read.def
++++ bash-4.4/builtins/read.def
+@@ -181,7 +181,8 @@ read_builtin (list)
+ WORD_LIST *list;
+ {
+ register char *varname;
+- int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
++ int size, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
++ volatile int i;
+ int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul;
+ int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, t_errno;
+ unsigned int tmsec, tmusec;
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 9
++#define PATCHLEVEL 10
+
+ #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-011
-
-Bug-Reported-by: Egmont Koblinger <egmont@gmail.com>
-Bug-Reference-ID: <CAGWcZk+bU5Jo1M+tutGvL-250UBE9DXjpeJVofYJSFcqFEVfMg@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html
-
-Bug-Description:
-
-The signal handling changes to bash and readline (to avoid running any code
-in a signal handler context) cause the cursor to be placed on the wrong
-line of a multi-line command after a ^C interrupts editing.
-
-Patch (apply with `patch -p0'):
-
---- a/lib/readline/display.c
-+++ b/lib/readline/display.c
-@@ -2677,7 +2677,8 @@ _rl_clean_up_for_exit ()
- {
- if (_rl_echoing_p)
- {
-- _rl_move_vert (_rl_vis_botlin);
-+ if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */
-+ _rl_move_vert (_rl_vis_botlin);
- _rl_vis_botlin = 0;
- fflush (rl_outstream);
- rl_restart_output (1, 0);
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 10
-+#define PATCHLEVEL 11
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 10
++#define PATCHLEVEL 11
+
+ #endif /* _PATCHLEVEL_H_ */
+Index: bash-4.4/sig.c
+===================================================================
+--- bash-4.4.orig/sig.c
++++ bash-4.4/sig.c
+@@ -585,7 +585,8 @@ termsig_handler (sig)
+ #if defined (JOB_CONTROL)
+ if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB))))
+ hangup_all_jobs ();
+- end_job_control ();
++ if ((subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)) == 0)
++ end_job_control ();
+ #endif /* JOB_CONTROL */
+
+ #if defined (PROCESS_SUBSTITUTION)
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-012
-
-Bug-Reported-by: Eduardo A. Bustamante López<dualbus@gmail.com>
-Bug-Reference-ID: <5346B54C.4070205@case.edu>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00051.html
-
-Bug-Description:
-
-When a SIGCHLD trap runs a command containing a shell builtin while
-a script is running `wait' to wait for all running children to complete,
-the SIGCHLD trap will not be run once for each child that terminates.
-
-Patch (apply with `patch -p0'):
-
---- a/jobs.c
-+++ b/jobs.c
-@@ -3597,6 +3597,7 @@ run_sigchld_trap (nchild)
- unwind_protect_int (jobs_list_frozen);
- unwind_protect_pointer (the_pipeline);
- unwind_protect_pointer (subst_assign_varlist);
-+ unwind_protect_pointer (this_shell_builtin);
-
- /* We have to add the commands this way because they will be run
- in reverse order of adding. We don't want maybe_set_sigchld_trap ()
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 11
-+#define PATCHLEVEL 12
-
- #endif /* _PATCHLEVEL_H_ */
--- /dev/null
+Index: bash-4.4/patchlevel.h
+===================================================================
+--- bash-4.4.orig/patchlevel.h
++++ bash-4.4/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 11
++#define PATCHLEVEL 12
+
+ #endif /* _PATCHLEVEL_H_ */
+Index: bash-4.4/subst.c
+===================================================================
+--- bash-4.4.orig/subst.c
++++ bash-4.4/subst.c
+@@ -2825,11 +2825,15 @@ list_string (string, separators, quoted)
+
+ /* Parse a single word from STRING, using SEPARATORS to separate fields.
+ ENDPTR is set to the first character after the word. This is used by
+- the `read' builtin. This is never called with SEPARATORS != $IFS;
+- it should be simplified.
++ the `read' builtin.
++
++ This is never called with SEPARATORS != $IFS, and takes advantage of that.
+
+ XXX - this function is very similar to list_string; they should be
+ combined - XXX */
++
++#define islocalsep(c) (local_cmap[(unsigned char)(c)] != 0)
++
+ char *
+ get_word_from_string (stringp, separators, endptr)
+ char **stringp, *separators, **endptr;
+@@ -2837,6 +2841,7 @@ get_word_from_string (stringp, separator
+ register char *s;
+ char *current_word;
+ int sindex, sh_style_split, whitesep, xflags;
++ unsigned char local_cmap[UCHAR_MAX+1]; /* really only need single-byte chars here */
+ size_t slen;
+
+ if (!stringp || !*stringp || !**stringp)
+@@ -2846,20 +2851,23 @@ get_word_from_string (stringp, separator
+ separators[1] == '\t' &&
+ separators[2] == '\n' &&
+ separators[3] == '\0';
+- for (xflags = 0, s = ifs_value; s && *s; s++)
++ memset (local_cmap, '\0', sizeof (local_cmap));
++ for (xflags = 0, s = separators; s && *s; s++)
+ {
+ if (*s == CTLESC) xflags |= SX_NOCTLESC;
+ if (*s == CTLNUL) xflags |= SX_NOESCCTLNUL;
++ local_cmap[(unsigned char)*s] = 1; /* local charmap of separators */
+ }
+
+ s = *stringp;
+ slen = 0;
+
+ /* Remove sequences of whitespace at the beginning of STRING, as
+- long as those characters appear in IFS. */
+- if (sh_style_split || !separators || !*separators)
++ long as those characters appear in SEPARATORS. This happens if
++ SEPARATORS == $' \t\n' or if IFS is unset. */
++ if (sh_style_split || separators == 0)
+ {
+- for (; *s && spctabnl (*s) && isifs (*s); s++);
++ for (; *s && spctabnl (*s) && islocalsep (*s); s++);
+
+ /* If the string is nothing but whitespace, update it and return. */
+ if (!*s)
+@@ -2878,9 +2886,9 @@ get_word_from_string (stringp, separator
+
+ This obeys the field splitting rules in Posix.2. */
+ sindex = 0;
+- /* Don't need string length in ADVANCE_CHAR or string_extract_verbatim
+- unless multibyte chars are possible. */
+- slen = (MB_CUR_MAX > 1) ? STRLEN (s) : 1;
++ /* Don't need string length in ADVANCE_CHAR unless multibyte chars are
++ possible, but need it in string_extract_verbatim for bounds checking */
++ slen = STRLEN (s);
+ current_word = string_extract_verbatim (s, slen, &sindex, separators, xflags);
+
+ /* Set ENDPTR to the first character after the end of the word. */
+@@ -2899,19 +2907,19 @@ get_word_from_string (stringp, separator
+
+ /* Now skip sequences of space, tab, or newline characters if they are
+ in the list of separators. */
+- while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex]))
++ while (s[sindex] && spctabnl (s[sindex]) && islocalsep (s[sindex]))
+ sindex++;
+
+ /* If the first separator was IFS whitespace and the current character is
+ a non-whitespace IFS character, it should be part of the current field
+ delimiter, not a separate delimiter that would result in an empty field.
+ Look at POSIX.2, 3.6.5, (3)(b). */
+- if (s[sindex] && whitesep && isifs (s[sindex]) && !spctabnl (s[sindex]))
++ if (s[sindex] && whitesep && islocalsep (s[sindex]) && !spctabnl (s[sindex]))
+ {
+ sindex++;
+ /* An IFS character that is not IFS white space, along with any adjacent
+ IFS white space, shall delimit a field. */
+- while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex]))
++ while (s[sindex] && spctabnl (s[sindex]) && islocalsep(s[sindex]))
+ sindex++;
+ }
+
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-013
-
-Bug-Reported-by: <Trond.Endrestol@ximalas.info>
-Bug-Reference-ID: <alpine.BSF.2.03.1404192114310.1973@enterprise.ximalas.info>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html
-
-Bug-Description:
-
-Using reverse-i-search when horizontal scrolling is enabled does not redisplay
-the entire line containing the successful search results.
-
-Patch (apply with `patch -p0'):
---- a/lib/readline/display.c
-+++ b/lib/readline/display.c
-@@ -1637,7 +1637,7 @@ update_line (old, new, current_line, oma
- /* If we are changing the number of invisible characters in a line, and
- the spot of first difference is before the end of the invisible chars,
- lendiff needs to be adjusted. */
-- if (current_line == 0 && !_rl_horizontal_scroll_mode &&
-+ if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */
- current_invis_chars != visible_wrap_offset)
- {
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-@@ -1825,8 +1825,13 @@ update_line (old, new, current_line, oma
- else
- _rl_last_c_pos += bytes_to_insert;
-
-+ /* XXX - we only want to do this if we are at the end of the line
-+ so we move there with _rl_move_cursor_relative */
- if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
-- goto clear_rest_of_line;
-+ {
-+ _rl_move_cursor_relative (ne-new, new);
-+ goto clear_rest_of_line;
-+ }
- }
- }
- /* Otherwise, print over the existing material. */
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 12
-+#define PATCHLEVEL 13
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-014
-
-Bug-Reported-by: Greg Wooledge <wooledg@eeg.ccf.org>
-Bug-Reference-ID: <20140418202123.GB7660@eeg.ccf.org>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html
-
-Bug-Description:
-
-Under certain circumstances, $@ is expanded incorrectly in contexts where
-word splitting is not performed.
-
-Patch (apply with `patch -p0'):
---- a/subst.c
-+++ b/subst.c
-@@ -3248,8 +3248,10 @@ cond_expand_word (w, special)
- if (w->word == 0 || w->word[0] == '\0')
- return ((char *)NULL);
-
-+ expand_no_split_dollar_star = 1;
- w->flags |= W_NOSPLIT2;
- l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0);
-+ expand_no_split_dollar_star = 0;
- if (l)
- {
- if (special == 0) /* LHS */
-@@ -7847,6 +7849,10 @@ param_expand (string, sindex, quoted, ex
- We also want to make sure that splitting is done no matter what --
- according to POSIX.2, this expands to a list of the positional
- parameters no matter what IFS is set to. */
-+ /* XXX - what to do when in a context where word splitting is not
-+ performed? Even when IFS is not the default, posix seems to imply
-+ that we behave like unquoted $* ? Maybe we should use PF_NOSPLIT2
-+ here. */
- temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted);
-
- tflag |= W_DOLLARAT;
-@@ -8816,6 +8822,7 @@ finished_with_string:
- else
- {
- char *ifs_chars;
-+ char *tstring;
-
- ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL;
-
-@@ -8830,11 +8837,36 @@ finished_with_string:
- regardless of what else has happened to IFS since the expansion. */
- if (split_on_spaces)
- list = list_string (istring, " ", 1); /* XXX quoted == 1? */
-+ /* If we have $@ (has_dollar_at != 0) and we are in a context where we
-+ don't want to split the result (W_NOSPLIT2), and we are not quoted,
-+ we have already separated the arguments with the first character of
-+ $IFS. In this case, we want to return a list with a single word
-+ with the separator possibly replaced with a space (it's what other
-+ shells seem to do).
-+ quoted_dollar_at is internal to this function and is set if we are
-+ passed an argument that is unquoted (quoted == 0) but we encounter a
-+ double-quoted $@ while expanding it. */
-+ else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2))
-+ {
-+ /* Only split and rejoin if we have to */
-+ if (*ifs_chars && *ifs_chars != ' ')
-+ {
-+ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
-+ tstring = string_list (list);
-+ }
-+ else
-+ tstring = istring;
-+ tword = make_bare_word (tstring);
-+ if (tstring != istring)
-+ free (tstring);
-+ goto set_word_flags;
-+ }
- else if (has_dollar_at && ifs_chars)
- list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
- else
- {
- tword = make_bare_word (istring);
-+set_word_flags:
- if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED))
- tword->flags |= W_QUOTED;
- if (word->flags & W_ASSIGNMENT)
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 13
-+#define PATCHLEVEL 14
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-015
-
-Bug-Reported-by: Clark Wang <dearvoid@gmail.com>
-Bug-Reference-ID: <CADv8-og2TOSoabXeNVXVGaXN3tEMHnYVq1rwOLe5meaRPSGRig@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00095.html
-
-Bug-Description:
-
-When completing directory names, the directory name is dequoted twice.
-This causes problems for directories with single and double quotes in
-their names.
-
-Patch (apply with `patch -p0'):
---- a/bashline.c
-+++ b/bashline.c
-@@ -4167,9 +4167,16 @@ bash_directory_completion_matches (text)
- int qc;
-
- qc = rl_dispatching ? rl_completion_quote_character : 0;
-- dfn = bash_dequote_filename ((char *)text, qc);
-+ /* If rl_completion_found_quote != 0, rl_completion_matches will call the
-+ filename dequoting function, causing the directory name to be dequoted
-+ twice. */
-+ if (rl_dispatching && rl_completion_found_quote == 0)
-+ dfn = bash_dequote_filename ((char *)text, qc);
-+ else
-+ dfn = (char *)text;
- m1 = rl_completion_matches (dfn, rl_filename_completion_function);
-- free (dfn);
-+ if (dfn != text)
-+ free (dfn);
-
- if (m1 == 0 || m1[0] == 0)
- return m1;
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 14
-+#define PATCHLEVEL 15
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-016
-
-Bug-Reported-by: Pierre Gaston <pierre.gaston@gmail.com>
-Bug-Reference-ID: <CAPSX3sTCD61k1VQLJ5r-LWzEt+e7Xc-fxXmwn2u8EA5gJJej8Q@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html
-
-Bug-Description:
-
-An extended glob pattern containing a slash (`/') causes the globbing code
-to misinterpret it as a directory separator.
-
-Patch (apply with `patch -p0'):
---- a/lib/glob/glob.c
-+++ b/lib/glob/glob.c
-@@ -123,6 +123,8 @@ static char **glob_dir_to_array __P((cha
- extern char *glob_patscan __P((char *, char *, int));
- extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int));
-
-+extern char *glob_dirscan __P((char *, int));
-+
- /* Compile `glob_loop.c' for single-byte characters. */
- #define CHAR unsigned char
- #define INT int
-@@ -187,6 +189,9 @@ extglob_skipname (pat, dname, flags)
- se = pp + strlen (pp) - 1; /* end of string */
- pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
- /* we should check for invalid extglob pattern here */
-+ if (pe == 0)
-+ return 0;
-+
- /* if pe != se we have more of the pattern at the end of the extglob
- pattern. Check the easy case first ( */
- if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
-@@ -1015,7 +1020,7 @@ glob_filename (pathname, flags)
- {
- char **result;
- unsigned int result_size;
-- char *directory_name, *filename, *dname;
-+ char *directory_name, *filename, *dname, *fn;
- unsigned int directory_len;
- int free_dirname; /* flag */
- int dflags;
-@@ -1031,6 +1036,18 @@ glob_filename (pathname, flags)
-
- /* Find the filename. */
- filename = strrchr (pathname, '/');
-+#if defined (EXTENDED_GLOB)
-+ if (filename && extended_glob)
-+ {
-+ fn = glob_dirscan (pathname, '/');
-+#if DEBUG_MATCHING
-+ if (fn != filename)
-+ fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename);
-+#endif
-+ filename = fn;
-+ }
-+#endif
-+
- if (filename == NULL)
- {
- filename = pathname;
---- a/lib/glob/gmisc.c
-+++ b/lib/glob/gmisc.c
-@@ -42,6 +42,8 @@
- #define WLPAREN L'('
- #define WRPAREN L')'
-
-+extern char *glob_patscan __P((char *, char *, int));
-+
- /* Return 1 of the first character of WSTRING could match the first
- character of pattern WPAT. Wide character version. */
- int
-@@ -375,3 +377,34 @@ bad_bracket:
-
- return matlen;
- }
-+
-+/* Skip characters in PAT and return the final occurrence of DIRSEP. This
-+ is only called when extended_glob is set, so we have to skip over extglob
-+ patterns x(...) */
-+char *
-+glob_dirscan (pat, dirsep)
-+ char *pat;
-+ int dirsep;
-+{
-+ char *p, *d, *pe, *se;
-+
-+ d = pe = se = 0;
-+ for (p = pat; p && *p; p++)
-+ {
-+ if (extglob_pattern_p (p))
-+ {
-+ if (se == 0)
-+ se = p + strlen (p) - 1;
-+ pe = glob_patscan (p + 2, se, 0);
-+ if (pe == 0)
-+ continue;
-+ else if (*pe == 0)
-+ break;
-+ p = pe - 1; /* will do increment above */
-+ continue;
-+ }
-+ if (*p == dirsep)
-+ d = p;
-+ }
-+ return d;
-+}
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 15
-+#define PATCHLEVEL 16
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-017
-
-Bug-Reported-by: Dan Douglas <ormaaj@gmail.com>
-Bug-Reference-ID: <7781746.RhfoTROLxF@smorgbox>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00026.html
-
-Bug-Description:
-
-The code that creates local variables should not clear the `invisible'
-attribute when returning an existing local variable. Let the code that
-actually assigns a value clear it.
-
-Patch (apply with `patch -p0'):
---- a/variables.c
-+++ b/variables.c
-@@ -2197,10 +2197,7 @@ make_local_variable (name)
- /* local foo; local foo; is a no-op. */
- old_var = find_variable (name);
- if (old_var && local_p (old_var) && old_var->context == variable_context)
-- {
-- VUNSETATTR (old_var, att_invisible); /* XXX */
-- return (old_var);
-- }
-+ return (old_var);
-
- was_tmpvar = old_var && tempvar_p (old_var);
- /* If we're making a local variable in a shell function, the temporary env
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 16
-+#define PATCHLEVEL 17
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-018
-
-Bug-Reported-by: Geir Hauge <geir.hauge@gmail.com>
-Bug-Reference-ID: <CAO-BiTLOvfPXDypg61jcBausADrxUKJejakV2WTWP26cW0=rgA@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00040.html
-
-Bug-Description:
-
-When assigning an array variable using the compound assignment syntax,
-but using `declare' with the rhs of the compound assignment quoted, the
-shell did not mark the variable as visible after successfully performing
-the assignment.
-
-Patch (apply with `patch -p0'):
---- a/arrayfunc.c
-+++ b/arrayfunc.c
-@@ -179,6 +179,7 @@ bind_array_var_internal (entry, ind, key
- array_insert (array_cell (entry), ind, newval);
- FREE (newval);
-
-+ VUNSETATTR (entry, att_invisible); /* no longer invisible */
- return (entry);
- }
-
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 17
-+#define PATCHLEVEL 18
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-019
-
-Bug-Reported-by: John Lenton
-Bug-Reference-ID:
-Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476
-
-Bug-Description:
-
-The -t timeout option to `read' does not work when the -e option is used.
-
-Patch (apply with `patch -p0'):
-
---- a/lib/readline/input.c
-+++ b/lib/readline/input.c
-@@ -534,8 +534,16 @@ rl_getc (stream)
- return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
- else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM)
- return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
-+ /* keyboard-generated signals of interest */
- else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT)
- RL_CHECK_SIGNALS ();
-+ /* non-keyboard-generated signals of interest */
-+ else if (_rl_caught_signal == SIGALRM
-+#if defined (SIGVTALRM)
-+ || _rl_caught_signal == SIGVTALRM
-+#endif
-+ )
-+ RL_CHECK_SIGNALS ();
-
- if (rl_signal_event_hook)
- (*rl_signal_event_hook) ();
---- a/builtins/read.def
-+++ b/builtins/read.def
-@@ -442,7 +442,10 @@ read_builtin (list)
- add_unwind_protect (reset_alarm, (char *)NULL);
- #if defined (READLINE)
- if (edit)
-- add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
-+ {
-+ add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
-+ add_unwind_protect (bashline_reset_event_hook, (char *)NULL);
-+ }
- #endif
- falarm (tmsec, tmusec);
- }
-@@ -1021,6 +1024,7 @@ edit_line (p, itext)
-
- old_attempted_completion_function = rl_attempted_completion_function;
- rl_attempted_completion_function = (rl_completion_func_t *)NULL;
-+ bashline_set_event_hook ();
- if (itext)
- {
- old_startup_hook = rl_startup_hook;
-@@ -1032,6 +1036,7 @@ edit_line (p, itext)
-
- rl_attempted_completion_function = old_attempted_completion_function;
- old_attempted_completion_function = (rl_completion_func_t *)NULL;
-+ bashline_reset_event_hook ();
-
- if (ret == 0)
- return ret;
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 18
-+#define PATCHLEVEL 19
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-020
-
-Bug-Reported-by: Jared Yanovich <slovichon@gmail.com>
-Bug-Reference-ID: <20140417073654.GB26875@nightderanger.psc.edu>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00065.html
-
-Bug-Description:
-
-When PS2 contains a command substitution, here-documents entered in an
-interactive shell can sometimes cause a segmentation fault.
-
-Patch (apply with `patch -p0'):
-
---- a/shell.h
-+++ b/shell.h
-@@ -168,7 +168,8 @@ typedef struct _sh_parser_state_t {
- /* flags state affecting the parser */
- int expand_aliases;
- int echo_input_at_read;
--
-+ int need_here_doc;
-+
- } sh_parser_state_t;
-
- typedef struct _sh_input_line_state_t {
---- a/parse.y
-+++ b/parse.y
-@@ -2642,7 +2642,7 @@ gather_here_documents ()
- int r;
-
- r = 0;
-- while (need_here_doc)
-+ while (need_here_doc > 0)
- {
- parser_state |= PST_HEREDOC;
- make_here_document (redir_stack[r++], line_number);
-@@ -6075,6 +6075,7 @@ save_parser_state (ps)
-
- ps->expand_aliases = expand_aliases;
- ps->echo_input_at_read = echo_input_at_read;
-+ ps->need_here_doc = need_here_doc;
-
- ps->token = token;
- ps->token_buffer_size = token_buffer_size;
-@@ -6123,6 +6124,7 @@ restore_parser_state (ps)
-
- expand_aliases = ps->expand_aliases;
- echo_input_at_read = ps->echo_input_at_read;
-+ need_here_doc = ps->need_here_doc;
-
- FREE (token);
- token = ps->token;
---- a/y.tab.c
-+++ b/y.tab.c
-@@ -4954,7 +4954,7 @@ gather_here_documents ()
- int r;
-
- r = 0;
-- while (need_here_doc)
-+ while (need_here_doc > 0)
- {
- parser_state |= PST_HEREDOC;
- make_here_document (redir_stack[r++], line_number);
-@@ -8387,6 +8387,7 @@ save_parser_state (ps)
-
- ps->expand_aliases = expand_aliases;
- ps->echo_input_at_read = echo_input_at_read;
-+ ps->need_here_doc = need_here_doc;
-
- ps->token = token;
- ps->token_buffer_size = token_buffer_size;
-@@ -8435,6 +8436,7 @@ restore_parser_state (ps)
-
- expand_aliases = ps->expand_aliases;
- echo_input_at_read = ps->echo_input_at_read;
-+ need_here_doc = ps->need_here_doc;
-
- FREE (token);
- token = ps->token;
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 19
-+#define PATCHLEVEL 20
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-021
-
-Bug-Reported-by: Jared Yanovich <slovichon@gmail.com>
-Bug-Reference-ID: <20140625225019.GJ17044@nightderanger.psc.edu>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00070.html
-
-Bug-Description:
-
-When the readline `revert-all-at-newline' option is set, pressing newline
-when the current line is one retrieved from history results in a double free
-and a segmentation fault.
-
-Patch (apply with `patch -p0'):
-
---- a/lib/readline/misc.c
-+++ b/lib/readline/misc.c
-@@ -461,6 +461,7 @@ _rl_revert_all_lines ()
- saved_undo_list = 0;
- /* Set up rl_line_buffer and other variables from history entry */
- rl_replace_from_history (entry, 0); /* entry->line is now current */
-+ entry->data = 0; /* entry->data is now current undo list */
- /* Undo all changes to this history entry */
- while (rl_undo_list)
- rl_do_undo ();
-@@ -468,7 +469,6 @@ _rl_revert_all_lines ()
- the timestamp. */
- FREE (entry->line);
- entry->line = savestring (rl_line_buffer);
-- entry->data = 0;
- }
- entry = previous_history ();
- }
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 20
-+#define PATCHLEVEL 21
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-022
-
-Bug-Reported-by: scorp.dev.null@gmail.com
-Bug-Reference-ID: <E1WxXw8-0007iE-Bi@pcm14>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html
-
-Bug-Description:
-
-Using nested pipelines within loops with the `lastpipe' option set can result
-in a segmentation fault.
-
-Patch (apply with `patch -p0'):
-
---- a/execute_cmd.c
-+++ b/execute_cmd.c
-@@ -2413,7 +2413,16 @@ execute_pipeline (command, asynchronous,
- #endif
- lstdin = wait_for (lastpid);
- #if defined (JOB_CONTROL)
-- exec_result = job_exit_status (lastpipe_jid);
-+ /* If wait_for removes the job from the jobs table, use result of last
-+ command as pipeline's exit status as usual. The jobs list can get
-+ frozen and unfrozen at inconvenient times if there are multiple pipelines
-+ running simultaneously. */
-+ if (INVALID_JOB (lastpipe_jid) == 0)
-+ exec_result = job_exit_status (lastpipe_jid);
-+ else if (pipefail_opt)
-+ exec_result = exec_result | lstdin; /* XXX */
-+ /* otherwise we use exec_result */
-+
- #endif
- unfreeze_jobs_list ();
- }
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 21
-+#define PATCHLEVEL 22
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-023
-
-Bug-Reported-by: Tim Friske <me@timfriske.com>
-Bug-Reference-ID: <CAM1RzOcOR9zzC2i+aeES6LtbHNHoOV+0pZEYPrqxv_QAii-RXA@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00056.html
-
-Bug-Description:
-
-Bash does not correctly parse process substitution constructs that contain
-unbalanced parentheses as part of the contained command.
-
-Patch (apply with `patch -p0'):
-
---- a/subst.h
-+++ b/subst.h
-@@ -82,7 +82,7 @@ extern char *extract_arithmetic_subst __
- /* Extract the <( or >( construct in STRING, and return a new string.
- Start extracting at (SINDEX) as if we had just seen "<(".
- Make (SINDEX) get the position just after the matching ")". */
--extern char *extract_process_subst __P((char *, char *, int *));
-+extern char *extract_process_subst __P((char *, char *, int *, int));
- #endif /* PROCESS_SUBSTITUTION */
-
- /* Extract the name of the variable to bind to from the assignment string. */
---- a/subst.c
-+++ b/subst.c
-@@ -1192,12 +1192,18 @@ extract_arithmetic_subst (string, sindex
- Start extracting at (SINDEX) as if we had just seen "<(".
- Make (SINDEX) get the position of the matching ")". */ /*))*/
- char *
--extract_process_subst (string, starter, sindex)
-+extract_process_subst (string, starter, sindex, xflags)
- char *string;
- char *starter;
- int *sindex;
-+ int xflags;
- {
-+#if 0
- return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
-+#else
-+ xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0);
-+ return (xparse_dolparen (string, string+*sindex, sindex, xflags));
-+#endif
- }
- #endif /* PROCESS_SUBSTITUTION */
-
-@@ -1785,7 +1791,7 @@ skip_to_delim (string, start, delims, fl
- si = i + 2;
- if (string[si] == '\0')
- CQ_RETURN(si);
-- temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si);
-+ temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0);
- free (temp); /* no SX_ALLOC here */
- i = si;
- if (string[i] == '\0')
-@@ -8249,7 +8255,7 @@ add_string:
- else
- t_index = sindex + 1; /* skip past both '<' and LPAREN */
-
-- temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/
-+ temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/
- sindex = t_index;
-
- /* If the process substitution specification is `<()', we want to
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 22
-+#define PATCHLEVEL 23
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-024
-
-Bug-Reported-by: Corentin Peuvrel <cpeuvrel@pom-monitoring.com>
-Bug-Reference-ID: <53CE9E5D.6050203@pom-monitoring.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-07/msg00021.html
-
-Bug-Description:
-
-Indirect variable references do not work correctly if the reference
-variable expands to an array reference using a subscript other than 0
-(e.g., foo='bar[1]' ; echo ${!foo}).
-
-Patch (apply with `patch -p0'):
-
---- a/subst.c
-+++ b/subst.c
-@@ -7374,7 +7374,13 @@ parameter_brace_expand (string, indexp,
- }
-
- if (want_indir)
-- tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
-+ {
-+ tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
-+ /* Turn off the W_ARRAYIND flag because there is no way for this function
-+ to return the index we're supposed to be using. */
-+ if (tdesc && tdesc->flags)
-+ tdesc->flags &= ~W_ARRAYIND;
-+ }
- else
- tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
-
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 23
-+#define PATCHLEVEL 24
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-025
-
-Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-Under certain circumstances, bash will execute user code while processing the
-environment for exported function definitions.
-
-Patch (apply with `patch -p0'):
-
---- a/builtins/common.h
-+++ b/builtins/common.h
-@@ -33,6 +33,8 @@
- #define SEVAL_RESETLINE 0x010
- #define SEVAL_PARSEONLY 0x020
- #define SEVAL_NOLONGJMP 0x040
-+#define SEVAL_FUNCDEF 0x080 /* only allow function definitions */
-+#define SEVAL_ONECMD 0x100 /* only allow a single command */
-
- /* Flags for describe_command, shared between type.def and command.def */
- #define CDESC_ALL 0x001 /* type -a */
---- a/builtins/evalstring.c
-+++ b/builtins/evalstring.c
-@@ -308,6 +308,14 @@ parse_and_execute (string, from_file, fl
- {
- struct fd_bitmap *bitmap;
-
-+ if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
-+ {
-+ internal_warning ("%s: ignoring function definition attempt", from_file);
-+ should_jump_to_top_level = 0;
-+ last_result = last_command_exit_value = EX_BADUSAGE;
-+ break;
-+ }
-+
- bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
- begin_unwind_frame ("pe_dispose");
- add_unwind_protect (dispose_fd_bitmap, bitmap);
-@@ -368,6 +376,9 @@ parse_and_execute (string, from_file, fl
- dispose_command (command);
- dispose_fd_bitmap (bitmap);
- discard_unwind_frame ("pe_dispose");
-+
-+ if (flags & SEVAL_ONECMD)
-+ break;
- }
- }
- else
---- a/variables.c
-+++ b/variables.c
-@@ -358,13 +358,11 @@ initialize_shell_variables (env, privmod
- temp_string[char_index] = ' ';
- strcpy (temp_string + char_index + 1, string);
-
-- if (posixly_correct == 0 || legal_identifier (name))
-- parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
--
-- /* Ancient backwards compatibility. Old versions of bash exported
-- functions like name()=() {...} */
-- if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
-- name[char_index - 2] = '\0';
-+ /* Don't import function names that are invalid identifiers from the
-+ environment, though we still allow them to be defined as shell
-+ variables. */
-+ if (legal_identifier (name))
-+ parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
-
- if (temp_var = find_function (name))
- {
-@@ -381,10 +379,6 @@ initialize_shell_variables (env, privmod
- last_command_exit_value = 1;
- report_error (_("error importing function definition for `%s'"), name);
- }
--
-- /* ( */
-- if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
-- name[char_index - 2] = '('; /* ) */
- }
- #if defined (ARRAY_VARS)
- # if ARRAY_EXPORT
---- a/subst.c
-+++ b/subst.c
-@@ -8047,7 +8047,9 @@ comsub:
-
- goto return0;
- }
-- else if (var = find_variable_last_nameref (temp1))
-+ else if (var && (invisible_p (var) || var_isset (var) == 0))
-+ temp = (char *)NULL;
-+ else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0)
- {
- temp = nameref_cell (var);
- #if defined (ARRAY_VARS)
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 24
-+#define PATCHLEVEL 25
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-026
-
-Bug-Reported-by: Tavis Ormandy <taviso@cmpxchg8b.com>
-Bug-Reference-ID:
-Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929
-
-Bug-Description:
-
-Under certain circumstances, bash can incorrectly save a lookahead character and
-return it on a subsequent call, even when reading a new line.
-
-Patch (apply with `patch -p0'):
-
---- a/parse.y
-+++ b/parse.y
-@@ -2953,6 +2953,8 @@ reset_parser ()
- FREE (word_desc_to_read);
- word_desc_to_read = (WORD_DESC *)NULL;
-
-+ eol_ungetc_lookahead = 0;
-+
- current_token = '\n'; /* XXX */
- last_read_token = '\n';
- token_to_read = '\n';
---- a/y.tab.c
-+++ b/y.tab.c
-@@ -5265,6 +5265,8 @@ reset_parser ()
- FREE (word_desc_to_read);
- word_desc_to_read = (WORD_DESC *)NULL;
-
-+ eol_ungetc_lookahead = 0;
-+
- current_token = '\n'; /* XXX */
- last_read_token = '\n';
- token_to_read = '\n';
-@@ -8539,4 +8541,3 @@ set_line_mbstate ()
- }
- }
- #endif /* HANDLE_MULTIBYTE */
--
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 25
-+#define PATCHLEVEL 26
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-027
-
-Bug-Reported-by: Florian Weimer <fweimer@redhat.com>
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-This patch changes the encoding bash uses for exported functions to avoid
-clashes with shell variables and to avoid depending only on an environment
-variable's contents to determine whether or not to interpret it as a shell
-function.
-
-Patch (apply with `patch -p0'):
-
---- a/variables.c
-+++ b/variables.c
-@@ -83,6 +83,11 @@
-
- #define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0')
-
-+#define BASHFUNC_PREFIX "BASH_FUNC_"
-+#define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */
-+#define BASHFUNC_SUFFIX "%%"
-+#define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */
-+
- extern char **environ;
-
- /* Variables used here and defined in other files. */
-@@ -279,7 +284,7 @@ static void push_temp_var __P((PTR_T));
- static void propagate_temp_var __P((PTR_T));
- static void dispose_temporary_env __P((sh_free_func_t *));
-
--static inline char *mk_env_string __P((const char *, const char *));
-+static inline char *mk_env_string __P((const char *, const char *, int));
- static char **make_env_array_from_var_list __P((SHELL_VAR **));
- static char **make_var_export_array __P((VAR_CONTEXT *));
- static char **make_func_export_array __P((void));
-@@ -349,22 +354,33 @@ initialize_shell_variables (env, privmod
-
- /* If exported function, define it now. Don't import functions from
- the environment in privileged mode. */
-- if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4))
-+ if (privmode == 0 && read_but_dont_execute == 0 &&
-+ STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) &&
-+ STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) &&
-+ STREQN ("() {", string, 4))
- {
-+ size_t namelen;
-+ char *tname; /* desired imported function name */
-+
-+ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN;
-+
-+ tname = name + BASHFUNC_PREFLEN; /* start of func name */
-+ tname[namelen] = '\0'; /* now tname == func name */
-+
- string_length = strlen (string);
-- temp_string = (char *)xmalloc (3 + string_length + char_index);
-+ temp_string = (char *)xmalloc (namelen + string_length + 2);
-
-- strcpy (temp_string, name);
-- temp_string[char_index] = ' ';
-- strcpy (temp_string + char_index + 1, string);
-+ memcpy (temp_string, tname, namelen);
-+ temp_string[namelen] = ' ';
-+ memcpy (temp_string + namelen + 1, string, string_length + 1);
-
- /* Don't import function names that are invalid identifiers from the
- environment, though we still allow them to be defined as shell
- variables. */
-- if (legal_identifier (name))
-- parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
-+ if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname)))
-+ parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
-
-- if (temp_var = find_function (name))
-+ if (temp_var = find_function (tname))
- {
- VSETATTR (temp_var, (att_exported|att_imported));
- array_needs_making = 1;
-@@ -377,8 +393,11 @@ initialize_shell_variables (env, privmod
- array_needs_making = 1;
- }
- last_command_exit_value = 1;
-- report_error (_("error importing function definition for `%s'"), name);
-+ report_error (_("error importing function definition for `%s'"), tname);
- }
-+
-+ /* Restore original suffix */
-+ tname[namelen] = BASHFUNC_SUFFIX[0];
- }
- #if defined (ARRAY_VARS)
- # if ARRAY_EXPORT
-@@ -2954,7 +2973,7 @@ assign_in_env (word, flags)
- var->context = variable_context; /* XXX */
-
- INVALIDATE_EXPORTSTR (var);
-- var->exportstr = mk_env_string (name, value);
-+ var->exportstr = mk_env_string (name, value, 0);
-
- array_needs_making = 1;
-
-@@ -3852,21 +3871,42 @@ merge_temporary_env ()
- /* **************************************************************** */
-
- static inline char *
--mk_env_string (name, value)
-+mk_env_string (name, value, isfunc)
- const char *name, *value;
-+ int isfunc;
- {
-- int name_len, value_len;
-- char *p;
-+ size_t name_len, value_len;
-+ char *p, *q;
-
- name_len = strlen (name);
- value_len = STRLEN (value);
-- p = (char *)xmalloc (2 + name_len + value_len);
-- strcpy (p, name);
-- p[name_len] = '=';
-+
-+ /* If we are exporting a shell function, construct the encoded function
-+ name. */
-+ if (isfunc && value)
-+ {
-+ p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2);
-+ q = p;
-+ memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN);
-+ q += BASHFUNC_PREFLEN;
-+ memcpy (q, name, name_len);
-+ q += name_len;
-+ memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN);
-+ q += BASHFUNC_SUFFLEN;
-+ }
-+ else
-+ {
-+ p = (char *)xmalloc (2 + name_len + value_len);
-+ memcpy (p, name, name_len);
-+ q = p + name_len;
-+ }
-+
-+ q[0] = '=';
- if (value && *value)
-- strcpy (p + name_len + 1, value);
-+ memcpy (q + 1, value, value_len + 1);
- else
-- p[name_len + 1] = '\0';
-+ q[1] = '\0';
-+
- return (p);
- }
-
-@@ -3952,7 +3992,7 @@ make_env_array_from_var_list (vars)
- /* Gee, I'd like to get away with not using savestring() if we're
- using the cached exportstr... */
- list[list_index] = USE_EXPORTSTR ? savestring (value)
-- : mk_env_string (var->name, value);
-+ : mk_env_string (var->name, value, function_p (var));
-
- if (USE_EXPORTSTR == 0)
- SAVE_EXPORTSTR (var, list[list_index]);
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 26
-+#define PATCHLEVEL 27
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-028
-
-Bug-Reported-by: Florian Weimer <fweimer@redhat.com>
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-There are two local buffer overflows in parse.y that can cause the shell
-to dump core when given many here-documents attached to a single command
-or many nested loops.
-
-Patch (apply with `patch -p0'):
-
---- a/parse.y
-+++ b/parse.y
-@@ -168,6 +168,9 @@ static char *read_a_line __P((int));
-
- static int reserved_word_acceptable __P((int));
- static int yylex __P((void));
-+
-+static void push_heredoc __P((REDIRECT *));
-+static char *mk_alexpansion __P((char *));
- static int alias_expand_token __P((char *));
- static int time_command_acceptable __P((void));
- static int special_case_tokens __P((char *));
-@@ -265,7 +268,9 @@ int parser_state;
-
- /* Variables to manage the task of reading here documents, because we need to
- defer the reading until after a complete command has been collected. */
--static REDIRECT *redir_stack[10];
-+#define HEREDOC_MAX 16
-+
-+static REDIRECT *redir_stack[HEREDOC_MAX];
- int need_here_doc;
-
- /* Where shell input comes from. History expansion is performed on each
-@@ -307,7 +312,7 @@ static int global_extglob;
- or `for WORD' begins. This is a nested command maximum, since the array
- index is decremented after a case, select, or for command is parsed. */
- #define MAX_CASE_NEST 128
--static int word_lineno[MAX_CASE_NEST];
-+static int word_lineno[MAX_CASE_NEST+1];
- static int word_top = -1;
-
- /* If non-zero, it is the token that we want read_token to return
-@@ -520,42 +525,42 @@ redirection: '>' WORD
- source.dest = 0;
- redir.filename = $2;
- $$ = make_redirection (source, r_reading_until, redir, 0);
-- redir_stack[need_here_doc++] = $$;
-+ push_heredoc ($$);
- }
- | NUMBER LESS_LESS WORD
- {
- source.dest = $1;
- redir.filename = $3;
- $$ = make_redirection (source, r_reading_until, redir, 0);
-- redir_stack[need_here_doc++] = $$;
-+ push_heredoc ($$);
- }
- | REDIR_WORD LESS_LESS WORD
- {
- source.filename = $1;
- redir.filename = $3;
- $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
-- redir_stack[need_here_doc++] = $$;
-+ push_heredoc ($$);
- }
- | LESS_LESS_MINUS WORD
- {
- source.dest = 0;
- redir.filename = $2;
- $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
-- redir_stack[need_here_doc++] = $$;
-+ push_heredoc ($$);
- }
- | NUMBER LESS_LESS_MINUS WORD
- {
- source.dest = $1;
- redir.filename = $3;
- $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
-- redir_stack[need_here_doc++] = $$;
-+ push_heredoc ($$);
- }
- | REDIR_WORD LESS_LESS_MINUS WORD
- {
- source.filename = $1;
- redir.filename = $3;
- $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
-- redir_stack[need_here_doc++] = $$;
-+ push_heredoc ($$);
- }
- | LESS_LESS_LESS WORD
- {
-@@ -2636,6 +2641,21 @@ yylex ()
- which allow ESAC to be the next one read. */
- static int esacs_needed_count;
-
-+static void
-+push_heredoc (r)
-+ REDIRECT *r;
-+{
-+ if (need_here_doc >= HEREDOC_MAX)
-+ {
-+ last_command_exit_value = EX_BADUSAGE;
-+ need_here_doc = 0;
-+ report_syntax_error (_("maximum here-document count exceeded"));
-+ reset_parser ();
-+ exit_shell (last_command_exit_value);
-+ }
-+ redir_stack[need_here_doc++] = r;
-+}
-+
- void
- gather_here_documents ()
- {
---- a/y.tab.c
-+++ b/y.tab.c
-@@ -168,7 +168,7 @@
-
-
- /* Copy the first part of user declarations. */
--#line 21 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-
- #include "config.h"
-
-@@ -319,6 +319,9 @@ static char *read_a_line __P((int));
-
- static int reserved_word_acceptable __P((int));
- static int yylex __P((void));
-+
-+static void push_heredoc __P((REDIRECT *));
-+static char *mk_alexpansion __P((char *));
- static int alias_expand_token __P((char *));
- static int time_command_acceptable __P((void));
- static int special_case_tokens __P((char *));
-@@ -416,7 +419,9 @@ int parser_state;
-
- /* Variables to manage the task of reading here documents, because we need to
- defer the reading until after a complete command has been collected. */
--static REDIRECT *redir_stack[10];
-+#define HEREDOC_MAX 16
-+
-+static REDIRECT *redir_stack[HEREDOC_MAX];
- int need_here_doc;
-
- /* Where shell input comes from. History expansion is performed on each
-@@ -458,7 +463,7 @@ static int global_extglob;
- or `for WORD' begins. This is a nested command maximum, since the array
- index is decremented after a case, select, or for command is parsed. */
- #define MAX_CASE_NEST 128
--static int word_lineno[MAX_CASE_NEST];
-+static int word_lineno[MAX_CASE_NEST+1];
- static int word_top = -1;
-
- /* If non-zero, it is the token that we want read_token to return
-@@ -492,7 +497,7 @@ static REDIRECTEE redir;
-
- #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
- typedef union YYSTYPE
--#line 324 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- WORD_DESC *word; /* the word that we read. */
- int number; /* the number that we read. */
-@@ -503,7 +508,7 @@ typedef union YYSTYPE
- PATTERN_LIST *pattern;
- }
- /* Line 193 of yacc.c. */
--#line 507 "y.tab.c"
-+#line 512 "y.tab.c"
- YYSTYPE;
- # define yystype YYSTYPE /* obsolescent; will be withdrawn */
- # define YYSTYPE_IS_DECLARED 1
-@@ -516,7 +521,7 @@ typedef union YYSTYPE
-
-
- /* Line 216 of yacc.c. */
--#line 520 "y.tab.c"
-+#line 525 "y.tab.c"
-
- #ifdef short
- # undef short
-@@ -886,23 +891,23 @@ static const yytype_int8 yyrhs[] =
- /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
- static const yytype_uint16 yyrline[] =
- {
-- 0, 377, 377, 388, 397, 412, 422, 424, 428, 434,
-- 440, 446, 452, 458, 464, 470, 476, 482, 488, 494,
-- 500, 506, 512, 518, 525, 532, 539, 546, 553, 560,
-- 566, 572, 578, 584, 590, 596, 602, 608, 614, 620,
-- 626, 632, 638, 644, 650, 656, 662, 668, 674, 680,
-- 686, 692, 700, 702, 704, 708, 712, 723, 725, 729,
-- 731, 733, 749, 751, 755, 757, 759, 761, 763, 765,
-- 767, 769, 771, 773, 775, 779, 784, 789, 794, 799,
-- 804, 809, 814, 821, 826, 831, 836, 843, 848, 853,
-- 858, 863, 868, 875, 880, 885, 892, 895, 898, 902,
-- 904, 935, 942, 947, 964, 969, 986, 993, 995, 997,
-- 1002, 1006, 1010, 1014, 1016, 1018, 1022, 1023, 1027, 1029,
-- 1031, 1033, 1037, 1039, 1041, 1043, 1045, 1047, 1051, 1053,
-- 1062, 1070, 1071, 1077, 1078, 1085, 1089, 1091, 1093, 1100,
-- 1102, 1104, 1108, 1109, 1112, 1114, 1116, 1120, 1121, 1130,
-- 1143, 1159, 1174, 1176, 1178, 1185, 1188, 1192, 1194, 1200,
-- 1206, 1223, 1243, 1245, 1268, 1272, 1274, 1276
-+ 0, 382, 382, 393, 402, 417, 427, 429, 433, 439,
-+ 445, 451, 457, 463, 469, 475, 481, 487, 493, 499,
-+ 505, 511, 517, 523, 530, 537, 544, 551, 558, 565,
-+ 571, 577, 583, 589, 595, 601, 607, 613, 619, 625,
-+ 631, 637, 643, 649, 655, 661, 667, 673, 679, 685,
-+ 691, 697, 705, 707, 709, 713, 717, 728, 730, 734,
-+ 736, 738, 754, 756, 760, 762, 764, 766, 768, 770,
-+ 772, 774, 776, 778, 780, 784, 789, 794, 799, 804,
-+ 809, 814, 819, 826, 831, 836, 841, 848, 853, 858,
-+ 863, 868, 873, 880, 885, 890, 897, 900, 903, 907,
-+ 909, 940, 947, 952, 969, 974, 991, 998, 1000, 1002,
-+ 1007, 1011, 1015, 1019, 1021, 1023, 1027, 1028, 1032, 1034,
-+ 1036, 1038, 1042, 1044, 1046, 1048, 1050, 1052, 1056, 1058,
-+ 1067, 1075, 1076, 1082, 1083, 1090, 1094, 1096, 1098, 1105,
-+ 1107, 1109, 1113, 1114, 1117, 1119, 1121, 1125, 1126, 1135,
-+ 1148, 1164, 1179, 1181, 1183, 1190, 1193, 1197, 1199, 1205,
-+ 1211, 1228, 1248, 1250, 1273, 1277, 1279, 1281
- };
- #endif
-
-@@ -2093,7 +2098,7 @@ yyreduce:
- switch (yyn)
- {
- case 2:
--#line 378 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Case of regular command. Discard the error
- safety net,and return the command just parsed. */
-@@ -2107,7 +2112,7 @@ yyreduce:
- break;
-
- case 3:
--#line 389 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Case of regular command, but not a very
- interesting one. Return a NULL command. */
-@@ -2119,7 +2124,7 @@ yyreduce:
- break;
-
- case 4:
--#line 398 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Error during parsing. Return NULL command. */
- global_command = (COMMAND *)NULL;
-@@ -2137,7 +2142,7 @@ yyreduce:
- break;
-
- case 5:
--#line 413 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Case of EOF seen by itself. Do ignoreeof or
- not. */
-@@ -2148,17 +2153,17 @@ yyreduce:
- break;
-
- case 6:
--#line 423 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 7:
--#line 425 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
- break;
-
- case 8:
--#line 429 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2167,7 +2172,7 @@ yyreduce:
- break;
-
- case 9:
--#line 435 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2176,7 +2181,7 @@ yyreduce:
- break;
-
- case 10:
--#line 441 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2185,7 +2190,7 @@ yyreduce:
- break;
-
- case 11:
--#line 447 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2194,7 +2199,7 @@ yyreduce:
- break;
-
- case 12:
--#line 453 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2203,7 +2208,7 @@ yyreduce:
- break;
-
- case 13:
--#line 459 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2212,7 +2217,7 @@ yyreduce:
- break;
-
- case 14:
--#line 465 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2221,7 +2226,7 @@ yyreduce:
- break;
-
- case 15:
--#line 471 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2230,7 +2235,7 @@ yyreduce:
- break;
-
- case 16:
--#line 477 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2239,7 +2244,7 @@ yyreduce:
- break;
-
- case 17:
--#line 483 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2248,7 +2253,7 @@ yyreduce:
- break;
-
- case 18:
--#line 489 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2257,7 +2262,7 @@ yyreduce:
- break;
-
- case 19:
--#line 495 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2266,7 +2271,7 @@ yyreduce:
- break;
-
- case 20:
--#line 501 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2275,7 +2280,7 @@ yyreduce:
- break;
-
- case 21:
--#line 507 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2284,7 +2289,7 @@ yyreduce:
- break;
-
- case 22:
--#line 513 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2293,67 +2298,67 @@ yyreduce:
- break;
-
- case 23:
--#line 519 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
-- redir_stack[need_here_doc++] = (yyval.redirect);
-+ push_heredoc ((yyval.redirect));
- }
- break;
-
- case 24:
--#line 526 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
-- redir_stack[need_here_doc++] = (yyval.redirect);
-+ push_heredoc ((yyval.redirect));
- }
- break;
-
- case 25:
--#line 533 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
-- redir_stack[need_here_doc++] = (yyval.redirect);
-+ push_heredoc ((yyval.redirect));
- }
- break;
-
- case 26:
--#line 540 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
- (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
-- redir_stack[need_here_doc++] = (yyval.redirect);
-+ push_heredoc ((yyval.redirect));
- }
- break;
-
- case 27:
--#line 547 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
-- redir_stack[need_here_doc++] = (yyval.redirect);
-+ push_heredoc ((yyval.redirect));
- }
- break;
-
- case 28:
--#line 554 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
- (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
-- redir_stack[need_here_doc++] = (yyval.redirect);
-+ push_heredoc ((yyval.redirect));
- }
- break;
-
- case 29:
--#line 561 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2362,7 +2367,7 @@ yyreduce:
- break;
-
- case 30:
--#line 567 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2371,7 +2376,7 @@ yyreduce:
- break;
-
- case 31:
--#line 573 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2380,7 +2385,7 @@ yyreduce:
- break;
-
- case 32:
--#line 579 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
- redir.dest = (yyvsp[(2) - (2)].number);
-@@ -2389,7 +2394,7 @@ yyreduce:
- break;
-
- case 33:
--#line 585 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.dest = (yyvsp[(3) - (3)].number);
-@@ -2398,7 +2403,7 @@ yyreduce:
- break;
-
- case 34:
--#line 591 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.dest = (yyvsp[(3) - (3)].number);
-@@ -2407,7 +2412,7 @@ yyreduce:
- break;
-
- case 35:
--#line 597 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
- redir.dest = (yyvsp[(2) - (2)].number);
-@@ -2416,7 +2421,7 @@ yyreduce:
- break;
-
- case 36:
--#line 603 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.dest = (yyvsp[(3) - (3)].number);
-@@ -2425,7 +2430,7 @@ yyreduce:
- break;
-
- case 37:
--#line 609 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.dest = (yyvsp[(3) - (3)].number);
-@@ -2434,7 +2439,7 @@ yyreduce:
- break;
-
- case 38:
--#line 615 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2443,7 +2448,7 @@ yyreduce:
- break;
-
- case 39:
--#line 621 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2452,7 +2457,7 @@ yyreduce:
- break;
-
- case 40:
--#line 627 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2461,7 +2466,7 @@ yyreduce:
- break;
-
- case 41:
--#line 633 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2470,7 +2475,7 @@ yyreduce:
- break;
-
- case 42:
--#line 639 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2479,7 +2484,7 @@ yyreduce:
- break;
-
- case 43:
--#line 645 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2488,7 +2493,7 @@ yyreduce:
- break;
-
- case 44:
--#line 651 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
- redir.dest = 0;
-@@ -2497,7 +2502,7 @@ yyreduce:
- break;
-
- case 45:
--#line 657 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.dest = 0;
-@@ -2506,7 +2511,7 @@ yyreduce:
- break;
-
- case 46:
--#line 663 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.dest = 0;
-@@ -2515,7 +2520,7 @@ yyreduce:
- break;
-
- case 47:
--#line 669 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 0;
- redir.dest = 0;
-@@ -2524,7 +2529,7 @@ yyreduce:
- break;
-
- case 48:
--#line 675 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.dest = 0;
-@@ -2533,7 +2538,7 @@ yyreduce:
- break;
-
- case 49:
--#line 681 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.dest = 0;
-@@ -2542,7 +2547,7 @@ yyreduce:
- break;
-
- case 50:
--#line 687 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2551,7 +2556,7 @@ yyreduce:
- break;
-
- case 51:
--#line 693 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2560,29 +2565,29 @@ yyreduce:
- break;
-
- case 52:
--#line 701 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 53:
--#line 703 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 54:
--#line 705 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
- break;
-
- case 55:
--#line 709 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
- }
- break;
-
- case 56:
--#line 713 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- register REDIRECT *t;
-
-@@ -2594,27 +2599,27 @@ yyreduce:
- break;
-
- case 57:
--#line 724 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
- break;
-
- case 58:
--#line 726 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
- break;
-
- case 59:
--#line 730 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
- break;
-
- case 60:
--#line 732 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 61:
--#line 734 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
-
-@@ -2633,72 +2638,72 @@ yyreduce:
- break;
-
- case 62:
--#line 750 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 63:
--#line 752 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 64:
--#line 756 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 65:
--#line 758 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 66:
--#line 760 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 67:
--#line 762 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 68:
--#line 764 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 69:
--#line 766 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 70:
--#line 768 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 71:
--#line 770 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 72:
--#line 772 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 73:
--#line 774 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 74:
--#line 776 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 75:
--#line 780 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2706,7 +2711,7 @@ yyreduce:
- break;
-
- case 76:
--#line 785 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2714,7 +2719,7 @@ yyreduce:
- break;
-
- case 77:
--#line 790 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2722,7 +2727,7 @@ yyreduce:
- break;
-
- case 78:
--#line 795 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2730,7 +2735,7 @@ yyreduce:
- break;
-
- case 79:
--#line 800 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2738,7 +2743,7 @@ yyreduce:
- break;
-
- case 80:
--#line 805 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2746,7 +2751,7 @@ yyreduce:
- break;
-
- case 81:
--#line 810 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2754,7 +2759,7 @@ yyreduce:
- break;
-
- case 82:
--#line 815 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2762,7 +2767,7 @@ yyreduce:
- break;
-
- case 83:
--#line 822 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
- if (word_top > 0) word_top--;
-@@ -2770,7 +2775,7 @@ yyreduce:
- break;
-
- case 84:
--#line 827 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
- if (word_top > 0) word_top--;
-@@ -2778,7 +2783,7 @@ yyreduce:
- break;
-
- case 85:
--#line 832 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
- if (word_top > 0) word_top--;
-@@ -2786,7 +2791,7 @@ yyreduce:
- break;
-
- case 86:
--#line 837 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
- if (word_top > 0) word_top--;
-@@ -2794,7 +2799,7 @@ yyreduce:
- break;
-
- case 87:
--#line 844 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2802,7 +2807,7 @@ yyreduce:
- break;
-
- case 88:
--#line 849 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2810,7 +2815,7 @@ yyreduce:
- break;
-
- case 89:
--#line 854 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2818,7 +2823,7 @@ yyreduce:
- break;
-
- case 90:
--#line 859 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2826,7 +2831,7 @@ yyreduce:
- break;
-
- case 91:
--#line 864 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2834,7 +2839,7 @@ yyreduce:
- break;
-
- case 92:
--#line 869 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2842,7 +2847,7 @@ yyreduce:
- break;
-
- case 93:
--#line 876 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2850,7 +2855,7 @@ yyreduce:
- break;
-
- case 94:
--#line 881 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2858,7 +2863,7 @@ yyreduce:
- break;
-
- case 95:
--#line 886 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2866,27 +2871,27 @@ yyreduce:
- break;
-
- case 96:
--#line 893 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
- break;
-
- case 97:
--#line 896 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
- break;
-
- case 98:
--#line 899 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
- break;
-
- case 99:
--#line 903 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 100:
--#line 905 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
-
-@@ -2918,7 +2923,7 @@ yyreduce:
- break;
-
- case 101:
--#line 936 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
- (yyval.command)->flags |= CMD_WANT_SUBSHELL;
-@@ -2926,7 +2931,7 @@ yyreduce:
- break;
-
- case 102:
--#line 943 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
- (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-@@ -2934,7 +2939,7 @@ yyreduce:
- break;
-
- case 103:
--#line 948 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
-
-@@ -2954,7 +2959,7 @@ yyreduce:
- break;
-
- case 104:
--#line 965 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
- (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-@@ -2962,7 +2967,7 @@ yyreduce:
- break;
-
- case 105:
--#line 970 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- COMMAND *tc;
-
-@@ -2982,7 +2987,7 @@ yyreduce:
- break;
-
- case 106:
--#line 987 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
- (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-@@ -2990,117 +2995,117 @@ yyreduce:
- break;
-
- case 107:
--#line 994 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
- break;
-
- case 108:
--#line 996 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
- break;
-
- case 109:
--#line 998 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
- break;
-
- case 110:
--#line 1003 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
- break;
-
- case 111:
--#line 1007 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
- break;
-
- case 112:
--#line 1011 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(2) - (3)].command); }
- break;
-
- case 113:
--#line 1015 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
- break;
-
- case 114:
--#line 1017 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
- break;
-
- case 115:
--#line 1019 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 117:
--#line 1024 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
- break;
-
- case 118:
--#line 1028 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
- break;
-
- case 119:
--#line 1030 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
- break;
-
- case 120:
--#line 1032 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 121:
--#line 1034 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
- break;
-
- case 122:
--#line 1038 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 123:
--#line 1040 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 124:
--#line 1042 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 125:
--#line 1044 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 126:
--#line 1046 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 127:
--#line 1048 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 128:
--#line 1052 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 129:
--#line 1054 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
- break;
-
- case 130:
--#line 1063 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
- if (need_here_doc)
-@@ -3109,14 +3114,14 @@ yyreduce:
- break;
-
- case 132:
--#line 1072 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
- }
- break;
-
- case 134:
--#line 1079 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
- (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (COMMAND *)NULL, '&');
-@@ -3126,17 +3131,17 @@ yyreduce:
- break;
-
- case 136:
--#line 1090 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 137:
--#line 1092 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 138:
--#line 1094 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (4)].command)->type == cm_connection)
- (yyval.command) = connect_async_list ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '&');
-@@ -3146,37 +3151,37 @@ yyreduce:
- break;
-
- case 139:
--#line 1101 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 140:
--#line 1103 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 141:
--#line 1105 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 144:
--#line 1113 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = '\n'; }
- break;
-
- case 145:
--#line 1115 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = ';'; }
- break;
-
- case 146:
--#line 1117 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = yacc_EOF; }
- break;
-
- case 149:
--#line 1131 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (1)].command);
- if (need_here_doc)
-@@ -3192,7 +3197,7 @@ yyreduce:
- break;
-
- case 150:
--#line 1144 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (2)].command)->type == cm_connection)
- (yyval.command) = connect_async_list ((yyvsp[(1) - (2)].command), (COMMAND *)NULL, '&');
-@@ -3211,7 +3216,7 @@ yyreduce:
- break;
-
- case 151:
--#line 1160 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (2)].command);
- if (need_here_doc)
-@@ -3227,17 +3232,17 @@ yyreduce:
- break;
-
- case 152:
--#line 1175 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 153:
--#line 1177 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 154:
--#line 1179 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
- (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), '&');
-@@ -3247,22 +3252,22 @@ yyreduce:
- break;
-
- case 155:
--#line 1186 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
- break;
-
- case 156:
--#line 1189 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 157:
--#line 1193 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 158:
--#line 1195 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
- (yyvsp[(2) - (2)].command)->flags ^= CMD_INVERT_RETURN; /* toggle */
-@@ -3271,7 +3276,7 @@ yyreduce:
- break;
-
- case 159:
--#line 1201 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
- (yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number);
-@@ -3280,7 +3285,7 @@ yyreduce:
- break;
-
- case 160:
--#line 1207 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- ELEMENT x;
-
-@@ -3300,7 +3305,7 @@ yyreduce:
- break;
-
- case 161:
--#line 1224 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- ELEMENT x;
-
-@@ -3321,12 +3326,12 @@ yyreduce:
- break;
-
- case 162:
--#line 1244 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
- break;
-
- case 163:
--#line 1246 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- {
- /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
- COMMAND *tc;
-@@ -3352,28 +3357,28 @@ yyreduce:
- break;
-
- case 164:
--#line 1269 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 165:
--#line 1273 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE; }
- break;
-
- case 166:
--#line 1275 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
-
- case 167:
--#line 1277 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
-
-
- /* Line 1267 of yacc.c. */
--#line 3377 "y.tab.c"
-+#line 3382 "y.tab.c"
- default: break;
- }
- YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-@@ -3587,7 +3592,7 @@ yyreturn:
- }
-
-
--#line 1279 "/usr/homes/chet/src/bash/src/parse.y"
-+#line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-
-
- /* Initial size to allocate for tokens, and the
-@@ -4948,6 +4953,21 @@ yylex ()
- which allow ESAC to be the next one read. */
- static int esacs_needed_count;
-
-+static void
-+push_heredoc (r)
-+ REDIRECT *r;
-+{
-+ if (need_here_doc >= HEREDOC_MAX)
-+ {
-+ last_command_exit_value = EX_BADUSAGE;
-+ need_here_doc = 0;
-+ report_syntax_error (_("maximum here-document count exceeded"));
-+ reset_parser ();
-+ exit_shell (last_command_exit_value);
-+ }
-+ redir_stack[need_here_doc++] = r;
-+}
-+
- void
- gather_here_documents ()
- {
-@@ -8541,3 +8561,4 @@ set_line_mbstate ()
- }
- }
- #endif /* HANDLE_MULTIBYTE */
-+
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 27
-+#define PATCHLEVEL 28
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-029
-
-Bug-Reported-by: Michal Zalewski <lcamtuf@coredump.cx>
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-When bash is parsing a function definition that contains a here-document
-delimited by end-of-file (or end-of-string), it leaves the closing delimiter
-uninitialized. This can result in an invalid memory access when the parsed
-function is later copied.
-
-Patch (apply with `patch -p0'):
-
---- a/make_cmd.c
-+++ b/make_cmd.c
-@@ -692,6 +692,7 @@ make_redirection (source, instruction, d
- /* First do the common cases. */
- temp->redirector = source;
- temp->redirectee = dest_and_filename;
-+ temp->here_doc_eof = 0;
- temp->instruction = instruction;
- temp->flags = 0;
- temp->rflags = flags;
---- a/copy_cmd.c
-+++ b/copy_cmd.c
-@@ -126,7 +126,7 @@ copy_redirect (redirect)
- {
- case r_reading_until:
- case r_deblank_reading_until:
-- new_redirect->here_doc_eof = savestring (redirect->here_doc_eof);
-+ new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0;
- /*FALLTHROUGH*/
- case r_reading_string:
- case r_appending_to:
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 28
-+#define PATCHLEVEL 29
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-030
-
-Bug-Reported-by: Michal Zalewski <lcamtuf@coredump.cx>
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-A combination of nested command substitutions and function importing from
-the environment can cause bash to execute code appearing in the environment
-variable value following the function definition.
-
-Patch (apply with `patch -p0'):
-
---- a/builtins/evalstring.c
-+++ b/builtins/evalstring.c
-@@ -308,12 +308,25 @@ parse_and_execute (string, from_file, fl
- {
- struct fd_bitmap *bitmap;
-
-- if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
-+ if (flags & SEVAL_FUNCDEF)
- {
-- internal_warning ("%s: ignoring function definition attempt", from_file);
-- should_jump_to_top_level = 0;
-- last_result = last_command_exit_value = EX_BADUSAGE;
-- break;
-+ char *x;
-+
-+ /* If the command parses to something other than a straight
-+ function definition, or if we have not consumed the entire
-+ string, or if the parser has transformed the function
-+ name (as parsing will if it begins or ends with shell
-+ whitespace, for example), reject the attempt */
-+ if (command->type != cm_function_def ||
-+ ((x = parser_remaining_input ()) && *x) ||
-+ (STREQ (from_file, command->value.Function_def->name->word) == 0))
-+ {
-+ internal_warning (_("%s: ignoring function definition attempt"), from_file);
-+ should_jump_to_top_level = 0;
-+ last_result = last_command_exit_value = EX_BADUSAGE;
-+ reset_parser ();
-+ break;
-+ }
- }
-
- bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
-@@ -378,7 +391,10 @@ parse_and_execute (string, from_file, fl
- discard_unwind_frame ("pe_dispose");
-
- if (flags & SEVAL_ONECMD)
-- break;
-+ {
-+ reset_parser ();
-+ break;
-+ }
- }
- }
- else
---- a/parse.y
-+++ b/parse.y
-@@ -2538,6 +2538,16 @@ shell_ungetc (c)
- eol_ungetc_lookahead = c;
- }
-
-+char *
-+parser_remaining_input ()
-+{
-+ if (shell_input_line == 0)
-+ return 0;
-+ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
-+ return '\0'; /* XXX */
-+ return (shell_input_line + shell_input_line_index);
-+}
-+
- #ifdef INCLUDE_UNUSED
- /* Back the input pointer up by one, effectively `ungetting' a character. */
- static void
-@@ -4027,8 +4037,8 @@ xparse_dolparen (base, string, indp, fla
- reset_parser ();
- /* reset_parser clears shell_input_line and associated variables */
- restore_input_line_state (&ls);
-- if (interactive)
-- token_to_read = 0;
-+
-+ token_to_read = 0;
-
- /* Need to find how many characters parse_and_execute consumed, update
- *indp, if flags != 0, copy the portion of the string parsed into RET
---- a/shell.h
-+++ b/shell.h
-@@ -180,6 +180,8 @@ typedef struct _sh_input_line_state_t {
- } sh_input_line_state_t;
-
- /* Let's try declaring these here. */
-+extern char *parser_remaining_input __P((void));
-+
- extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *));
- extern void restore_parser_state __P((sh_parser_state_t *));
-
---- a/y.tab.c
-+++ b/y.tab.c
-@@ -168,7 +168,7 @@
-
-
- /* Copy the first part of user declarations. */
--#line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 21 "/usr/src/local/bash/bash-4.3-patched/parse.y"
-
- #include "config.h"
-
-@@ -497,7 +497,7 @@ static REDIRECTEE redir;
-
- #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
- typedef union YYSTYPE
--#line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 329 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- WORD_DESC *word; /* the word that we read. */
- int number; /* the number that we read. */
-@@ -2098,7 +2098,7 @@ yyreduce:
- switch (yyn)
- {
- case 2:
--#line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 383 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- /* Case of regular command. Discard the error
- safety net,and return the command just parsed. */
-@@ -2112,7 +2112,7 @@ yyreduce:
- break;
-
- case 3:
--#line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 394 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- /* Case of regular command, but not a very
- interesting one. Return a NULL command. */
-@@ -2124,7 +2124,7 @@ yyreduce:
- break;
-
- case 4:
--#line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 403 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- /* Error during parsing. Return NULL command. */
- global_command = (COMMAND *)NULL;
-@@ -2142,7 +2142,7 @@ yyreduce:
- break;
-
- case 5:
--#line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 418 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- /* Case of EOF seen by itself. Do ignoreeof or
- not. */
-@@ -2153,17 +2153,17 @@ yyreduce:
- break;
-
- case 6:
--#line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 428 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 7:
--#line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 430 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
- break;
-
- case 8:
--#line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 434 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2172,7 +2172,7 @@ yyreduce:
- break;
-
- case 9:
--#line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 440 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2181,7 +2181,7 @@ yyreduce:
- break;
-
- case 10:
--#line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 446 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2190,7 +2190,7 @@ yyreduce:
- break;
-
- case 11:
--#line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 452 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2199,7 +2199,7 @@ yyreduce:
- break;
-
- case 12:
--#line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 458 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2208,7 +2208,7 @@ yyreduce:
- break;
-
- case 13:
--#line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 464 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2217,7 +2217,7 @@ yyreduce:
- break;
-
- case 14:
--#line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 470 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2226,7 +2226,7 @@ yyreduce:
- break;
-
- case 15:
--#line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 476 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2235,7 +2235,7 @@ yyreduce:
- break;
-
- case 16:
--#line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 482 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2244,7 +2244,7 @@ yyreduce:
- break;
-
- case 17:
--#line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 488 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2253,7 +2253,7 @@ yyreduce:
- break;
-
- case 18:
--#line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 494 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2262,7 +2262,7 @@ yyreduce:
- break;
-
- case 19:
--#line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 500 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2271,7 +2271,7 @@ yyreduce:
- break;
-
- case 20:
--#line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 506 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2280,7 +2280,7 @@ yyreduce:
- break;
-
- case 21:
--#line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 512 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2289,7 +2289,7 @@ yyreduce:
- break;
-
- case 22:
--#line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 518 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2298,7 +2298,7 @@ yyreduce:
- break;
-
- case 23:
--#line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 524 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2308,7 +2308,7 @@ yyreduce:
- break;
-
- case 24:
--#line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 531 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2318,7 +2318,7 @@ yyreduce:
- break;
-
- case 25:
--#line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 538 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2328,7 +2328,7 @@ yyreduce:
- break;
-
- case 26:
--#line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 545 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2338,7 +2338,7 @@ yyreduce:
- break;
-
- case 27:
--#line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 552 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2348,7 +2348,7 @@ yyreduce:
- break;
-
- case 28:
--#line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 559 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2358,7 +2358,7 @@ yyreduce:
- break;
-
- case 29:
--#line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 566 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2367,7 +2367,7 @@ yyreduce:
- break;
-
- case 30:
--#line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 572 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2376,7 +2376,7 @@ yyreduce:
- break;
-
- case 31:
--#line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 578 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2385,7 +2385,7 @@ yyreduce:
- break;
-
- case 32:
--#line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 584 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
- redir.dest = (yyvsp[(2) - (2)].number);
-@@ -2394,7 +2394,7 @@ yyreduce:
- break;
-
- case 33:
--#line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 590 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.dest = (yyvsp[(3) - (3)].number);
-@@ -2403,7 +2403,7 @@ yyreduce:
- break;
-
- case 34:
--#line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 596 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.dest = (yyvsp[(3) - (3)].number);
-@@ -2412,7 +2412,7 @@ yyreduce:
- break;
-
- case 35:
--#line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 602 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
- redir.dest = (yyvsp[(2) - (2)].number);
-@@ -2421,7 +2421,7 @@ yyreduce:
- break;
-
- case 36:
--#line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 608 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.dest = (yyvsp[(3) - (3)].number);
-@@ -2430,7 +2430,7 @@ yyreduce:
- break;
-
- case 37:
--#line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 614 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.dest = (yyvsp[(3) - (3)].number);
-@@ -2439,7 +2439,7 @@ yyreduce:
- break;
-
- case 38:
--#line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 620 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2448,7 +2448,7 @@ yyreduce:
- break;
-
- case 39:
--#line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 626 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2457,7 +2457,7 @@ yyreduce:
- break;
-
- case 40:
--#line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 632 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2466,7 +2466,7 @@ yyreduce:
- break;
-
- case 41:
--#line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 638 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2475,7 +2475,7 @@ yyreduce:
- break;
-
- case 42:
--#line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 644 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2484,7 +2484,7 @@ yyreduce:
- break;
-
- case 43:
--#line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 650 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.filename = (yyvsp[(3) - (3)].word);
-@@ -2493,7 +2493,7 @@ yyreduce:
- break;
-
- case 44:
--#line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 656 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
- redir.dest = 0;
-@@ -2502,7 +2502,7 @@ yyreduce:
- break;
-
- case 45:
--#line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 662 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.dest = 0;
-@@ -2511,7 +2511,7 @@ yyreduce:
- break;
-
- case 46:
--#line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 668 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.dest = 0;
-@@ -2520,7 +2520,7 @@ yyreduce:
- break;
-
- case 47:
--#line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 674 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 0;
- redir.dest = 0;
-@@ -2529,7 +2529,7 @@ yyreduce:
- break;
-
- case 48:
--#line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 680 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = (yyvsp[(1) - (3)].number);
- redir.dest = 0;
-@@ -2538,7 +2538,7 @@ yyreduce:
- break;
-
- case 49:
--#line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 686 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.filename = (yyvsp[(1) - (3)].word);
- redir.dest = 0;
-@@ -2547,7 +2547,7 @@ yyreduce:
- break;
-
- case 50:
--#line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 692 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2556,7 +2556,7 @@ yyreduce:
- break;
-
- case 51:
--#line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 698 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- source.dest = 1;
- redir.filename = (yyvsp[(2) - (2)].word);
-@@ -2565,29 +2565,29 @@ yyreduce:
- break;
-
- case 52:
--#line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 706 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 53:
--#line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 708 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
- break;
-
- case 54:
--#line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 710 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
- break;
-
- case 55:
--#line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 714 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
- }
- break;
-
- case 56:
--#line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 718 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- register REDIRECT *t;
-
-@@ -2599,27 +2599,27 @@ yyreduce:
- break;
-
- case 57:
--#line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 729 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
- break;
-
- case 58:
--#line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 731 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
- break;
-
- case 59:
--#line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 735 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
- break;
-
- case 60:
--#line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 737 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 61:
--#line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 739 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- COMMAND *tc;
-
-@@ -2638,72 +2638,72 @@ yyreduce:
- break;
-
- case 62:
--#line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 755 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 63:
--#line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 757 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 64:
--#line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 761 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 65:
--#line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 763 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 66:
--#line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 765 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 67:
--#line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 767 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
- break;
-
- case 68:
--#line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 769 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 69:
--#line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 771 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 70:
--#line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 773 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 71:
--#line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 775 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 72:
--#line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 777 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 73:
--#line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 779 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 74:
--#line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 781 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 75:
--#line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 785 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2711,7 +2711,7 @@ yyreduce:
- break;
-
- case 76:
--#line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 790 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2719,7 +2719,7 @@ yyreduce:
- break;
-
- case 77:
--#line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 795 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2727,7 +2727,7 @@ yyreduce:
- break;
-
- case 78:
--#line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 800 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2735,7 +2735,7 @@ yyreduce:
- break;
-
- case 79:
--#line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 805 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2743,7 +2743,7 @@ yyreduce:
- break;
-
- case 80:
--#line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 810 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2751,7 +2751,7 @@ yyreduce:
- break;
-
- case 81:
--#line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 815 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2759,7 +2759,7 @@ yyreduce:
- break;
-
- case 82:
--#line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 820 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2767,7 +2767,7 @@ yyreduce:
- break;
-
- case 83:
--#line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 827 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
- if (word_top > 0) word_top--;
-@@ -2775,7 +2775,7 @@ yyreduce:
- break;
-
- case 84:
--#line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 832 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
- if (word_top > 0) word_top--;
-@@ -2783,7 +2783,7 @@ yyreduce:
- break;
-
- case 85:
--#line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 837 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
- if (word_top > 0) word_top--;
-@@ -2791,7 +2791,7 @@ yyreduce:
- break;
-
- case 86:
--#line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 842 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
- if (word_top > 0) word_top--;
-@@ -2799,7 +2799,7 @@ yyreduce:
- break;
-
- case 87:
--#line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 849 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2807,7 +2807,7 @@ yyreduce:
- break;
-
- case 88:
--#line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 854 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2815,7 +2815,7 @@ yyreduce:
- break;
-
- case 89:
--#line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 859 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2823,7 +2823,7 @@ yyreduce:
- break;
-
- case 90:
--#line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 864 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2831,7 +2831,7 @@ yyreduce:
- break;
-
- case 91:
--#line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 869 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2839,7 +2839,7 @@ yyreduce:
- break;
-
- case 92:
--#line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 874 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2847,7 +2847,7 @@ yyreduce:
- break;
-
- case 93:
--#line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 881 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2855,7 +2855,7 @@ yyreduce:
- break;
-
- case 94:
--#line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 886 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2863,7 +2863,7 @@ yyreduce:
- break;
-
- case 95:
--#line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 891 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
- if (word_top > 0) word_top--;
-@@ -2871,27 +2871,27 @@ yyreduce:
- break;
-
- case 96:
--#line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 898 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
- break;
-
- case 97:
--#line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 901 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
- break;
-
- case 98:
--#line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 904 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
- break;
-
- case 99:
--#line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 908 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 100:
--#line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 910 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- COMMAND *tc;
-
-@@ -2923,7 +2923,7 @@ yyreduce:
- break;
-
- case 101:
--#line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 941 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
- (yyval.command)->flags |= CMD_WANT_SUBSHELL;
-@@ -2931,7 +2931,7 @@ yyreduce:
- break;
-
- case 102:
--#line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 948 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
- (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-@@ -2939,7 +2939,7 @@ yyreduce:
- break;
-
- case 103:
--#line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 953 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- COMMAND *tc;
-
-@@ -2959,7 +2959,7 @@ yyreduce:
- break;
-
- case 104:
--#line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 970 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
- (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-@@ -2967,7 +2967,7 @@ yyreduce:
- break;
-
- case 105:
--#line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 975 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- COMMAND *tc;
-
-@@ -2987,7 +2987,7 @@ yyreduce:
- break;
-
- case 106:
--#line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 992 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
- (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
-@@ -2995,117 +2995,117 @@ yyreduce:
- break;
-
- case 107:
--#line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 999 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
- break;
-
- case 108:
--#line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1001 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
- break;
-
- case 109:
--#line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1003 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
- break;
-
- case 110:
--#line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1008 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
- break;
-
- case 111:
--#line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1012 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
- break;
-
- case 112:
--#line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1016 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(2) - (3)].command); }
- break;
-
- case 113:
--#line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1020 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
- break;
-
- case 114:
--#line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1022 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
- break;
-
- case 115:
--#line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1024 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 117:
--#line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1029 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
- break;
-
- case 118:
--#line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1033 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
- break;
-
- case 119:
--#line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1035 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
- break;
-
- case 120:
--#line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1037 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
- break;
-
- case 121:
--#line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1039 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
- break;
-
- case 122:
--#line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1043 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 123:
--#line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1045 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 124:
--#line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1047 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 125:
--#line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1049 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 126:
--#line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1051 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
- break;
-
- case 127:
--#line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1053 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
- break;
-
- case 128:
--#line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1057 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
- break;
-
- case 129:
--#line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1059 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
- break;
-
- case 130:
--#line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1068 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
- if (need_here_doc)
-@@ -3114,14 +3114,14 @@ yyreduce:
- break;
-
- case 132:
--#line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1077 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = (yyvsp[(2) - (2)].command);
- }
- break;
-
- case 134:
--#line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1084 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
- (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (COMMAND *)NULL, '&');
-@@ -3131,17 +3131,17 @@ yyreduce:
- break;
-
- case 136:
--#line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1095 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 137:
--#line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1097 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 138:
--#line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1099 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(1) - (4)].command)->type == cm_connection)
- (yyval.command) = connect_async_list ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '&');
-@@ -3151,37 +3151,37 @@ yyreduce:
- break;
-
- case 139:
--#line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1106 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 140:
--#line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1108 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
- break;
-
- case 141:
--#line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1110 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 144:
--#line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1118 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = '\n'; }
- break;
-
- case 145:
--#line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1120 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = ';'; }
- break;
-
- case 146:
--#line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1122 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = yacc_EOF; }
- break;
-
- case 149:
--#line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1136 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (1)].command);
- if (need_here_doc)
-@@ -3197,7 +3197,7 @@ yyreduce:
- break;
-
- case 150:
--#line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1149 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(1) - (2)].command)->type == cm_connection)
- (yyval.command) = connect_async_list ((yyvsp[(1) - (2)].command), (COMMAND *)NULL, '&');
-@@ -3216,7 +3216,7 @@ yyreduce:
- break;
-
- case 151:
--#line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1165 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- (yyval.command) = (yyvsp[(1) - (2)].command);
- if (need_here_doc)
-@@ -3232,17 +3232,17 @@ yyreduce:
- break;
-
- case 152:
--#line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1180 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
- break;
-
- case 153:
--#line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1182 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
- break;
-
- case 154:
--#line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1184 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(1) - (3)].command)->type == cm_connection)
- (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), '&');
-@@ -3252,22 +3252,22 @@ yyreduce:
- break;
-
- case 155:
--#line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1191 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
- break;
-
- case 156:
--#line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1194 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 157:
--#line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1198 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 158:
--#line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1200 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
- (yyvsp[(2) - (2)].command)->flags ^= CMD_INVERT_RETURN; /* toggle */
-@@ -3276,7 +3276,7 @@ yyreduce:
- break;
-
- case 159:
--#line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1206 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- if ((yyvsp[(2) - (2)].command))
- (yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number);
-@@ -3285,7 +3285,7 @@ yyreduce:
- break;
-
- case 160:
--#line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1212 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- ELEMENT x;
-
-@@ -3305,7 +3305,7 @@ yyreduce:
- break;
-
- case 161:
--#line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1229 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- ELEMENT x;
-
-@@ -3326,12 +3326,12 @@ yyreduce:
- break;
-
- case 162:
--#line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1249 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
- break;
-
- case 163:
--#line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1251 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- {
- /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
- COMMAND *tc;
-@@ -3357,22 +3357,22 @@ yyreduce:
- break;
-
- case 164:
--#line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1274 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.command) = (yyvsp[(1) - (1)].command); }
- break;
-
- case 165:
--#line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1278 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE; }
- break;
-
- case 166:
--#line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1280 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
-
- case 167:
--#line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1282 "/usr/src/local/bash/bash-4.3-patched/parse.y"
- { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
- break;
-
-@@ -3592,7 +3592,7 @@ yyreturn:
- }
-
-
--#line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
-+#line 1284 "/usr/src/local/bash/bash-4.3-patched/parse.y"
-
-
- /* Initial size to allocate for tokens, and the
-@@ -4850,6 +4850,16 @@ shell_ungetc (c)
- eol_ungetc_lookahead = c;
- }
-
-+char *
-+parser_remaining_input ()
-+{
-+ if (shell_input_line == 0)
-+ return 0;
-+ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
-+ return '\0'; /* XXX */
-+ return (shell_input_line + shell_input_line_index);
-+}
-+
- #ifdef INCLUDE_UNUSED
- /* Back the input pointer up by one, effectively `ungetting' a character. */
- static void
-@@ -6339,8 +6349,8 @@ xparse_dolparen (base, string, indp, fla
- reset_parser ();
- /* reset_parser clears shell_input_line and associated variables */
- restore_input_line_state (&ls);
-- if (interactive)
-- token_to_read = 0;
-+
-+ token_to_read = 0;
-
- /* Need to find how many characters parse_and_execute consumed, update
- *indp, if flags != 0, copy the portion of the string parsed into RET
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 29
-+#define PATCHLEVEL 30
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-031
-
-Bug-Reported-by: lolilolicon <lolilolicon@gmail.com>
-Bug-Reference-ID: <CAMtVo_Nz=32Oq=zWTb6=+8gUNXOo2rRvud1W4oPnA-cgVk_ZqQ@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00139.html
-
-Bug-Description:
-
-The new nameref assignment functionality introduced in bash-4.3 did not perform
-enough validation on the variable value and would create variables with
-invalid names.
-
-Patch (apply with `patch -p0'):
-
---- a/subst.h
-+++ b/subst.h
-@@ -47,6 +47,7 @@
- #define ASS_MKASSOC 0x0004
- #define ASS_MKGLOBAL 0x0008 /* force global assignment */
- #define ASS_NAMEREF 0x0010 /* assigning to nameref variable */
-+#define ASS_FROMREF 0x0020 /* assigning from value of nameref variable */
-
- /* Flags for the string extraction functions. */
- #define SX_NOALLOC 0x0001 /* just skip; don't return substring */
---- a/variables.c
-+++ b/variables.c
-@@ -2516,10 +2516,27 @@ bind_variable_internal (name, value, tab
- HASH_TABLE *table;
- int hflags, aflags;
- {
-- char *newval;
-+ char *newname, *newval;
- SHELL_VAR *entry;
-+#if defined (ARRAY_VARS)
-+ arrayind_t ind;
-+ char *subp;
-+ int sublen;
-+#endif
-
-+ newname = 0;
-+#if defined (ARRAY_VARS)
-+ if ((aflags & ASS_FROMREF) && (hflags & HASH_NOSRCH) == 0 && valid_array_reference (name))
-+ {
-+ newname = array_variable_name (name, &subp, &sublen);
-+ if (newname == 0)
-+ return (SHELL_VAR *)NULL; /* XXX */
-+ entry = hash_lookup (newname, table);
-+ }
-+ else
-+#endif
- entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table);
-+
- /* Follow the nameref chain here if this is the global variables table */
- if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table)
- {
-@@ -2550,6 +2567,16 @@ bind_variable_internal (name, value, tab
- var_setvalue (entry, make_variable_value (entry, value, 0));
- }
- }
-+#if defined (ARRAY_VARS)
-+ else if (entry == 0 && newname)
-+ {
-+ entry = make_new_array_variable (newname); /* indexed array by default */
-+ if (entry == 0)
-+ return entry;
-+ ind = array_expand_index (name, subp, sublen);
-+ bind_array_element (entry, ind, value, aflags);
-+ }
-+#endif
- else if (entry == 0)
- {
- entry = make_new_variable (name, table);
-@@ -2670,7 +2697,8 @@ bind_variable (name, value, flags)
- normal. */
- if (nameref_cell (nv) == 0)
- return (bind_variable_internal (nv->name, value, nvc->table, 0, flags));
-- return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags));
-+ /* XXX - bug here with ref=array[index] */
-+ return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags|ASS_FROMREF));
- }
- else
- v = nv;
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 30
-+#define PATCHLEVEL 31
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-032
-
-Bug-Reported-by: crispusfairbairn@gmail.com
-Bug-Reference-ID: <b5e499f7-3b98-408d-9f94-c0387580e73a@googlegroups.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00013.html
-
-Bug-Description:
-
-When bash is running in Posix mode, it allows signals -- including SIGCHLD --
-to interrupt the `wait' builtin, as Posix requires. However, the interrupt
-causes bash to not run a SIGCHLD trap for all exited children. This patch
-fixes the issue and restores the documented behavior in Posix mode.
-
-Patch (apply with `patch -p0'):
-
---- a/jobs.c
-+++ b/jobs.c
-@@ -3339,7 +3339,9 @@ itrace("waitchld: waitpid returns %d blo
- if (posixly_correct && this_shell_builtin && this_shell_builtin == wait_builtin)
- {
- interrupt_immediately = 0;
-- trap_handler (SIGCHLD); /* set pending_traps[SIGCHLD] */
-+ /* This was trap_handler (SIGCHLD) but that can lose traps if
-+ children_exited > 1 */
-+ queue_sigchld_trap (children_exited);
- wait_signal_received = SIGCHLD;
- /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
- run_pending_traps will call run_sigchld_trap later */
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 31
-+#define PATCHLEVEL 32
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-033
-
-Bug-Reported-by: mickael9@gmail.com, Jan Rome <jan.rome@gmail.com>
-Bug-Reference-ID: <20140907224046.382ED3610CC@mickael-laptop.localdomain>,
- <540D661D.50908@gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00029.html
- http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00030.html
-
-Bug-Description:
-
-Bash does not clean up the terminal state in all cases where bash or
-readline modifies it and bash is subsequently terminated by a fatal signal.
-This happens when the `read' builtin modifies the terminal settings, both
-when readline is active and when it is not. It occurs most often when a script
-installs a trap that exits on a signal without re-sending the signal to itself.
-
-Patch (apply with `patch -p0'):
-
---- a/shell.c
-+++ b/shell.c
-@@ -73,6 +73,7 @@
- #endif
-
- #if defined (READLINE)
-+# include <readline/readline.h>
- # include "bashline.h"
- #endif
-
-@@ -909,6 +910,14 @@ exit_shell (s)
- fflush (stdout); /* XXX */
- fflush (stderr);
-
-+ /* Clean up the terminal if we are in a state where it's been modified. */
-+#if defined (READLINE)
-+ if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function)
-+ (*rl_deprep_term_function) ();
-+#endif
-+ if (read_tty_modified ())
-+ read_tty_cleanup ();
-+
- /* Do trap[0] if defined. Allow it to override the exit status
- passed to us. */
- if (signal_is_trapped (0))
---- a/builtins/read.def
-+++ b/builtins/read.def
-@@ -140,10 +140,12 @@ static void reset_alarm __P((void));
- procenv_t alrmbuf;
- int sigalrm_seen;
-
--static int reading;
-+static int reading, tty_modified;
- static SigHandler *old_alrm;
- static unsigned char delim;
-
-+static struct ttsave termsave;
-+
- /* In all cases, SIGALRM just sets a flag that we check periodically. This
- avoids problems with the semi-tricky stuff we do with the xfree of
- input_string at the top of the unwind-protect list (see below). */
-@@ -188,7 +190,6 @@ read_builtin (list)
- struct stat tsb;
- SHELL_VAR *var;
- TTYSTRUCT ttattrs, ttset;
-- struct ttsave termsave;
- #if defined (ARRAY_VARS)
- WORD_LIST *alist;
- #endif
-@@ -221,7 +222,7 @@ read_builtin (list)
- USE_VAR(ps2);
- USE_VAR(lastsig);
-
-- sigalrm_seen = reading = 0;
-+ sigalrm_seen = reading = tty_modified = 0;
-
- i = 0; /* Index into the string that we are reading. */
- raw = edit = 0; /* Not reading raw input by default. */
-@@ -438,6 +439,8 @@ read_builtin (list)
- retval = 128+SIGALRM;
- goto assign_vars;
- }
-+ if (interactive_shell == 0)
-+ initialize_terminating_signals ();
- old_alrm = set_signal_handler (SIGALRM, sigalrm);
- add_unwind_protect (reset_alarm, (char *)NULL);
- #if defined (READLINE)
-@@ -482,7 +485,10 @@ read_builtin (list)
- i = silent ? ttfd_cbreak (fd, &ttset) : ttfd_onechar (fd, &ttset);
- if (i < 0)
- sh_ttyerror (1);
-+ tty_modified = 1;
- add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
-+ if (interactive_shell == 0)
-+ initialize_terminating_signals ();
- }
- }
- else if (silent) /* turn off echo but leave term in canonical mode */
-@@ -497,7 +503,10 @@ read_builtin (list)
- if (i < 0)
- sh_ttyerror (1);
-
-+ tty_modified = 1;
- add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
-+ if (interactive_shell == 0)
-+ initialize_terminating_signals ();
- }
-
- /* This *must* be the top unwind-protect on the stack, so the manipulation
-@@ -588,6 +597,8 @@ read_builtin (list)
- }
- else
- lastsig = 0;
-+ if (terminating_signal && tty_modified)
-+ ttyrestore (&termsave); /* fix terminal before exiting */
- CHECK_TERMSIG;
- eof = 1;
- break;
-@@ -978,6 +989,20 @@ ttyrestore (ttp)
- struct ttsave *ttp;
- {
- ttsetattr (ttp->fd, ttp->attrs);
-+ tty_modified = 0;
-+}
-+
-+void
-+read_tty_cleanup ()
-+{
-+ if (tty_modified)
-+ ttyrestore (&termsave);
-+}
-+
-+int
-+read_tty_modified ()
-+{
-+ return (tty_modified);
- }
-
- #if defined (READLINE)
---- a/builtins/common.h
-+++ b/builtins/common.h
-@@ -122,6 +122,10 @@ extern void bash_logout __P((void));
- /* Functions from getopts.def */
- extern void getopts_reset __P((int));
-
-+/* Functions from read.def */
-+extern void read_tty_cleanup __P((void));
-+extern int read_tty_modified __P((void));
-+
- /* Functions from set.def */
- extern int minus_o_option_value __P((char *));
- extern void list_minus_o_opts __P((int, int));
---- a/bashline.c
-+++ b/bashline.c
-@@ -202,6 +202,7 @@ extern int current_command_line_count, s
- extern int last_command_exit_value;
- extern int array_needs_making;
- extern int posixly_correct, no_symbolic_links;
-+extern int sigalrm_seen;
- extern char *current_prompt_string, *ps1_prompt;
- extern STRING_INT_ALIST word_token_alist[];
- extern sh_builtin_func_t *last_shell_builtin, *this_shell_builtin;
-@@ -4208,8 +4209,9 @@ bash_event_hook ()
- {
- /* If we're going to longjmp to top_level, make sure we clean up readline.
- check_signals will call QUIT, which will eventually longjmp to top_level,
-- calling run_interrupt_trap along the way. */
-- if (interrupt_state)
-+ calling run_interrupt_trap along the way. The check for sigalrm_seen is
-+ to clean up the read builtin's state. */
-+ if (terminating_signal || interrupt_state || sigalrm_seen)
- rl_cleanup_after_signal ();
- bashline_reset_event_hook ();
- check_signals_and_traps (); /* XXX */
---- a/sig.c
-+++ b/sig.c
-@@ -532,8 +532,10 @@ termsig_sighandler (sig)
- #if defined (READLINE)
- /* Set the event hook so readline will call it after the signal handlers
- finish executing, so if this interrupted character input we can get
-- quick response. */
-- if (interactive_shell && interactive && no_line_editing == 0)
-+ quick response. If readline is active or has modified the terminal we
-+ need to set this no matter what the signal is, though the check for
-+ RL_STATE_TERMPREPPED is possibly redundant. */
-+ if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE (RL_STATE_TERMPREPPED))
- bashline_set_event_hook ();
- #endif
-
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 32
-+#define PATCHLEVEL 33
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-034
-
-Bug-Reported-by: Dreamcat4 <dreamcat4@gmail.com>
-Bug-Reference-ID: <CAN39uTpAEs2GFu4ebC_SfSVMRTh-DJ9YanrY4BZZ3OO+CCHjng@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-05/msg00001.html
-
-Bug-Description:
-
-If neither the -f nor -v options is supplied to unset, and a name argument is
-found to be a function and unset, subsequent name arguments are not treated as
-variables before attempting to unset a function by that name.
-
-Patch (apply with `patch -p0'):
-
---- a/builtins/set.def
-+++ b/builtins/set.def
-@@ -751,9 +751,11 @@ unset_builtin (list)
- WORD_LIST *list;
- {
- int unset_function, unset_variable, unset_array, opt, nameref, any_failed;
-+ int global_unset_func, global_unset_var;
- char *name;
-
- unset_function = unset_variable = unset_array = nameref = any_failed = 0;
-+ global_unset_func = global_unset_var = 0;
-
- reset_internal_getopt ();
- while ((opt = internal_getopt (list, "fnv")) != -1)
-@@ -761,10 +763,10 @@ unset_builtin (list)
- switch (opt)
- {
- case 'f':
-- unset_function = 1;
-+ global_unset_func = 1;
- break;
- case 'v':
-- unset_variable = 1;
-+ global_unset_var = 1;
- break;
- case 'n':
- nameref = 1;
-@@ -777,7 +779,7 @@ unset_builtin (list)
-
- list = loptend;
-
-- if (unset_function && unset_variable)
-+ if (global_unset_func && global_unset_var)
- {
- builtin_error (_("cannot simultaneously unset a function and a variable"));
- return (EXECUTION_FAILURE);
-@@ -795,6 +797,9 @@ unset_builtin (list)
-
- name = list->word->word;
-
-+ unset_function = global_unset_func;
-+ unset_variable = global_unset_var;
-+
- #if defined (ARRAY_VARS)
- unset_array = 0;
- if (!unset_function && valid_array_reference (name))
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 33
-+#define PATCHLEVEL 34
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-035
-
-Bug-Reported-by: <romerox.adrian@gmail.com>
-Bug-Reference-ID: <CABV5r3zhPXmSKUe9uedeGc5YFBM2njJ1iVmY2h5neWdQpDBQug@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00045.html
-
-Bug-Description:
-
-A locale with a long name can trigger a buffer overflow and core dump. This
-applies on systems that do not have locale_charset in libc, are not using
-GNU libiconv, and are not using the libintl that ships with bash in lib/intl.
-
-Patch (apply with `patch -p0'):
-
---- a/lib/sh/unicode.c
-+++ b/lib/sh/unicode.c
-@@ -78,13 +78,15 @@ stub_charset ()
- s = strrchr (locale, '.');
- if (s)
- {
-- strcpy (charsetbuf, s+1);
-+ strncpy (charsetbuf, s+1, sizeof (charsetbuf) - 1);
-+ charsetbuf[sizeof (charsetbuf) - 1] = '\0';
- t = strchr (charsetbuf, '@');
- if (t)
- *t = 0;
- return charsetbuf;
- }
-- strcpy (charsetbuf, locale);
-+ strncpy (charsetbuf, locale, sizeof (charsetbuf) - 1);
-+ charsetbuf[sizeof (charsetbuf) - 1] = '\0';
- return charsetbuf;
- }
- #endif
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 34
-+#define PATCHLEVEL 35
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-036
-
-Bug-Reported-by: emanuelczirai@cryptolab.net
-Bug-Reference-ID: <f962e4f556da5ebfadaf7afe9c78a8cb@cryptolab.net>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00071.html
-
-Bug-Description:
-
-When evaluating and setting integer variables, and the assignment fails to
-create a variable (for example, when performing an operation on an array
-variable with an invalid subscript), bash attempts to dereference a null
-pointer, causing a segmentation violation.
-
-Patch (apply with `patch -p0'):
-
---- a/variables.c
-+++ b/variables.c
-@@ -2833,10 +2833,12 @@ bind_int_variable (lhs, rhs)
- #endif
- v = bind_variable (lhs, rhs, 0);
-
-- if (v && isint)
-- VSETATTR (v, att_integer);
--
-- VUNSETATTR (v, att_invisible);
-+ if (v)
-+ {
-+ if (isint)
-+ VSETATTR (v, att_integer);
-+ VUNSETATTR (v, att_invisible);
-+ }
-
- return (v);
- }
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 35
-+#define PATCHLEVEL 36
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-037
-
-Bug-Reported-by: Greg Wooledge <wooledg@eeg.ccf.org>
-Bug-Reference-ID: <20150204144240.GN13956@eeg.ccf.org>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00007.html
-
-Bug-Description:
-
-If an associative array uses `@' or `*' as a subscript, `declare -p' produces
-output that cannot be reused as input.
-
-Patch (apply with `patch -p0'):
-
---- a/assoc.c
-+++ b/assoc.c
-@@ -436,6 +436,8 @@ assoc_to_assign (hash, quoted)
- #if 1
- if (sh_contains_shell_metas (tlist->key))
- istr = sh_double_quote (tlist->key);
-+ else if (ALL_ELEMENT_SUB (tlist->key[0]) && tlist->key[1] == '\0')
-+ istr = sh_double_quote (tlist->key);
- else
- istr = tlist->key;
- #else
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 36
-+#define PATCHLEVEL 37
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-038
-
-Bug-Reported-by: worley@alum.mit.edu (Dale R. Worley)
-Bug-Reference-ID: <201406100051.s5A0pCeB014978@hobgoblin.ariadne.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00028.html
-
-Bug-Description:
-
-There are a number of instances where `time' is not recognized as a reserved
-word when the shell grammar says it should be.
-
-Patch (apply with `patch -p0'):
-
---- a/parse.y
-+++ b/parse.y
-@@ -2818,11 +2818,16 @@ time_command_acceptable ()
- case AND_AND:
- case OR_OR:
- case '&':
-+ case WHILE:
- case DO:
-+ case UNTIL:
-+ case IF:
- case THEN:
-+ case ELIF:
- case ELSE:
- case '{': /* } */
-- case '(': /* ) */
-+ case '(': /* )( */
-+ case ')': /* only valid in case statement */
- case BANG: /* ! time pipeline */
- case TIME: /* time time pipeline */
- case TIMEOPT: /* time -p time pipeline */
---- a/y.tab.c
-+++ b/y.tab.c
-@@ -5130,11 +5130,16 @@ time_command_acceptable ()
- case AND_AND:
- case OR_OR:
- case '&':
-+ case WHILE:
- case DO:
-+ case UNTIL:
-+ case IF:
- case THEN:
-+ case ELIF:
- case ELSE:
- case '{': /* } */
-- case '(': /* ) */
-+ case '(': /* )( */
-+ case ')': /* only valid in case statement */
- case BANG: /* ! time pipeline */
- case TIME: /* time time pipeline */
- case TIMEOPT: /* time -p time pipeline */
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 37
-+#define PATCHLEVEL 38
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-039
-
-Bug-Reported-by: SN <poczta-sn@gazeta.pl>
-Bug-Reference-ID: <54E2554C.205@gazeta.pl>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00060.html
-
-Bug-Description:
-
-Using the output of `declare -p' when run in a function can result in variables
-that are invisible to `declare -p'. This problem occurs when an assignment
-builtin such as `declare' receives a quoted compound array assignment as one of
-its arguments.
-
-Patch (apply with `patch -p0'):
-
---- a/arrayfunc.c
-+++ b/arrayfunc.c
-@@ -404,6 +404,9 @@ assign_array_var_from_word_list (var, li
- (*var->assign_func) (var, l->word->word, i, 0);
- else
- array_insert (a, i, l->word->word);
-+
-+ VUNSETATTR (var, att_invisible); /* no longer invisible */
-+
- return var;
- }
-
-@@ -634,6 +637,10 @@ assign_array_var_from_string (var, value
-
- if (nlist)
- dispose_words (nlist);
-+
-+ if (var)
-+ VUNSETATTR (var, att_invisible); /* no longer invisible */
-+
- return (var);
- }
-
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 38
-+#define PATCHLEVEL 39
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-040
-
-Bug-Reported-by: Jean Delvare <jdelvare@suse.de>
-Bug-Reference-ID: <20150609180231.5f463695@endymion.delvare>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00033.html
-
-Bug-Description:
-
-There is a memory leak that occurs when bash expands an array reference on
-the rhs of an assignment statement.
-
-Patch (apply with `patch -p0'):
-
---- a/subst.c
-+++ b/subst.c
-@@ -5782,7 +5782,7 @@ expand_arrayref:
- /* XXX - does this leak if name[@] or name[*]? */
- if (pflags & PF_ASSIGNRHS)
- {
-- temp = array_variable_name (name, &tt, (int *)0);
-+ var = array_variable_part (name, &tt, (int *)0);
- if (ALL_ELEMENT_SUB (tt[0]) && tt[1] == ']')
- temp = array_value (name, quoted|Q_DOUBLE_QUOTES, 0, &atype, &ind);
- else
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 39
-+#define PATCHLEVEL 40
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-041
-
-Bug-Reported-by: Hanno Böck <hanno@hboeck.de>
-Bug-Reference-ID: <20150623131106.6f111da9@pc1>, <20150707004640.0e61d2f9@pc1>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00089.html,
- http://lists.gnu.org/archive/html/bug-bash/2015-07/msg00018.html
-
-Bug-Description:
-
-There are several out-of-bounds read errors that occur when completing command
-lines where assignment statements appear before the command name. The first
-two appear only when programmable completion is enabled; the last one only
-happens when listing possible completions.
-
-Patch (apply with `patch -p0'):
-
---- a/bashline.c
-+++ b/bashline.c
-@@ -1468,10 +1468,23 @@ attempt_shell_completion (text, start, e
-
- os = start;
- n = 0;
-+ was_assignment = 0;
- s = find_cmd_start (os);
- e = find_cmd_end (end);
- do
- {
-+ /* Don't read past the end of rl_line_buffer */
-+ if (s > rl_end)
-+ {
-+ s1 = s = e1;
-+ break;
-+ }
-+ /* Or past point if point is within an assignment statement */
-+ else if (was_assignment && s > rl_point)
-+ {
-+ s1 = s = e1;
-+ break;
-+ }
- /* Skip over assignment statements preceding a command name. If we
- don't find a command name at all, we can perform command name
- completion. If we find a partial command name, we should perform
---- a/lib/readline/complete.c
-+++ b/lib/readline/complete.c
-@@ -689,6 +689,8 @@ printable_part (pathname)
-
- if (temp == 0 || *temp == '\0')
- return (pathname);
-+ else if (temp[1] == 0 && temp == pathname)
-+ return (pathname);
- /* If the basename is NULL, we might have a pathname like '/usr/src/'.
- Look for a previous slash and, if one is found, return the portion
- following that slash. If there's no previous slash, just return the
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 40
-+#define PATCHLEVEL 41
-
- #endif /* _PATCHLEVEL_H_ */
+++ /dev/null
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.3
-Patch-ID: bash43-042
-
-Bug-Reported-by: Nathan Neulinger <nneul@neulinger.org>
-Bug-Reference-ID: <558EFDF2.7060402@neulinger.org>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00096.html
-
-Bug-Description:
-
-There is a problem when parsing command substitutions containing `case'
-commands within pipelines that causes the parser to not correctly identify
-the end of the command substitution.
-
-Patch (apply with `patch -p0'):
-
---- a/parse.y
-+++ b/parse.y
-@@ -3708,6 +3708,8 @@ eof_error:
- /*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/
- tflags |= LEX_INWORD;
- lex_wlen = 0;
-+ if (tflags & LEX_RESWDOK)
-+ lex_rwlen = 0;
- }
- }
-
---- a/y.tab.c
-+++ b/y.tab.c
-@@ -6020,6 +6020,8 @@ eof_error:
- /*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/
- tflags |= LEX_INWORD;
- lex_wlen = 0;
-+ if (tflags & LEX_RESWDOK)
-+ lex_rwlen = 0;
- }
- }
-
---- a/patchlevel.h
-+++ b/patchlevel.h
-@@ -25,6 +25,6 @@
- regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
- looks for to find the patch level (for the sccs version string). */
-
--#define PATCHLEVEL 41
-+#define PATCHLEVEL 42
-
- #endif /* _PATCHLEVEL_H_ */
include $(TOPDIR)/rules.mk
PKG_NAME:=btrfs-progs
-PKG_VERSION:=4.13.2
+PKG_VERSION:=4.14
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/kernel/people/kdave/btrfs-progs/
-PKG_HASH:=75c7331f1306495dfffabe542ef6c5539808f0cdaebdf14fa8b7ab09c59448bd
+PKG_HASH:=09095cbc3bc2b6aa9d09c93146fb4d7437c51d2572f6918b74fe990fcdcb91af
+PKG_MAINTAINER:=Rosen Penev <rosenp@gmail.com>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-v$(PKG_VERSION)
PKG_LICENSE:=GPL-2.0
CONFIGURE_ARGS += \
--disable-backtrace \
--disable-convert \
- --disable-documentation
+ --disable-documentation \
+ --disable-zstd
EXTRA_CFLAGS=$(TARGET_CPPFLAGS)
+++ /dev/null
---- a/chunk-recover.c
-+++ b/chunk-recover.c
-@@ -887,7 +887,7 @@ static int scan_devices(struct recover_c
- for (i = 0; i < devidx; i++) {
- if (dev_scans[i].bytenr == -1)
- continue;
-- ret = pthread_tryjoin_np(t_scans[i],
-+ ret = pthread_join(t_scans[i],
- (void **)&t_rets[i]);
- if (ret == EBUSY) {
- all_done = 0;
include $(TOPDIR)/rules.mk
PKG_NAME:=ccid
-PKG_VERSION:=1.4.27
+PKG_VERSION:=1.4.28
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=https://alioth.debian.org/frs/download.php/file/4218
-PKG_HASH:=a660e269606986cb94840ad5ba802ffb0cd23dd12b98f69a35035e0deb9dd137
+PKG_SOURCE_URL:=https://alioth.debian.org/frs/download.php/file/4230
+PKG_HASH:=875836ac5d9d952b40dc1a253a726e74361671864d81337285a3260268f8ade0
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_LICENSE:=LGPL-2.1+
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=collectd
-PKG_VERSION:=5.7.2
-PKG_RELEASE:=2
+PKG_VERSION:=5.8.0
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://collectd.org/files/ \
https://github.com/collectd/collectd/releases/download/collectd-$(PKG_VERSION)
-PKG_HASH:=9d20a0221569a8d6b80bbc52b86e5e84965f5bafdbf5dfc3790e0fed0763e592
+PKG_HASH:=b06ff476bbf05533cb97ae6749262cc3c76c9969f032bd8496690084ddeb15c9
PKG_FIXUP:=autoreconf
PKG_REMOVE_FILES:=aclocal.m4 libltdl/aclocal.m4
curl_json \
curl_xml \
dbi \
+ dpdkevents \
dpdkstat \
drbd \
ethstat \
grpc \
hddtemp \
hugepages \
+ intel_pmu \
intel_rdt \
ipc \
ipmi \
lpar \
madwifi \
mbmon \
+ mcelog \
md \
memcachec \
memcached \
openldap \
openvz \
oracle \
+ ovs_events \
+ ovs_stats \
perl \
pf \
pinba \
serial \
sigrok \
smart \
+ snmp_agent \
statsd \
swap \
+ synproxy \
tape \
tokyotyrant \
turbostat \
--- a/src/rrdtool.c
+++ b/src/rrdtool.c
-@@ -61,6 +61,7 @@ typedef struct rrd_queue_s rrd_queue_t;
+@@ -60,6 +60,7 @@ typedef struct rrd_queue_s rrd_queue_t;
static const char *config_keys[] = {
"CacheTimeout", "CacheFlush", "CreateFilesAsync", "DataDir",
"StepSize", "HeartBeat", "RRARows", "RRATimespan",
"XFF", "WritesPerSecond", "RandomTimeout"};
static int config_keys_num = STATIC_ARRAY_SIZE(config_keys);
-@@ -78,6 +79,8 @@ static rrdcreate_config_t rrdcreate_conf
+@@ -77,6 +78,8 @@ static rrdcreate_config_t rrdcreate_conf
/* timespans = */ NULL,
/* timespans_num = */ 0,
/* consolidation_functions = */ NULL,
/* consolidation_functions_num = */ 0,
-@@ -971,6 +974,12 @@ static int rrd_config(const char *key, c
+@@ -950,6 +953,12 @@ static int rrd_config(const char *key, c
/* compar = */ rrd_compare_numeric);
free(value_copy);
--- a/src/daemon/plugin.c
+++ b/src/daemon/plugin.c
-@@ -1108,7 +1108,7 @@ static int plugin_insert_read(read_func_
+@@ -1099,7 +1099,7 @@ static int plugin_insert_read(read_func_
int status;
llentry_t *le;
+++ b/src/olsrd.c
@@ -585,7 +585,7 @@ static int olsrd_read(void) /* {{{ */
if (fh == NULL)
- return (-1);
+ return -1;
- fputs("\r\n", fh);
+ fputs("/all \r\n", fh);
+++ /dev/null
-From af01dd6fa3eb458e2fbb272703b0cae37ea54a9b Mon Sep 17 00:00:00 2001
-From: Marcin Jurkowski <marcin1j@gmail.com>
-Date: Tue, 11 Jul 2017 15:00:25 +0200
-Subject: [PATCH] uptime plugin: don't cache boot time and simplify Linux code
-
-Caching boottime on startup yields incorrect uptime values if system
-date changes after the daemon is started.
-This is almost certain to happen on embedded systems without RTC, where
-clock is set from NTP server at some point after boot process.
-
-On Linux, we can retrieve uptime directly by either reading /proc/uptime
-(it's sufficient to read a few bytes) or calling sysinfo() function.
-Use the latter since it's the most efficient way in speed, memory
-requirements and code simplicity terms.
----
- src/uptime.c | 71 ++++++++++++++++--------------------------------------------
- 1 file changed, 19 insertions(+), 52 deletions(-)
-
---- a/src/uptime.c
-+++ b/src/uptime.c
-@@ -25,8 +25,7 @@
- #include "plugin.h"
-
- #if KERNEL_LINUX
--#define STAT_FILE "/proc/stat"
--/* Using /proc filesystem to retrieve the boot time, Linux only. */
-+#include <sys/sysinfo.h>
- /* #endif KERNEL_LINUX */
-
- #elif HAVE_LIBKSTAT
-@@ -53,8 +52,6 @@
- /*
- * Global variables
- */
--/* boottime always used, no OS distinction */
--static time_t boottime;
-
- #if HAVE_LIBKSTAT
- extern kstat_ctl_t *kc;
-@@ -72,8 +69,6 @@ static void uptime_submit(gauge_t value)
- plugin_dispatch_values(&vl);
- }
-
--static int uptime_init(void) /* {{{ */
--{
- /*
- * On most unix systems the uptime is calculated by looking at the boot
- * time (stored in unix time, since epoch) and the current one. We are
-@@ -84,48 +79,21 @@ static int uptime_init(void) /* {{{ */
- * the boot time, the plugin is unregistered and there is no chance to
- * try again later. Nevertheless, this is very unlikely to happen.
- */
--
-+static time_t uptime_get_sys(void) { /* {{{ */
-+ time_t result;
- #if KERNEL_LINUX
-- unsigned long starttime;
-- char buffer[1024];
-- int ret;
-- FILE *fh;
--
-- ret = 0;
--
-- fh = fopen(STAT_FILE, "r");
-+ struct sysinfo info;
-+ int status;
-
-- if (fh == NULL) {
-+ status = sysinfo(&info);
-+ if (status != 0) {
- char errbuf[1024];
-- ERROR("uptime plugin: Cannot open " STAT_FILE ": %s",
-+ ERROR("uptime plugin: Error calling sysinfo: %s",
- sstrerror(errno, errbuf, sizeof(errbuf)));
- return (-1);
- }
-
-- while (fgets(buffer, 1024, fh) != NULL) {
-- /* look for the btime string and read the value */
-- ret = sscanf(buffer, "btime %lu", &starttime);
-- /* avoid further loops if btime has been found and read
-- * correctly (hopefully) */
-- if (ret == 1)
-- break;
-- }
--
-- fclose(fh);
--
-- /* loop done, check if no value has been found/read */
-- if (ret != 1) {
-- ERROR("uptime plugin: No value read from " STAT_FILE "");
-- return (-1);
-- }
--
-- boottime = (time_t)starttime;
--
-- if (boottime == 0) {
-- ERROR("uptime plugin: btime read from " STAT_FILE ", "
-- "but `boottime' is zero!");
-- return (-1);
-- }
-+ result = (time_t)info.uptime;
- /* #endif KERNEL_LINUX */
-
- #elif HAVE_LIBKSTAT
-@@ -159,13 +127,13 @@ static int uptime_init(void) /* {{{ */
- return (-1);
- }
-
-- boottime = (time_t)knp->value.ui32;
--
-- if (boottime == 0) {
-+ if (knp->value.ui32 == 0) {
- ERROR("uptime plugin: kstat_data_lookup returned success, "
- "but `boottime' is zero!");
- return (-1);
- }
-+
-+ result = time(NULL) - (time_t)knp->value.ui32;
- /* #endif HAVE_LIBKSTAT */
-
- #elif HAVE_SYS_SYSCTL_H
-@@ -186,13 +154,13 @@ static int uptime_init(void) /* {{{ */
- return (-1);
- }
-
-- boottime = boottv.tv_sec;
--
-- if (boottime == 0) {
-+ if (boottv.tv_sec == 0) {
- ERROR("uptime plugin: sysctl(3) returned success, "
- "but `boottime' is zero!");
- return (-1);
- }
-+
-+ result = time(NULL) - boottv.tv_sec;
- /* #endif HAVE_SYS_SYSCTL_H */
-
- #elif HAVE_PERFSTAT
-@@ -212,18 +180,18 @@ static int uptime_init(void) /* {{{ */
- if (hertz <= 0)
- hertz = HZ;
-
-- boottime = time(NULL) - cputotal.lbolt / hertz;
-+ result = cputotal.lbolt / hertz;
- #endif /* HAVE_PERFSTAT */
-
-- return (0);
--} /* }}} int uptime_init */
-+ return result;
-+} /* }}} int uptime_get_sys */
-
- static int uptime_read(void) {
- gauge_t uptime;
- time_t elapsed;
-
- /* calculate the amount of time elapsed since boot, AKA uptime */
-- elapsed = time(NULL) - boottime;
-+ elapsed = uptime_get_sys();
-
- uptime = (gauge_t)elapsed;
-
-@@ -233,6 +201,5 @@ static int uptime_read(void) {
- }
-
- void module_register(void) {
-- plugin_register_init("uptime", uptime_init);
- plugin_register_read("uptime", uptime_read);
- } /* void module_register */
--- a/configure.ac
+++ b/configure.ac
-@@ -3278,7 +3278,7 @@ then
- SAVE_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $with_libmodbus_cflags"
+@@ -3327,9 +3327,9 @@ if test "x$with_libmodbus" = "xyes"; the
+ SAVE_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $with_libmodbus_cflags"
-- AC_CHECK_HEADERS(modbus.h, [], [with_libmodbus="no (modbus.h not found)"])
-+ AC_CHECK_HEADERS(modbus/modbus.h, [], [with_libmodbus="no (modbus/modbus.h not found)"])
+- AC_CHECK_HEADERS([modbus.h],
++ AC_CHECK_HEADERS([modbus/modbus.h],
+ [with_libmodbus="yes"],
+- [with_libmodbus="no (modbus.h not found)"]
++ [with_libmodbus="no (modbus/modbus.h not found)"]
+ )
- CPPFLAGS="$SAVE_CPPFLAGS"
- fi
+ CPPFLAGS="$SAVE_CPPFLAGS"
--- a/src/modbus.c
+++ b/src/modbus.c
@@ -26,7 +26,7 @@
--- a/configure.ac
+++ b/configure.ac
-@@ -830,10 +830,7 @@ fi
- have_cpuid_h="no"
- AC_CHECK_HEADERS(cpuid.h, [have_cpuid_h="yes"])
+@@ -526,11 +526,7 @@ if test "x$ac_system" = "xLinux"; then
+ [have_cpuid_h="no (cpuid.h not found)"]
+ )
--have_capability="yes"
--AC_CHECK_HEADERS(sys/capability.h,
-- [have_capability="yes"],
-- [have_capability="no (<sys/capability.h> not found)"])
-+have_capability="no"
- if test "x$have_capability" = "xyes"; then
- AC_CHECK_LIB(cap, cap_get_proc,
- [have_capability="yes"],
+- AC_CHECK_HEADERS([sys/capability.h],
+- [have_capability="yes"],
+- [have_capability="no (<sys/capability.h> not found)"]
+- )
+-
++ have_capability="no"
+ if test "x$have_capability" = "xyes"; then
+ AC_CHECK_LIB([cap], [cap_get_proc],
+ [have_capability="yes"],
--- a/configure.ac
+++ b/configure.ac
-@@ -804,6 +804,9 @@ AC_CACHE_CHECK([whether clock_boottime a
- [c_cv_have_clock_boottime_monotonic="no"]))
-
+@@ -710,6 +710,11 @@ AC_CACHE_CHECK([whether clock_boottime a
+ ]
+ )
+# For the iwinfo plugin
-+AC_CHECK_LIB(iwinfo, iwinfo_backend, [with_iwinfo="yes"], [with_iwinfo="no (libiwinfo not found)"], [])
-+
- # For the turbostat plugin
- have_asm_msrindex_h="no"
- AC_CHECK_HEADERS(asm/msr-index.h, [have_asm_msrindex_h="yes"])
-@@ -6035,6 +6038,7 @@ plugin_interface="no"
++AC_CHECK_LIB([iwinfo], [iwinfo_backend],
++ [with_iwinfo="yes"],
++ [with_iwinfo="no (libiwinfo not found)"]
++)
+
+ #
+ # Checks for typedefs, structures, and compiler characteristics.
+@@ -6127,6 +6132,7 @@ plugin_ipc="no"
plugin_ipmi="no"
plugin_ipvs="no"
plugin_irq="no"
+plugin_iwinfo="no"
plugin_load="no"
plugin_log_logstash="no"
- plugin_memory="no"
-@@ -6505,6 +6509,7 @@ AC_PLUGIN([ipmi], [$plugi
+ plugin_mcelog="no"
+@@ -6538,6 +6544,7 @@ AC_PLUGIN([ipmi], [$plugi
AC_PLUGIN([iptables], [$with_libiptc], [IPTables rule counters])
AC_PLUGIN([ipvs], [$plugin_ipvs], [IPVS connection statistics])
AC_PLUGIN([irq], [$plugin_irq], [IRQ statistics])
AC_PLUGIN([java], [$with_java], [Embed the Java Virtual Machine])
AC_PLUGIN([load], [$plugin_load], [System load])
AC_PLUGIN([log_logstash], [$plugin_log_logstash], [Logstash json_event compatible logging])
-@@ -6886,6 +6891,7 @@ AC_MSG_RESULT([ libyajl . . . . . . .
+@@ -6899,6 +6906,7 @@ AC_MSG_RESULT([ libyajl . . . . . . .
AC_MSG_RESULT([ oracle . . . . . . . $with_oracle])
AC_MSG_RESULT([ protobuf-c . . . . . $have_protoc_c])
AC_MSG_RESULT([ protoc 3 . . . . . . $have_protoc3])
AC_MSG_RESULT()
AC_MSG_RESULT([ Features:])
AC_MSG_RESULT([ daemon mode . . . . . $enable_daemon])
-@@ -6942,6 +6948,7 @@ AC_MSG_RESULT([ ipmi . . . . . . . .
+@@ -6957,6 +6965,7 @@ AC_MSG_RESULT([ ipmi . . . . . . . .
AC_MSG_RESULT([ iptables . . . . . . $enable_iptables])
AC_MSG_RESULT([ ipvs . . . . . . . . $enable_ipvs])
AC_MSG_RESULT([ irq . . . . . . . . . $enable_irq])
AC_MSG_RESULT([ logfile . . . . . . . $enable_logfile])
--- a/src/collectd.conf.in
+++ b/src/collectd.conf.in
-@@ -135,6 +135,7 @@
+@@ -137,6 +137,7 @@
#@BUILD_PLUGIN_IPTABLES_TRUE@LoadPlugin iptables
#@BUILD_PLUGIN_IPVS_TRUE@LoadPlugin ipvs
#@BUILD_PLUGIN_IRQ_TRUE@LoadPlugin irq
#@BUILD_PLUGIN_JAVA_TRUE@LoadPlugin java
@BUILD_PLUGIN_LOAD_TRUE@@BUILD_PLUGIN_LOAD_TRUE@LoadPlugin load
#@BUILD_PLUGIN_LPAR_TRUE@LoadPlugin lpar
-@@ -649,6 +650,12 @@
+@@ -720,6 +721,12 @@
# IgnoreSelected true
#</Plugin>
# JVMArg "-Djava.class.path=@prefix@/share/collectd/java/collectd-api.jar"
--- a/src/collectd.conf.pod
+++ b/src/collectd.conf.pod
-@@ -3143,6 +3143,27 @@ and all other interrupts are collected.
+@@ -3503,6 +3503,27 @@ and all other interrupts are collected.
=back
+ plugin_register_config("iwinfo", iwinfo_config, config_keys, config_keys_num);
+ plugin_register_read("iwinfo", iwinfo_read);
+}
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -568,6 +568,13 @@ irq_la_SOURCES = irq.c
- irq_la_LDFLAGS = $(PLUGIN_LDFLAGS)
- endif
-
-+if BUILD_PLUGIN_IWINFO
-+pkglib_LTLIBRARIES += iwinfo.la
-+iwinfo_la_SOURCES = iwinfo.c
-+iwinfo_la_LDFLAGS = -module -avoid-version
-+iwinfo_la_LIBADD = -liwinfo
-+endif
-+
- if BUILD_PLUGIN_JAVA
- pkglib_LTLIBRARIES += java.la
- java_la_SOURCES = java.c
--- a/src/types.db
+++ b/src/types.db
-@@ -260,6 +260,7 @@ voltage_threshold value:GAUGE:U:U,
+@@ -269,6 +269,7 @@ voltage_threshold value:GAUGE:U:U,
vs_memory value:GAUGE:0:9223372036854775807
vs_processes value:GAUGE:0:65535
vs_threads value:GAUGE:0:65535
#
# Legacy types
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -983,6 +983,14 @@ irq_la_LDFLAGS = $(PLUGIN_LDFLAGS)
+ irq_la_LIBADD = libignorelist.la
+ endif
+
++if BUILD_PLUGIN_IWINFO
++pkglib_LTLIBRARIES += iwinfo.la
++iwinfo_la_SOURCES = src/iwinfo.c
++#iwinfo_la_LDFLAGS = -module -avoid-version
++iwinfo_la_LDFLAGS = $(PLUGIN_LDFLAGS)
++iwinfo_la_LIBADD = -liwinfo libignorelist.la
++endif
++
+ if BUILD_PLUGIN_JAVA
+ pkglib_LTLIBRARIES += java.la
+ java_la_SOURCES = src/java.c
--- /dev/null
+#
+# Copyright (C) 2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=crconf
+PKG_VERSION:=pre2
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@SF/crconf
+PKG_HASH:=15d39b599acda93a50f473190e702d593ba13613b6ed31711f3584b5726b81b8
+
+PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/crconf
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=Linux crypto layer configuraton tool
+ URL:=https://sourceforge.net/projects/crconf
+endef
+
+define Package/crconf/description
+ Linux crypto layer configuraton tool.
+ Use this to manipulate kernel Crypto API/framework stuff,
+ like drivers, templates, etc.
+ Example: https://wiki.strongswan.org/projects/strongswan/wiki/Pcrypt
+ Most interesting stuff you can find on https://wiki.strongswan.org
+endef
+
+define Package/crconf/install
+ $(INSTALL_DIR) $(1)/sbin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/sbin/crconf $(1)/sbin
+endef
+
+$(eval $(call BuildPackage,crconf))
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=a705360197260d28535746ae98c461ba2cfb7a9e
PKG_MIRROR_HASH:=334a8f4df18e36e97459b4c6669c9873c13c4f5dae25243cf41ff70c2ce661d8
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING
PKG_MAINTAINER:=Ansuel Smith <ansuelsmth@gmail.com>
FILES:= \
$(PKG_BUILD_DIR)/cryptodev.$(LINUX_KMOD_SUFFIX)
AUTOLOAD:=$(call AutoLoad,50,$(CRYPTODEV_AUTOLOAD))
+ MODPARAMS.cryptodev:= cryptodev_verbosity=-1
endef
define KernelPackage/cryptodev/description
$(CP) $(PKG_BUILD_DIR)/crypto/cryptodev.h $(STAGING_DIR)/usr/include/crypto/
endef
-define KernelPackage/cryptodev/install
- $(INSTALL_DIR) $(1)/etc/modules.d
- $(INSTALL_DATA) ./files/cryptodev.modules $(1)/etc/modules.d/50-cryptodev
- $(INSTALL_DIR) $(1)/lib/modules/$(LINUX_VERSION)
- $(INSTALL_DIR) $(1)/usr/sbin
-endef
-
$(eval $(call KernelPackage,cryptodev))
+++ /dev/null
-cryptodev cryptodev_verbosity=-1
include $(TOPDIR)/rules.mk
PKG_NAME:=gawk
-PKG_VERSION:=4.1.4
+PKG_VERSION:=4.2.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GNU/gawk
-PKG_HASH:=53e184e2d0f90def9207860531802456322be091c7b48f23fdc79cda65adc266
+PKG_HASH:=d4f3cd31c001fd0ed52832d4fbfbdfeaa38ad541c182f80ff8fdf87324a6a9f2
PKG_LICENSE:=GPL
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=haveged
-PKG_VERSION:=1.9.1
-PKG_RELEASE:=5
+PKG_VERSION:=1.9.2
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/haveged \
http://www.issihosts.com/$(PKG_NAME)
-PKG_HASH:=9c2363ed9542a6784ff08e247182137e71f2ddb79e8e6c1ac4ad50d21ced3715
+PKG_HASH:=f77d9adbdf421b61601fa29faa9ce3b479d910f73c66b9e364ba8642ccbfbe70
PKG_LICENSE:=GPLv3
PKG_MAINTAINER:=Hannu Nyman <hannu.nyman@iki.fi>
include $(TOPDIR)/rules.mk
PKG_NAME:=hd-idle
-PKG_VERSION:=1.04
-PKG_RELEASE:=2
+PKG_VERSION:=1.05
+PKG_RELEASE:=1
PKG_MAINTAINER:=Lim Guo Wei <limguowei@gmail.com>
PKG_LICENSE:=GPL-2.0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
PKG_SOURCE_URL:=@SF/$(PKG_NAME)
-PKG_HASH:=308e90104d7ee8124db50dc9b0d8c61c6afc65d524de2e75f76d84f80674fbdc
+PKG_HASH:=4efefe79d145b50e055582730d9d685e485da3df3dad90fef030036d52aa3a0c
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
include $(TOPDIR)/rules.mk
PKG_NAME:=hdparm
-PKG_VERSION:=9.50
+PKG_VERSION:=9.52
PKG_RELEASE:=1
PKG_USE_MIPS16:=0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/$(PKG_NAME)
-PKG_HASH:=0892b44bd817c251264a24f6ecbbb010958033e0395d2030f25f1c5608ac780e
+PKG_HASH:=c3429cd423e271fa565bf584598fd751dd2e773bb7199a592b06b5a61cec4fb6
PKG_MAINTAINER:=Richard Kunze <richard.kunze@web.de>
PKG_LICENSE:=BSD-Style Open Source License
include $(TOPDIR)/rules.mk
PKG_NAME:=LVM2
-PKG_VERSION:=2.02.168
+PKG_VERSION:=2.02.176
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0 LGPL-2.1
PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
PKG_SOURCE_URL:=ftp://sources.redhat.com/pub/lvm2/releases \
http://ftp.gwdg.de/pub/linux/sources.redhat.com/lvm2/
-PKG_HASH:=23a3d1cddd41b3ef51812ebf83e9fa491f502fe74130d4263be327a91914660d
+PKG_HASH:=dece83628c2c78a267a126ce6046d506582185ae5d40fb8d59b56547fccea473
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME).$(PKG_VERSION)
--- a/make.tmpl.in
+++ b/make.tmpl.in
-@@ -19,7 +19,7 @@ SHELL = /bin/sh
+@@ -19,7 +19,7 @@ SHELL = @SHELL@
# Allow environment to override any built-in default value for CC.
# If there is a built-in default, CC is NOT set to @CC@ here.
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
-@@ -1843,7 +1843,7 @@ struct cmd_context *create_toolcontext(u
+@@ -1869,7 +1869,7 @@ struct cmd_context *create_toolcontext(u
/* FIXME Make this configurable? */
reset_lvm_errno(1);
/* Set in/out stream buffering before glibc */
if (set_buffering) {
/* Allocate 2 buffers */
-@@ -2224,7 +2224,7 @@ void destroy_toolcontext(struct cmd_cont
+@@ -2249,7 +2249,7 @@ void destroy_toolcontext(struct cmd_cont
if (cmd->libmem)
dm_pool_destroy(cmd->libmem);
if (is_valid_fd(STDIN_FILENO) &&
--- a/tools/lvmcmdline.c
+++ b/tools/lvmcmdline.c
-@@ -1815,6 +1815,7 @@ int lvm_split(char *str, int *argc, char
+@@ -3074,6 +3074,7 @@ int lvm_split(char *str, int *argc, char
/* Make sure we have always valid filedescriptors 0,1,2 */
static int _check_standard_fds(void)
{
int err = is_valid_fd(STDERR_FILENO);
if (!is_valid_fd(STDIN_FILENO) &&
-@@ -1841,6 +1842,12 @@ static int _check_standard_fds(void)
+@@ -3100,6 +3101,12 @@ static int _check_standard_fds(void)
strerror(errno));
return 0;
}
select KERNEL_CGROUPS
select KERNEL_NAMESPACES
select KERNEL_LXC_MISC
+ select KERNEL_CGROUP_SCHED
+ select KERNEL_FAIR_GROUP_SCHED
+ select KERNEL_RT_GROUP_SCHED
+ select KERNEL_CGROUP_CPUACCT
+ select KERNEL_MEMCG
+ select KERNEL_MEMCG_KMEM
+ select KERNEL_CPUSETS
+ select PACKAGE_kmod-ikconfig
help
Select needed kernel options for LXC related utilities. Options
include cgroups, namespaces and other miscellaneous options. These
Build LXC with support for seccomp filters.
Select libseccomp which also pulls-in the needed kernel features.
+config LXC_NETWORKING
+ bool "Enable networking support for LXC containers"
+ default n
+ select PACKAGE_kmod-veth
+ select PACKAGE_kmod-macvlan
+ help
+ Enable "veth pair device" and "macvlan"
+
endmenu
include $(TOPDIR)/rules.mk
PKG_NAME:=lxc
-PKG_VERSION:=1.1.5
-PKG_RELEASE:=3
+PKG_VERSION:=2.1.1
+PKG_RELEASE:=1
PKG_LICENSE:=LGPL-2.1+ BSD-2-Clause GPL-2.0
-PKG_MAINTAINER:=Luka Perkov <luka@openwrt.org>
+PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://linuxcontainers.org/downloads/lxc/
-PKG_HASH:=9588ad1b04e114ee7370f690c65131e28098b28d2521d97c73557d11897ed0be
+PKG_SOURCE_URL:=https://linuxcontainers.org/downloads/lxc/
+PKG_HASH:=68663a67450a8d6734e137eac54cc7077209fb15c456eec401a2c26e6386eff6
PKG_BUILD_DEPENDS:=lua
PKG_BUILD_PARALLEL:=1
include $(INCLUDE_DIR)/package.mk
LXC_APPLETS_BIN += \
- attach autostart cgroup clone config console create destroy device \
+ attach autostart cgroup copy config console create destroy device \
execute freeze info monitor snapshot start stop unfreeze unshare \
- usernsexec wait
+ usernsexec wait top ls
LXC_APPLETS_LIB += \
monitord user-nic
LXC_SCRIPTS += \
- checkconfig ls top
+ checkconfig
DEPENDS_APPLETS = +libpthread +libcap +liblxc
DEPENDS_create = +lxc-configs +lxc-hooks +lxc-templates +flock
-DEPENDS_ls = +lxc-config
-DEPENDS_top = +lxc-lua +luafilesystem @BROKEN
-
-
define Package/lxc/Default
SECTION:=utils
CATEGORY:=Utilities
define Package/lxc-lua
$(call Package/lxc/Default)
TITLE:=LXC Lua bindings
- DEPENDS:= lxc +liblua +liblxc +luafilesystem
+ DEPENDS:= lxc +liblua +liblxc
endef
define Package/lxc-init
endef
CONFIGURE_ARGS += \
+ --disable-gnutls \
--disable-apparmor \
--disable-doc \
--disable-examples \
--- /dev/null
+--- a/src/lxc/storage/aufs.h
++++ b/src/lxc/storage/aufs.h
+@@ -24,7 +24,6 @@
+ #ifndef __LXC_AUFS_H
+ #define __LXC_AUFS_H
+
+-#define _GNU_SOURCE
+ #include <stdbool.h>
+ #include <stdio.h>
+ #include <stdint.h>
--- /dev/null
+--- a/src/lxc/confile_utils.c
++++ b/src/lxc/confile_utils.c
+@@ -677,7 +677,7 @@
+ char *endptr = NULL;
+
+ if (strncmp(*value, "unlimited", sizeof("unlimited") - 1) == 0) {
+- *res = RLIM_INFINITY;
++ *res = (unsigned long)RLIM_INFINITY;
+ *value += sizeof("unlimited") - 1;
+ return true;
+ }
--- a/configure.ac
+++ b/configure.ac
-@@ -31,30 +31,6 @@ AC_CANONICAL_HOST
- AM_PROG_CC_C_O
- AC_GNU_SOURCE
+@@ -47,34 +47,6 @@ AC_GNU_SOURCE
+ LT_INIT
+ AC_SUBST([LIBTOOL_DEPS])
-# Detect the distribution. This is used for the default configuration and
-# for some distro-specific build options.
-AC_MSG_CHECKING([host distribution])
--AC_ARG_WITH(distro, AS_HELP_STRING([--with-distro=DISTRO], [Specify the Linux distribution to target: One of redhat, oracle, centos, fedora, suse, gentoo, debian, arch, slackware, paldo, openmandriva or pardus.]))
+-AC_ARG_WITH(distro, AS_HELP_STRING([--with-distro=DISTRO], [Specify the Linux distribution to target: One of redhat, oracle, centos, fedora, suse, gentoo, debian, arch, slackware, plamo, paldo, openmandriva, pardus, sparclinux, altlinux.]))
-if type lsb_release >/dev/null 2>&1 && test "z$with_distro" = "z"; then
- with_distro=`lsb_release -is`
-fi
-if test "z$with_distro" = "z"; then
- AC_CHECK_FILE(/etc/redhat-release,with_distro="redhat")
- AC_CHECK_FILE(/etc/oracle-release,with_distro="oracle")
+- AC_CHECK_FILE(/etc/sparclinux-release,with_distro="sparclinux")
- AC_CHECK_FILE(/etc/centos-release,with_distro="centos")
- AC_CHECK_FILE(/etc/fedora-release,with_distro="fedora")
- AC_CHECK_FILE(/etc/SuSE-release,with_distro="suse")
- AC_CHECK_FILE(/etc/debian_version,with_distro="debian")
- AC_CHECK_FILE(/etc/arch-release,with_distro="arch")
- AC_CHECK_FILE(/etc/slackware-version,with_distro="slackware")
+- AC_CHECK_FILE(/etc/plamo-version,with_distro="plamo")
- AC_CHECK_FILE(/etc/frugalware-release,with_distro="frugalware")
- AC_CHECK_FILE(/etc/mandrakelinux-release, with_distro="openmandriva")
- AC_CHECK_FILE(/etc/mandriva-release,with_distro="openmandriva")
- AC_CHECK_FILE(/etc/pardus-release,with_distro="pardus")
+- AC_CHECK_FILE(/etc/altlinux-release,with_distro="altlinux")
+- AC_CHECK_FILE(/etc/pld-release,with_distro="pld")
-fi
-with_distro=`echo ${with_distro} | tr '[[:upper:]]' '[[:lower:]]'`
-
- if test "z$with_distro" = "z"; then
- with_distro="unknown"
+ if test "z$with_distro" = "zforsparc"; then
+ with_distro="sparclinux"
fi
--- a/src/lxc/utils.h
+++ b/src/lxc/utils.h
-@@ -41,11 +41,7 @@ extern int mkdir_p(const char *dir, mode
+@@ -59,11 +59,7 @@ extern int mkdir_p(const char *dir, mode_t mode);
extern char *get_rundir(void);
/* Define getline() if missing from the C library */
---- a/src/lxc/lxc-checkconfig.in
-+++ b/src/lxc/lxc-checkconfig.in
-@@ -4,6 +4,17 @@
+--- a/src/lxc/tools/lxc-checkconfig.in
++++ b/src/lxc/tools/lxc-checkconfig.in
+@@ -3,6 +3,17 @@
+ # Allow environment variables to override config
: ${CONFIG:=/proc/config.gz}
- : ${GREP:=zgrep}
: ${MODNAME:=configs}
+: ${ZGREP:=zgrep}
+: ${GUNZIP:=gunzip}
+ GREP=grep
+fi
- SETCOLOR_SUCCESS="printf \\033[1;32m"
- SETCOLOR_FAILURE="printf \\033[1;31m"
+ CAT="cat"
+
--- a/templates/lxc-download.in
+++ b/templates/lxc-download.in
-@@ -494,15 +494,7 @@ fi
+@@ -505,20 +505,7 @@ fi
# Unpack the rootfs
echo "Unpacking the rootfs"
-EXCLUDES=""
-excludelist=$(relevant_file excludes)
-if [ -f "${excludelist}" ]; then
-- while read line; do
-- EXCLUDES="$EXCLUDES --exclude=$line"
-- done < $excludelist
+- while read -r line; do
+- EXCLUDES="${EXCLUDES} --exclude=${line}"
+- done < "${excludelist}"
-fi
-
+-# Do not surround ${EXCLUDES} by quotes. This does not work. The solution could
+-# use array but this is not POSIX compliant. The only POSIX compliant solution
+-# is to use a function wrapper, but the latter can't be used here as the args
+-# are dynamic. We thus need to ignore the warning brought by shellcheck.
+-# shellcheck disable=SC2086
-tar --anchored ${EXCLUDES} --numeric-owner -xpJf \
+tar --numeric-owner -xpJf \
- ${LXC_CACHE_PATH}/rootfs.tar.xz -C ${LXC_ROOTFS}
+ "${LXC_CACHE_PATH}/rootfs.tar.xz" -C "${LXC_ROOTFS}"
- mkdir -p ${LXC_ROOTFS}/dev/pts/
+ mkdir -p "${LXC_ROOTFS}/dev/pts/"
+++ /dev/null
---- a/templates/lxc-download.in
-+++ b/templates/lxc-download.in
-@@ -39,7 +39,7 @@ DOWNLOAD_LIST_IMAGES="false"
- DOWNLOAD_MODE="system"
- DOWNLOAD_READY_GPG="false"
- DOWNLOAD_RELEASE=
--DOWNLOAD_SERVER="images.linuxcontainers.org"
-+DOWNLOAD_SERVER="virtualwrt.org/containers/"
- DOWNLOAD_SHOW_GPG_WARNING="true"
- DOWNLOAD_SHOW_HTTP_WARNING="true"
- DOWNLOAD_TARGET="system"
-@@ -257,14 +257,6 @@ for bin in tar xz wget; do
- fi
- done
-
--# Check for GPG
--if [ "$DOWNLOAD_VALIDATE" = "true" ]; then
-- if ! type gpg >/dev/null 2>&1; then
-- echo "ERROR: Missing recommended tool: gpg" 1>&2
-- echo "You can workaround this by using --no-validate." 1>&2
-- exit 1
-- fi
--fi
-
- # Check that we have all variables we need
- if [ -z "$LXC_NAME" ] || [ -z "$LXC_PATH" ] || [ -z "$LXC_ROOTFS" ]; then
-@@ -456,16 +448,9 @@ if [ "$DOWNLOAD_USE_CACHE" = "false" ];
- echo "Downloading the rootfs"
- download_file $DOWNLOAD_URL/rootfs.tar.xz \
- ${DOWNLOAD_TEMP}/rootfs.tar.xz normal
-- download_sig $DOWNLOAD_URL/rootfs.tar.xz.asc \
-- ${DOWNLOAD_TEMP}/rootfs.tar.xz.asc normal
-- gpg_validate ${DOWNLOAD_TEMP}/rootfs.tar.xz.asc
--
- echo "Downloading the metadata"
- download_file $DOWNLOAD_URL/meta.tar.xz \
- ${DOWNLOAD_TEMP}/meta.tar.xz normal
-- download_sig $DOWNLOAD_URL/meta.tar.xz.asc \
-- ${DOWNLOAD_TEMP}/meta.tar.xz.asc normal
-- gpg_validate ${DOWNLOAD_TEMP}/meta.tar.xz.asc
-
- if [ -d $LXC_CACHE_PATH ]; then
- rm -Rf $LXC_CACHE_PATH
+++ /dev/null
---- a/src/lxc/bdev.c
-+++ b/src/lxc/bdev.c
-@@ -1939,7 +1939,7 @@ static int find_free_loopdev(int *retfd,
-
- static int loop_mount(struct bdev *bdev)
- {
-- int lfd, ffd = -1, ret = -1;
-+ int lfd = -1, ffd = -1, ret = -1;
- struct loop_info64 lo;
- char loname[100];
-
-@@ -1977,7 +1977,7 @@ out:
- if (ffd > -1)
- close(ffd);
- if (ret < 0) {
-- close(lfd);
-+ if (lfd > -1) close(lfd);
- bdev->lofd = -1;
- }
- return ret;
include $(TOPDIR)/rules.mk
PKG_NAME:=mc
-PKG_VERSION:=4.8.19
+PKG_VERSION:=4.8.20
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_HASH:=eb9e56bbb5b2893601d100d0e0293983049b302c5ab61bfb544ad0ee2cc1f2df
+PKG_HASH:=017ee7f4f8ae420a04f4d6fcebaabe5b494661075c75442c76e9c8b1923d501c
PKG_BUILD_PARALLEL:=1
PKG_FIXUP:=autoreconf gettext-version
PKG_NAME:=minicom
PKG_VERSION:=2.7
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://alioth.debian.org/frs/download.php/file/3977/
--- /dev/null
+--- a/src/minicom.c
++++ b/src/minicom.c
+@@ -1159,7 +1159,7 @@ int main(int argc, char **argv)
+ switch(c) {
+ case 'v':
+ printf(_("%s version %s"), PACKAGE, VERSION);
+-#ifdef __DATE__
++#if 0
+ printf(_(" (compiled %s)"), __DATE__);
+ #endif
+ printf("\n");
+@@ -1462,7 +1462,7 @@ int main(int argc, char **argv)
+
+ mc_wprintf(us, "\n%s %s\r\n", _("Welcome to minicom"), VERSION);
+ mc_wprintf(us, "\n%s: %s\r\n", _("OPTIONS"), option_string);
+-#if defined (__DATE__) && defined (__TIME__)
++#if 0
+ mc_wprintf(us, "%s %s, %s.\r\n",_("Compiled on"), __DATE__,__TIME__);
+ #endif
+ {
include $(TOPDIR)/rules.mk
PKG_NAME:=openocd
-PKG_VERSION:=v0.10.0
+PKG_SOURCE_VERSION:=0.10.0
+PKG_VERSION:=v$(PKG_SOURCE_VERSION)
PKG_RELEASE:=1
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=git://git.code.sf.net/p/openocd/code
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=$(PKG_VERSION)
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=ef8a71daa581a3a2296fd3dafff21de2ca7b86319ec3a5c24ed6a216d1fdff45
+PKG_SOURCE_URL:=@SF/openocd
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.bz2
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION)
+PKG_HASH:=7312e7d680752ac088b8b8f2b5ba3ff0d30e0a78139531847be4b75c101316ae
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=opensc
-PKG_VERSION:=0.16.0
+PKG_VERSION:=0.17.0
PKG_RELEASE:=1
-PKG_HASH:=3ac8c29542bb48179e7086d35a1b8907a4e86aca3de3323c2f48bd74eaaf5729
+PKG_HASH:=be73c6816867ab4721e6a9ae7dba8e890c5f169f0a2cbb4bf354e0f30a948300
PKG_LICENSE:=LGPL-2.1+
PKG_LICENSE_FILES:=COPYING
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/lib
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopensc.{a,so}* $(1)/usr/lib/
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsmm-local.{a,so}* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopensc.{la,so}* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsmm-local.{la,so}* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/opensc-pkcs11.so $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkcs11-spy.so $(1)/usr/lib/
$(INSTALL_DIR) $(1)/usr/lib/pkcs11
+++ /dev/null
-#
-# Copyright (C) 2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=opus-tools
-PKG_VERSION:=0.1.9
-PKG_RELEASE:=1
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://downloads.xiph.org/releases/opus/
-PKG_HASH:=b1873dd78c7fbc98cf65d6e10cfddb5c2c03b3af93f922139a2104baedb4643a
-
-PKG_LICENSE:=BSD-2-Clause
-PKG_LICENSE_FILES:=COPYING
-PKG_MAINTAINER:=Nicolas Thill <nico@openwrt.org>
-
-PKG_INSTALL:=1
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/opus-tools
- SECTION:=utils
- CATEGORY:=Utilities
- DEPENDS:=+libogg +libopus
- TITLE:=OPUS Codec tools
- URL:=http://opus-codec.org/
-endef
-
-define Package/opus-tools/description
- This package provides command-line utilities to encode, inspect, and decode
- .opus files.
-endef
-
-CONFIGURE_ARGS += \
- --without-flac \
-
-define Package/opus-tools/install
- $(INSTALL_DIR) $(1)/usr/bin
- $(CP) $(PKG_INSTALL_DIR)/usr/bin/opus{dec,enc,info} $(1)/usr/bin/
-endef
-
-$(eval $(call BuildPackage,opus-tools))
+++ /dev/null
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=rpcd-mod-attendedsysupgrade
-PKG_VERSION:=1
-PKG_RELEASE:=1
-PKG_LICENSE:=GPL-2.0
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/rpcd-mod-attendedsysupgrade
- SECTION:=utils
- CATEGORY:=Base system
- TITLE:=OpenWrt ubus RPC backend server (attendedsysupgrade)
- MAINTAINER:=Paul Spooren <paul@spooren.de>
- DEPENDS:=rpcd +cgi-io +rpcd-mod-packagelist
-endef
-
-define Package/rpcd-mod-attendedsysupgrade/description
- implements sysupgrade function with ubus
- add uci settings and needed acls
-endef
-
-define Build/Compile
-endef
-
-define Build/Configure
-endef
-
-define Package/rpcd-mod-attendedsysupgrade/install
- $(INSTALL_DIR) $(1)/usr/share/rpcd/acl.d/
- $(INSTALL_BIN) ./files/attendedsysupgrade.acl $(1)/usr/share/rpcd/acl.d/attendedsysupgrade.json
-
- $(INSTALL_DIR) $(1)/usr/libexec/rpcd/
- $(INSTALL_BIN) ./files/attendedsysupgrade.rpcd $(1)/usr/libexec/rpcd/attendedsysupgrade
-
- $(INSTALL_DIR) $(1)/etc/uci-defaults/
- $(INSTALL_BIN) ./files/attendedsysupgrade.defaults $(1)/etc/uci-defaults/attendedsysupgrade
-endef
-
-$(eval $(call BuildPackage,rpcd-mod-attendedsysupgrade))
+++ /dev/null
-{
- "attendedsysupgrade": {
- "description": "attended sysupgrade via rpcd",
- "read": {
- "ubus": {
- "attendedsysupgrade": [
- "sysupgrade"
- ],
- "system": [
- "board"
- ],
- "uci": [
- "get"
- ]
- },
- "uci": [
- "*"
- ]
- },
- "write": {
- "cgi-io": [
- "upload"
- ]
- }
- }
-}
+++ /dev/null
-#!/bin/sh
-
-[ -e /etc/config/attendedsysupgrade ] && exit 0
-
-touch /etc/config/attendedsysupgrade
-
-uci -q batch <<EOF
-set attendedsysupgrade.updateserver=updateserver
-set attendedsysupgrade.updateserver.url='https://betaupdate.libremesh.org'
-
-set attendedsysupgrade.updateclient=updateclient
-set attendedsysupgrade.updateclient.update_packages='1'
-
-commit attendedsysupgrade
-EOF
-
-exit 01
+++ /dev/null
-#!/bin/sh
-
-. /usr/share/libubox/jshn.sh
-
-case "$1" in
- list)
- json_init
- json_add_object "sysupgrade"
- json_add_boolean "keep_settings" 1
- json_close_object
- json_dump
- ;;
- call)
- case "$2" in
- sysupgrade)
- read input;
- json_load "$input"
- json_get_var keep_settings keep_settings
-
- if [ -f "/tmp/sysupgrade.bin" ]; then
- /etc/init.d/uhttpd stop
- /etc/init.d/dropbear stop
- sleep 1;
- if [ "$keep_settings" -eq "0" ]; then
- keep_settings_param="-n"
- fi
- /sbin/sysupgrade $keep_settings_param /tmp/sysupgrade.bin
- fi
- json_init
- json_add_string "message" "could not find /tmp/sysupgrade.bin"
- json_dump
- esac
- ;;
-esac
-
include $(TOPDIR)/rules.mk
PKG_NAME:=rpcd-mod-lxc
-PKG_RELEASE=20141012
+PKG_RELEASE=20171206
PKG_LICENSE:=ISC
return rc;
}
+static int
+rpc_lxc_info(struct ubus_context *ctx, struct ubus_object *obj,
+ struct ubus_request_data *req, const char *method,
+ struct blob_attr *msg)
+{
+ struct blob_attr *tb[__RPC_LXC_RENAME_MAX];
+ struct rpc_lxc *l = NULL;
+ char **addresses;
+ void *k;
+ pid_t initpid;
+
+ blobmsg_parse(rpc_lxc_min_policy, __RPC_LXC_MAX, tb, blob_data(msg), blob_len(msg));
+
+ l = rpc_lxc_init(tb);
+ if (!l)
+ return UBUS_STATUS_INVALID_ARGUMENT;
+
+ if (!l->container->is_running(l->container) &&
+ !l->container->is_defined(l->container))
+ return UBUS_STATUS_NOT_FOUND;
+
+ blob_buf_init(&buf, 0);
+
+ blobmsg_add_string(&buf, "name", l->container->name);
+
+ blobmsg_add_string(&buf, "state", l->container->state(l->container));
+
+ initpid = l->container->init_pid(l->container);
+ if (initpid >= 0)
+ blobmsg_add_u32(&buf, "pid", initpid);
+
+ k = blobmsg_open_array(&buf, "ips");
+ addresses = l->container->get_ips(l->container, NULL, NULL, 0);
+ if (addresses) {
+ int i;
+
+ for (i = 0; addresses[i]; i++)
+ blobmsg_add_string(&buf, "ip", addresses[i]);
+ }
+ blobmsg_close_array(&buf, k);
+
+ ubus_send_reply(ctx, req, buf.head);
+ rpc_lxc_done(l);
+
+ return UBUS_STATUS_OK;
+}
+
static int
rpc_lxc_rename(struct ubus_context *ctx, struct ubus_object *obj,
struct ubus_request_data *req, const char *method,
UBUS_METHOD("stop", rpc_lxc_stop, rpc_lxc_min_policy),
UBUS_METHOD("freeze", rpc_lxc_freeze, rpc_lxc_min_policy),
UBUS_METHOD("unfreeze", rpc_lxc_unfreeze, rpc_lxc_min_policy),
+ UBUS_METHOD("info", rpc_lxc_info, rpc_lxc_min_policy),
UBUS_METHOD("rename", rpc_lxc_rename, rpc_lxc_rename_policy),
UBUS_METHOD("create", rpc_lxc_create, rpc_lxc_create_policy),
UBUS_METHOD("destroy", rpc_lxc_destroy, rpc_lxc_min_policy),
+++ /dev/null
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=rpcd-mod-packagelist
-PKG_VERSION:=0.1
-PKG_RELEASE:=1
-PKG_LICENSE:=GPL-2.0
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/rpcd-mod-packagelist
- SECTION:=utils
- CATEGORY:=Base system
- TITLE:=ubus packagelist
- MAINTAINER:=Paul Spooren <paul@spooren.de>
- DEPENDS:=rpcd @!CLEAN_IPKG
-endef
-
-define Package/rpcd-mod-packagelist/description
- add ubus call to receive user installed packages without the need of opkg installed
-endef
-
-define Build/Compile
-endef
-
-define Build/Configure
-endef
-
-define Package/rpcd-mod-packagelist/install
- $(INSTALL_DIR) $(1)/usr/share/rpcd/acl.d/
- $(INSTALL_BIN) ./files/packagelist.acl $(1)/usr/share/rpcd/acl.d/packagelist.json
-
- $(INSTALL_DIR) $(1)/usr/libexec/rpcd/
- $(INSTALL_BIN) ./files/packagelist.rpcd $(1)/usr/libexec/rpcd/packagelist
-endef
-
-$(eval $(call BuildPackage,rpcd-mod-packagelist))
+++ /dev/null
-{
- "packagelist": {
- "description": "get list of installed software packages",
- "read": {
- "ubus": {
- "packagelist": [
- "list"
- ]
- }
- }
- }
-}
+++ /dev/null
-#!/bin/sh
-
-. /usr/share/libubox/jshn.sh
-
-case "$1" in
-list)
- json_init
- json_add_object "list"
- json_dump
- ;;
-call)
- case "$2" in
- list)
- json_init;
- json_add_object "packagelist"
-
- if [ -f /usr/lib/opkg/status ]; then
- while read var p1 p2 p3; do
- if [ "$var" = "Package:" ]; then
- pkg="$p1"
- fi
- if [ "$var" = "Version:" ]; then
- version="$p1"
- fi
-
- if [ "$var" = "Status:" \
- -a "$p1" = "install" \
- -a "$p2" = "user" \
- -a "$p3" = "installed" ]; then
- json_add_string "$pkg" "$version";
- fi
- done < /usr/lib/opkg/status
- fi
-
- json_close_object
- json_dump
- ;;
- esac
- ;;
-esac
include $(TOPDIR)/rules.mk
PKG_NAME:=screen
-PKG_VERSION:=4.6.1
+PKG_VERSION:=4.6.2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=aba9af66cb626155d6abce4703f45cce0e30a5114a368bd6387c966cbbbb7c64
+PKG_HASH:=1b6922520e6a0ce5e28768d620b0f640a6631397f95ccb043b70b91bb503fa3a
PKG_SOURCE_URL:=@GNU/screen
PKG_LICENSE:=GPL-3.0+
PKG_NAME:=shadow
PKG_VERSION:=4.2.1
-PKG_RELEASE:=6
+PKG_RELEASE:=8
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://pkg-shadow.alioth.debian.org/releases
SHADOW_APPLETS := \
chage chpasswd chfn chsh expiry faillog gpasswd \
groupadd groupdel groupmems groupmod groups \
- lastlog login newgrp nologin passwd su \
+ lastlog login newgidmap newgrp newuidmap nologin \
+ passwd su \
useradd userdel usermod vipw
CONFIGURE_ARGS += \
--without-acl \
--without-attr \
--without-tcb \
- --without-nscd \
- --disable-subordinate-ids \
+ --without-nscd
define Package/shadow/Default
SECTION:=utils
--- /dev/null
+From 2cb54158b80cdbd97ca3b36df83f9255e923ae3f Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@aura-online.co.uk>
+Date: Sat, 23 Aug 2014 09:46:39 +0100
+Subject: [PATCH] Check size of uid_t and gid_t using AC_CHECK_SIZEOF
+
+This built-in check is simpler than the previous method and, most
+importantly, works when cross-compiling.
+
+Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
+---
+ configure.in | 14 ++++----------
+ 1 file changed, 4 insertions(+), 10 deletions(-)
+
+--- a/configure.in
++++ b/configure.in
+@@ -334,16 +334,10 @@ if test "$enable_subids" != "no"; then
+ dnl
+ dnl FIXME: check if 32 bit UIDs/GIDs are supported by libc
+ dnl
+- AC_RUN_IFELSE([AC_LANG_SOURCE([
+-#include <sys/types.h>
+-int main(void) {
+- uid_t u;
+- gid_t g;
+- return (sizeof u < 4) || (sizeof g < 4);
+-}
+- ])], [id32bit="yes"], [id32bit="no"])
++ AC_CHECK_SIZEOF([uid_t],, [#include "sys/types.h"])
++ AC_CHECK_SIZEOF([gid_t],, [#include "sys/types.h"])
+
+- if test "x$id32bit" = "xyes"; then
++ if test "$ac_cv_sizeof_uid_t" -ge 4 && test "$ac_cv_sizeof_gid_t" -ge 4; then
+ AC_DEFINE(ENABLE_SUBIDS, 1, [Define to support the subordinate IDs.])
+ enable_subids="yes"
+ else
+++ /dev/null
---- a/src/usermod.c
-+++ b/src/usermod.c
-@@ -1361,6 +1361,7 @@ static void process_flags (int argc, cha
- exit (E_UID_IN_USE);
- }
-
-+#ifdef ENABLE_SUBIDS
- if ( (vflg || Vflg)
- && !is_sub_uid) {
- fprintf (stderr,
-@@ -1376,6 +1377,7 @@ static void process_flags (int argc, cha
- Prog, sub_gid_dbname (), "-w", "-W");
- exit (E_USAGE);
- }
-+#endif
- }
-
- /*
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -52,7 +52,10 @@ usbin_PROGRAMS = \
- noinst_PROGRAMS = id sulogin
-
- suidbins = su
--suidubins = chage chfn chsh expiry gpasswd newgrp passwd newuidmap newgidmap
-+suidubins = chage chfn chsh expiry gpasswd newgrp passwd
-+if ENABLE_SUBIDS
-+ suidubins += newuidmap newgidmap
-+endif
- if ACCT_TOOLS_SETUID
- suidubins += chage chgpasswd chpasswd groupadd groupdel groupmod newusers useradd userdel usermod
- endif
--- a/src/su.c
+++ b/src/su.c
-@@ -1090,8 +1090,12 @@
+@@ -1090,8 +1090,12 @@ int main (int argc, char **argv)
if (fd >= 0) {
err = ioctl (fd, TIOCNOTTY, (char *) 0);
PKG_NAME:=squashfs-tools
PKG_VERSION:=4.3
-PKG_RELEASE:=5
+PKG_RELEASE:=6
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/plougher/squashfs-tools
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=9c1db6d13a51a2e009f0027ef336ce03624eac0d
+PKG_SOURCE_VERSION:=5be5d61e5e5a93911256b5f2106e50da0ca81e8d
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=4e9a017561b6f9d7b9782c7c672d224726ffd069b0543f310e85ed8ab1c4589b
+PKG_MIRROR_HASH:=eac1bc559708dc8656fe7d099ffc9e9374ae0cfb9a12d180a9c0c28acb0adf11
PKG_BUILD_PARALLEL:=1
include $(INCLUDE_DIR)/package.mk
+++ /dev/null
-From a0c129760ca9bdc7e564ae2a508fac3799f9d39b Mon Sep 17 00:00:00 2001
-From: Alexandru Ardelean <aa@ocedo.com>
-Date: Wed, 6 Jan 2016 15:33:43 +0200
-Subject: [PATCH 1/2] squashfs-tools: with fnmatch.h compatibility with musl
-
-Signed-off-by: Alexandru Ardelean <aa@ocedo.com>
----
- squashfs-tools/action.c | 2 +-
- squashfs-tools/fnmatch_compat.h | 32 ++++++++++++++++++++++++++++++++
- squashfs-tools/mksquashfs.c | 2 +-
- squashfs-tools/unsquashfs.c | 1 +
- squashfs-tools/unsquashfs.h | 1 -
- 5 files changed, 35 insertions(+), 3 deletions(-)
- create mode 100644 squashfs-tools/fnmatch_compat.h
-
-diff --git a/squashfs-tools/action.c b/squashfs-tools/action.c
-index 35889a4..4b06ccb 100644
---- a/squashfs-tools/action.c
-+++ b/squashfs-tools/action.c
-@@ -31,7 +31,6 @@
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <unistd.h>
--#include <fnmatch.h>
- #include <pwd.h>
- #include <grp.h>
- #include <sys/wait.h>
-@@ -43,6 +42,7 @@
- #include "mksquashfs.h"
- #include "action.h"
- #include "error.h"
-+#include "fnmatch_compat.h"
-
- /*
- * code to parse actions
-diff --git a/squashfs-tools/fnmatch_compat.h b/squashfs-tools/fnmatch_compat.h
-new file mode 100644
-index 0000000..7b4afd8
---- /dev/null
-+++ b/squashfs-tools/fnmatch_compat.h
-@@ -0,0 +1,32 @@
-+#ifndef FNMATCH_COMPAT
-+#define FNMATCH_COMPAT
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2015
-+ * Phillip Lougher <phillip@squashfs.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * fnmatch_compat.h
-+ */
-+
-+#include <fnmatch.h>
-+
-+#ifndef FNM_EXTMATCH
-+#define FNM_EXTMATCH 0
-+#endif
-+
-+#endif
-diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c
-index d221c35..4e7cbdd 100644
---- a/squashfs-tools/mksquashfs.c
-+++ b/squashfs-tools/mksquashfs.c
-@@ -46,7 +46,6 @@
- #include <sys/mman.h>
- #include <pthread.h>
- #include <regex.h>
--#include <fnmatch.h>
- #include <sys/wait.h>
- #include <limits.h>
- #include <ctype.h>
-@@ -76,6 +75,7 @@
- #include "read_fs.h"
- #include "restore.h"
- #include "process_fragments.h"
-+#include "fnmatch_compat.h"
-
- int delete = FALSE;
- int fd;
-diff --git a/squashfs-tools/unsquashfs.c b/squashfs-tools/unsquashfs.c
-index 1323dd6..2428baa 100644
---- a/squashfs-tools/unsquashfs.c
-+++ b/squashfs-tools/unsquashfs.c
-@@ -30,6 +30,7 @@
- #include "xattr.h"
- #include "unsquashfs_info.h"
- #include "stdarg.h"
-+#include "fnmatch_compat.h"
-
- #include <sys/sysinfo.h>
- #include <sys/types.h>
-diff --git a/squashfs-tools/unsquashfs.h b/squashfs-tools/unsquashfs.h
-index ecd0bb4..0edbd25 100644
---- a/squashfs-tools/unsquashfs.h
-+++ b/squashfs-tools/unsquashfs.h
-@@ -40,7 +40,6 @@
- #include <grp.h>
- #include <time.h>
- #include <regex.h>
--#include <fnmatch.h>
- #include <signal.h>
- #include <pthread.h>
- #include <math.h>
---
-2.1.4
-
+++ /dev/null
-From 0ea07a1b5ddb2f2fa1358b2c1b42bcf34bbf5ee2 Mon Sep 17 00:00:00 2001
-From: Alexandru Ardelean <aa@ocedo.com>
-Date: Wed, 6 Jan 2016 15:36:48 +0200
-Subject: [PATCH 2/2] pseudo.c: add explicit <stat.h> include
-
-Signed-off-by: Alexandru Ardelean <aa@ocedo.com>
----
- squashfs-tools/pseudo.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/squashfs-tools/pseudo.c b/squashfs-tools/pseudo.c
-index f85fe60..7a26bca 100644
---- a/squashfs-tools/pseudo.c
-+++ b/squashfs-tools/pseudo.c
-@@ -32,6 +32,7 @@
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/wait.h>
-+#include <sys/stat.h>
- #include <ctype.h>
-
- #include "pseudo.h"
---
-2.1.4
-
PKG_NAME:=sysstat
PKG_VERSION:=11.6.0
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
--- /dev/null
+From: Robert Luberda <robert@debian.org>
+Date: Wed, 9 Sep 2015 21:37:37 +0200
+Subject: Remove scscid()
+
+Remove sccsid() function togethwe with SCCSID string that
+contained __DATE__ and __TIME__ macros. This should cause
+binary to be more reproducible, see
+https://wiki.debian.org/ReproducibleBuilds/TimestampsFromCPPMacros
+---
+ cifsiostat.c | 3 ---
+ iostat.c | 3 ---
+ mpstat.c | 3 ---
+ pidstat.c | 3 ---
+ sadc.c | 3 ---
+ sadf.c | 3 ---
+ sar.c | 3 ---
+ tapestat.c | 3 ---
+ 8 files changed, 24 deletions(-)
+
+diff --git a/cifsiostat.c b/cifsiostat.c
+index a3c81d0..4668a7c 100644
+--- a/cifsiostat.c
++++ b/cifsiostat.c
+@@ -41,9 +41,6 @@
+ #define _(string) (string)
+ #endif
+
+-#define SCCSID "@(#)sysstat-" VERSION ": " __FILE__ " compiled " __DATE__ " " __TIME__
+-char *sccsid(void) { return (SCCSID); }
+-
+ unsigned long long uptime0[2] = {0, 0};
+ struct cifs_stats *st_cifs[2];
+ struct io_hdr_stats *st_hdr_cifs;
+diff --git a/iostat.c b/iostat.c
+index 7b346e2..a0199d2 100644
+--- a/iostat.c
++++ b/iostat.c
+@@ -48,9 +48,6 @@
+ #define _(string) (string)
+ #endif
+
+-#define SCCSID "@(#)sysstat-" VERSION ": " __FILE__ " compiled " __DATE__ " " __TIME__
+-char *sccsid(void) { return (SCCSID); }
+-
+ struct stats_cpu *st_cpu[2];
+ unsigned long long uptime[2] = {0, 0};
+ unsigned long long uptime0[2] = {0, 0};
+diff --git a/mpstat.c b/mpstat.c
+index 1c83ea2..e4a040b 100644
+--- a/mpstat.c
++++ b/mpstat.c
+@@ -43,9 +43,6 @@
+ #define _(string) (string)
+ #endif
+
+-#define SCCSID "@(#)sysstat-" VERSION ": " __FILE__ " compiled " __DATE__ " " __TIME__
+-char *sccsid(void) { return (SCCSID); }
+-
+ unsigned long long uptime[3] = {0, 0, 0};
+ unsigned long long uptime0[3] = {0, 0, 0};
+
+diff --git a/pidstat.c b/pidstat.c
+index 876635c..5372176 100644
+--- a/pidstat.c
++++ b/pidstat.c
+@@ -47,9 +47,6 @@
+ #define _(string) (string)
+ #endif
+
+-#define SCCSID "@(#)sysstat-" VERSION ": " __FILE__ " compiled " __DATE__ " " __TIME__
+-char *sccsid(void) { return (SCCSID); }
+-
+ unsigned long long uptime[3] = {0, 0, 0};
+ unsigned long long uptime0[3] = {0, 0, 0};
+ struct pid_stats *st_pid_list[3] = {NULL, NULL, NULL};
+diff --git a/sadc.c b/sadc.c
+index 7cdbc38..bfb4dac 100644
+--- a/sadc.c
++++ b/sadc.c
+@@ -52,9 +52,6 @@
+ #include "sensors/error.h"
+ #endif
+
+-#define SCCSID "@(#)sysstat-" VERSION ": " __FILE__ " compiled " __DATE__ " " __TIME__
+-char *sccsid(void) { return (SCCSID); }
+-
+ long interval = 0;
+ unsigned int flags = 0;
+
+diff --git a/sadf.c b/sadf.c
+index 160b485..0c0017c 100644
+--- a/sadf.c
++++ b/sadf.c
+@@ -41,9 +41,6 @@
+ # define _(string) (string)
+ #endif
+
+-#define SCCSID "@(#)sysstat-" VERSION ": " __FILE__ " compiled " __DATE__ " " __TIME__
+-char *sccsid(void) { return (SCCSID); }
+-
+ long interval = -1, count = 0;
+
+ unsigned int flags = 0;
+diff --git a/sar.c b/sar.c
+index ccf426e..07a9b4a 100644
+--- a/sar.c
++++ b/sar.c
+@@ -42,9 +42,6 @@
+ #define _(string) (string)
+ #endif
+
+-#define SCCSID "@(#)sysstat-" VERSION ": " __FILE__ " compiled " __DATE__ " " __TIME__
+-char *sccsid(void) { return (SCCSID); }
+-
+ /* Interval and count parameters */
+ long interval = -1, count = 0;
+
+diff --git a/tapestat.c b/tapestat.c
+index 268e4a5..df0a01b 100644
+--- a/tapestat.c
++++ b/tapestat.c
+@@ -58,9 +58,6 @@
+ #define _(string) (string)
+ #endif
+
+-#define SCCSID "@(#)sysstat-" VERSION ": " __FILE__ " compiled " __DATE__ " " __TIME__
+-char *sccsid(void) { return (SCCSID); }
+-
+ int cpu_nr = 0; /* Nb of processors on the machine */
+ int flags = 0; /* Flag for common options and system state */
+
#
-# Copyright (C) 2011-2016 OpenWrt.org
+# Copyright (C) 2011-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=tcsh
PKG_VERSION:=6.20.00
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:= \
--- /dev/null
+--- a/config_f.h
++++ b/config_f.h
+@@ -139,11 +139,8 @@
+ * This can be much slower and no memory statistics will be
+ * provided.
+ */
+-#if defined(__MACHTEN__) || defined(PURIFY) || defined(MALLOC_TRACE) || defined(_OSD_POSIX) || defined(__MVS__) || defined (__CYGWIN__) || defined(__GLIBC__) || defined(__OpenBSD__) || defined(__APPLE__) || defined (__ANDROID__)
++
+ # define SYSMALLOC
+-#else
+-# undef SYSMALLOC
+-#endif
+
+ /*
+ * USE_ACCESS Use access(2) rather than stat(2) when POSIX is defined.
--- /dev/null
+#
+# Copyright (C) 2017 Daniel Engberg <daniel.engberg.lists@pyret.net>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=tio
+PKG_VERSION:=1.26
+PKG_RELEASE:=1
+PKG_MAINTAINER:=Daniel Engberg <daniel.engberg.lists@pyret.net>
+PKG_LICENSE:=GPL-2.0+
+PKG_LICENSE_FILES:=COPYING
+
+PKG_SOURCE_URL:=https://github.com/$(PKG_NAME)/$(PKG_NAME)/releases/download/v$(PKG_VERSION)/
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_HASH:=f9532d519fcc7d19b25fbe9fc1ee857dc10e5862a450b4b3b423f8e8538f2500
+
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/tio
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=A simple TTY terminal I/O application
+ URL:=https://tio.github.io/
+ SUBMENU:=Terminal
+endef
+
+define Package/tio/description
+ A small and simple TTY terminal I/O application
+endef
+
+define Package/tio/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/tio $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,tio))
include $(TOPDIR)/rules.mk
PKG_NAME:=tmux
-PKG_VERSION:=2.5
+PKG_VERSION:=2.6
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/tmux/tmux/releases/download/$(PKG_VERSION)
-PKG_HASH:=ae135ec37c1bf6b7750a84e3a35e93d91033a806943e034521c8af51b12d95df
+PKG_HASH:=b17cd170a94d7b58c0698752e1f4f263ab6dc47425230df7e53a6435cc7cd7e8
PKG_MAINTAINER:=Maxim Storchak <m.storchak@gmail.com>
PKG_LICENSE:=ISC
--- /dev/null
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=uledd
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=https://github.com/blogic/uledd.git
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_VERSION:=bc94c7e52009f7ec33b23652502b4754351d8040
+PKG_MIRROR_HASH:=23a407197d6a423bb0b32f381e93ad3676e15f07465d7b53c843a2b510c7c284
+PKG_MAINTAINER:=John Crispin <john@phrozen.org>
+PKG_LICENSE:=GPL-2.0
+
+CMAKE_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/uledd
+ SECTION:=utils
+ CATEGORY:=Utilities
+ DEPENDS:=+libubox +libubus
+ TITLE:=PWM/RGB LED ubus frontend
+endef
+
+define Package/uledd/install
+ $(INSTALL_DIR) $(1)/sbin $(1)/etc/init.d
+
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/uledd $(1)/sbin/
+ $(INSTALL_BIN) ./files/uledd.init $(1)/etc/init.d/uledd
+endef
+
+$(eval $(call BuildPackage,uledd))
--- /dev/null
+#!/bin/sh /etc/rc.common
+
+START=95
+
+USE_PROCD=1
+PROG=/sbin/uledd
+
+start_service() {
+ procd_open_instance
+ procd_set_param command "$PROG"
+ procd_set_param respawn
+ procd_close_instance
+}
PKG_NAME:=unzip
PKG_REV:=60
PKG_VERSION:=6.0
-PKG_RELEASE:=5
+PKG_RELEASE:=6
PKG_SOURCE:=$(PKG_NAME)$(PKG_REV).tar.gz
PKG_SOURCE_URL:=@SF/infozip
--- /dev/null
+From: Jérémy Bobbio <lunar@debian.org>
+Subject: Remove build date
+Bug-Debian: https://bugs.debian.org/782851
+ In order to make unzip build reproducibly, we remove the
+ (already optional) build date from the binary.
+
+--- a/unix/unix.c
++++ b/unix/unix.c
+@@ -1705,7 +1705,7 @@
+ #endif /* Sun */
+ #endif /* SGI */
+
+-#ifdef __DATE__
++#if 0
+ " on ", __DATE__
+ #else
+ "", ""
include $(TOPDIR)/rules.mk
PKG_NAME:=vim
-PKG_VERSION:=8.0.069
-PKG_RELEASE:=4
+PKG_VERSION:=8.0.586
+PKG_RELEASE:=2
VIMVER:=80
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=ftp://ftp.vim.org/pub/vim/unix/
-PKG_HASH:=2e179182814715c3c77010c7300a4abcb964ba8a99a470640f9f2f03884b2ccb
+PKG_HASH:=08bd0d1dd30ece3cb9905ccd48b82b2f81c861696377508021265177dc153a61
PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)$(VIMVER)
--disable-cscope \
--disable-gpm \
--disable-acl \
- --with-tlib=ncurses
+ --with-tlib=ncurses \
+ --with-compiledby="non-existent-hostname-compiled"
CONFIGURE_VARS += \
vim_cv_getcwd_broken=no \
vim_cv_tty_group=root \
vim_cv_tty_mode=0620
+define Build/Prepare
+ $(call Build/Prepare/Default)
+ $(MAKE) -C $(PKG_BUILD_DIR)/src autoconf
+endef
+
ifneq ($(CONFIG_PACKAGE_vim),)
define Build/Compile/vim
$(call Build/Configure/Default, \
--- /dev/null
+From: James McCoy <jamessan@jamessan.com>
+Date: Thu, 28 Jan 2016 10:55:11 -0500
+Subject: Support defining compilation date in $SOURCE_DATE_EPOCH
+
+There is an ongoing effort[0] to make FOSS software reproducibly
+buildable. In order to make Vim build reproducibly, it is necessary to
+allow defining the date/time that is part of VIM_VERSION_LONG as part of
+the build process.
+
+This commit enables that by adding support for the SOURCE_DATE_EPOCH
+spec[1]. When the $SOURCE_DATE_EPOCH environment variable is defined,
+it will be used to populate the BUILD_DATE preprocessor define.
+
+If BUILD_DATE is not defined, the existing behavior of relying on the
+preprocessor's __DATE__/__TIME__ symbols will be used.
+
+[0]: https://reproducible-builds.org/
+[1]: https://reproducible-builds.org/specs/source-date-epoch/
+---
+ src/config.h.in | 3 +++
+ src/configure.ac | 10 ++++++++++
+ src/version.c | 6 ++++++
+ 3 files changed, 19 insertions(+)
+
+diff --git a/src/config.h.in b/src/config.h.in
+index e692d40..d3aa1a2 100644
+--- a/src/config.h.in
++++ b/src/config.h.in
+@@ -30,6 +30,9 @@
+ /* Define when __DATE__ " " __TIME__ can be used */
+ #undef HAVE_DATE_TIME
+
++/* Defined as the date of last modification */
++#undef BUILD_DATE
++
+ /* Define when __attribute__((unused)) can be used */
+ #undef HAVE_ATTRIBUTE_UNUSED
+
+diff --git a/src/configure.ac b/src/configure.ac
+index e287124..5a16797 100644
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -29,6 +29,16 @@ dnl in autoconf needs it, where it uses STDC_HEADERS.
+ AC_HEADER_STDC
+ AC_HEADER_SYS_WAIT
+
++dnl If $SOURCE_DATE_EPOCH is present in the environment, use that as the
++dnl "compiled" timestamp in :version's output. Attempt to get the formatted
++dnl date using GNU date syntax, BSD date syntax, and finally falling back to
++dnl just using the current time.
++if test -n "$SOURCE_DATE_EPOCH"; then
++ DATE_FMT="%b %d %Y %H:%M:%S"
++ BUILD_DATE=$(LC_ALL=C date -u -d "@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u "+$DATE_FMT")
++ AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"])
++fi
++
+ dnl Check for the flag that fails if stuff are missing.
+
+ AC_MSG_CHECKING(--enable-fail-if-missing argument)
+diff --git a/src/version.c b/src/version.c
+index 65f5a4b..9422657 100644
+--- a/src/version.c
++++ b/src/version.c
+@@ -44,11 +44,17 @@ make_version(void)
+ * VAX C can't catenate strings in the preprocessor.
+ */
+ strcpy(longVersion, VIM_VERSION_LONG_DATE);
++#ifdef BUILD_DATE
++ strcat(longVersion, BUILD_DATE);
++#else
+ strcat(longVersion, __DATE__);
+ strcat(longVersion, " ");
+ strcat(longVersion, __TIME__);
++#endif
+ strcat(longVersion, ")");
+ }
++# elif defined(BUILD_DATE)
++char *longVersion = VIM_VERSION_LONG_DATE BUILD_DATE ")";
+ # else
+ char *longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
+ # endif
while read pid
do
- kill "$pid"
+ kill -KILL "$pid"
done < "${PIDFILE}.pids"
rm "${PIDFILE}.pids"
include $(TOPDIR)/rules.mk
PKG_NAME:=yara
-PKG_VERSION:=3.6.3
+PKG_VERSION:=3.7.0
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/VirusTotal/yara/archive/v$(PKG_VERSION)/
-PKG_HASH:=ad2c0e788b4d8b2f3e9078f448754313249a302b749b9a24e932bfc5e141a5e8
+PKG_HASH:=01f0841e7387918c2b6d0b7fb48014bda41d1487be1cabf718a0576018969641
PKG_FIXUP:=autoreconf
PKG_BUILD_PARALLEL:=1
PKG_NAME:=zip
PKG_REV:=30
PKG_VERSION:=3.0
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)$(PKG_REV).tar.gz
PKG_SOURCE_URL:=@SF/infozip
--- /dev/null
+From: Santiago Vila <sanvila@debian.org>
+Subject: Remove (optional) build date to make the build reproducible
+Bug-Debian: http://bugs.debian.org/779042
+
+--- a/unix/unix.c
++++ b/unix/unix.c
+@@ -1020,7 +1020,7 @@
+
+
+ /* Define the compile date string */
+-#ifdef __DATE__
++#if 0
+ # define COMPILE_DATE " on " __DATE__
+ #else
+ # define COMPILE_DATE ""
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=zoneinfo
-PKG_VERSION:=2017b
-PKG_VERSION_CODE:=2017b
+PKG_VERSION:=2017c
+PKG_VERSION_CODE:=2017c
PKG_RELEASE:=1
#As i couldn't find real license used "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_HASH:=f8242a522ea3496b0ce4ff4f2e75a049178da21001a08b8e666d8cbe07d18086
+PKG_HASH:=d6543f92a929826318e2f44ff3a7611ce5f565a43e10250b42599d0ba4cbd90b
include $(INCLUDE_DIR)/package.mk
define Download/tzcode
FILE=$(PKG_SOURCE_CODE)
URL=$(PKG_SOURCE_URL)
- HASH:=4d1735bb54e22b8d7443d4d1f1a13d007ae11be79a35e51f8e8322fb8e292d40
+ HASH:=81e8b4bc23e60906640c266bbff3789661e22f0fa29fe61b96ec7c2816c079b7
endef
$(eval $(call Download,tzcode))
$(HOST_CONFIGURE_OPTS) \
CC="$(HOSTCC)" \
LD="\$$$$(CC)" \
- CPPFLAGS="$(HOST_CPPFLAGS)" \
+ CPPFLAGS="$(HOST_CPPFLAGS) -DHAVE_SNPRINTF=1" \
LDFLAGS="$(HOST_LDFLAGS)" \
TOPDIR="$(PKG_INSTALL_DIR)" \
TZDIR="$(PKG_INSTALL_DIR)/zoneinfo" \
include $(TOPDIR)/rules.mk
PKG_NAME:=zsh
-PKG_VERSION:=5.2
+PKG_VERSION:=5.4.2
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/zsh
-PKG_HASH:=f17916320ffaa844bbd7ce48ceeb5945fc5f3eff64b149b4229bbfbdf3795a9d
+PKG_HASH:=957bcdb2c57f64c02f673693ea5a7518ef24b6557aeb3a4ce222cefa6d74acc9
PKG_MAINTAINER:=Vadim A. Misbakh-Soloviov <openwrt-zsh@mva.name>
PKG_LICENSE:=ZSH
define Build/Configure
$(call Build/Configure/Default, \
- --bindir=/bin \
--disable-etcdir \
--disable-gdbm \
+ --enable-dynamic \
+ --enable-libc-musl \
--enable-pcre \
+ --enable-cap \
--enable-multibyte \
+ --enable-unicode9 \
+ --enable-runhelpdir=$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)/help \
+ --enable-fndir=$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)/functions \
+ --enable-site-fndir=$(CONFIGURE_PREFIX)/share/zsh/site-functions \
--enable-function-subdirs \
--with-tcsetpgrp \
--with-term-lib="ncursesw", \
+ zsh_cv_shared_environ=yes \
+ zsh_cv_sys_dynamic_clash_ok=yes\
+ zsh_cv_sys_dynamic_execsyms=yes \
+ zsh_cv_sys_dynamic_rtld_global=yes \
+ zsh_cv_sys_dynamic_strip_exe=yes \
+ zsh_cv_sys_dynamic_strip_lib=yes \
zsh_cv_sys_nis=no \
zsh_cv_sys_nis_plus=no \
)
define Package/zsh/postinst
#!/bin/sh
grep zsh $${IPKG_INSTROOT}/etc/shells || \
- echo "/bin/zsh" >> $${IPKG_INSTROOT}/etc/shells
+ echo "/usr/bin/zsh" >> $${IPKG_INSTROOT}/etc/shells
+
+ # Backwards compatibility
+ if [[ -e /bin/zsh ]] && ([[ ! -L /bin/zsh ]] || [[ "$(readlink -fn $${IPKG_INSTROOT}/bin/zsh)" != "../$(CONFIGURE_PREFIX)/bin/zsh" ]]); then
+ ln -fs "../$(CONFIGURE_PREFIX)/bin/zsh" "$${IPKG_INSTROOT}/bin/zsh"
+ fi
endef
define Package/zsh/install
$(INSTALL_DIR) $(1)/bin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/zsh $(1)/bin/
- $(INSTALL_DIR) $(1)/usr/share/zsh/$(PKG_VERSION)
- $(CP) $(PKG_INSTALL_DIR)/usr/share/zsh/$(PKG_VERSION)/* $(1)/usr/share/zsh/$(PKG_VERSION)/
+ $(INSTALL_DIR) $(1)/$(CONFIGURE_PREFIX)/bin
+ $(INSTALL_DIR) $(1)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)
+ $(INSTALL_DIR) $(1)/$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)
+
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/$(CONFIGURE_PREFIX)/bin/zsh $(1)/$(CONFIGURE_PREFIX)/bin/
+ $(CP) $(PKG_INSTALL_DIR)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/* $(1)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/
+ $(CP) $(PKG_INSTALL_DIR)/$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)/* $(1)/$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)/
+endef
+
+define Package/zsh/postrm
+ rm -rf "$${IPKG_INSTROOT}/$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)"
endef
$(eval $(call BuildPackage,zsh))