diff --git a/.github/workflows/formal.yml b/.github/workflows/formal.yml index 1447a3959..693befa06 100644 --- a/.github/workflows/formal.yml +++ b/.github/workflows/formal.yml @@ -34,14 +34,6 @@ jobs: RET=1 fi - author="$(git show -s --format=%aN $commit)" - if echo $author | grep -q '\S\+\s\+\S\+'; then - success "Author name ($author) seems ok" - else - err "Author name ($author) need to be your real name 'firstname lastname'" - RET=1 - fi - subject="$(git show -s --format=%s $commit)" if echo "$subject" | grep -q -e '^[0-9A-Za-z,+/_-]\+: ' -e '^Revert ' -e '^CONTRIBUTING.md' -e '^README.md'; then success "Commit subject line seems ok ($subject)" diff --git a/admin/btop/Makefile b/admin/btop/Makefile index 0384f7282..f5efc5ee2 100644 --- a/admin/btop/Makefile +++ b/admin/btop/Makefile @@ -1,12 +1,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=btop -PKG_VERSION:=1.2.13 -PKG_RELEASE:=3 +PKG_VERSION:=1.3.0 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL=https://codeload.github.com/aristocratos/btop/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=668dc4782432564c35ad0d32748f972248cc5c5448c9009faeb3445282920e02 +PKG_HASH:=375e078ce2091969f0cd14030620bd1a94987451cf7a73859127a786006a32cf PKG_MAINTAINER:=Tianling Shen PKG_LICENSE:=Apache-2.0 diff --git a/admin/htop/Makefile b/admin/htop/Makefile index 01208ea13..155363106 100644 --- a/admin/htop/Makefile +++ b/admin/htop/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=htop -PKG_VERSION:=3.2.2 +PKG_VERSION:=3.3.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/htop-dev/htop/tar.gz/$(PKG_VERSION)? -PKG_HASH:=3829c742a835a0426db41bb039d1b976420c21ec65e93b35cd9bfd2d57f44ac8 +PKG_HASH:=1e5cc328eee2bd1acff89f860e3179ea24b85df3ac483433f92a29977b14b045 PKG_LICENSE:=GPL-2.0-or-later PKG_LICENSE_FILES:=COPYING diff --git a/admin/sudo/Makefile b/admin/sudo/Makefile index cecf9329e..180374352 100644 --- a/admin/sudo/Makefile +++ b/admin/sudo/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=sudo -PKG_VERSION:=1.9.15p4 +PKG_VERSION:=1.9.15p5 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://www.sudo.ws/dist -PKG_HASH:=2e20ec9865eeeea1316c6f49ec6ac4678869b689d4d90b44243bf4887d6dd532 +PKG_HASH:=558d10b9a1991fb3b9fa7fa7b07ec4405b7aefb5b3cb0b0871dbc81e3a88e558 PKG_MAINTAINER:=Alexandru Ardelean diff --git a/lang/luasec/Makefile b/lang/luasec/Makefile index d79975813..9d60604c6 100644 --- a/lang/luasec/Makefile +++ b/lang/luasec/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luasec -PKG_VERSION:=1.3.1 +PKG_VERSION:=1.3.2 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/brunoos/luasec/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=6fb919633a3304a262189f62a369adc4b36bc7113da37af093b069cf1c8d785e +PKG_HASH:=97293092ba385ab390decb6678bc8cbeffd5899bfbc49eb7ef4aa00f5e31c3d4 MAINTAINER:=W. Michael Petullo PKG_LICENSE:=MIT diff --git a/lang/node/Makefile b/lang/node/Makefile index b37c433b3..874da8716 100644 --- a/lang/node/Makefile +++ b/lang/node/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=node -PKG_VERSION:=v20.10.0 +PKG_VERSION:=v20.11.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://nodejs.org/dist/$(PKG_VERSION) -PKG_HASH:=32eb256eebd8cacd5574e6631e54b42be7ec8ebe25ad47a8ca685403bad15535 +PKG_HASH:=31807ebeeeb049c53f1765e4a95aed69476a4b696dd100cb539ab668d7950b40 PKG_MAINTAINER:=Hirokazu MORIKAWA , Adrian Panella PKG_LICENSE:=MIT diff --git a/lang/node/patches/007-fix_host_build_on_macos.patch b/lang/node/patches/007-fix_host_build_on_macos.patch index eeb5c2d1c..b88c31476 100644 --- a/lang/node/patches/007-fix_host_build_on_macos.patch +++ b/lang/node/patches/007-fix_host_build_on_macos.patch @@ -1,6 +1,6 @@ --- a/tools/gyp/pylib/gyp/generator/make.py +++ b/tools/gyp/pylib/gyp/generator/make.py -@@ -206,7 +206,7 @@ cmd_solink_module = $(LINK.$(TOOLSET)) - +@@ -207,7 +207,7 @@ cmd_solink_module = $(LINK.$(TOOLSET)) - LINK_COMMANDS_MAC = """\ quiet_cmd_alink = LIBTOOL-STATIC $@ diff --git a/lang/node/patches/204-v8_gyp.patch b/lang/node/patches/204-v8_gyp.patch index 48108f3c9..605148cc7 100644 --- a/lang/node/patches/204-v8_gyp.patch +++ b/lang/node/patches/204-v8_gyp.patch @@ -44,7 +44,7 @@ ], 'sources': [ ' @@ -21,7 +21,7 @@ PKG_CPE_ID:=cpe:/a:numpy:numpy PKG_CONFIG_DEPENDS:= \ CONFIG_NUMPY_OPENBLAS_SUPPORT -PKG_BUILD_DEPENDS:=python-cython/host +PKG_BUILD_DEPENDS:=python-cython/host pyproject-metadata/host # Ensure numpy does not find openblas if openblas support is not enabled PYTHON3_PKG_BUILD_VARS:= \ diff --git a/lang/python/numpy/patches/001-unpin-build-dependencies.patch b/lang/python/numpy/patches/001-unpin-build-dependencies.patch deleted file mode 100644 index dbfaea505..000000000 --- a/lang/python/numpy/patches/001-unpin-build-dependencies.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/pyproject.toml -+++ b/pyproject.toml -@@ -4,11 +4,11 @@ - #build-backend = "mesonpy" - requires = [ - # setuptools, wheel and Cython are needed for the setup.py based build -- "setuptools==59.2.0", -+ "setuptools>=59.2.0", - # `wheel` is needed for non-isolated builds, given that `meson-python` - # doesn't list it as a runtime requirement (at least in 0.11.0) - it's - # likely to be removed as a dependency in meson-python 0.12.0. -- "wheel==0.38.1", -+ "wheel>=0.38.1", - "Cython>=0.29.34,<3.0", - # "meson-python>=0.10.0", - ] diff --git a/lang/python/numpy/patches/002-avoid-build-user-config-files.patch b/lang/python/numpy/patches/002-avoid-build-user-config-files.patch index cf7faf4ed..c3d70207e 100644 --- a/lang/python/numpy/patches/002-avoid-build-user-config-files.patch +++ b/lang/python/numpy/patches/002-avoid-build-user-config-files.patch @@ -1,6 +1,6 @@ --- a/numpy/distutils/system_info.py +++ b/numpy/distutils/system_info.py -@@ -403,7 +403,7 @@ def get_standard_file(fname): +@@ -404,7 +404,7 @@ def get_standard_file(fname): pass else: user_file = os.path.join(f, fname) diff --git a/lang/python/numpy/patches/003-without-vendored-meson.patch b/lang/python/numpy/patches/003-without-vendored-meson.patch new file mode 100644 index 000000000..ef6761bfe --- /dev/null +++ b/lang/python/numpy/patches/003-without-vendored-meson.patch @@ -0,0 +1,22 @@ +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -1,6 +1,6 @@ + [build-system] +-build-backend = "mesonpy" +-backend-path = ['./vendored-meson/meson-python'] ++#build-backend = "mesonpy" ++#backend-path = ['./vendored-meson/meson-python'] + requires = [ + "Cython>=0.29.34,<3.1", + # All dependencies of the vendored meson-python (except for meson, because +@@ -194,8 +194,8 @@ repair-wheel-command = "" + [tool.spin] + package = 'numpy' + +-[tool.spin.meson] +-cli = 'vendored-meson/meson/meson.py' ++#[tool.spin.meson] ++#cli = 'vendored-meson/meson/meson.py' + + [tool.spin.commands] + "Build" = [ diff --git a/lang/python/pyproject-metadata/Makefile b/lang/python/pyproject-metadata/Makefile new file mode 100644 index 000000000..2e53f36e1 --- /dev/null +++ b/lang/python/pyproject-metadata/Makefile @@ -0,0 +1,39 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=pyproject-metadata +PKG_VERSION:=0.7.1 +PKG_RELEASE:=1 + +PYPI_NAME:=pyproject-metadata +PKG_HASH:=0a94f18b108b9b21f3a26a3d541f056c34edcb17dc872a144a15618fed7aef67 + +PKG_MAINTAINER:=Andy Syam +PKG_LICENSE:=MIT +PKG_LICENSE_FILES:=LICENSE + +HOST_BUILD_DEPENDS:=python3/host python-build/host python-installer/host python-wheel/host + +include ../pypi.mk +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk +include ../python3-package.mk +include ../python3-host-build.mk + +define Package/python3-pyproject-metadata + SUBMENU:=Python + SECTION:=lang + CATEGORY:=Languages + TITLE:=PEP 621 metadata parsing + URL:=https://github.com/FFY00/python-pyproject-metadata + DEPENDS:=+python3 +endef + +define Package/python3-pyproject-metadata/description +This project does not implement the parsing of pyproject.toml containing PEP 621 metadata. +Instead, given a Python data structure representing PEP 621 metadata (already parsed), it will validate this input and generate a PEP 643-compliant metadata file (e.g. PKG-INFO). +endef + +$(eval $(call Py3Package,python3-pyproject-metadata)) +$(eval $(call BuildPackage,python3-pyproject-metadata)) +$(eval $(call BuildPackage,python3-pyproject-metadata-src)) +$(eval $(call HostBuild)) diff --git a/lang/python/python-bleak/Makefile b/lang/python/python-bleak/Makefile index 44657daf4..32550e284 100644 --- a/lang/python/python-bleak/Makefile +++ b/lang/python/python-bleak/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-bleak PKG_VERSION:=0.21.1 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PYPI_NAME:=bleak PKG_HASH:=ec4a1a2772fb315b992cbaa1153070c7e26968a52b0e2727035f443a1af5c18f @@ -30,7 +30,7 @@ define Package/python3-bleak TITLE:=Bluetooth Low Energy platform Agnostic Klient URL:=https://github.com/hbldh/bleak DEPENDS:=+python3-light +python3-async-timeout +python3-asyncio \ - +python3-dbus-fast +python3-ctypes +python3-logging + +python3-dbus-fast +python3-ctypes +python3-typing-extensions +python3-logging endef define Package/python3-bleak/description diff --git a/lang/python/python-cython/Makefile b/lang/python/python-cython/Makefile index efaaa2d38..6a17e6dbe 100644 --- a/lang/python/python-cython/Makefile +++ b/lang/python/python-cython/Makefile @@ -8,11 +8,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-cython -PKG_VERSION:=0.29.36 +PKG_VERSION:=3.0.7 PKG_RELEASE:=1 PYPI_NAME:=Cython -PKG_HASH:=41c0cfd2d754e383c9eeb95effc9aa4ab847d0c9747077ddd7c0dcb68c3bc01f +PKG_HASH:=fb299acf3a578573c190c858d49e0cf9d75f4bc49c3f24c5a63804997ef09213 PKG_LICENSE:=Apache-2.0 PKG_LICENSE_FILES:=LICENSE.txt diff --git a/lang/python/python-dbus-fast/Makefile b/lang/python/python-dbus-fast/Makefile index 3cf3e23d6..89a352b15 100644 --- a/lang/python/python-dbus-fast/Makefile +++ b/lang/python/python-dbus-fast/Makefile @@ -7,12 +7,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-dbus-fast -PKG_VERSION:=2.20.0 +PKG_VERSION:=2.21.0 PKG_RELEASE:=1 PYPI_NAME:=dbus-fast PYPI_SOURCE_NAME:=dbus_fast -PKG_HASH:=a38e837c5a8d0a1745ec8390f68ff57986ed2167b0aa2e4a79738a51dd6dfcc3 +PKG_HASH:=f582f6f16791ced6067dab325fae444edf7ce0704315b90c2a473090636a6fe0 PKG_MAINTAINER:=Quintin Hill PKG_LICENSE:=MIT diff --git a/lang/python/python-distro/Makefile b/lang/python/python-distro/Makefile index b41ed2283..9312ba7d5 100644 --- a/lang/python/python-distro/Makefile +++ b/lang/python/python-distro/Makefile @@ -1,11 +1,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-distro -PKG_VERSION:=1.8.0 +PKG_VERSION:=1.9.0 PKG_RELEASE:=1 PYPI_NAME:=distro -PKG_HASH:=02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8 +PKG_HASH:=2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed PKG_MAINTAINER:=Javier Marcet PKG_LICENSE:=Apache-2.0 diff --git a/lang/python/python-docker/Makefile b/lang/python/python-docker/Makefile index 1ce4defb1..6eb8516c9 100644 --- a/lang/python/python-docker/Makefile +++ b/lang/python/python-docker/Makefile @@ -1,11 +1,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-docker -PKG_VERSION:=6.1.3 +PKG_VERSION:=7.0.0 PKG_RELEASE:=1 PYPI_NAME:=docker -PKG_HASH:=aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 +PKG_HASH:=323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3 PKG_MAINTAINER:=Javier Marcet PKG_LICENSE:=Apache-2.0 diff --git a/lang/python/python-gevent/Makefile b/lang/python/python-gevent/Makefile new file mode 100644 index 000000000..92e2dbc26 --- /dev/null +++ b/lang/python/python-gevent/Makefile @@ -0,0 +1,49 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=python-gevent +PKG_VERSION:=23.9.1 +PKG_RELEASE:=1 + +PYPI_NAME:=gevent +PKG_HASH:=72c002235390d46f94938a96920d8856d4ffd9ddf62a303a0d7c118894097e34 + +PKG_MAINTAINER:=Andy Syam +PKG_LICENSE:=MIT +PKG_LICENSE_FILES:=LICENSE + +PKG_BUILD_FLAGS:=no-mips16 +PKG_BUILD_DEPENDS:=python-cffi/host python-greenlet/host python-cython/host + +include ../pypi.mk +include $(INCLUDE_DIR)/package.mk +include ../python3-package.mk + +PYTHON3_PKG_SETUP_VARS:= \ + GEVENTSETUP_EMBED=0 \ + GEVENTSETUP_EMBED_LIBEV=0 \ + GEVENTSETUP_EMBED_CARES=0 + +define Package/python3-gevent + SUBMENU:=Python + SECTION:=lang + CATEGORY:=Languages + TITLE:=Coroutine-based network library + URL:=https://github.com/gevent/gevent + DEPENDS:= \ + +python3-light \ + +python3-cffi \ + +python3-greenlet \ + +python3-zope-interface \ + +libcares \ + +libev \ + +libuv +endef + +define Package/python3-gevent/description + gevent is a coroutine -based Python networking library that uses greenlet + to provide a high-level synchronous API on top of the libev or libuv event loop. +endef + +$(eval $(call Py3Package,python3-gevent)) +$(eval $(call BuildPackage,python3-gevent)) +$(eval $(call BuildPackage,python3-gevent-src)) diff --git a/lang/python/python-greenlet/Makefile b/lang/python/python-greenlet/Makefile index 420030781..dced8ade5 100644 --- a/lang/python/python-greenlet/Makefile +++ b/lang/python/python-greenlet/Makefile @@ -8,11 +8,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-greenlet -PKG_VERSION:=2.0.2 +PKG_VERSION:=3.0.2 PKG_RELEASE:=1 PYPI_NAME:=greenlet -PKG_HASH:=e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0 +PKG_HASH:=1c1129bc47266d83444c85a8e990ae22688cf05fb20d7951fd2866007c2ba9bc PKG_MAINTAINER:=Jan Pavlinec PKG_LICENSE:=MIT @@ -20,9 +20,13 @@ PKG_LICENSE_FILES:=LICENSE # FIXME: remove when GCC10 is the oldest supported compiler, or the issue goes away PKG_BUILD_FLAGS:=no-mips16 +HOST_BUILD_DEPENDS:=python3/host python-build/host python-installer/host python-wheel/host + include ../pypi.mk include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk include ../python3-package.mk +include ../python3-host-build.mk define Package/python3-greenlet SUBMENU:=Python @@ -51,3 +55,4 @@ endif $(eval $(call Py3Package,python3-greenlet)) $(eval $(call BuildPackage,python3-greenlet)) $(eval $(call BuildPackage,python3-greenlet-src)) +$(eval $(call HostBuild)) diff --git a/lang/python/python-jsonschema/Makefile b/lang/python/python-jsonschema/Makefile index cd87fa1e6..17002cf89 100644 --- a/lang/python/python-jsonschema/Makefile +++ b/lang/python/python-jsonschema/Makefile @@ -1,11 +1,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-jsonschema -PKG_VERSION:=4.20.0 +PKG_VERSION:=4.21.1 PKG_RELEASE:=1 PYPI_NAME:=jsonschema -PKG_HASH:=4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa +PKG_HASH:=85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5 PKG_MAINTAINER:=Javier Marcet PKG_LICENSE:=MIT diff --git a/lang/python/python-msgpack/Makefile b/lang/python/python-msgpack/Makefile index 052289b92..6e4e63169 100644 --- a/lang/python/python-msgpack/Makefile +++ b/lang/python/python-msgpack/Makefile @@ -8,11 +8,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-msgpack -PKG_VERSION:=1.0.5 +PKG_VERSION:=1.0.7 PKG_RELEASE:=1 PYPI_NAME:=msgpack -PKG_HASH:=c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c +PKG_HASH:=572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87 PKG_MAINTAINER:=Jan Pavlinec PKG_LICENSE:=Apache-2.0 diff --git a/lang/python/python-networkx/Makefile b/lang/python/python-networkx/Makefile index d0ea86c3d..17805b1bc 100644 --- a/lang/python/python-networkx/Makefile +++ b/lang/python/python-networkx/Makefile @@ -6,11 +6,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-networkx -PKG_VERSION:=3.1 +PKG_VERSION:=3.2.1 PKG_RELEASE:=1 PYPI_NAME:=networkx -PKG_HASH:=de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61 +PKG_HASH:=9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6 PKG_LICENSE:=BSD-3-clause PKG_LICENSE_FILES:=LICENSE.txt diff --git a/lang/python/python-orjson/Makefile b/lang/python/python-orjson/Makefile index 39ef2cf52..f60803381 100644 --- a/lang/python/python-orjson/Makefile +++ b/lang/python/python-orjson/Makefile @@ -1,11 +1,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-orjson -PKG_VERSION:=3.9.10 +PKG_VERSION:=3.9.12 PKG_RELEASE:=1 PYPI_NAME:=orjson -PKG_HASH:=9ebbdbd6a046c304b1845e96fbcc5559cd296b4dfd3ad2509e33c4d9ce07d6a1 +PKG_HASH:=da908d23a3b3243632b523344403b128722a5f45e278a8343c2bb67538dff0e4 PKG_MAINTAINER:=Timothy Ace PKG_LICENSE:=Apache-2.0 MIT diff --git a/lang/python/python-sqlalchemy/Makefile b/lang/python/python-sqlalchemy/Makefile index 39279f258..c69c37f24 100644 --- a/lang/python/python-sqlalchemy/Makefile +++ b/lang/python/python-sqlalchemy/Makefile @@ -8,11 +8,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-sqlalchemy -PKG_VERSION:=2.0.20 +PKG_VERSION:=2.0.23 PKG_RELEASE:=1 PYPI_NAME:=SQLAlchemy -PKG_HASH:=ca8a5ff2aa7f3ade6c498aaafce25b1eaeabe4e42b73e25519183e4566a16fc6 +PKG_HASH:=c1bda93cbbe4aa2aa0aa8655c5aeda505cd219ff3e8da91d1d329e143e4aff69 PKG_MAINTAINER:=Josef Schlehofer PKG_LICENSE:=MIT diff --git a/lang/python/python-websocket-client/Makefile b/lang/python/python-websocket-client/Makefile index c3173ce1e..d77fabd0b 100644 --- a/lang/python/python-websocket-client/Makefile +++ b/lang/python/python-websocket-client/Makefile @@ -1,11 +1,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-websocket-client -PKG_VERSION:=1.6.4 +PKG_VERSION:=1.7.0 PKG_RELEASE:=1 PYPI_NAME:=websocket-client -PKG_HASH:=b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df +PKG_HASH:=10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6 PKG_MAINTAINER:=Javier Marcet PKG_LICENSE:=Apache-2.0 diff --git a/lang/python/python-zeroconf/Makefile b/lang/python/python-zeroconf/Makefile index eaa7334c4..1950b579c 100644 --- a/lang/python/python-zeroconf/Makefile +++ b/lang/python/python-zeroconf/Makefile @@ -8,11 +8,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=python-zeroconf -PKG_VERSION:=0.97.0 +PKG_VERSION:=0.131.0 PKG_RELEASE:=1 PYPI_NAME:=zeroconf -PKG_HASH:=9a06cd21182250100df6c4f4e9de2a47a0ea927c7d5a0446035bb3dfcc17a647 +PKG_HASH:=90c431e99192a044a5e0217afd7ca0ca9824af93190332e6f7baf4da5375f331 PKG_MAINTAINER:=Josef Schlehofer PKG_LICENSE:=LGPL-2.1-or-later diff --git a/lang/python/python-zope-event/Makefile b/lang/python/python-zope-event/Makefile new file mode 100644 index 000000000..4b4c0fdef --- /dev/null +++ b/lang/python/python-zope-event/Makefile @@ -0,0 +1,35 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=python-zope-event +PKG_VERSION:=5.0 +PKG_RELEASE:=1 + +PYPI_NAME:=zope.event +PKG_HASH:=bac440d8d9891b4068e2b5a2c5e2c9765a9df762944bda6955f96bb9b91e67cd + +PKG_LICENSE:=ZPL-2.1 +PKG_LICENSE_FILES:=LICENSE.txt +PKG_MAINTAINER:=Andy Syam + +include ../pypi.mk +include $(INCLUDE_DIR)/package.mk +include ../python3-package.mk + +define Package/python3-zope-event + SECTION:=lang + CATEGORY:=Languages + SUBMENU:=Python + TITLE:=Very basic event publishing system + URL:=https://github.com/zopefoundation/zope.event + DEPENDS:=+python3-light +python3-logging +endef + +define Package/python3-zope-event/description +The zope.event package provides a simple event system, including: +An event publishing API, intended for use by applications which are unaware of any subscribers to their events. +A very simple synchronous event-dispatching system, on which more sophisticated event dispatching systems can be built. For example, a type-based event dispatching system that builds on zope.event can be found in zope.component. +endef + +$(eval $(call Py3Package,python3-zope-event)) +$(eval $(call BuildPackage,python3-zope-event)) +$(eval $(call BuildPackage,python3-zope-event-src)) diff --git a/lang/vala/Makefile b/lang/vala/Makefile index 577bc588e..24ccef4c5 100644 --- a/lang/vala/Makefile +++ b/lang/vala/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=vala -PKG_VERSION:=0.56.3 +PKG_VERSION:=0.56.14 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@GNOME/vala/$(basename $(PKG_VERSION)) -PKG_HASH:=e1066221bf7b89cb1fa7327a3888645cb33b604de3bf45aa81132fd040b699bf +PKG_HASH:=9382c268ca9bdc02aaedc8152a9818bf3935273041f629c56de410e360a3f557 PKG_MAINTAINER:=W. Michael Petullo PKG_LICENSE:=LGPL-2.1-or-later diff --git a/libs/apr/Makefile b/libs/apr/Makefile index 8138e6325..afd272730 100644 --- a/libs/apr/Makefile +++ b/libs/apr/Makefile @@ -20,7 +20,7 @@ PKG_MAINTAINER:=Thomas Heil PKG_LICENSE:=Apache-2.0 PKG_LICENSE_FILES:=LICENSE -PKG_CPE_ID:=cpe:/a:apache:apr +PKG_CPE_ID:=cpe:/a:apache:portable_runtime PKG_BUILD_PARALLEL:=1 diff --git a/libs/gnutls/Makefile b/libs/gnutls/Makefile index a02d9e08f..ea5e74f31 100644 --- a/libs/gnutls/Makefile +++ b/libs/gnutls/Makefile @@ -6,13 +6,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=gnutls -PKG_VERSION:=3.8.0 -PKG_RELEASE:=3 +PKG_VERSION:=3.8.3 +PKG_RELEASE:=1 PKG_BUILD_FLAGS:=no-mips16 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://www.gnupg.org/ftp/gcrypt/gnutls/v3.8 -PKG_HASH:=0ea0d11a1660a1e63f960f157b197abe6d0c8cb3255be24e1fb3815930b9bdc5 +PKG_HASH:=f74fc5954b27d4ec6dfbb11dea987888b5b124289a3703afcada0ee520f4173e PKG_MAINTAINER:=Nikos Mavrogiannopoulos PKG_LICENSE:=LGPL-2.1-or-later diff --git a/libs/gnutls/patches/040-build-use-clang-format-on-off-annotation.patch b/libs/gnutls/patches/040-build-use-clang-format-on-off-annotation.patch deleted file mode 100644 index c377da788..000000000 --- a/libs/gnutls/patches/040-build-use-clang-format-on-off-annotation.patch +++ /dev/null @@ -1,490 +0,0 @@ -From 18345986e29c820e64daced78232f236fd4a4e6e Mon Sep 17 00:00:00 2001 -From: Daiki Ueno -Date: Thu, 16 Mar 2023 16:21:37 +0900 -Subject: [PATCH] build: use /* clang-format {on|off} */ annotation - -Signed-off-by: Daiki Ueno ---- - lib/includes/gnutls/abstract.h | 4 ---- - lib/includes/gnutls/compat.h | 4 ---- - lib/includes/gnutls/crypto.h | 4 ---- - lib/includes/gnutls/dtls.h | 4 ---- - lib/includes/gnutls/gnutls.h.in | 18 ++++++++---------- - lib/includes/gnutls/ocsp.h | 4 ---- - lib/includes/gnutls/openpgp.h | 4 ---- - lib/includes/gnutls/pkcs11.h | 4 ---- - lib/includes/gnutls/pkcs12.h | 4 ---- - lib/includes/gnutls/pkcs7.h | 4 ---- - lib/includes/gnutls/socket.h | 4 ---- - lib/includes/gnutls/system-keys.h | 4 ---- - lib/includes/gnutls/tpm.h | 4 ---- - lib/includes/gnutls/urls.h | 4 ---- - lib/includes/gnutls/x509-ext.h | 4 ---- - lib/includes/gnutls/x509.h | 4 ---- - tests/test-chains-issuer-aia.h | 4 ---- - tests/test-chains.h | 4 ---- - 18 files changed, 8 insertions(+), 78 deletions(-) - ---- a/lib/includes/gnutls/abstract.h -+++ b/lib/includes/gnutls/abstract.h -@@ -30,11 +30,9 @@ - # include - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - /* Public key operations */ - -@@ -748,10 +746,8 @@ gnutls_pubkey_print(gnutls_pubkey_t pubk - gnutls_certificate_print_formats_t format, - gnutls_datum_t * out); - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_ABSTRACT_H */ ---- a/lib/includes/gnutls/compat.h -+++ b/lib/includes/gnutls/compat.h -@@ -25,11 +25,9 @@ - #ifndef GNUTLS_COMPAT_H - # define GNUTLS_COMPAT_H - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - # ifdef __GNUC__ - -@@ -228,10 +226,8 @@ int gnutls_priority_compression_list(gnu - const unsigned int **list) - _GNUTLS_GCC_ATTR_DEPRECATED; - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_COMPAT_H */ ---- a/lib/includes/gnutls/crypto.h -+++ b/lib/includes/gnutls/crypto.h -@@ -25,11 +25,9 @@ - - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - typedef struct api_cipher_hd_st *gnutls_cipher_hd_t; - -@@ -335,10 +333,8 @@ int gnutls_encode_gost_rs_value(gnutls_d - int gnutls_decode_gost_rs_value(const gnutls_datum_t * sig_value, - gnutls_datum_t * r, gnutls_datum_t * s); - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_CRYPTO_H */ ---- a/lib/includes/gnutls/dtls.h -+++ b/lib/includes/gnutls/dtls.h -@@ -29,11 +29,9 @@ - - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - # define GNUTLS_COOKIE_KEY_SIZE 16 - -@@ -84,10 +82,8 @@ void gnutls_dtls_prestate_set(gnutls_ses - - unsigned int gnutls_record_get_discarded(gnutls_session_t session); - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_DTLS_H */ ---- a/lib/includes/gnutls/gnutls.h.in -+++ b/lib/includes/gnutls/gnutls.h.in -@@ -45,19 +45,19 @@ - /* Get time_t. */ - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - # define GNUTLS_VERSION "@VERSION@" - --# define GNUTLS_VERSION_MAJOR @MAJOR_VERSION@ --# define GNUTLS_VERSION_MINOR @MINOR_VERSION@ --# define GNUTLS_VERSION_PATCH @PATCH_VERSION@ -+/* clang-format off */ -+#define GNUTLS_VERSION_MAJOR @MAJOR_VERSION@ -+#define GNUTLS_VERSION_MINOR @MINOR_VERSION@ -+#define GNUTLS_VERSION_PATCH @PATCH_VERSION@ - --# define GNUTLS_VERSION_NUMBER @NUMBER_VERSION@ -+#define GNUTLS_VERSION_NUMBER @NUMBER_VERSION@ -+/* clang-format on */ - - # define GNUTLS_CIPHER_RIJNDAEL_128_CBC GNUTLS_CIPHER_AES_128_CBC - # define GNUTLS_CIPHER_RIJNDAEL_256_CBC GNUTLS_CIPHER_AES_256_CBC -@@ -2365,9 +2365,9 @@ int gnutls_dh_params_cpy(gnutls_dh_param - - /* Session stuff - */ --/* *INDENT-OFF* */ -+/* clang-format off */ - @DEFINE_IOVEC_T@ --/* *INDENT-ON* */ -+/* clang-format on */ - - typedef ssize_t(*gnutls_pull_func) (gnutls_transport_ptr_t, void *, size_t); - typedef ssize_t(*gnutls_push_func) (gnutls_transport_ptr_t, const void *, -@@ -3634,11 +3634,9 @@ gnutls_transport_is_ktls_enabled(gnutls_ - # define GNUTLS_E_APPLICATION_ERROR_MAX -65000 - # define GNUTLS_E_APPLICATION_ERROR_MIN -65500 - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - # include - ---- a/lib/includes/gnutls/ocsp.h -+++ b/lib/includes/gnutls/ocsp.h -@@ -29,11 +29,9 @@ - # include - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - # define GNUTLS_OCSP_NONCE "1.3.6.1.5.5.7.48.1.2" - -@@ -269,10 +267,8 @@ gnutls_ocsp_resp_list_import2(gnutls_ocs - const gnutls_datum_t * resp_data, - gnutls_x509_crt_fmt_t format, unsigned int flags); - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_OCSP_H */ ---- a/lib/includes/gnutls/openpgp.h -+++ b/lib/includes/gnutls/openpgp.h -@@ -30,11 +30,9 @@ - # include - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - /* Openpgp certificate stuff - */ -@@ -424,10 +422,8 @@ int gnutls_certificate_set_openpgp_keyri - (gnutls_certificate_credentials_t c, const char *file, - gnutls_openpgp_crt_fmt_t format) _GNUTLS_GCC_ATTR_DEPRECATED; - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_OPENPGP_H */ ---- a/lib/includes/gnutls/pkcs11.h -+++ b/lib/includes/gnutls/pkcs11.h -@@ -28,11 +28,9 @@ - # include - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - # define GNUTLS_PKCS11_MAX_PIN_LEN 256 - -@@ -491,10 +489,8 @@ gnutls_pkcs11_copy_attached_extension(co - - # define gnutls_x509_crt_import_pkcs11_url gnutls_x509_crt_import_url - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_PKCS11_H */ ---- a/lib/includes/gnutls/pkcs12.h -+++ b/lib/includes/gnutls/pkcs12.h -@@ -25,11 +25,9 @@ - - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - /* PKCS12 structures handling - */ -@@ -138,10 +136,8 @@ int gnutls_pkcs12_bag_get_friendly_name( - int gnutls_pkcs12_bag_set_friendly_name(gnutls_pkcs12_bag_t bag, - unsigned indx, const char *name); - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_PKCS12_H */ ---- a/lib/includes/gnutls/pkcs7.h -+++ b/lib/includes/gnutls/pkcs7.h -@@ -31,11 +31,9 @@ - # include - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - /* PKCS7 structures handling - */ -@@ -149,10 +147,8 @@ int gnutls_pkcs7_print_signature_info(gn - gnutls_certificate_print_formats_t format, - gnutls_datum_t * out); - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_PKCS7_H */ ---- a/lib/includes/gnutls/socket.h -+++ b/lib/includes/gnutls/socket.h -@@ -31,11 +31,9 @@ - /* Get socklen_t */ - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - void gnutls_transport_set_fastopen(gnutls_session_t session, - int fd, -@@ -43,10 +41,8 @@ void gnutls_transport_set_fastopen(gnutl - socklen_t connect_addrlen, - unsigned int flags); - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_SOCKET_H */ ---- a/lib/includes/gnutls/system-keys.h -+++ b/lib/includes/gnutls/system-keys.h -@@ -31,11 +31,9 @@ - * they will be requested through the pin callbacks. - */ - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - struct system_key_iter_st; - typedef struct system_key_iter_st *gnutls_system_key_iter_t; -@@ -54,10 +52,8 @@ int gnutls_system_key_add_x509(gnutls_x5 - gnutls_x509_privkey_t privkey, const char *label, - char **cert_url, char **key_url); - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_SYSTEM_KEYS_H */ ---- a/lib/includes/gnutls/tpm.h -+++ b/lib/includes/gnutls/tpm.h -@@ -26,11 +26,9 @@ - # include - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - struct tpm_key_list_st; - typedef struct tpm_key_list_st *gnutls_tpm_key_list_t; -@@ -71,10 +69,8 @@ int gnutls_tpm_get_registered(gnutls_tpm - int gnutls_tpm_privkey_delete(const char *url, const char *srk_password); - - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_TPM_H */ ---- a/lib/includes/gnutls/urls.h -+++ b/lib/includes/gnutls/urls.h -@@ -31,11 +31,9 @@ - * keys and certificates. - */ - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - typedef int (*gnutls_privkey_import_url_func)(gnutls_privkey_t pkey, - const char *url, unsigned flags); -@@ -71,10 +69,8 @@ typedef struct gnutls_custom_url_st { - - int gnutls_register_custom_url(const gnutls_custom_url_st * st); - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_URLS_H */ ---- a/lib/includes/gnutls/x509-ext.h -+++ b/lib/includes/gnutls/x509-ext.h -@@ -28,11 +28,9 @@ - # include - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - typedef struct gnutls_subject_alt_names_st *gnutls_subject_alt_names_t; - -@@ -215,10 +213,8 @@ int gnutls_x509_ct_sct_get(const gnutls_ - gnutls_sign_algorithm_t * sigalg, - gnutls_datum_t * signature); - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_X509_EXT_H */ ---- a/lib/includes/gnutls/x509.h -+++ b/lib/includes/gnutls/x509.h -@@ -30,11 +30,9 @@ - - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - extern "C" { - #endif --/* *INDENT-ON* */ - - /* Some OIDs usually found in Distinguished names, or - * in Subject Directory Attribute extensions. -@@ -1710,10 +1708,8 @@ gnutls_x509_ext_print(gnutls_x509_ext_st - - # include - --/* *INDENT-OFF* */ - #ifdef __cplusplus - } - #endif --/* *INDENT-ON* */ - - #endif /* GNUTLS_X509_H */ ---- a/tests/test-chains-issuer-aia.h -+++ b/tests/test-chains-issuer-aia.h -@@ -23,8 +23,6 @@ - #ifndef GNUTLS_TESTS_TEST_CHAINS_ISSUER_AIA_H - # define GNUTLS_TESTS_TEST_CHAINS_ISSUER_AIA_H - --/* *INDENT-OFF* */ -- - #define MAX_CHAIN 1 - - static const char *missing_cert_aia[] = { -@@ -132,6 +130,4 @@ static const char *missing_cert_aia_ca[] - # pragma GCC diagnostic pop - #endif - --/* *INDENT-ON* */ -- - #endif /* GNUTLS_TESTS_TEST_CHAINS_ISSUER_AIA_H */ ---- a/tests/test-chains.h -+++ b/tests/test-chains.h -@@ -23,8 +23,6 @@ - #ifndef GNUTLS_TESTS_TEST_CHAINS_H - # define GNUTLS_TESTS_TEST_CHAINS_H - --/* *INDENT-OFF* */ -- - #define MAX_CHAIN 10 - - static const char *chain_with_no_subject_id_in_ca_ok[] = { -@@ -4449,6 +4447,4 @@ static struct - # pragma GCC diagnostic pop - #endif - --/* *INDENT-ON* */ -- - #endif /* GNUTLS_TESTS_TEST_CHAINS_H */ diff --git a/libs/hwloc/Makefile b/libs/hwloc/Makefile index cc3dc9f20..570f5fb14 100644 --- a/libs/hwloc/Makefile +++ b/libs/hwloc/Makefile @@ -6,12 +6,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=hwloc -PKG_VERSION:=2.8.0 +PKG_VERSION:=2.10.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 -PKG_SOURCE_URL:=https://download.open-mpi.org/release/$(PKG_NAME)/v2.8 -PKG_HASH:=348a72fcd48c32a823ee1da149ae992203e7ad033549e64aed6ea6eeb01f42c1 +PKG_SOURCE_URL:=https://download.open-mpi.org/release/$(PKG_NAME)/v2.10 +PKG_HASH:=0305dd60c9de2fbe6519fe2a4e8fdc6d3db8de574a0ca7812b92e80c05ae1392 PKG_MAINTAINER:=W. Michael Petullo PKG_LICENSE:=BSD-3-Clause diff --git a/libs/libdaq/Makefile b/libs/libdaq/Makefile deleted file mode 100644 index b4bd7d8e2..000000000 --- a/libs/libdaq/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -# -# Copyright (C) 2012-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:=libdaq -PKG_VERSION:=2.2.2 -PKG_RELEASE:=3 - -PKG_SOURCE_URL:=https://www.snort.org/downloads/snortplus/ -PKG_SOURCE:=daq-$(PKG_VERSION).tar.gz -PKG_HASH:=7cd818cabb1ad35360e83076e54775f07165ee71407dc672d147e27d3cd37f7b -PKG_BUILD_DIR:=$(BUILD_DIR)/daq-$(PKG_VERSION) - -PKG_LICENSE:=GPL-2.0 -PKG_MAINTAINER:=W. Michael Petullo - -PKG_INSTALL:=1 - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/nls.mk - -define Package/libdaq - SECTION:=libs - CATEGORY:=Libraries - TITLE:=DAQ library - URL:=$(PKG_SOURCE_URL) - DEPENDS:=+libdnet +libpcap -endef - -define Package/libdaq/description - Data Acquisition library for packet I/O. -endef - -CONFIGURE_ARGS+= \ - --disable-static \ - --disable-nfq-module \ - --with-dnet-includes="$(STAGING_DIR)/usr/include" \ - --with-dnet-libraries="$(STAGING_DIR)/usr/lib" \ - --with-libpcap-includes="$(STAGING_DIR)/usr/include" \ - --with-libpcap-libraries="$(STAGING_DIR)/usr/lib" \ - -define Build/InstallDev - $(INSTALL_DIR) $(STAGING_DIR)/usr/include/daq2 - $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(STAGING_DIR)/usr/include/daq2/ - $(INSTALL_DIR) $(STAGING_DIR)/usr/lib/daq2 - $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib* $(STAGING_DIR)/usr/lib/daq2/ - $(INSTALL_DIR) $(STAGING_DIR)/usr/lib/daq2/daq - $(CP) $(PKG_INSTALL_DIR)/usr/lib/daq/* $(STAGING_DIR)/usr/lib/daq2/daq/ - $(INSTALL_DIR) $(STAGING_DIR)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/daq-modules-config $(STAGING_DIR)/usr/bin/ - $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(STAGING_DIR)/usr/bin/daq-modules-config - $(INSTALL_DIR) $(2)/bin - $(LN) ../../usr/bin/daq-modules-config $(2)/bin/daq-modules-config -endef - -define Package/libdaq/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib/ - $(INSTALL_DIR) $(1)/usr/lib/daq - $(CP) $(PKG_INSTALL_DIR)/usr/lib/daq/*.so* $(1)/usr/lib/daq/ -endef - -$(eval $(call BuildPackage,libdaq)) diff --git a/libs/libdaq/patches/001-compile.patch b/libs/libdaq/patches/001-compile.patch deleted file mode 100644 index fce2b0230..000000000 --- a/libs/libdaq/patches/001-compile.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/configure -+++ b/configure -@@ -13244,10 +13244,11 @@ if ${daq_cv_libpcap_version_1x+:} false; - 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 --See \`config.log' for more details" "$LINENO" 5; } -+# { { $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 -+#See \`config.log' for more details" "$LINENO" 5; } -+ echo " No cross compiling test." - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ diff --git a/libs/libdaq/patches/100-musl-compat.patch b/libs/libdaq/patches/100-musl-compat.patch deleted file mode 100644 index c510564c4..000000000 --- a/libs/libdaq/patches/100-musl-compat.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- a/os-daq-modules/daq_ipfw.c -+++ b/os-daq-modules/daq_ipfw.c -@@ -23,10 +23,10 @@ - #include - #include - #include -+#include - - #include - #include --#include - - #include - #include ---- a/os-daq-modules/daq_ipq.c -+++ b/os-daq-modules/daq_ipq.c -@@ -24,10 +24,10 @@ - #include - #include - #include -+#include - - #include - #include --#include - - #include - ---- a/os-daq-modules/daq_nfq.c -+++ b/os-daq-modules/daq_nfq.c -@@ -24,10 +24,10 @@ - #include - #include - #include -+#include - - #include - #include --#include - - #include - diff --git a/libs/libdmapsharing/Makefile b/libs/libdmapsharing/Makefile index b56515ab4..5d506aaff 100644 --- a/libs/libdmapsharing/Makefile +++ b/libs/libdmapsharing/Makefile @@ -10,12 +10,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libdmapsharing -PKG_VERSION:=3.9.12 +PKG_VERSION:=3.9.13 PKG_RELEASE:=1 PKG_SOURCE:=libdmapsharing-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://www.flyn.org/projects/libdmapsharing/ -PKG_HASH:=aa47e405c5059ff35ff6fc447e497dc1ff15558859a57710a664350314abf750 +PKG_HASH:=3659f63f29e11d6d6ae78b53d7cc6be3f3adeff9c00c67cc50ad19c6af699f7a PKG_MAINTAINER:=W. Michael Petullo PKG_LICENSE:=LGPL-2.1-or-later diff --git a/libs/libdmapsharing/patches/001-disable_pixbuf.patch b/libs/libdmapsharing/patches/001-disable_pixbuf.patch index 11b2567ff..e0f0fd874 100644 --- a/libs/libdmapsharing/patches/001-disable_pixbuf.patch +++ b/libs/libdmapsharing/patches/001-disable_pixbuf.patch @@ -1,6 +1,6 @@ --- a/configure.ac +++ b/configure.ac -@@ -126,15 +126,7 @@ fi +@@ -124,15 +124,7 @@ fi AC_SUBST(GOBJECT_CFLAGS) AC_SUBST(GOBJECT_LIBS) diff --git a/libs/libestr/Makefile b/libs/libestr/Makefile index 9fc362a2a..dd4f671b1 100644 --- a/libs/libestr/Makefile +++ b/libs/libestr/Makefile @@ -18,6 +18,7 @@ PKG_HASH:=46632b2785ff4a231dcf241eeb0dcb5fc0c7d4da8ee49cf5687722cdbe8b2024 PKG_MAINTAINER:= PKG_LICENSE:=LGPL-2.1-or-later PKG_LICENSE_FILES:=COPYING +PKG_CPE_ID:=cpe:/a:adiscon:libestr PKG_INSTALL:=1 PKG_BUILD_PARALLEL:=1 diff --git a/libs/libfmt/Makefile b/libs/libfmt/Makefile index 6cfe65d1c..e8709edb2 100644 --- a/libs/libfmt/Makefile +++ b/libs/libfmt/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libfmt -PKG_VERSION:=9.1.0 +PKG_VERSION:=10.2.1 PKG_RELEASE:=1 PKG_SOURCE_NAME:=fmt PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/fmtlib/$(PKG_SOURCE_NAME)/tar.gz/$(PKG_VERSION)? -PKG_HASH:=5dea48d1fcddc3ec571ce2058e13910a0d4a6bab4cc09a809d8b1dd1c88ae6f2 +PKG_HASH:=1250e4cc58bf06ee631567523f48848dc4596133e163f02615c97f78bab6c811 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_NAME)-$(PKG_VERSION) PKG_MAINTAINER:=Othmar Truniger diff --git a/libs/libgcrypt/Makefile b/libs/libgcrypt/Makefile index 2dea9f4ca..bde888032 100644 --- a/libs/libgcrypt/Makefile +++ b/libs/libgcrypt/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libgcrypt -PKG_VERSION:=1.10.2 +PKG_VERSION:=1.10.3 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=https://www.gnupg.org/ftp/gcrypt/libgcrypt/ -PKG_HASH:=3b9c02a004b68c256add99701de00b383accccf37177e0d6c58289664cce0c03 +PKG_HASH:=8b0870897ac5ac67ded568dcfadf45969cfa8a6beb0fd60af2a9eadc2a3272aa PKG_MAINTAINER:=W. Michael Petullo PKG_CPE_ID:=cpe:/a:gnupg:libgcrypt diff --git a/libs/libmad/Makefile b/libs/libmad/Makefile index 569f402b7..a6d7c8e90 100644 --- a/libs/libmad/Makefile +++ b/libs/libmad/Makefile @@ -8,13 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libmad -PKG_VERSION:=0.16.3 -PKG_RELEASE:=2 +PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=0.16.3 +PKG_SOURCE_VERSION:=0.16.4 PKG_SOURCE_URL:=https://codeberg.org/tenacityteam/libmad -PKG_MIRROR_HASH:=f2fa2a3c75ad1c58f0b6150482a3036408c8da79f0fcbf23bcf9e105f29079ee +PKG_MIRROR_HASH:=729c78430c2fa4bf5bb25aa3f25b6a6cd5367e5255057e6211a48f6cde6a953a PKG_MAINTAINER:=Ted Hess PKG_LICENSE:=GPL-2.0-or-later diff --git a/libs/libsodium/Makefile b/libs/libsodium/Makefile index d0589dca4..9c207f89b 100644 --- a/libs/libsodium/Makefile +++ b/libs/libsodium/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libsodium -PKG_VERSION:=1.0.18 -PKG_RELEASE:=4 +PKG_VERSION:=1.0.19 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://download.libsodium.org/libsodium/releases \ https://github.com/jedisct1/libsodium/releases/download/$(PKG_VERSION) -PKG_HASH:=6f504490b342a4f8a4c4a02fc9b866cbef8622d5df4e5452b46be121e46636c1 +PKG_HASH:=018d79fe0a045cca07331d37bd0cb57b2e838c51bc48fd837a1472e50068bbea PKG_MAINTAINER:=Damiano Renfer PKG_LICENSE:=ISC @@ -27,6 +27,9 @@ PKG_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/package.mk +TAR_OPTIONS+= --strip-components 1 +TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS) + define Package/libsodium SECTION:=libs CATEGORY:=Libraries diff --git a/libs/libsodium/patches/001-revert-f5076db5f8ef27.patch b/libs/libsodium/patches/001-revert-f5076db5f8ef27.patch index 76fd5cfa3..c88ef108b 100644 --- a/libs/libsodium/patches/001-revert-f5076db5f8ef27.patch +++ b/libs/libsodium/patches/001-revert-f5076db5f8ef27.patch @@ -1,6 +1,6 @@ --- a/src/libsodium/Makefile.am +++ b/src/libsodium/Makefile.am -@@ -59,6 +59,7 @@ libsodium_la_SOURCES = \ +@@ -73,6 +73,7 @@ libsodium_la_SOURCES = \ crypto_scalarmult/curve25519/ref10/x25519_ref10.h \ crypto_scalarmult/curve25519/scalarmult_curve25519.c \ crypto_scalarmult/curve25519/scalarmult_curve25519.h \ @@ -8,7 +8,7 @@ crypto_secretbox/crypto_secretbox.c \ crypto_secretbox/crypto_secretbox_easy.c \ crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305.c \ -@@ -160,7 +161,6 @@ libsodium_la_SOURCES += \ +@@ -173,7 +174,6 @@ libsodium_la_SOURCES += \ crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h \ crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c \ crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c \ @@ -18,7 +18,7 @@ crypto_shorthash/siphash24/shorthash_siphashx24.c \ --- a/src/libsodium/include/sodium.h +++ b/src/libsodium/include/sodium.h -@@ -33,6 +33,7 @@ +@@ -39,6 +39,7 @@ #include "sodium/crypto_pwhash_argon2i.h" #include "sodium/crypto_scalarmult.h" #include "sodium/crypto_scalarmult_curve25519.h" @@ -26,11 +26,11 @@ #include "sodium/crypto_secretbox.h" #include "sodium/crypto_secretbox_xsalsa20poly1305.h" #include "sodium/crypto_secretstream_xchacha20poly1305.h" -@@ -57,7 +58,6 @@ - # include "sodium/crypto_box_curve25519xchacha20poly1305.h" - # include "sodium/crypto_core_ed25519.h" - # include "sodium/crypto_core_ristretto255.h" --# include "sodium/crypto_scalarmult_ed25519.h" - # include "sodium/crypto_scalarmult_ristretto255.h" - # include "sodium/crypto_secretbox_xchacha20poly1305.h" - # include "sodium/crypto_pwhash_scryptsalsa208sha256.h" +@@ -64,7 +65,6 @@ + #include "sodium/crypto_core_ed25519.h" + #include "sodium/crypto_core_ristretto255.h" + #include "sodium/crypto_pwhash_scryptsalsa208sha256.h" +-#include "sodium/crypto_scalarmult_ed25519.h" + #include "sodium/crypto_scalarmult_ristretto255.h" + #include "sodium/crypto_secretbox_xchacha20poly1305.h" + #include "sodium/crypto_stream_salsa2012.h" diff --git a/libs/libsodium/patches/100-minimal-build-with-ed25519-core.patch b/libs/libsodium/patches/100-minimal-build-with-ed25519-core.patch index 99d780958..7e92ffe82 100644 --- a/libs/libsodium/patches/100-minimal-build-with-ed25519-core.patch +++ b/libs/libsodium/patches/100-minimal-build-with-ed25519-core.patch @@ -1,6 +1,6 @@ --- a/src/libsodium/Makefile.am +++ b/src/libsodium/Makefile.am -@@ -12,6 +12,7 @@ libsodium_la_SOURCES = \ +@@ -23,6 +23,7 @@ libsodium_la_SOURCES = \ crypto_box/crypto_box_easy.c \ crypto_box/crypto_box_seal.c \ crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c \ @@ -8,7 +8,7 @@ crypto_core/ed25519/ref10/ed25519_ref10.c \ crypto_core/hchacha20/core_hchacha20.c \ crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c \ -@@ -152,7 +153,6 @@ if !MINIMAL +@@ -165,7 +166,6 @@ if !MINIMAL libsodium_la_SOURCES += \ crypto_box/curve25519xchacha20poly1305/box_curve25519xchacha20poly1305.c \ crypto_box/curve25519xchacha20poly1305/box_seal_curve25519xchacha20poly1305.c \ @@ -18,19 +18,19 @@ crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h \ --- a/src/libsodium/include/sodium.h +++ b/src/libsodium/include/sodium.h -@@ -14,6 +14,7 @@ +@@ -16,6 +16,7 @@ #include "sodium/crypto_auth_hmacsha512256.h" #include "sodium/crypto_box.h" #include "sodium/crypto_box_curve25519xsalsa20poly1305.h" +#include "sodium/crypto_core_ed25519.h" - #include "sodium/crypto_core_hsalsa20.h" #include "sodium/crypto_core_hchacha20.h" + #include "sodium/crypto_core_hsalsa20.h" #include "sodium/crypto_core_salsa20.h" -@@ -56,7 +57,6 @@ +@@ -62,7 +63,6 @@ #ifndef SODIUM_LIBRARY_MINIMAL - # include "sodium/crypto_box_curve25519xchacha20poly1305.h" --# include "sodium/crypto_core_ed25519.h" - # include "sodium/crypto_core_ristretto255.h" - # include "sodium/crypto_scalarmult_ristretto255.h" - # include "sodium/crypto_secretbox_xchacha20poly1305.h" + #include "sodium/crypto_box_curve25519xchacha20poly1305.h" +-#include "sodium/crypto_core_ed25519.h" + #include "sodium/crypto_core_ristretto255.h" + #include "sodium/crypto_pwhash_scryptsalsa208sha256.h" + #include "sodium/crypto_scalarmult_ristretto255.h" diff --git a/libs/libsoup/Makefile b/libs/libsoup/Makefile deleted file mode 100644 index 3bca1bd0a..000000000 --- a/libs/libsoup/Makefile +++ /dev/null @@ -1,75 +0,0 @@ -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=libsoup -PKG_VERSION:=2.74.3 -PKG_RELEASE:=2 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_SOURCE_URL:=@GNOME/libsoup/$(basename $(PKG_VERSION)) -PKG_HASH:=e4b77c41cfc4c8c5a035fcdc320c7bc6cfb75ef7c5a034153df1413fa1d92f13 - -PKG_MAINTAINER:=W. Michael Petullo -PKG_LICENSE:=LGPL-2.1-or-later -PKG_LICENSE_FILES:=COPYING -PKG_CPE_ID:=cpe:/a:gnome:libsoup - -PKG_BUILD_DEPENDS:=glib2/host - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/nls.mk -include $(INCLUDE_DIR)/meson.mk - -define Package/libsoup - SECTION:=libs - CATEGORY:=Libraries - TITLE:=libsoup - URL:=https://wiki.gnome.org/Projects/libsoup - DEPENDS:=+glib2 +libxml2 +libgnutls +libsqlite3 +libpsl $(ICONV_DEPENDS) $(INTL_DEPENDS) -endef - -MESON_ARGS += \ - -Dgssapi=disabled \ - -Dntlm=disabled \ - -Dbrotli=disabled \ - -Dtls_check=false \ - -Dgnome=false \ - -Dintrospection=disabled \ - -Dvapi=disabled \ - -Dgtk_doc=false \ - -Dtests=false \ - -Dinstalled_tests=false \ - -Dsysprof=disabled - -define package/libsoup/decription -Libsoup is an HTTP library implementation in C -endef - -define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/{lib/pkgconfig,include/libsoup-2.4/libsoup} - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/libsoup-2.4.so* \ - $(1)/usr/lib/ - - $(INSTALL_DATA) \ - $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/* \ - $(1)/usr/lib/pkgconfig/ - - $(INSTALL_DATA) \ - $(PKG_INSTALL_DIR)/usr/include/libsoup-2.4/libsoup/*.h \ - $(1)/usr/include/libsoup-2.4/libsoup/ -endef - -define Package/libsoup/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/libsoup-2.4.so* \ - $(1)/usr/lib/ -endef - -$(eval $(call BuildPackage,libsoup)) diff --git a/libs/libsoup/patches/010-libxml-1.12.patch b/libs/libsoup/patches/010-libxml-1.12.patch deleted file mode 100644 index e3147e81a..000000000 --- a/libs/libsoup/patches/010-libxml-1.12.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/libsoup/soup-xmlrpc-old.c -+++ b/libsoup/soup-xmlrpc-old.c -@@ -11,7 +11,7 @@ - - #include - --#include -+#include - - #include "soup-xmlrpc-old.h" - #include "soup.h" ---- a/libsoup/soup-xmlrpc.c -+++ b/libsoup/soup-xmlrpc.c -@@ -17,7 +17,7 @@ - - #include - #include --#include -+#include - #include "soup-xmlrpc.h" - #include "soup.h" - diff --git a/libs/libsoup3/Makefile b/libs/libsoup3/Makefile index fb864644e..067903cc6 100644 --- a/libs/libsoup3/Makefile +++ b/libs/libsoup3/Makefile @@ -6,12 +6,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libsoup3 -PKG_VERSION:=3.4.2 +PKG_VERSION:=3.4.4 PKG_RELEASE:=1 PKG_SOURCE:=libsoup-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@GNOME/libsoup/$(basename $(PKG_VERSION)) -PKG_HASH:=78c8fa37cb152d40ec8c4a148d6155e2f6947f3f1602a7cda3a31ad40f5ee2f3 +PKG_HASH:=291c67725f36ed90ea43efff25064b69c5a2d1981488477c05c481a3b4b0c5aa PKG_BUILD_DIR:=$(BUILD_DIR)/libsoup-$(PKG_VERSION) PKG_MAINTAINER:=W. Michael Petullo diff --git a/libs/libvpx/Makefile b/libs/libvpx/Makefile index 5c5073ac6..b5eba52ef 100644 --- a/libs/libvpx/Makefile +++ b/libs/libvpx/Makefile @@ -20,7 +20,7 @@ PKG_SOURCE_VERSION:=v$(PKG_VERSION) PKG_MAINTAINER:=Luiz Angelo Daros de Luca PKG_LICENSE:=BSD-3-Clause PKG_LICENSE_FILES:=LICENSE -PKG_CPE_ID:=cpe:/a:john_koleszar:libvpx +PKG_CPE_ID:=cpe:/a:webmproject:libvpx PKG_BUILD_PARALLEL:=1 PKG_ABI_VERSION:=$(subst $(space),.,$(wordlist 1, 2, $(subst .,$(space),$(PKG_VERSION)))) diff --git a/libs/mpfr/Makefile b/libs/mpfr/Makefile deleted file mode 100644 index 39d6a035a..000000000 --- a/libs/mpfr/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -# -# Copyright (C) 2023 Jeffery To -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=mpfr -PKG_VERSION:=4.2.1 -PKG_RELEASE:=1 - -PKG_SOURCE_URL:=@GNU/mpfr http://www.mpfr.org/mpfr-$(PKG_VERSION) -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_HASH:=277807353a6726978996945af13e52829e3abd7a9a5b7fb2793894e18f1fcbb2 - -PKG_LICENSE:=LGPL-3.0-or-later -PKG_LICENSE_FILES:=COPYING.LESSER -PKG_MAINTAINER:=Jeffery To -PKG_CPE_ID:=cpe:/a:mpfr:gnu_mpfr - -PKG_BUILD_PARALLEL:=1 -PKG_FIXUP:=autoreconf -PKG_INSTALL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/libmpfr - SECTION:=libs - CATEGORY:=Libraries - TITLE:=GNU MPFR library - URL:=https://www.mpfr.org/ - DEPENDS:=+libgmp - ABI_VERSION:=6 -endef - -define Package/libmpfr/description -MPFR is a portable library written in C for arbitrary precision -arithmetic on floating-point numbers. It is based on the GNU MP library. -It aims to provide a class of floating-point numbers with precise -semantics. -endef - -CONFIGURE_ARGS += \ - --enable-thread-safe - -define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/include - $(CP) $(PKG_INSTALL_DIR)/usr/include/mpf* $(1)/usr/include/ - - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libmpfr.{a,so*} $(1)/usr/lib/ - - $(INSTALL_DIR) $(1)/usr/lib/pkgconfig - $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/mpfr.pc $(1)/usr/lib/pkgconfig/ -endef - -define Package/libmpfr/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libmpfr.so.* $(1)/usr/lib/ -endef - -$(eval $(call BuildPackage,libmpfr)) diff --git a/libs/mpfr/patches/001-only-src.patch b/libs/mpfr/patches/001-only-src.patch deleted file mode 100644 index bd9e38aef..000000000 --- a/libs/mpfr/patches/001-only-src.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/Makefile.am -+++ b/Makefile.am -@@ -38,7 +38,7 @@ AUTOMAKE_OPTIONS = gnu - # old Automake version. - ACLOCAL_AMFLAGS = -I m4 - --SUBDIRS = doc src tests tune tools/bench -+SUBDIRS = src - - pkgconfigdir = $(libdir)/pkgconfig - pkgconfig_DATA = mpfr.pc ---- a/Makefile.in -+++ b/Makefile.in -@@ -401,7 +401,7 @@ AUTOMAKE_OPTIONS = gnu - # libtoolize and in case some developer needs to switch back to an - # old Automake version. - ACLOCAL_AMFLAGS = -I m4 --SUBDIRS = doc src tests tune tools/bench -+SUBDIRS = src - pkgconfigdir = $(libdir)/pkgconfig - pkgconfig_DATA = mpfr.pc - nobase_dist_doc_DATA = AUTHORS BUGS COPYING COPYING.LESSER NEWS TODO \ diff --git a/libs/openblas/Makefile b/libs/openblas/Makefile index 99369b762..5e498adc6 100644 --- a/libs/openblas/Makefile +++ b/libs/openblas/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=OpenBLAS -PKG_VERSION:=0.3.25 +PKG_VERSION:=0.3.26 PKG_RELEASE:=1 PKG_SOURCE:=OpenBLAS-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/xianyi/OpenBLAS/releases/download/v$(PKG_VERSION)/ -PKG_HASH:=4c25cb30c4bb23eddca05d7d0a85997b8db6144f5464ba7f8c09ce91e2f35543 +PKG_HASH:=4e6e4f5cb14c209262e33e6816d70221a2fe49eb69eaf0a06f065598ac602c68 PKG_LICENSE:=BSD 3-Clause PKG_MAINTAINER:=Alexandru Ardelean diff --git a/libs/openldap/Makefile b/libs/openldap/Makefile index c3239662b..334482e66 100644 --- a/libs/openldap/Makefile +++ b/libs/openldap/Makefile @@ -8,14 +8,14 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openldap -PKG_VERSION:=2.6.4 +PKG_VERSION:=2.6.6 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz PKG_SOURCE_URL:=https://gpl.savoirfairelinux.net/pub/mirrors/openldap/openldap-release/ \ https://mirror.eu.oneandone.net/software/openldap/openldap-release/ \ https://www.openldap.org/software/download/OpenLDAP/openldap-release/ -PKG_HASH:=d51704e50178430c06cf3d8aa174da66badf559747a47d920bb54b2d4aa40991 +PKG_HASH:=082e998cf542984d43634442dbe11da860759e510907152ea579bdc42fe39ea0 PKG_LICENSE:=OLDAP-2.8 PKG_LICENSE_FILES:=LICENSE PKG_CPE_ID:=cpe:/a:openldap:openldap diff --git a/libs/vips/Makefile b/libs/vips/Makefile index f95c2ea8b..6cc8b2c24 100644 --- a/libs/vips/Makefile +++ b/libs/vips/Makefile @@ -6,12 +6,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=vips -PKG_VERSION:=8.14.2 +PKG_VERSION:=8.15.1 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://github.com/libvips/libvips/releases/download/v$(PKG_VERSION) -PKG_HASH:=27dad021f0835a5ab14e541d02abd41e4c3bd012d2196438df5a9e754984f7ce +PKG_HASH:=06811f5aed3e7bc03e63d05537ff4b501de5283108c8ee79396c60601a00830c PKG_MAINTAINER:=W. Michael Petullo PKG_LICENSE:=LGPL-2.1-or-later @@ -35,11 +35,11 @@ endef MESON_ARGS += \ -Dgtk_doc=false \ - -Dintrospection=false \ + -Dintrospection=disabled \ -Danalyze=false \ -Dcfitsio=disabled \ -Dfftw=disabled \ - -Dgsf=disabled \ + -Darchive=disabled \ -Dimagequant=disabled \ -Dlcms=disabled \ -Dwebp=disabled \ diff --git a/libs/xmlrpc-c/Makefile b/libs/xmlrpc-c/Makefile index 107a1c1ed..758144a7f 100644 --- a/libs/xmlrpc-c/Makefile +++ b/libs/xmlrpc-c/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=xmlrpc-c -PKG_VERSION:=1.54.06 +PKG_VERSION:=1.59.02 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz PKG_SOURCE_URL:=@SF/xmlrpc-c/Xmlrpc-c%20Super%20Stable/$(PKG_VERSION) -PKG_HASH:=ae6d0fb58f38f1536511360dc0081d3876c1f209d9eaa54357e2bacd690a5640 +PKG_HASH:=e25e45be1bae7e90f1de69be3d6838917ba3839b2f1c7d3fc0e6663d8622a5ab PKG_MAINTAINER:=Ted Hess PKG_LICENSE:=VARIOUS diff --git a/libs/xmlrpc-c/patches/001-fix-format-parameter.patch b/libs/xmlrpc-c/patches/001-fix-format-parameter.patch deleted file mode 100644 index 2986a965a..000000000 --- a/libs/xmlrpc-c/patches/001-fix-format-parameter.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/src/xmlrpc_server_abyss.c -+++ b/src/xmlrpc_server_abyss.c -@@ -780,7 +780,7 @@ createServer(xmlrpc_env * - ServerInit2(abyssServerP, &error); - - if (error) { -- xmlrpc_faultf(envP, error); -+ xmlrpc_faultf(envP, "%s", error); - xmlrpc_strfree(error); - } - } diff --git a/libs/xmlrpc-c/patches/001-fix-pkg-config-files.patch b/libs/xmlrpc-c/patches/001-fix-pkg-config-files.patch new file mode 100644 index 000000000..e52d11e48 --- /dev/null +++ b/libs/xmlrpc-c/patches/001-fix-pkg-config-files.patch @@ -0,0 +1,299 @@ +--- a/lib/abyss/src/Makefile ++++ b/lib/abyss/src/Makefile +@@ -131,13 +131,15 @@ SOCKLIB=$(SOCKETLIBOPT) + xmlrpc_abyss.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_abyss" >>$@ + @echo "Description: Xmlrpc-c Abyss HTTP C library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_abyss $(SOCKLIB)" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_abyss $(SOCKLIB)' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + # Need this dependency for those who don't use depend.mk. + # Without it, version.h doesn't get created. +--- a/lib/abyss++/Makefile ++++ b/lib/abyss++/Makefile +@@ -120,13 +120,15 @@ $(LIBXMLRPC_ABYSSPP_MODS:%=%.osh): \ + xmlrpc_abyss++.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_abyss++" >>$@ + @echo "Description: Xmlrpc-c Abyss HTTP C++ library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc_abyss xmlrpc_util++" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_abyss++" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_abyss++' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + #----------------------------------------------------------------------------- + # MISCELLANEOUS RULES +--- a/lib/expat/Makefile ++++ b/lib/expat/Makefile +@@ -34,13 +34,15 @@ xmltok/all: gennmtab/all + xmlrpc_expat.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_expat" >>$@ + @echo "Description: Xmlrpc-c XML parsing library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_xmlparse -lxmlrpc_xmltok" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_xmlparse -lxmlrpc_xmltok' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + .PHONY: clean + clean: $(SUBDIRS:%=%/clean) clean-common +--- a/lib/libutil/Makefile ++++ b/lib/libutil/Makefile +@@ -112,13 +112,15 @@ libxmlrpc_util.a: LIBOBJECTS = $(TARGET_ + xmlrpc_util.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_util" >>$@ + @echo "Description: Xmlrpc-c utility functions library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: " >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_util" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_util' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + .PHONY: install + install: install-common +--- a/lib/libutil++/Makefile ++++ b/lib/libutil++/Makefile +@@ -101,13 +101,15 @@ libxmlrpc_util++.a: LIBOBJECTS = $(LIBXM + xmlrpc_util++.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_util++" >>$@ + @echo "Description: Xmlrpc-c C++ utility functions library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_util++" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_util++' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + #----------------------------------------------------------------------------- + # MISCELLANEOUS RULES +--- a/lib/openssl/Makefile ++++ b/lib/openssl/Makefile +@@ -81,13 +81,15 @@ INCLUDES = \ + xmlrpc_openssl.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_openssl" >>$@ + @echo "Description: Openssl convenience function from Xmlrpc-c package" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_openssl" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_openssl' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + #----------------------------------------------------------------------------- + # MISCELLANEOUS +--- a/src/Makefile ++++ b/src/Makefile +@@ -333,57 +333,67 @@ libxmlrpc_client.ldflags: + xmlrpc.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." +- @echo "Name: xmlrpc" >>$@ +- @echo "Description: Xmlrpc-c basic XML-RPC library" >>$@ +- @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ ++ @echo 'Name: xmlrpc' >>$@ ++ @echo 'Description: Xmlrpc-c basic XML-RPC library' >>$@ ++ @echo 'Version: $(XMLRPC_VERSION_STRING)' >>$@ + @echo >>$@ +- @echo "Requires: xmlrpc_util $(XML_PKGCONFIG_REQ)" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Requires: xmlrpc_util $(XML_PKGCONFIG_REQ)' >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + xmlrpc_client.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_client" >>$@ + @echo "Description: Xmlrpc-c XML-RPC client library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_client" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_client' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + xmlrpc_server.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_server" >>$@ + @echo "Description: Xmlrpc-c XML-RPC server library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_server" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_server' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + xmlrpc_server_abyss.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_server_abyss" >>$@ + @echo "Description: Xmlrpc-c Abyss XML-RPC server library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc xmlrpc_server xmlrpc_abyss xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_server_abyss" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_server_abyss' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + xmlrpc_server_cgi.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_server_cgi" >>$@ + @echo "Description: Xmlrpc-c CGI XML-RPC server library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc xmlrpc_server xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_server_cgi" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_server_cgi' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + .PHONY: check + check: +--- a/src/cpp/Makefile ++++ b/src/cpp/Makefile +@@ -355,57 +355,67 @@ $(TRANSPORT_CONFIG_USERS:%=%.o) $(TRANSP + xmlrpc++.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc++" >>$@ + @echo "Description: Xmlrpc-c basic XML-RPC C++ library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc++" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc++' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + xmlrpc_client++.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_client++" >>$@ + @echo "Description: Xmlrpc-c XML-RPC client C++ library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc++ xmlrpc_client xmlrpc_util++ xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_client++" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_client++' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + xmlrpc_server++.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_server++" >>$@ + @echo "Description: Xmlrpc-c XML-RPC server C++ library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc++ xmlrpc xmlrpc_server xmlrpc_util++ xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_server++" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_server++' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + xmlrpc_server_abyss++.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_server_abyss++" >>$@ + @echo "Description: Xmlrpc-c Abyss XML-RPC server C++ library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ + @echo "Requires: xmlrpc++ xmlrpc xmlrpc_server++ xmlrpc_abyss xmlrpc_util++ xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_server_abyss" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_server_abyss++' >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + xmlrpc_server_pstream++.pc: + rm -f $@ + @echo "Echoes to '$@' suppressed here ..." ++ @echo -e '$(PKGCONFIG_VAR_SET)' >>$@ ++ @echo >>$@ + @echo "Name: xmlrpc_server_pstream" >>$@ + @echo "Description: Xmlrpc-c packet stream XML-RPC server library" >>$@ + @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ + @echo >>$@ +- @echo "Requires: xmlrpc++ xmlrpc xmlrpc_server++ xmlrpc_util++ xmlrpc_util" >>$@ +- @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_server_pstream++ -lxmlrpc_packetsocket" >>$@ +- @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ ++ @echo "Requires: xmlrpc++ xmlrpc xmlrpc_server++ xmlrpc_util++ xmlrpc_util" >>$@ ++ @echo 'Libs: -L$${libdir} -lxmlrpc_server_pstream++' -lxmlrpc_packetsocket >>$@ ++ @echo 'Cflags: -I$${includedir}' >>$@ + + #----------------------------------------------------------------------------- + # MISCELLANEOUS RULES +--- a/common.mk ++++ b/common.mk +@@ -584,6 +584,11 @@ PROGRAMDESTDIR = $(DESTDIR)$(PROGRAMIN + MANDESTDIR = $(DESTDIR)$(MANINST_DIR) + PKGCONFIGDESTDIR = $(DESTDIR)$(PKGCONFIGINST_DIR) + ++# The following value, in a pkg-config file, sets the conventional pkg-config ++# variables that the pkg-config user can override at pkg-config time. ++PKGCONFIG_VAR_SET = \ ++ prefix=$(PREFIX)\nexec_prefix=$${prefix}\nincludedir=$${prefix}/include\nlibdir=$${exec_prefix}/lib ++ + + ############################################################################## + # INSTALL RULES # diff --git a/mail/dovecot/Makefile b/mail/dovecot/Makefile index e23e1578e..23c8650a3 100644 --- a/mail/dovecot/Makefile +++ b/mail/dovecot/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=dovecot -PKG_VERSION:=2.3.20 +PKG_VERSION:=2.3.21 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://dovecot.org/releases/2.3 -PKG_HASH:=caa832eb968148abdf35ee9d0f534b779fa732c0ce4a913d9ab8c3469b218552 +PKG_HASH:=05b11093a71c237c2ef309ad587510721cc93bbee6828251549fc1586c36502d PKG_MAINTAINER:=Lucian Cristian PKG_LICENSE:=LGPL-2.1-only MIT BSD-3-Clause diff --git a/mail/pigeonhole/Makefile b/mail/pigeonhole/Makefile index 667e2c10d..f076d06ca 100644 --- a/mail/pigeonhole/Makefile +++ b/mail/pigeonhole/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=dovecot-pigeonhole -PKG_VERSION_PLUGIN:=0.5.20 +PKG_VERSION_PLUGIN:=0.5.21 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:=1 @@ -17,7 +17,7 @@ DOVECOT_VERSION:=2.3 PKG_SOURCE:=dovecot-$(DOVECOT_VERSION)-pigeonhole-$(PKG_VERSION_PLUGIN).tar.gz PKG_SOURCE_URL:=https://pigeonhole.dovecot.org/releases/$(DOVECOT_VERSION) -PKG_HASH:=ae32bd4870ea2c1328ae09ba206e9ec12128046d6afca52fbbc9ef7f75617c98 +PKG_HASH:=1ca71d2659076712058a72030288f150b2b076b0306453471c5261498d3ded27 PKG_MAINTAINER:=W. Michael Petullo PKG_LICENSE:=LGPL-2.1-or-later diff --git a/multimedia/gst1-plugins-good/Makefile b/multimedia/gst1-plugins-good/Makefile index ef1623f11..09a8b46d0 100644 --- a/multimedia/gst1-plugins-good/Makefile +++ b/multimedia/gst1-plugins-good/Makefile @@ -278,7 +278,7 @@ $(eval $(call GstBuildPlugin,ossaudio,OSS audio support,audio,,)) $(eval $(call GstBuildPlugin,png,png support,video,,+libpng)) #$(eval $(call GstBuildPlugin,pulse,pulse support,audio pbutils tag video,,+pulseaudio)) $(eval $(call GstBuildPlugin,shout2,shout2 support,audio,,+libshout)) -$(eval $(call GstBuildPlugin,soup,soup input,audio tag,,+libsoup)) +$(eval $(call GstBuildPlugin,soup,soup input,audio tag,,+libsoup3)) $(eval $(call GstBuildPlugin,speex,speex support,audio tag,,+libspeex)) $(eval $(call GstBuildPlugin,taglib,taglib support,tag,,+taglib)) $(eval $(call GstBuildPlugin,video4linux2,video4linux2 support,video allocators,,+libv4l)) diff --git a/net/adblock-fast/Makefile b/net/adblock-fast/Makefile index 23f6568a1..c6b574c3a 100644 --- a/net/adblock-fast/Makefile +++ b/net/adblock-fast/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=adblock-fast PKG_VERSION:=1.1.1 -PKG_RELEASE:=1 +PKG_RELEASE:=3 PKG_MAINTAINER:=Stan Grishin PKG_LICENSE:=GPL-3.0-or-later diff --git a/net/adblock-fast/files/etc/init.d/adblock-fast b/net/adblock-fast/files/etc/init.d/adblock-fast index 96ec21ddb..a95f49977 100755 --- a/net/adblock-fast/files/etc/init.d/adblock-fast +++ b/net/adblock-fast/files/etc/init.d/adblock-fast @@ -60,7 +60,7 @@ readonly runningConfigFile="/dev/shm/${packageName}.config" readonly runningErrorFile="/dev/shm/${packageName}.error" readonly runningStatusFile="/dev/shm/${packageName}.status" readonly hostsFilter='/localhost/d;/^#/d;/^[^0-9]/d;s/^0\.0\.0\.0.//;s/^127\.0\.0\.1.//;s/[[:space:]]*#.*$//;s/[[:cntrl:]]$//;s/[[:space:]]//g;/[`~!@#\$%\^&\*()=+;:"'\'',<>?/\|[{}]/d;/]/d;/\./!d;/^$/d;/[^[:alnum:]_.-]/d;' -readonly domainsFilter='/^#/d;s/[[:space:]]*#.*$//;s/[[:space:]]*$//;s/[[:cntrl:]]$//;/[[:space:]]/d;/[`~!@#\$%\^&\*()=+;:"'\'',<>?/\|[{}]/d;/]/d;/\./!d;/^$/d;/[^[:alnum:]_.-]/d;' +readonly domainsFilter='/^#/d;s/[[:space:]]*#.*$//;s/[[:space:]]*$//;s/[[:cntrl:]]$//;/[[:space:]]/d;/[`~!@#\$%\^&\*()=+;:"'\'',<>?/\|[{}]/d;/]/d;/^$/d;/[^[:alnum:]_.-]/d;' readonly adBlockPlusFilter='/^#/d;/^!/d;s/[[:space:]]*#.*$//;s/^||//;s/\^$//;s/[[:space:]]*$//;s/[[:cntrl:]]$//;/[[:space:]]/d;/[`~!@#\$%\^&\*()=+;:"'\'',<>?/\|[{}]/d;/]/d;/\./!d;/^$/d;/[^[:alnum:]_.-]/d;' readonly dnsmasqFileFilter='\|^server=/[[:alnum:]_.-].*/|!d;s|server=/||;s|/.*$||' readonly dnsmasq2FileFilter='\|^local=/[[:alnum:]_.-].*/|!d;s|local=/||;s|/.*$||' @@ -1351,7 +1351,7 @@ $(sed '/^[[:space:]]*$/d' "$A_TMP")" if sed "$outputFilter" "$B_TMP" > "$A_TMP"; then output_ok else - output_failn + output_failn json add error 'errorDataFileFormatting' fi else @@ -1728,7 +1728,7 @@ adb_start() { action="$(config_cache get 'trigger_service')" fw4_restart_flag="$(config_cache get 'trigger_fw4')" - if [ "$action" = 'on_boot' ] || [ "$param" = 'on_boot' ]; then + if [ "$action" = 'on_boot' ] || [ "$param" = 'on_boot' ] || [ "$param" = 'on_pause' ]; then if cache 'test_gzip' || cache 'test'; then action='restore' else diff --git a/net/alist/Makefile b/net/alist/Makefile index b3089d9a6..213e4ec4f 100644 --- a/net/alist/Makefile +++ b/net/alist/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=alist -PKG_VERSION:=3.29.1 +PKG_VERSION:=3.30.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/alist-org/alist/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=b7d1929d9aef511b263673dba8e5b787f695e1b4fa4555fe562f8060ee0bdea4 +PKG_HASH:=68831d5177cdbae3ab294ce4263b4221c0ff687a72dd48a844d533ccb13c3efb PKG_LICENSE:=AGPL-3.0-only PKG_LICENSE_FILES:=LICENSE @@ -46,13 +46,13 @@ define Package/alist/conffiles /etc/config/alist endef -WEB_VERSION:=3.29.0 +WEB_VERSION:=3.30.0 WEB_FILE:=$(PKG_NAME)-web-$(WEB_VERSION).tar.gz define Download/alist-web URL:=https://github.com/alist-org/alist-web/releases/download/$(WEB_VERSION)/ URL_FILE:=dist.tar.gz FILE:=$(WEB_FILE) - HASH:=ece9d3fd45f18eaa7376e5fc077ebeae8f67b7bcf6004a29ae58392bfc2a3d13 + HASH:=04e160efc6e7169103cd424a39de0f1720e769aacc49dc0a2fcc3f1fcc6d0fee endef define Build/Prepare diff --git a/net/atftp/Makefile b/net/atftp/Makefile index cabdd3efd..0d281502e 100644 --- a/net/atftp/Makefile +++ b/net/atftp/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=atftp PKG_VERSION:=0.8.0 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=@SF/$(PKG_NAME) diff --git a/net/atftp/files/atftpd.conf b/net/atftp/files/atftpd.conf index 6bd66e94c..cea135d2e 100644 --- a/net/atftp/files/atftpd.conf +++ b/net/atftp/files/atftpd.conf @@ -1,3 +1,5 @@ config service 'service' + option enable '0' option path '/srv/tftp' + option port '69' diff --git a/net/atftp/files/atftpd.init b/net/atftp/files/atftpd.init index 83573f998..03627eeb3 100755 --- a/net/atftp/files/atftpd.init +++ b/net/atftp/files/atftpd.init @@ -5,11 +5,19 @@ START=95 PIDFILE=/tmp/run/atftpd.pid start() { - config_load atftpd - config_get SRV service path "/srv/tftp" - config_get PORT service port 69 + local enable + local srv + local port - atftpd --pidfile $PIDFILE --user root.root --port $PORT --daemon $SRV + config_load atftpd + + config_get enable service enable 0 + [ "$enable" -eq "0" ] && return 0 + + config_get srv service path "/srv/tftp" + config_get port service port 69 + + atftpd --pidfile $PIDFILE --user root.root --port $port --daemon $srv } stop() { diff --git a/net/banip/Makefile b/net/banip/Makefile index ca01ea048..aeb57910a 100644 --- a/net/banip/Makefile +++ b/net/banip/Makefile @@ -1,12 +1,12 @@ # banIP - ban incoming and outgoing IPs via named nftables Sets -# Copyright (c) 2018-2023 Dirk Brenken (dev@brenken.org) +# Copyright (c) 2018-2024 Dirk Brenken (dev@brenken.org) # This is free software, licensed under the GNU General Public License v3. include $(TOPDIR)/rules.mk PKG_NAME:=banip PKG_VERSION:=0.9.3 -PKG_RELEASE:=3 +PKG_RELEASE:=5 PKG_LICENSE:=GPL-3.0-or-later PKG_MAINTAINER:=Dirk Brenken diff --git a/net/banip/files/banip.init b/net/banip/files/banip.init index b49f933e3..0aae3befa 100755 --- a/net/banip/files/banip.init +++ b/net/banip/files/banip.init @@ -1,6 +1,6 @@ #!/bin/sh /etc/rc.common # banIP init script - ban incoming and outgoing IPs via named nftables Sets -# Copyright (c) 2018-2023 Dirk Brenken (dev@brenken.org) +# Copyright (c) 2018-2024 Dirk Brenken (dev@brenken.org) # This is free software, licensed under the GNU General Public License v3. # (s)hellcheck exceptions @@ -22,10 +22,10 @@ ban_lock="/var/run/banip.lock" [ "${action}" = "boot" ] && "${ban_init}" running && exit 0 { [ "${action}" = "stop" ] || [ "${action}" = "report" ] || [ "${action}" = "search" ] || [ "${action}" = "survey" ] || [ "${action}" = "lookup" ]; } && ! "${ban_init}" running && exit 0 -[ ! -r "${ban_funlib}" ] && { [ "${action}" = "boot" ] || [ "${action}" = "start" ] || [ "${action}" = "restart" ] || [ "${action}" = "reload" ] || [ "${action}" = "stop" ] || [ "${action}" = "report" ] || [ "${action}" = "search" ] || [ "${action}" = "lookup" ] || [ "${action}" = "status" ]; } && exit 1 +[ ! -r "${ban_funlib}" ] && { [ "${action}" = "boot" ] || [ "${action}" = "start" ] || [ "${action}" = "restart" ] || [ "${action}" = "reload" ] || [ "${action}" = "stop" ] || [ "${action}" = "report" ] || [ "${action}" = "search" ] || [ "${action}" = "survey" ] || [ "${action}" = "lookup" ] || [ "${action}" = "status" ]; } && exit 1 [ -d "${ban_lock}" ] && { [ "${action}" = "boot" ] || [ "${action}" = "start" ] || [ "${action}" = "restart" ] || [ "${action}" = "reload" ] || [ "${action}" = "lookup" ]; } && exit 1 [ ! -d "${ban_lock}" ] && { [ "${action}" = "boot" ] || [ "${action}" = "start" ] || [ "${action}" = "restart" ] || [ "${action}" = "reload" ] || [ "${action}" = "lookup" ]; } && mkdir -p "${ban_lock}" -{ [ "${action}" = "boot" ] || [ "${action}" = "start" ] || [ "${action}" = "restart" ] || [ "${action}" = "reload" ] || [ "${action}" = "stop" ] || [ "${action}" = "report" ] || [ "${action}" = "search" ] || [ "${action}" = "lookup" ] || [ "${action}" = "status" ]; } && . "${ban_funlib}" +{ [ "${action}" = "boot" ] || [ "${action}" = "start" ] || [ "${action}" = "restart" ] || [ "${action}" = "reload" ] || [ "${action}" = "stop" ] || [ "${action}" = "report" ] || [ "${action}" = "search" ] || [ "${action}" = "survey" ] || [ "${action}" = "lookup" ] || [ "${action}" = "status" ]; } && . "${ban_funlib}" [ ! -d "${ban_lock}" ] && { [ "${action}" = "boot" ] || [ "${action}" = "start" ] || [ "${action}" = "restart" ] || [ "${action}" = "reload" ] || [ "${action}" = "lookup" ]; } && exit 1 boot() { diff --git a/net/banip/files/banip.tpl b/net/banip/files/banip.tpl index 2b3c20ff2..924ffe0b6 100644 --- a/net/banip/files/banip.tpl +++ b/net/banip/files/banip.tpl @@ -1,5 +1,5 @@ # banIP mail template/include - ban incoming and outgoing IPs via named nftables Sets -# Copyright (c) 2018-2023 Dirk Brenken (dev@brenken.org) +# Copyright (c) 2018-2024 Dirk Brenken (dev@brenken.org) # This is free software, licensed under the GNU General Public License v3. # info preparation @@ -12,9 +12,9 @@ elif printf "%s" "${ban_packages}" | "${ban_grepcmd}" -q '"logd'; then logread_cmd="${ban_logreadcmd} -l ${ban_loglimit} -e "banIP/" 2>/dev/null" fi -banip_info="$(/etc/init.d/banip status 2>/dev/null | "${ban_awkcmd}" '{NR=1;max=160;if(length($0)>max+1)while($0){if(NR==1){print substr($0,1,max)}else{print substr($0,1,max)}{$0=substr($0,max+1);NR=NR+1}}else print}')" +banip_info="$(/etc/init.d/banip status 2>/dev/null)" report_info="$("${ban_catcmd}" "${ban_reportdir}/ban_report.txt" 2>/dev/null)" -log_info="$(${logread_cmd} | "${ban_awkcmd}" '{NR=1;max=160;if(length($0)>max+1)while($0){if(NR==1){print substr($0,1,max)}else{print substr($0,1,max)}{$0=substr($0,max+1);NR=NR+1}}else print}')" +log_info="$(${logread_cmd})" system_info="$( strings /etc/banner 2>/dev/null "${ban_ubuscmd}" call system board | "${ban_awkcmd}" 'BEGIN{FS="[{}\"]"}{if($2=="kernel"||$2=="hostname"||$2=="system"||$2=="model"||$2=="description")printf " + %-12s: %s\n",$2,$4}' @@ -22,7 +22,7 @@ system_info="$( # content header # -mail_text="$(printf "%s\n" "
")"
+mail_text="$(printf "%s\n" "
")"
 
 # content body
 #
diff --git a/net/cloudflared/Makefile b/net/cloudflared/Makefile
index 5580eae20..45e3509d4 100644
--- a/net/cloudflared/Makefile
+++ b/net/cloudflared/Makefile
@@ -5,12 +5,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=cloudflared
-PKG_VERSION:=2023.7.3
+PKG_VERSION:=2024.1.4
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/cloudflare/cloudflared/tar.gz/$(PKG_VERSION)?
-PKG_HASH:=772ddcb721f5b479192117d1156b1091505721aa81d6bab3de9577176b930191
+PKG_HASH:=a78af7d12b96bba691c420bc0ea42087cda73463868a3ba7c6890a9f962218e9
 
 PKG_LICENSE:=Apache-2.0
 PKG_LICENSE_FILES:=LICENSE
diff --git a/net/dhtd/Makefile b/net/dhtd/Makefile
index 75609b09d..8f7c8c4d9 100644
--- a/net/dhtd/Makefile
+++ b/net/dhtd/Makefile
@@ -1,12 +1,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dhtd
-PKG_VERSION:=0.2.6
+PKG_VERSION:=1.0.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/mwarning/dhtd/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=4d9d88dc9cb035742a86c451c6bd40a7e44161709cd962933516ef6c5170683d
+PKG_HASH:=7b1338059dfb9ed2300bb6b005d7cd677d99df8c74846eaed1b0cb97641b7297
 
 PKG_MAINTAINER:=Moritz Warning 
 PKG_LICENSE:=MIT
diff --git a/net/dnsproxy/Makefile b/net/dnsproxy/Makefile
index 93e7582d4..1e12f0c15 100644
--- a/net/dnsproxy/Makefile
+++ b/net/dnsproxy/Makefile
@@ -5,12 +5,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dnsproxy
-PKG_VERSION:=0.61.0
+PKG_VERSION:=0.63.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/AdguardTeam/dnsproxy/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=0b75b8d8139992e77df39492d41ca7060553f80a13d7e0436f3d8e1616146b92
+PKG_HASH:=f92478ffe5a673760780a2a1a01d8421264ae62057879da85b8cbbbb6ef0be09
 
 PKG_MAINTAINER:=Tianling Shen 
 PKG_LICENSE:=Apache-2.0
diff --git a/net/evilginx2/Makefile b/net/evilginx2/Makefile
new file mode 100644
index 000000000..ac1d1421c
--- /dev/null
+++ b/net/evilginx2/Makefile
@@ -0,0 +1,53 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=evilginx2
+PKG_VERSION:=3.2.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/kgretzky/evilginx2/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=1c9f51c447704d0097280b6e743134cf108e8adc654a0ac4343400b5800e77f0
+
+PKG_MAINTAINER:=W. Michael Petullo 
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_BUILD_DEPENDS:=golang/host
+PKG_BUILD_PARALLEL:=1
+PKG_BUILD_FLAGS:=no-mips16
+
+GO_PKG:=github.com/kgretzky/evilginx2
+GO_PKG_LDFLAGS_X:=$(GO_PKG)/cmd.Version=$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../../lang/golang/golang-package.mk
+
+define Package/evilginx2
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=Man-in-the-middle reverse-proxy attack framework
+  URL:=https://help.evilginx.com/
+  DEPENDS:=$(GO_ARCH_DEPENDS)
+endef
+
+define Package/evilginx/description
+  Evilginx is a man-in-the-middle reverse-proxy attack framework that
+  is useful for testing your organization's exposure to phishing and
+  other similar attacks.
+endef
+
+define Package/gophish/conffiles
+/etc/evilginx2.json
+endef
+
+define Package/evilginx2/install
+	$(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
+	$(INSTALL_DIR) $(1)/usr/sbin
+	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/evilginx2 $(1)/usr/sbin/
+	$(INSTALL_DIR) $(1)/usr/libexec/evilginx2
+	$(CP) $(PKG_BUILD_DIR)/phishlets $(1)/usr/libexec/evilginx2/
+	$(CP) $(PKG_BUILD_DIR)/redirectors $(1)/usr/libexec/evilginx2/
+endef
+
+$(eval $(call GoBinPackage,evilginx2))
+$(eval $(call BuildPackage,evilginx2))
diff --git a/net/hs20/Makefile b/net/hs20/Makefile
index 894179a6c..ffa4a4765 100644
--- a/net/hs20/Makefile
+++ b/net/hs20/Makefile
@@ -1,7 +1,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=hs20
-PKG_RELEASE:=8
+PKG_RELEASE:=9
 
 PKG_SOURCE_URL:=http://w1.fi/hostap.git
 PKG_SOURCE_PROTO:=git
diff --git a/net/hs20/patches/010-libxml-212.patch b/net/hs20/patches/010-libxml-212.patch
new file mode 100644
index 000000000..b9a385444
--- /dev/null
+++ b/net/hs20/patches/010-libxml-212.patch
@@ -0,0 +1,11 @@
+--- a/src/utils/xml_libxml2.c
++++ b/src/utils/xml_libxml2.c
+@@ -8,7 +8,7 @@
+ 
+ #include "includes.h"
+ #define LIBXML_VALID_ENABLED
+-#include 
++#include 
+ #include 
+ 
+ #include "common.h"
diff --git a/net/i2pd/Makefile b/net/i2pd/Makefile
index f4c3d5d79..4d2f0577e 100644
--- a/net/i2pd/Makefile
+++ b/net/i2pd/Makefile
@@ -10,17 +10,18 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=i2pd
-PKG_VERSION:=2.48.0
+PKG_VERSION:=2.50.2
 PKG_RELEASE:=1
 PKG_BUILD_PARALLEL:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/PurpleI2P/i2pd/tar.gz/$(PKG_VERSION)?
-PKG_HASH:=ccf417aa66ce37f72ea15b7fbcff4c71e823566ea74bda696b9c1e19aae08739
+PKG_HASH:=ae2ec4732c38fda71b4b48ce83624dd8b2e05083f2c94a03d20cafb616f63ca5
 
 PKG_MAINTAINER:=David Yang 
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE
+PKG_CPE_ID:=cpe:/a:i2pd:i2pd
 
 include $(INCLUDE_DIR)/package.mk
 
diff --git a/net/knxd/Makefile b/net/knxd/Makefile
index 7873ac71f..ed49f88e6 100644
--- a/net/knxd/Makefile
+++ b/net/knxd/Makefile
@@ -11,12 +11,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=knxd
-PKG_VERSION:=0.14.59
+PKG_VERSION:=0.14.60
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/knxd/knxd/tar.gz/$(PKG_VERSION)?
-PKG_HASH:=8b8314ad4265cd48e9a257a1bcfd162b1084422f765082b45cceabdd70c0c164
+PKG_HASH:=0d7e7265761e291014f670dce6a24efc4a6e9ef1a88e2f96ffa347c98c91588f
 
 PKG_MAINTAINER:=Othmar Truniger 
 PKG_LICENSE:=GPL-2.0-or-later
diff --git a/net/knxd/patches/0100-version.patch b/net/knxd/patches/0100-version.patch
index f472ff9e9..478aad7d6 100644
--- a/net/knxd/patches/0100-version.patch
+++ b/net/knxd/patches/0100-version.patch
@@ -7,4 +7,4 @@
 -test -d .git || exit
 -# git describe --tags
 -git log --format=format:%D | perl -ne 'next unless s#.*tag: ##; s#,.*##; next if m#/#; print; exit;'
-+echo -n "0.14.59"
++echo -n "0.14.60"
diff --git a/net/krb5/Makefile b/net/krb5/Makefile
index c3d0e5fd6..c3dd64119 100644
--- a/net/krb5/Makefile
+++ b/net/krb5/Makefile
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=krb5
-PKG_VERSION:=1.21
+PKG_VERSION:=1.21.2
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=W. Michael Petullo 
@@ -19,7 +19,7 @@ PKG_CPE_ID:=cpe:/a:mit:kerberos
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://web.mit.edu/kerberos/dist/krb5/1.21
-PKG_HASH:=69f8aaff85484832df67a4bbacd99b9259bd95aab8c651fbbe65cdc9620ea93b
+PKG_HASH:=9560941a9d843c0243a71b17a7ac6fe31c7cebb5bce3983db79e52ae7e850491
 
 PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
diff --git a/net/ksmbd-tools/Makefile b/net/ksmbd-tools/Makefile
index 84e8f3e57..5c914c24c 100644
--- a/net/ksmbd-tools/Makefile
+++ b/net/ksmbd-tools/Makefile
@@ -5,8 +5,8 @@ PKG_RELEASE:=1
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/cifsd-team/ksmbd-tools
-PKG_SOURCE_VERSION:=3.4.8
-PKG_MIRROR_HASH:=e374c6e5053e82bc321e13927dbf3baf0d636205516564324686d002c084c5d6
+PKG_SOURCE_VERSION:=3.5.1
+PKG_MIRROR_HASH:=6e8e56ecdfa0ddfdb3a351b27ae5b9148d4f6695bcee9a7eae39c2a42481ef18
 
 PKG_LICENSE:=GPL-2.0-or-later
 PKG_LICENSE_FILES:=COPYING
diff --git a/net/ksmbd-tools/patches/030-glib.patch b/net/ksmbd-tools/patches/030-glib.patch
index 1fb240a95..49809e9c6 100644
--- a/net/ksmbd-tools/patches/030-glib.patch
+++ b/net/ksmbd-tools/patches/030-glib.patch
@@ -3,7 +3,7 @@
 @@ -21,6 +21,7 @@ include_dirs = include_directories(
  glib_dep = dependency(
    'glib-2.0',
-   version: '>= 2.40',
+   version: '>= 2.44',
 +  static: true,
  )
  libnl_dep = dependency(
diff --git a/net/modemmanager/Makefile b/net/modemmanager/Makefile
index 2b455512f..c4c9e8af4 100644
--- a/net/modemmanager/Makefile
+++ b/net/modemmanager/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=modemmanager
 PKG_SOURCE_VERSION:=1.22.0
-PKG_RELEASE:=7
+PKG_RELEASE:=9
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/ModemManager.git
@@ -92,6 +92,7 @@ define Package/modemmanager/install
 	$(INSTALL_DIR) $(1)/usr/sbin
 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ModemManager $(1)/usr/sbin
 	$(INSTALL_BIN) ./files/usr/sbin/ModemManager-wrapper $(1)/usr/sbin
+	$(INSTALL_BIN) ./files/usr/sbin/ModemManager-monitor $(1)/usr/sbin
 
 	$(INSTALL_DIR) $(1)/usr/bin
 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mmcli $(1)/usr/bin
@@ -118,9 +119,6 @@ define Package/modemmanager/install
 	$(INSTALL_DIR) $(1)/etc/init.d
 	$(INSTALL_BIN) ./files/modemmanager.init $(1)/etc/init.d/modemmanager
 
-	$(INSTALL_DIR) $(1)/etc/hotplug.d/usb
-	$(INSTALL_DATA) ./files/25-modemmanager-usb $(1)/etc/hotplug.d/usb
-
 	$(INSTALL_DIR) $(1)/etc/hotplug.d/net
 	$(INSTALL_DATA) ./files/25-modemmanager-net $(1)/etc/hotplug.d/net
 
diff --git a/net/modemmanager/files/10-report-down b/net/modemmanager/files/10-report-down
index 88b010cf0..0ebe87de5 100755
--- a/net/modemmanager/files/10-report-down
+++ b/net/modemmanager/files/10-report-down
@@ -16,9 +16,8 @@ STATE="$4"
 
 [ "${STATE}" = "disconnected" ] || exit 0
 
-. /usr/share/ModemManager/modemmanager.common
 . /lib/netifd/netifd-proto.sh
-INCLUDE_ONLY=1 . /lib/netifd/proto/modemmanager.sh
+. /usr/share/ModemManager/modemmanager.common
 
 MODEM_STATUS=$(mmcli --modem="${MODEM_PATH}" --output-keyvalue)
 [ -n "${MODEM_STATUS}" ] || exit 1
diff --git a/net/modemmanager/files/25-modemmanager-usb b/net/modemmanager/files/25-modemmanager-usb
deleted file mode 100644
index 93d0bf70a..000000000
--- a/net/modemmanager/files/25-modemmanager-usb
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2019 Aleksander Morgado 
-
-# We need to process only full USB device removal events, we don't
-# want to process specific interface removal events.
-[ "$ACTION" = remove ] || exit
-[ -z "${INTERFACE}" ] || exit
-
-# Load common utilities
-. /usr/share/ModemManager/modemmanager.common
-
-mm_clear_modem_wait_status "/sys${DEVPATH}"
-mm_cleanup_interface_by_sysfspath "/sys${DEVPATH}"
diff --git a/net/modemmanager/files/modemmanager.common b/net/modemmanager/files/modemmanager.common
index 2ba2036ce..ab5f92b98 100644
--- a/net/modemmanager/files/modemmanager.common
+++ b/net/modemmanager/files/modemmanager.common
@@ -6,7 +6,6 @@
 
 . /lib/functions.sh
 . /lib/netifd/netifd-proto.sh
-INCLUDE_ONLY=1 . /lib/netifd/proto/modemmanager.sh
 
 ################################################################################
 # Runtime state
@@ -14,7 +13,7 @@ INCLUDE_ONLY=1 . /lib/netifd/proto/modemmanager.sh
 MODEMMANAGER_RUNDIR="/var/run/modemmanager"
 MODEMMANAGER_PID_FILE="${MODEMMANAGER_RUNDIR}/modemmanager.pid"
 MODEMMANAGER_CDCWDM_CACHE="${MODEMMANAGER_RUNDIR}/cdcwdm.cache"
-MODEMMANAGER_SYSFS_CACHE="${MODEMMANAGER_RUNDIR}/sysfs.cache"
+MODEMMANAGER_MONITOR_CACHE="${MODEMMANAGER_RUNDIR}/monitor.cache"
 MODEMMANAGER_EVENTS_CACHE="${MODEMMANAGER_RUNDIR}/events.cache"
 
 ################################################################################
@@ -22,6 +21,8 @@ MODEMMANAGER_EVENTS_CACHE="${MODEMMANAGER_RUNDIR}/events.cache"
 
 mm_log() {
 	local level="$1"; shift
+
+	[ "${level}" = "debug" ] && return
 	logger -p "daemon.${level}" -t "ModemManager[$$]" "hotplug: $*"
 }
 
@@ -93,48 +94,6 @@ mm_untrack_cdcwdm() {
 	echo "${cdcwdm}"
 }
 
-################################################################################
-# ModemManager needs some time from the ports being added until a modem object
-# is exposed in DBus. With the logic here we do an explicit wait of N seconds
-# for ModemManager to expose the new modem object, making sure that the wait is
-# unique per device (i.e. per physical device sysfs path).
-
-# Gets the modem wait status as retrieved from the cache
-mm_get_modem_wait_status() {
-	local sysfspath="$1"
-
-	# If no sysfs cache file, we're done
-	[ -f "${MODEMMANAGER_SYSFS_CACHE}" ] || return
-
-	# Get status of the sysfs path
-	awk -v sysfspath="${sysfspath}" '!/^#/ && $0 ~ sysfspath { print $2 }' "${MODEMMANAGER_SYSFS_CACHE}"
-}
-
-# Clear the modem wait status from the cache, if any
-mm_clear_modem_wait_status() {
-	local sysfspath="$1"
-
-	local escaped_sysfspath
-
-	[ -f "${MODEMMANAGER_SYSFS_CACHE}" ] && {
-		# escape '/', '\' and '&' for sed...
-		escaped_sysfspath=$(echo "$sysfspath" | sed -e 's/[\/&]/\\&/g')
-		sed -i "/${escaped_sysfspath}/d" "${MODEMMANAGER_SYSFS_CACHE}"
-	}
-}
-
-# Sets the modem wait status in the cache
-mm_set_modem_wait_status() {
-	local sysfspath="$1"
-	local status="$2"
-
-	# Remove sysfs line before adding the new one with the new state
-	mm_clear_modem_wait_status "${sysfspath}"
-
-	# Add the new status
-	echo "${sysfspath} ${status}" >> "${MODEMMANAGER_SYSFS_CACHE}"
-}
-
 # Callback for config_foreach()
 mm_get_modem_config_foreach_cb() {
 	local cfg="$1"
@@ -156,112 +115,6 @@ mm_get_modem_config() {
 	config_foreach mm_get_modem_config_foreach_cb interface "${sysfspath}"
 }
 
-# Wait for a modem in the specified sysfspath
-mm_wait_for_modem() {
-	local cfg="$1"
-	local sysfspath="$2"
-
-	# TODO: config max wait
-	local n=45
-	local step=5
-
-	while [ $n -ge 0 ]; do
-		[ -d "${sysfspath}" ] || {
-			mm_log "error" "ignoring modem detection request: no device at ${sysfspath}"
-			proto_set_available "${cfg}" 0
-			return 1
-		}
-
-		# Check if the modem exists at the given sysfs path
-		if ! mmcli -m "${sysfspath}" > /dev/null 2>&1
-		then
-			mm_log "error" "modem not detected at sysfs path"
-		else
-			mm_log "info" "modem exported successfully at ${sysfspath}"
-			mm_log "info" "setting interface '${cfg}' as available"
-			proto_set_available "${cfg}" 1
-			return 0
-		fi
-
-		sleep $step
-		n=$((n-step))
-	done
-
-	mm_log "error" "timed out waiting for the modem to get exported at ${sysfspath}"
-	proto_set_available "${cfg}" 0
-	return 2
-}
-
-mm_report_modem_wait() {
-	local sysfspath=$1
-
-	local parent_sysfspath status
-
-	parent_sysfspath=$(mm_find_physdev_sysfs_path "$sysfspath")
-	[ -n "${parent_sysfspath}" ] || {
-		mm_log "error" "parent device sysfspath not found"
-		return
-	}
-
-	status=$(mm_get_modem_wait_status "${parent_sysfspath}")
-	case "${status}" in
-		"")
-			local cfg
-
-			cfg=$(mm_get_modem_config "${parent_sysfspath}")
-			if [ -n "${cfg}" ]; then
-				mm_log "info" "interface '${cfg}' is set to configure device '${parent_sysfspath}'"
-				mm_log "info" "now waiting for modem at sysfs path ${parent_sysfspath}"
-				mm_set_modem_wait_status "${parent_sysfspath}" "processed"
-				# Launch subshell for the explicit wait
-				( mm_wait_for_modem "${cfg}" "${parent_sysfspath}" ) > /dev/null 2>&1 &
-			else
-				mm_log "info" "no need to wait for modem at sysfs path ${parent_sysfspath}"
-				mm_set_modem_wait_status "${parent_sysfspath}" "ignored"
-			fi
-			;;
-		"processed")
-			mm_log "info" "already waiting for modem at sysfs path ${parent_sysfspath}"
-			;;
-		"ignored")
-			;;
-		*)
-			mm_log "error" "unknown status read for device at sysfs path ${parent_sysfspath}"
-			;;
-	esac
-}
-
-################################################################################
-# Cleanup interfaces
-
-mm_cleanup_interfaces() {
-	local sysfs_path status
-
-	# Do nothing if there is no sysfs cache
-	[ -f "${MODEMMANAGER_SYSFS_CACHE}" ] || return
-
-	while IFS= read -r sysfs_cache_line; do
-		sysfs_path=$(echo "${sysfs_cache_line}" | awk '{print $1}')
-		status=$(echo "${sysfs_cache_line}" | awk '{print $2}')
-
-		if [ "${status}" = "processed" ]; then
-			mm_log "debug" "call cleanup for: ${sysfs_path}"
-			mm_cleanup_interface_by_sysfspath "${sysfs_path}"
-		fi
-	done < ${MODEMMANAGER_SYSFS_CACHE}
-}
-
-mm_cleanup_interface_by_sysfspath() {
-	local dev="$1"
-
-	local cfg
-	cfg=$(mm_get_modem_config "$dev")
-	[ -n "${cfg}" ] || return
-
-	mm_log "info" "setting interface '$cfg' as unavailable"
-	proto_set_available "${cfg}" 0
-}
-
 ################################################################################
 # Event reporting
 
@@ -296,13 +149,9 @@ mm_report_event() {
 	# Report the event
 	mm_log "debug" "Report event: action=${action}, name=${name}, subsystem=${subsystem}"
 	result=$(mmcli --report-kernel-event="action=${action},name=${name},subsystem=${subsystem}" 2>&1)
-	if [ "$?" -eq "0" ]; then
-		# Wait for added modem if a sysfspath is given
-		[ -n "${sysfspath}" ] && [ "$action" = "add" ] && mm_report_modem_wait "${sysfspath}"
-	else
+	if [ "$?" -ne "0" ]; then
 		mm_log "error" "Couldn't report kernel event: ${result}"
 	fi
-
 }
 
 mm_report_event_from_cache_line() {
@@ -351,3 +200,69 @@ mm_report_events_from_cache() {
 		mm_report_event_from_cache_line "${event_line}"
 	done < ${MODEMMANAGER_EVENTS_CACHE}
 }
+
+# This method expects as first argument a list of key-value pairs, as returned by mmcli --output-keyvalue
+# The second argument must be exactly the name of the field to read
+#
+# Sample output:
+#     $ mmcli -m 0 -K
+#     modem.dbus-path                                 : /org/freedesktop/ModemManager1/Modem/0
+#     modem.generic.device-identifier                 : ed6eff2e3e0f90463da1c2a755b2acacd1335752
+#     modem.generic.manufacturer                      : Dell Inc.
+#     modem.generic.model                             : DW5821e Snapdragon X20 LTE
+#     modem.generic.revision                          : T77W968.F1.0.0.4.0.GC.009\n026
+#     modem.generic.carrier-configuration             : GCF
+#     modem.generic.carrier-configuration-revision    : 08E00009
+#     modem.generic.hardware-revision                 : DW5821e Snapdragon X20 LTE
+#     ....
+modemmanager_get_field() {
+	local list=$1
+	local field=$2
+	local value=""
+
+	[ -z "${list}" ] || [ -z "${field}" ] && return
+
+	# there is always at least a whitespace after each key, and we use that as part of the
+	# key matching we do (e.g. to avoid getting 'modem.generic.state-failed-reason' as a result
+	# when grepping for 'modem.generic.state'.
+	line=$(echo "${list}" | grep "${field} ")
+	value=$(echo ${line#*:})
+
+	# not found?
+	[ -n "${value}" ] || return 2
+
+	# only print value if set
+	[ "${value}" != "--" ] && echo "${value}"
+	return 0
+}
+
+# build a comma-separated list of values from the list
+modemmanager_get_multivalue_field() {
+	local list=$1
+	local field=$2
+	local value=""
+	local length idx item
+
+	[ -z "${list}" ] || [ -z "${field}" ] && return
+
+	length=$(modemmanager_get_field "${list}" "${field}.length")
+	[ -n "${length}" ] || return 0
+	[ "$length" -ge 1 ] || return 0
+
+	idx=1
+	while [ $idx -le "$length" ]; do
+		item=$(modemmanager_get_field "${list}" "${field}.value\[$idx\]")
+		[ -n "${item}" ] && [ "${item}" != "--" ] && {
+			[ -n "${value}" ] && value="${value}, "
+			value="${value}${item}"
+		}
+		idx=$((idx + 1))
+	done
+
+	# nothing built?
+	[ -n "${value}" ] || return 2
+
+	# only print value if set
+	echo "${value}"
+	return 0
+}
diff --git a/net/modemmanager/files/modemmanager.init b/net/modemmanager/files/modemmanager.init
index a036d884d..ccc1953ae 100755
--- a/net/modemmanager/files/modemmanager.init
+++ b/net/modemmanager/files/modemmanager.init
@@ -21,11 +21,15 @@ start_service() {
 	# wrapper script called '/usr/sbin/ModemManager-wrapper'.
 	#
 	. /usr/share/ModemManager/modemmanager.common
-	procd_open_instance
+	procd_open_instance "service"
 	procd_set_param command /usr/sbin/ModemManager-wrapper
 	procd_append_param command --log-level="$LOG_LEVEL"
 	[ "$LOG_LEVEL" = "DEBUG" ] && procd_append_param command --debug
 	procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
 	procd_set_param pidfile "${MODEMMANAGER_PID_FILE}"
 	procd_close_instance
+	procd_open_instance "monitor"
+	procd_set_param command /usr/sbin/ModemManager-monitor
+	procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
+	procd_close_instance
 }
diff --git a/net/modemmanager/files/modemmanager.proto b/net/modemmanager/files/modemmanager.proto
index afbe2397f..b059b4c59 100755
--- a/net/modemmanager/files/modemmanager.proto
+++ b/net/modemmanager/files/modemmanager.proto
@@ -8,6 +8,7 @@
 	. /lib/functions.sh
 	. ../netifd-proto.sh
 	. ./ppp.sh
+	. /usr/share/ModemManager/modemmanager.common
 	init_proto "$@"
 }
 
@@ -24,72 +25,6 @@ cdr2mask ()
 	echo "${1-0}"."${2-0}"."${3-0}"."${4-0}"
 }
 
-# This method expects as first argument a list of key-value pairs, as returned by mmcli --output-keyvalue
-# The second argument must be exactly the name of the field to read
-#
-# Sample output:
-#     $ mmcli -m 0 -K
-#     modem.dbus-path                                 : /org/freedesktop/ModemManager1/Modem/0
-#     modem.generic.device-identifier                 : ed6eff2e3e0f90463da1c2a755b2acacd1335752
-#     modem.generic.manufacturer                      : Dell Inc.
-#     modem.generic.model                             : DW5821e Snapdragon X20 LTE
-#     modem.generic.revision                          : T77W968.F1.0.0.4.0.GC.009\n026
-#     modem.generic.carrier-configuration             : GCF
-#     modem.generic.carrier-configuration-revision    : 08E00009
-#     modem.generic.hardware-revision                 : DW5821e Snapdragon X20 LTE
-#     ....
-modemmanager_get_field() {
-	local list=$1
-	local field=$2
-	local value=""
-
-	[ -z "${list}" ] || [ -z "${field}" ] && return
-
-	# there is always at least a whitespace after each key, and we use that as part of the
-	# key matching we do (e.g. to avoid getting 'modem.generic.state-failed-reason' as a result
-	# when grepping for 'modem.generic.state'.
-	line=$(echo "${list}" | grep "${field} ")
-	value=$(echo ${line#*:})
-
-	# not found?
-	[ -n "${value}" ] || return 2
-
-	# only print value if set
-	[ "${value}" != "--" ] && echo "${value}"
-	return 0
-}
-
-# build a comma-separated list of values from the list
-modemmanager_get_multivalue_field() {
-	local list=$1
-	local field=$2
-	local value=""
-	local length idx item
-
-	[ -z "${list}" ] || [ -z "${field}" ] && return
-
-	length=$(modemmanager_get_field "${list}" "${field}.length")
-	[ -n "${length}" ] || return 0
-	[ "$length" -ge 1 ] || return 0
-
-	idx=1
-	while [ $idx -le "$length" ]; do
-		item=$(modemmanager_get_field "${list}" "${field}.value\[$idx\]")
-		[ -n "${item}" ] && [ "${item}" != "--" ] && {
-			[ -n "${value}" ] && value="${value}, "
-			value="${value}${item}"
-		}
-		idx=$((idx + 1))
-	done
-
-	# nothing built?
-	[ -n "${value}" ] || return 2
-
-	# only print value if set
-	echo "${value}"
-	return 0
-}
-
 modemmanager_cleanup_connection() {
 	local modemstatus="$1"
 
@@ -523,7 +458,9 @@ proto_modemmanager_setup() {
 	modemmanager_check_state "$device" "${modemstatus}" "$pincode"
 	[ "$?" -ne "0" ] && return 1
 
-	[ -z "${allowedmode}" ] || {
+	if [ -z "${allowedmode}" ]; then
+		modemmanager_set_allowed_mode "$device" "$interface" "any"
+	else
 		case "$allowedmode" in
 			"2g")
 				modemmanager_set_allowed_mode "$device" \
@@ -548,7 +485,7 @@ proto_modemmanager_setup() {
 		esac
 		# check error for allowed_mode and preferred_mode function call
 		[ "$?" -ne "0" ] && return 1
-	}
+	fi
 
 	# always cleanup before attempting a new connection, just in case
 	modemmanager_cleanup_connection "${modemstatus}"
diff --git a/net/modemmanager/files/usr/sbin/ModemManager-monitor b/net/modemmanager/files/usr/sbin/ModemManager-monitor
new file mode 100644
index 000000000..8a88ab514
--- /dev/null
+++ b/net/modemmanager/files/usr/sbin/ModemManager-monitor
@@ -0,0 +1,155 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/netifd/netifd-proto.sh
+. /usr/share/ModemManager/modemmanager.common
+
+trap_with_arg() {
+	func="$1" ; shift
+	for sig ; do
+		# shellcheck disable=SC2064
+		trap "$func $sig" "$sig"
+	done
+}
+
+func_trap() {
+	local monitor_cache_line object
+
+	logger "ModemManager-monitor[$$]" "Sending signal ${1} ..."
+
+	# Set all configured logical interfaces to unavailable
+	while IFS= read -r monitor_cache_line; do
+		object=$(echo "${monitor_cache_line}" | awk '{print $1}')
+		mm_monitor_cache_remove "$object"
+	done < ${MODEMMANAGER_MONITOR_CACHE}
+
+	kill "-${1}" "$CHILD" 2>/dev/null
+}
+
+mm_monitor_get_sysfspath() {
+	local object="$1"
+
+	# If no monitor cache file, we're done
+	[ -f "${MODEMMANAGER_MONITOR_CACHE}" ] || return
+
+	awk -v object="${object}" '!/^#/ && $0 ~ object { print $2 }' "${MODEMMANAGER_MONITOR_CACHE}"
+}
+
+mm_monitor_cache_remove() {
+	local object="$1"
+
+	local device cfg
+
+	device=$(mm_monitor_get_sysfspath "${object}")
+
+	cfg=$(mm_get_modem_config "${device}")
+	if [ -n "${cfg}" ]; then
+		mm_log "debug" "interface '${cfg}' set '${device}' state unavailable"
+		proto_set_available "${cfg}" 0
+	fi
+
+	mm_log "debug" "delete object '$object' from monitore cache"
+
+	# On monitor remove event, remove old events from cache
+	# Also substitute object path '/org/freedesktop/ModemManager1/Modem/'
+	# all '/' with '\/' to make sed happy with shell expansion
+	sed -i "/${object//\//\\/}/d" "${MODEMMANAGER_MONITOR_CACHE}"
+}
+
+mm_monitor_cache_add() {
+	local object="$1"
+	local modemstatus device sysfspath cfg
+
+	modemstatus="$(mmcli --modem="${object}" --output-keyvalue)"
+
+	device=$(modemmanager_get_field "${modemstatus}" "modem.generic.device")
+	[ -n "${device}" ] || {
+		mm_log "err" "No 'device' for object '$object' not found..."
+		return 1
+	}
+
+	sysfspath=$(modemmanager_get_field "${modemstatus}" "modem.generic.physdev")
+	[ -n "${sysfspath}" ] || {
+		mm_log "err" "No 'sysfspath' for object '$object' not found..."
+		return 2
+	}
+
+	mm_log "debug" "add object '$object' to monitore cache (device=${device},sysfspath=${sysfspath})"
+
+	# On monitor add event, store event details in cache (if not exists yet)
+	grep -qs "${sysfspath}" "${MODEMMANAGER_MONITOR_CACHE}" || \
+		echo "${object} ${device} ${sysfspath}" >> "${MODEMMANAGER_MONITOR_CACHE}"
+
+	cfg=$(mm_get_modem_config "${device}")
+	if [ -n "${cfg}" ]; then
+		mm_log "info" "interface '${cfg}' set '${device}' state available"
+		proto_set_available "${cfg}" 1
+	fi
+}
+
+mm_monitor_cache_del() {
+	local object="$1"
+
+	mm_monitor_cache_remove "$object"
+}
+
+mm_monitor_cache() {
+	local line="$1"
+	local event object modemstatus device pyhsdev
+
+	event="$(echo "$line" | cut -d " " -f 1)"
+	object="$(echo "$line" | cut -d " " -f 2)"
+
+	case "$event" in
+		"(+)")
+			mm_monitor_cache_add "$object"
+			;;
+		"(-)")
+			mm_monitor_cache_del "$object"
+			;;
+	esac
+}
+
+main() {
+
+	local n=60
+	local step=1
+	local mmrunning=0
+
+	trap_with_arg func_trap INT TERM KILL
+
+	mkdir -p "${MODEMMANAGER_RUNDIR}"
+	chmod 0755 "${MODEMMANAGER_RUNDIR}"
+
+	# Wait for ModemManager to be available in the bus
+	while [ $n -ge 0 ]; do
+		sleep $step
+		mm_log "info" "Checking if ModemManager is available..."
+
+		if ! /usr/bin/mmcli -L >/dev/null 2>&1; then
+			mm_log "info" "ModemManager not yet available"
+		else
+			mmrunning=1
+			break
+		fi
+		n=$((n-step))
+	done
+
+	[ ${mmrunning} -eq 1 ] || {
+		mm_log "error" "couldn't report initial kernel events: ModemManager not running"
+		return
+	}
+
+	/usr/bin/mmcli -M | {
+		local line
+		while read -r line; do
+			mm_log "debug" "Monitor cache line: ${line}"
+			mm_monitor_cache "$line"
+		done
+	} &
+	CHILD="$!"
+
+	wait $CHILD
+}
+
+main "$@"
diff --git a/net/modemmanager/files/usr/sbin/ModemManager-wrapper b/net/modemmanager/files/usr/sbin/ModemManager-wrapper
index 97c2a826d..b0f36c267 100644
--- a/net/modemmanager/files/usr/sbin/ModemManager-wrapper
+++ b/net/modemmanager/files/usr/sbin/ModemManager-wrapper
@@ -1,5 +1,7 @@
 #!/bin/sh
 
+. /usr/share/ModemManager/modemmanager.common
+
 trap_with_arg() {
 	func="$1" ; shift
 	for sig ; do
@@ -14,8 +16,6 @@ func_trap() {
 }
 
 main() {
-	. /usr/share/ModemManager/modemmanager.common
-
 	trap_with_arg func_trap INT TERM KILL
 
 	mkdir -p "${MODEMMANAGER_RUNDIR}"
@@ -27,9 +27,6 @@ main() {
 	mm_report_events_from_cache
 
 	wait "$CHILD"
-
-	# Set all configured interfaces as unavailable
-	mm_cleanup_interfaces
 }
 
 main "$@"
diff --git a/net/nebula/Makefile b/net/nebula/Makefile
index c22a41294..bb5d61415 100644
--- a/net/nebula/Makefile
+++ b/net/nebula/Makefile
@@ -4,12 +4,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nebula
-PKG_VERSION:=1.8.1
+PKG_VERSION:=1.8.2
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/slackhq/nebula/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=85c048b6d39296eeb8cf2d3324124d834011121383d0550662018190494d433e
+PKG_HASH:=203713c58d0ec8a10df2f605af791a77a33f825454911ac3a5313ced591547fd
 
 PKG_MAINTAINER:=Stan Grishin 
 PKG_LICENSE:=MIT
diff --git a/net/netbird/Makefile b/net/netbird/Makefile
index d6ee0ce30..3c7a9650b 100644
--- a/net/netbird/Makefile
+++ b/net/netbird/Makefile
@@ -1,12 +1,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=netbird
-PKG_VERSION:=0.24.3
+PKG_VERSION:=0.25.2
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/netbirdio/netbird/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=6590034fe8a8dc215242bbd7706197beef67a63a099a45a30c436373c892aab0
+PKG_HASH:=8a2f509a9f945168fc7b40a23f970de3623356e01fa91dc780dd4a26521944b7
 
 PKG_MAINTAINER:=Oskari Rauta 
 PKG_LICENSE:=BSD-3-Clause
diff --git a/net/nfdump/Makefile b/net/nfdump/Makefile
index b26bb6ca5..7ec8852ce 100644
--- a/net/nfdump/Makefile
+++ b/net/nfdump/Makefile
@@ -6,12 +6,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nfdump
-PKG_VERSION:=1.7.2
-PKG_RELEASE:=1
+PKG_VERSION:=1.7.3
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/phaag/nfdump/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=0545b792e81f5edd51a2fdfbfcc4eac7ba8087005811ab41c34bfac4d78fe926
+PKG_HASH:=9ea7e1ded34a81839b73e66cb62c9bc11a8070210584f9a508798d7bd6058c89
 
 PKG_MAINTAINER:=W. Michael Petullo 
 PKG_LICENSE:=BSD-3-Clause
@@ -27,7 +27,7 @@ include $(INCLUDE_DIR)/package.mk
 define Package/nfdump
   SECTION:=net
   CATEGORY:=Network
-  DEPENDS:= +flex +libbz2 +USE_MUSL:musl-fts +libatomic
+  DEPENDS:= +flex +libbz2 +USE_MUSL:musl-fts +libatomic +libzstd
   TITLE:= nfdump
   URL:=https://github.com/phaag/nfdump/
 endef
diff --git a/net/nginx/Makefile b/net/nginx/Makefile
index 0accdd099..7509d9575 100644
--- a/net/nginx/Makefile
+++ b/net/nginx/Makefile
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nginx
-PKG_VERSION:=1.25.2
-PKG_RELEASE:=2
+PKG_VERSION:=1.25.3
+PKG_RELEASE:=1
 
 PKG_SOURCE:=nginx-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://nginx.org/download/
-PKG_HASH:=05dd6d9356d66a74e61035f2a42162f8c754c97cf1ba64e7a801ba158d6c0711
+PKG_HASH:=64c5b975ca287939e828303fa857d22f142b251f17808dfe41733512d9cded86
 
 PKG_MAINTAINER:=Thomas Heil  \
 				Christian Marangi 
diff --git a/net/nqptp/Makefile b/net/nqptp/Makefile
new file mode 100644
index 000000000..b16efecd3
--- /dev/null
+++ b/net/nqptp/Makefile
@@ -0,0 +1,48 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+# updated to work with latest source from abrasive
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=nqptp
+PKG_VERSION:=1.2.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/mikebrady/nqptp/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=1df1d5edd5b713010d6495b3abca4c1cf4ad8fa6029df0abeb9e4de8e0eb707a
+
+PKG_MAINTAINER:=Ben Klang 
+PKG_LICENSE:=GPL-2.0-only
+PKG_LICENSE_FILES:=COPYING LICENSES nqptp.c
+
+PKG_FIXUP:=autoreconf
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/nqptp
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=Not Quite Peer-to-Peer
+  URL:=https://github.com/mikebrady/nqptp
+endef
+
+define Package/nqptp/description
+  nqptp is a daemon that monitors timing data from PTP clocks it sees on ports
+  319 and 320. It maintains records for one clock, identified by its Clock ID.
+
+  It is a companion application to Shairport Sync and provides timing
+  information for AirPlay 2 operation.
+endef
+
+define Package/nqptp/install
+	$(INSTALL_DIR) $(1)/usr/bin
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/nqptp $(1)/usr/bin/
+	$(INSTALL_DIR) $(1)/etc/init.d
+	$(INSTALL_BIN) ./files/nqptp.init $(1)/etc/init.d/nqptp
+endef
+
+$(eval $(call BuildPackage,nqptp))
diff --git a/net/nqptp/files/nqptp.init b/net/nqptp/files/nqptp.init
new file mode 100644
index 000000000..d40ef87dd
--- /dev/null
+++ b/net/nqptp/files/nqptp.init
@@ -0,0 +1,15 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2023 Ben Klang 
+
+START=99
+USE_PROCD=1
+
+service_triggers() {
+	procd_add_reload_trigger "nqptp"
+}
+
+start_service() {
+	procd_open_instance
+	procd_set_param command /usr/bin/nqptp
+	procd_close_instance
+}
diff --git a/net/ocserv/Makefile b/net/ocserv/Makefile
index e26990fde..42dd11542 100644
--- a/net/ocserv/Makefile
+++ b/net/ocserv/Makefile
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ocserv
-PKG_VERSION:=1.2.0
+PKG_VERSION:=1.2.4
 PKG_RELEASE:=1
 PKG_BUILD_FLAGS:=no-mips16
 
 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:=47a66e504a6b04bb04856176d78ee392ad1385d22d1670d4ed48b7b95e9dffc5
+PKG_SOURCE_URL:=https://www.infradead.org/ocserv/download/
+PKG_HASH:=d30f29c5967715f7b118e89bba496011b2be2af0f49bb9e332f12be7fbf693d7
 
 PKG_LICENSE:=GPL-2.0-or-later
 PKG_LICENSE_FILES:=COPYING
diff --git a/net/openconnect/Makefile b/net/openconnect/Makefile
index 1ec7d70d2..f3bb6b673 100644
--- a/net/openconnect/Makefile
+++ b/net/openconnect/Makefile
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=openconnect
-PKG_VERSION:=9.01
-PKG_RELEASE:=2
+PKG_VERSION:=9.12
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=ftp://ftp.infradead.org/pub/openconnect/
-PKG_HASH:=b3d7faf830e9793299d6a41e81d84cd4a3e2789c148c9e598e4585010090e4c7
+PKG_SOURCE_URL:=https://www.infradead.org/openconnect/download
+PKG_HASH:=a2bedce3aa4dfe75e36e407e48e8e8bc91d46def5335ac9564fbf91bd4b2413e
 
 PKG_LICENSE:=LGPL-2.1-or-later
 PKG_LICENSE_FILES:=COPYING.LGPL
diff --git a/net/openconnect/patches/001-Use-OpenSSL_version-not-deprecated-SSLeay_version.patch b/net/openconnect/patches/001-Use-OpenSSL_version-not-deprecated-SSLeay_version.patch
deleted file mode 100644
index 9f635a766..000000000
--- a/net/openconnect/patches/001-Use-OpenSSL_version-not-deprecated-SSLeay_version.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 01b7e75034e6d838d7750a828eccaa8dd534f152 Mon Sep 17 00:00:00 2001
-From: David Woodhouse 
-Date: Thu, 12 May 2022 15:55:59 +0100
-Subject: [PATCH] Use OpenSSL_version() not deprecated SSLeay_version()
-
-Fixes: #428
-
-Signed-off-by: David Woodhouse 
----
- openssl.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
---- a/openssl.c
-+++ b/openssl.c
-@@ -49,6 +49,8 @@
- typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer,
- 					    X509_STORE_CTX *ctx, X509 *x);
- #define X509_STORE_CTX_get_get_issuer(ctx) ((ctx)->get_issuer)
-+#define OpenSSL_version SSLeay_version
-+#define OPENSSL_VERSION SSLEAY_VERSION
- #endif
- 
- static char tls_library_version[32] = "";
-@@ -56,7 +58,9 @@ static char tls_library_version[32] = ""
- const char *openconnect_get_tls_library_version(void)
- {
- 	if (!*tls_library_version) {
--		strncpy(tls_library_version, SSLeay_version(SSLEAY_VERSION), sizeof(tls_library_version));
-+		strncpy(tls_library_version,
-+			OpenSSL_version(OPENSSL_VERSION),
-+			sizeof(tls_library_version));
- 		tls_library_version[sizeof(tls_library_version)-1]='\0';
- 	}
- 	return tls_library_version;
diff --git a/net/openconnect/patches/010-libxml212.patch b/net/openconnect/patches/010-libxml212.patch
new file mode 100644
index 000000000..b8c821f21
--- /dev/null
+++ b/net/openconnect/patches/010-libxml212.patch
@@ -0,0 +1,11 @@
+--- a/openconnect-internal.h
++++ b/openconnect-internal.h
+@@ -84,7 +84,7 @@
+ #endif
+ #define N_(s) s
+ 
+-#include 
++#include 
+ #include 
+ 
+ #ifdef _WIN32
diff --git a/net/openssh/Makefile b/net/openssh/Makefile
index ca9380f0b..4a6326fc9 100644
--- a/net/openssh/Makefile
+++ b/net/openssh/Makefile
@@ -8,18 +8,20 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=openssh
-PKG_VERSION:=9.5p1
+PKG_VERSION:=9.6p1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/ \
 		https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
-PKG_HASH:=f026e7b79ba7fb540f75182af96dc8a8f1db395f922bbc9f6ca603672686086b
+PKG_HASH:=910211c07255a8c5ad654391b40ee59800710dd8119dd5362de09385aa7a777c
 
 PKG_LICENSE:=BSD ISC
 PKG_LICENSE_FILES:=LICENCE
 PKG_CPE_ID:=cpe:/a:openssh:openssh
 
+#While bumping new version, make sure that it works without it, so it can be removed.
+PKG_FIXUP:=autoreconf
 PKG_REMOVE_FILES:=
 PKG_CONFIG_DEPENDS := \
 	CONFIG_OPENSSH_LIBFIDO2
diff --git a/net/openssh/patches/010-better_fzero-call-detection.patch b/net/openssh/patches/010-better_fzero-call-detection.patch
new file mode 100644
index 000000000..ab4b2dabd
--- /dev/null
+++ b/net/openssh/patches/010-better_fzero-call-detection.patch
@@ -0,0 +1,52 @@
+From 1036d77b34a5fa15e56f516b81b9928006848cbd Mon Sep 17 00:00:00 2001
+From: Damien Miller 
+Date: Fri, 22 Dec 2023 17:56:26 +1100
+Subject: [PATCH] better detection of broken -fzero-call-used-regs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+gcc 13.2.0 on ppc64le refuses to compile some function, including
+cipher.c:compression_alg_list() with an error:
+
+> sorry, unimplemented: argument ‘used’ is not supportedcw
+> for ‘-fzero-call-used-regs’ on this target
+
+This extends the autoconf will-it-work test with a similarly-
+structured function that seems to catch this.
+
+Spotted/tested by Colin Watson; bz3645
+---
+ m4/openssh.m4 | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+--- a/m4/openssh.m4
++++ b/m4/openssh.m4
+@@ -20,18 +20,24 @@ char *f2(char *s, ...) {
+ 	va_end(args);
+ 	return strdup(ret);
+ }
++const char *f3(int s) {
++	return s ? "good" : "gooder";
++}
+ int main(int argc, char **argv) {
+-	(void)argv;
+ 	char b[256], *cp;
++	const char *s;
+ 	/* Some math to catch -ftrapv problems in the toolchain */
+ 	int i = 123 * argc, j = 456 + argc, k = 789 - argc;
+ 	float l = i * 2.1;
+ 	double m = l / 0.5;
+ 	long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
++	(void)argv;
+ 	f(1);
+-	snprintf(b, sizeof b, "%d %d %d %f %f %lld %lld\n", i,j,k,l,m,n,o);
++	s = f3(f(2));
++	snprintf(b, sizeof b, "%d %d %d %f %f %lld %lld %s\n", i,j,k,l,m,n,o,s);
+ 	if (write(1, b, 0) == -1) exit(0);
+-	cp = f2("%d %d %d %f %f %lld %lld\n", i,j,k,l,m,n,o);
++	cp = f2("%d %d %d %f %f %lld %lld %s\n", i,j,k,l,m,n,o,s);
++	if (write(1, cp, 0) == -1) exit(0);
+ 	free(cp);
+ 	/*
+ 	 * Test fallthrough behaviour.  clang 10's -Wimplicit-fallthrough does
diff --git a/net/openvpn/Makefile b/net/openvpn/Makefile
index 111ec97b2..af3b7a8be 100644
--- a/net/openvpn/Makefile
+++ b/net/openvpn/Makefile
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=openvpn
 
 PKG_VERSION:=2.6.8
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE_URL:=\
 	https://build.openvpn.net/downloads/releases/ \
@@ -18,7 +18,7 @@ PKG_SOURCE_URL:=\
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_HASH:=5ede1565c8a6d880100f7f235317a7ee9eea83d5052db5547f13a9e76af7805d
 
-PKG_MAINTAINER:=Magnus Kroken 
+PKG_MAINTAINER:=
 
 PKG_INSTALL:=1
 PKG_FIXUP:=autoreconf
diff --git a/net/openvpn/files/etc/hotplug.d/openvpn/01-user b/net/openvpn/files/etc/hotplug.d/openvpn/01-user
index 4c72f1c4b..f6ad8935e 100644
--- a/net/openvpn/files/etc/hotplug.d/openvpn/01-user
+++ b/net/openvpn/files/etc/hotplug.d/openvpn/01-user
@@ -7,10 +7,14 @@
 		$*
 }
 
-# Wrap user defined scripts on up/down events
+# Wrap user defined scripts on up/down/route-up/route-pre-down/ipchange events
+# Scriptp set with up/down/route-up/route-pre-down/ipchange in the openvpn config are also executed with the command=user_xxxx
 case "$ACTION" in
 	up) command=$user_up ;;
 	down) command=$user_down ;;
+	route-up) command=$user_route_up ;;
+	route-pre-down) command=$user_route_pre_down ;;
+	ipchange) command=$user_ipchange ;;
 	*) command= ;;
 esac
 
@@ -20,3 +24,4 @@ if [ -n "$command" ]; then
 fi
 
 exit 0
+
diff --git a/net/openvpn/files/openvpn.init b/net/openvpn/files/openvpn.init
index 6f4dc4206..0aee6d418 100644
--- a/net/openvpn/files/openvpn.init
+++ b/net/openvpn/files/openvpn.init
@@ -145,6 +145,9 @@ openvpn_add_instance() {
 	local security="$4"
 	local up="$5"
 	local down="$6"
+	local route_up="$7"
+	local route_pre_down="$8"
+	local ipchange="$9"
 	local client=$(grep -qEx "client|tls-client" "$dir/$conf" && echo 1)
 
 	procd_open_instance "$name"
@@ -160,6 +163,9 @@ openvpn_add_instance() {
 		${client:+--ipchange "/usr/libexec/openvpn-hotplug ipchange $name"} \
 		${up:+--setenv user_up "$up"} \
 		${down:+--setenv user_down "$down"} \
+		${route_up:+--setenv user_route_up "$route_up"} \
+		${route_pre_down:+--setenv user_route_pre_down "$route_pre_down"} \
+		${client:+${ipchange:+--setenv user_ipchange "$ipchange"}} \
 		--script-security "${security:-2}" \
 		$(openvpn_get_dev "$name" "$conf") \
 		$(openvpn_get_credentials "$name" "$conf")
@@ -183,9 +189,12 @@ start_uci_instance() {
 		return 1
 	}
 
-	local up down script_security
+	local up down route_up route_pre_down ipchange script_security
 	config_get up "$s" up
 	config_get down "$s" down
+	config_get route_up "$s" route_up
+	config_get route_pre_down "$s" route_pre_down
+	config_get ipchange "$s" ipchange
 	config_get script_security "$s" script_security
 
 	[ ! -d "/var/run" ] && mkdir -p "/var/run"
@@ -194,7 +203,10 @@ start_uci_instance() {
 		append UCI_STARTED "$config" "$LIST_SEP"
 		[ -n "$up" ] || get_openvpn_option "$config" up up
 		[ -n "$down" ] || get_openvpn_option "$config" down down
-		openvpn_add_instance "$s" "${config%/*}" "$config" "$script_security" "$up" "$down"
+		[ -n "$route_up" ] || get_openvpn_option "$config" route_up route-up
+		[ -n "$route_pre_down" ] || get_openvpn_option "$config" route_pre_down route-pre-down
+		[ -n "$ipchange" ] || get_openvpn_option "$config" ipchange ipchange
+		openvpn_add_instance "$s" "${config%/*}" "$config" "$script_security" "$up" "$down" "$route_up" "$route_pre_down" "$ipchange"
 		return
 	fi
 
@@ -204,7 +216,7 @@ start_uci_instance() {
 	append_params "$s" $OPENVPN_PARAMS
 	append_list "$s" $OPENVPN_LIST
 
-	openvpn_add_instance "$s" "/var/etc" "openvpn-$s.conf" "$script_security" "$up" "$down"
+	openvpn_add_instance "$s" "/var/etc" "openvpn-$s.conf" "$script_security" "$up" "$down" "$route_up" "$route_pre_down" "$ipchange"
 }
 
 start_path_instances() {
@@ -222,7 +234,7 @@ start_path_instances() {
 start_path_instance() {
 	local name="$1"
 
-	local path up down
+	local path name up down route_up route_pre_down ipchange
 
 	path="${PATH_INSTANCE_DIR}/${name}.conf"
 
@@ -240,8 +252,11 @@ start_path_instance() {
 
 	get_openvpn_option "$path" up up || up=""
 	get_openvpn_option "$path" down down || down=""
+	get_openvpn_option "$path" route_up route-up || route_up=""
+	get_openvpn_option "$path" route_pre_down route-pre-down || route_pre_down=""
+	get_openvpn_option "$path" ipchange ipchange || ipchange=""
 
-	openvpn_add_instance "$name" "${path%/*}" "$path" "" "$up" "$down"
+	openvpn_add_instance "$name" "${path%/*}" "$path" "" "$up" "$down" "$route_up" "$route_pre_down" "$ipchange"
 }
 
 start_service() {
@@ -283,3 +298,4 @@ start_service() {
 service_triggers() {
 	procd_add_reload_trigger openvpn
 }
+
diff --git a/net/pdns-recursor/Makefile b/net/pdns-recursor/Makefile
index 0642c3459..36574b5a6 100644
--- a/net/pdns-recursor/Makefile
+++ b/net/pdns-recursor/Makefile
@@ -1,23 +1,25 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=pdns-recursor
-PKG_VERSION:=4.9.2
+PKG_VERSION:=5.0.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=https://downloads.powerdns.com/releases/
-PKG_HASH:=4cb8180458ecfb528a3d9a34ba2844b6cd2ed69ca1c461dde24a0ebd66829144
+PKG_HASH:=70a3b0bfde350e94cdb0746b06d06e6d2f3dc0e171be3b12caef9f3c38468ca3
 
 PKG_MAINTAINER:=Peter van Dijk 
-PKG_LICENCE:=GPL-2.0-only
-PKG_LICENCE_FILES:=COPYING
+PKG_LICENSE:=GPL-2.0-only
+PKG_LICENSE_FILES:=COPYING
 PKG_CPE_ID:=cpe:/a:powerdns:recursor
 
 PKG_FIXUP:=autoreconf
-PKG_INSTALL:=1
+PKG_BUILD_DEPENDS:=rust/host
 PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
 
 include $(INCLUDE_DIR)/package.mk
+include ../../lang/rust/rust-values.mk
 
 define Package/pdns-recursor
   SECTION:=net
@@ -52,6 +54,9 @@ CONFIGURE_ARGS += \
 	--enable-reproducible \
 	--disable-silent-rules
 
+MAKE_VARS += RUSTC_TARGET_ARCH=$(RUSTC_TARGET_ARCH)
+MAKE_VARS += RUST_TARGET=--target=$(RUSTC_TARGET_ARCH)
+
 define Package/pdns-recursor/install
 	$(INSTALL_DIR) $(1)/etc/powerdns
 	$(INSTALL_CONF) ./files/recursor.conf-dist $(1)/etc/powerdns/
diff --git a/net/pdns-recursor/patches/100-disable-recursor.conf-dist.patch b/net/pdns-recursor/patches/100-disable-recursor.conf-dist.patch
index 4a9e90b0a..d611e71bd 100644
--- a/net/pdns-recursor/patches/100-disable-recursor.conf-dist.patch
+++ b/net/pdns-recursor/patches/100-disable-recursor.conf-dist.patch
@@ -1,14 +1,17 @@
 --- a/Makefile.am
 +++ b/Makefile.am
-@@ -507,12 +507,6 @@ $(srcdir)/effective_tld_names.dat:
+@@ -527,15 +527,6 @@ $(srcdir)/effective_tld_names.dat:
  pubsuffix.cc: $(srcdir)/effective_tld_names.dat
  	$(AM_V_GEN)./mkpubsuffixcc
  
 -## Config file
--sysconf_DATA = recursor.conf-dist
+-sysconf_DATA = recursor.conf-dist recursor.yml-dist
 -
 -recursor.conf-dist: pdns_recursor
 -	$(AM_V_GEN)./pdns_recursor --config=default > $@
+-
+-recursor.yml-dist: pdns_recursor
+-	dir=$$(mktemp -d) && touch "$$dir/recursor.yml" && ./pdns_recursor --config-dir="$$dir" --config=default 2> /dev/null > $@ && rm "$$dir/recursor.yml" && rmdir "$$dir"
 -
  ## Manpages
  MANPAGES=pdns_recursor.1 \
diff --git a/net/rclone/Makefile b/net/rclone/Makefile
index dc48c6ad4..a272ab2a9 100644
--- a/net/rclone/Makefile
+++ b/net/rclone/Makefile
@@ -6,12 +6,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=rclone
-PKG_VERSION:=1.65.0
+PKG_VERSION:=1.65.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/rclone/rclone/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=22a15cbc381bab351c0698c83c1666344a07e1bde39ba44f33b95c5fb22cfaf4
+PKG_HASH:=e16f7f6b81865c7f719d4b214ea45a0608ada71d9b9b6f65c6ead21128cbc8fe
 
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=LICENSE
diff --git a/net/sing-box/Makefile b/net/sing-box/Makefile
index 32134356f..81c73d36b 100644
--- a/net/sing-box/Makefile
+++ b/net/sing-box/Makefile
@@ -1,12 +1,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=sing-box
-PKG_VERSION:=1.7.7
+PKG_VERSION:=1.8.0
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=ce182cb2181e898b56ca9b6ce0d5adeaece8e761ac62ce8cde69b3c7219b8430
+PKG_HASH:=80ae2a860fc77d961c578999e5fcfe964f969c81d9ccac156b2fef1340eca12f
 
 PKG_LICENSE:=GPL-3.0-or-later
 PKG_LICENSE_FILES:=LICENSE
@@ -66,9 +66,6 @@ define Package/sing-box/config
 			bool "Build with gVisor support"
 			default y
 
-		config SINGBOX_WITH_LWIP
-			bool "Build with LWIP Tun stack support"
-
 		config SINGBOX_WITH_QUIC
 			bool "Build with QUIC support"
 			default y
@@ -98,7 +95,6 @@ PKG_CONFIG_DEPENDS:= \
 	CONFIG_SINGBOX_WITH_EMBEDDED_TOR \
 	CONFIG_SINGBOX_WITH_GRPC \
 	CONFIG_SINGBOX_WITH_GVISOR \
-	CONFIG_SINGBOX_WITH_LWIP \
 	CONFIG_SINGBOX_WITH_QUIC \
 	CONFIG_SINGBOX_WITH_REALITY_SERVER \
 	CONFIG_SINGBOX_WITH_UTLS \
@@ -113,7 +109,6 @@ GO_PKG_TAGS:=$(subst $(space),$(comma),$(strip \
 	$(if $(CONFIG_SINGBOX_WITH_EMBEDDED_TOR),with_embedded_tor) \
 	$(if $(CONFIG_SINGBOX_WITH_GRPC),with_grpc) \
 	$(if $(CONFIG_SINGBOX_WITH_GVISOR),with_gvisor) \
-	$(if $(CONFIG_SINGBOX_WITH_LWIP),with_lwip) \
 	$(if $(CONFIG_SINGBOX_WITH_QUIC),with_quic) \
 	$(if $(CONFIG_SINGBOX_WITH_REALITY_SERVER),with_reality_server) \
 	$(if $(CONFIG_SINGBOX_WITH_UTLS),with_utls) \
diff --git a/net/snort/Config.in b/net/snort/Config.in
deleted file mode 100644
index a79e51db0..000000000
--- a/net/snort/Config.in
+++ /dev/null
@@ -1,11 +0,0 @@
-menu "Configuration"
-	depends on PACKAGE_snort
-
-config SNORT_LZMA
-	bool "Enable LZMA support"
-	default n
-	help
-           This option enables LZMA decompression.
-           Disabled by default.
-
-endmenu
diff --git a/net/snort/Makefile b/net/snort/Makefile
deleted file mode 100644
index 66a8806cf..000000000
--- a/net/snort/Makefile
+++ /dev/null
@@ -1,160 +0,0 @@
-#
-# Copyright (C) 2006-2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=snort
-PKG_VERSION:=2.9.20
-PKG_RELEASE:=1
-
-PKG_LICENSE:=GPL-2.0
-PKG_MAINTAINER:=W. Michael Petullo 
-PKG_CPE_ID:=cpe:/a:snort:snort
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://www.snort.org/downloads/archive/snort/ \
-	@SF/$(PKG_NAME)
-PKG_HASH:=29400e13f53b1831e0b8b10ec1224a1cbaa6dc1533a5322a20dd80bb84b4981c
-
-PKG_BUILD_DEPENDS:=libtirpc
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)/$(PKG_NAME)-$(PKG_VERSION)
-PKG_FIXUP:=autoreconf
-PKG_INSTALL:=1
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/snort
-  SUBMENU:=Firewall
-  SECTION:=net
-  CATEGORY:=Network
-  DEPENDS:=+libdaq +libdnet +libnghttp2 +libopenssl +libpcap +libpcre2 +libpthread +libtirpc +libuuid +zlib @HAS_LUAJIT_ARCH +luajit +SNORT_LZMA:liblzma
-  TITLE:=Lightweight Network Intrusion Detection System
-  URL:=http://www.snort.org/
-  CONFLICTS:=snort3
-  MENU:=1
-endef
-
-define Package/snort/description
-  Snort is an open source network intrusion detection and prevention system.
-  It is capable of performing real-time traffic analysis, alerting, blocking
-  and packet logging on IP networks.  It utilizes a combination of protocol
-  analysis and pattern matching in order to detect anomalies, misuse and
-  attacks.
-endef
-
-define Package/snort/config
-	source "$(SOURCE)/Config.in"
-endef
-
-CONFIGURE_ARGS += \
-	--prefix="/usr" \
-	--enable-flexresp \
-	--with-dnet-includes="$(STAGING_DIR)/usr/include" \
-	--with-dnet-libraries="$(STAGING_DIR)/usr/lib" \
-	--with-libpcap-includes="$(STAGING_DIR)/usr/include" \
-	--with-libpcap-libraries="$(STAGING_DIR)/usr/lib" \
-	--with-libpcre2-includes="$(STAGING_DIR)/usr/include" \
-	--with-libpcre2-libraries="$(STAGING_DIR)/usr/lib" \
-	--with-daq-includes="$(STAGING_DIR)/usr/include/daq2" \
-	--with-daq-libraries="$(STAGING_DIR)/usr/lib/daq2" \
-	--disable-static-daq
-
-ifeq ($(CONFIG_SNORT_LZMA),)
-CONFIGURE_ARGS += \
-	--disable-lzma
-endif
-
-CONFIGURE_VARS += \
-	PATH="$(STAGING_DIR)/usr/lib/libnet-1.0.x/bin:$$$$PATH"
-
-MAKE_FLAGS += \
-	extra_incl=""
-	
-TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include/tirpc
-
-define Build/InstallDev
-	$(INSTALL_DIR) $(STAGING_DIR)/usr/include/snort/dynamic_preproc
-	$(CP) \
-		$(PKG_INSTALL_DIR)/usr/include/snort/dynamic_preproc/* \
-		$(STAGING_DIR)/usr/include/snort/dynamic_preproc/
-	$(INSTALL_DIR) $(STAGING_DIR)/usr/lib/snort/dynamic_preproc
-	$(CP) \
-		$(PKG_INSTALL_DIR)/usr/lib/snort/dynamic_preproc/* \
-		$(STAGING_DIR)/usr/lib/snort/dynamic_preproc/
-	$(INSTALL_DIR) $(STAGING_DIR)/usr/lib/snort_dynamicengine
-	$(CP) \
-		$(PKG_INSTALL_DIR)/usr/lib/snort_dynamicengine/* \
-		$(STAGING_DIR)/usr/lib/snort_dynamicengine/
-	$(INSTALL_DIR) $(STAGING_DIR)/usr/lib/snort_dynamicpreprocessor
-	$(CP) \
-		$(PKG_INSTALL_DIR)/usr/lib/snort_dynamicpreprocessor/* \
-		$(STAGING_DIR)/usr/lib/snort_dynamicpreprocessor/
-endef
-
-define Package/snort/conffiles
-/etc/config/snort
-/etc/snort/snort.conf
-endef
-
-define Package/snort/install
-	$(INSTALL_DIR) $(1)/usr/bin
-	$(INSTALL_BIN) \
-		$(PKG_INSTALL_DIR)/usr/bin/snort  \
-		$(1)/usr/bin/snort
-
-	$(INSTALL_BIN) \
-		$(PKG_INSTALL_DIR)/usr/bin/u2{boat,spewfoo} \
-		$(1)/usr/bin
-
-	$(INSTALL_DIR) $(1)/usr/lib/snort_dynamicengine
-	$(CP) \
-		$(PKG_INSTALL_DIR)/usr/lib/snort_dynamicengine/libsf_engine.so* \
-		$(1)/usr/lib/snort_dynamicengine/
-
-	$(INSTALL_DIR) $(1)/usr/lib/snort_dynamicpreprocessor
-	$(CP) \
-		$(PKG_INSTALL_DIR)/usr/lib/snort_dynamicpreprocessor/libsf*.so* \
-		$(1)/usr/lib/snort_dynamicpreprocessor/
-
-	$(INSTALL_DIR) $(1)/etc/snort
-	$(INSTALL_CONF) \
-		$(PKG_BUILD_DIR)/etc/snort.conf \
-		$(1)/etc/snort/
-	$(INSTALL_CONF) \
-		$(PKG_BUILD_DIR)/etc/attribute_table.dtd \
-		$(1)/etc/snort/
-	$(INSTALL_CONF) \
-		$(PKG_BUILD_DIR)/etc/classification.config \
-		$(1)/etc/snort/
-	$(INSTALL_CONF) \
-		$(PKG_BUILD_DIR)/etc/gen-msg.map \
-		$(1)/etc/snort/
-	$(INSTALL_CONF) \
-			$(PKG_BUILD_DIR)/etc/reference.config \
-			$(1)/etc/snort/
-	$(INSTALL_CONF) \
-		$(PKG_BUILD_DIR)/etc/unicode.map \
-		$(1)/etc/snort/
-
-	$(INSTALL_DIR) $(1)/etc/snort/preproc_rules
-	$(INSTALL_CONF) \
-		$(PKG_BUILD_DIR)/preproc_rules/*.rules \
-		$(1)/etc/snort/preproc_rules/
-
-	$(INSTALL_DIR) $(1)/etc/init.d
-	$(INSTALL_BIN) \
-		./files/snort.init \
-		$(1)/etc/init.d/snort
-
-	$(INSTALL_DIR) $(1)/etc/config
-	$(INSTALL_CONF) \
-		./files/snort.config \
-		$(1)/etc/config/snort
-endef
-
-$(eval $(call BuildPackage,snort))
-
diff --git a/net/snort/files/snort.config b/net/snort/files/snort.config
deleted file mode 100644
index cda74418d..000000000
--- a/net/snort/files/snort.config
+++ /dev/null
@@ -1,3 +0,0 @@
-config snort 'snort'
-	option config_file '/etc/snort/snort.conf'
-	option interface 'lo'
diff --git a/net/snort/files/snort.init b/net/snort/files/snort.init
deleted file mode 100644
index 7905c6ff3..000000000
--- a/net/snort/files/snort.init
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/sh /etc/rc.common
-# Copyright (C) 2015 OpenWrt.org
-
-START=90
-STOP=10
-
-USE_PROCD=1
-PROG=/usr/bin/snort
-
-validate_snort_section() {
-	uci_load_validate snort snort "$1" "$2" \
-		'config_file:string' \
-		'interface:string'
-}
-
-start_snort_instance() {
-	[ "$2" = 0 ] || {
-		echo "validation failed"
-		return 1
-	}
-
-	procd_open_instance
-	procd_set_param command $PROG "-q" "--daq-dir" "/usr/lib/daq/" "-i" "$interface" "-c" "$config_file" "-s" "-N"
-	procd_set_param file $config_file
-	procd_set_param respawn
-	procd_close_instance
-}
-
-start_service()
-{
-	validate_snort_section snort start_snort_instance
-}
-
-stop_service()
-{
-	service_stop ${PROG}
-}
-
-service_triggers()
-{
-	procd_add_reload_trigger "snort"
-	procd_add_validation validate_snort_section
-}
diff --git a/net/snort/patches/001-compile.patch b/net/snort/patches/001-compile.patch
deleted file mode 100644
index 1a56e77f2..000000000
--- a/net/snort/patches/001-compile.patch
+++ /dev/null
@@ -1,243 +0,0 @@
---- a/configure.in
-+++ b/configure.in
-@@ -282,21 +282,7 @@ AC_CHECK_TYPES([int8_t,int16_t,int32_t,i
- AC_CHECK_TYPES([boolean])
- 
- # In case INADDR_NONE is not defined (like on Solaris)
--have_inaddr_none="no"
--AC_MSG_CHECKING([for INADDR_NONE])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--#include 
--#include 
--]],
--[[
--	if (inet_addr("10,5,2") == INADDR_NONE);
--    return 0;
--]])],
--[have_inaddr_none="yes"],
--[have_inaddr_none="no"])
-+have_inaddr_none="yes"
- AC_MSG_RESULT($have_inaddr_none)
- if test "x$have_inaddr_none" = "xno"; then
- 	AC_DEFINE([INADDR_NONE],[-1],[For INADDR_NONE definition])
-@@ -428,17 +414,7 @@ if test "x$LPCAP" = "xno"; then
-   fi
- fi
- 
--AC_MSG_CHECKING([for pcap_lex_destroy])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   pcap_lex_destroy();
--]])],
--[have_pcap_lex_destroy="yes"],
--[have_pcap_lex_destroy="no"])
-+have_pcap_lex_destroy="yes"
- AC_MSG_RESULT($have_pcap_lex_destroy)
- if test "x$have_pcap_lex_destroy" = "xyes"; then
-     AC_DEFINE([HAVE_PCAP_LEX_DESTROY],[1],[Can cleanup lex buffer stack created by pcap bpf filter])
-@@ -716,18 +692,7 @@ fi
- 
- AC_CHECK_FUNCS([daq_hup_apply] [daq_acquire_with_meta] [daq_dp_add_dc])
- 
--AC_MSG_CHECKING([for daq real addresses])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   DAQ_PktHdr_t hdr;
--   hdr.n_real_dPort = 0;
--]])],
--[have_daq_real_addresses="yes"],
--[have_daq_real_addresses="no"])
-+have_daq_address_space_id="yes"
- AC_MSG_RESULT($have_daq_real_addresses)
- if test "x$have_daq_real_addresses" = "xyes"; then
-     AC_DEFINE([HAVE_DAQ_REAL_ADDRESSES],[1],
-@@ -770,56 +735,21 @@ if test "x$ac_cv_func_daq_dp_add_dc" = "
- 
- fi
- 
--AC_MSG_CHECKING([for daq address space ID])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   DAQ_PktHdr_t hdr;
--   hdr.address_space_id = 0;
--]])],
--[have_daq_address_space_id="yes"],
--[have_daq_address_space_id="no"])
-+have_daq_address_space_id="yes"
- AC_MSG_RESULT($have_daq_address_space_id)
- if test "x$have_daq_address_space_id" = "xyes"; then
-     AC_DEFINE([HAVE_DAQ_ADDRESS_SPACE_ID],[1],
-         [DAQ version supports address space ID in header.])
- fi
- 
--AC_MSG_CHECKING([for daq flow ID])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   DAQ_PktHdr_t hdr;
--   hdr.flow_id = 0;
--]])],
--[have_daq_flow_id="yes"],
--[have_daq_flow_id="no"])
-+have_daq_flow_id="yes"
- AC_MSG_RESULT($have_daq_flow_id)
- if test "x$have_daq_flow_id" = "xyes"; then
-     AC_DEFINE([HAVE_DAQ_FLOW_ID],[1],
-         [DAQ version supports flow ID in header.])
- fi
- 
--AC_MSG_CHECKING([for daq extended flow modifiers])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   DAQ_ModFlow_t mod;
--   mod.type = 0;
--   mod.length = 0;
--   mod.value = NULL;
--]])],
--[have_daq_ext_modflow="yes"],
--[have_daq_ext_modflow="no"])
-+have_daq_ext_modflow="yes"
- AC_MSG_RESULT($have_daq_ext_modflow)
- if test "x$have_daq_ext_modflow" = "xyes"; then
-     CCONFIGFLAGS="${CCONFIGFLAGS} -DHAVE_DAQ_EXT_MODFLOW"
-@@ -827,20 +757,7 @@ if test "x$have_daq_ext_modflow" = "xyes
-         [DAQ version supports extended flow modifiers.])
- fi
- 
--AC_MSG_CHECKING([for daq query flow])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   DAQ_QueryFlow_t mod;
--   mod.type = 0;
--   mod.length = 0;
--   mod.value = NULL;
--]])],
--[have_daq_queryflow="yes"],
--[have_daq_queryflow="no"])
-+have_daq_queryflow="no"
- AC_MSG_RESULT($have_daq_queryflow)
- if test "x$have_daq_queryflow" = "xyes"; then
-     CCONFIGFLAGS="${CCONFIGFLAGS} -DHAVE_DAQ_QUERYFLOW"
-@@ -848,17 +765,7 @@ if test "x$have_daq_queryflow" = "xyes";
-         [DAQ version supports query flow.])
- fi
- 
--AC_MSG_CHECKING([for daq data channel flags])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   DAQ_Data_Channel_Params_t params;
--]])],
--[have_daq_data_channel_flags="yes"],
--[have_daq_data_channel_flags="no"])
-+have_daq_data_channel_flags="yes"
- AC_MSG_RESULT($have_daq_data_channel_flags)
- if test "x$have_daq_data_channel_flags" = "xyes"; then
-     CCONFIGFLAGS="${CCONFIGFLAGS} -DHAVE_DAQ_DATA_CHANNEL_PARAMS"
-@@ -866,18 +773,7 @@ if test "x$have_daq_data_channel_flags"
-         [DAQ version supports data channel.])
- fi
- 
--AC_MSG_CHECKING([for separate IP versions on pinhole endpoints])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   DAQ_DP_key_t dpKey;
--   dpKey.src_af = 0;
--]])],
--[have_daq_data_channel_separate_ip_versions="yes"],
--[have_daq_data_channel_separate_ip_versions="no"])
-+have_daq_data_channel_separate_ip_versions="yes"
- AC_MSG_RESULT($have_daq_data_channel_separate_ip_versions)
- if test "x$have_daq_data_channel_separate_ip_versions" = "xyes"; then
-     CCONFIGFLAGS="${CCONFIGFLAGS} -DHAVE_DAQ_DATA_CHANNEL_SEPARATE_IP_VERSIONS"
-@@ -886,35 +782,14 @@ if test "x$have_daq_data_channel_separat
- fi
- 
- AC_MSG_CHECKING([for DAQ_VERDICT_RETRY])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   DAQ_Verdict verdict;
--   verdict = DAQ_VERDICT_RETRY;
--]])],
--[have_daq_verdict_retry="yes"],
--[have_daq_verdict_retry="no"])
-+have_daq_verdict_retry="yes"
- AC_MSG_RESULT($have_daq_verdict_retry)
- if test "x$have_daq_verdict_retry" = "xyes"; then
-     AC_DEFINE([HAVE_DAQ_VERDICT_RETRY],[1],
-         [DAQ version supports DAQ_VERDICT_RETRY in DAQ_Verdict.])
- fi
- 
--AC_MSG_CHECKING([for daq packet trace])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   DAQ_PktHdr_t hdr;
--   hdr.flags = DAQ_PKT_FLAG_TRACE_ENABLED;
--]])],
--[have_daq_packet_trace="yes"],
--[have_daq_packet_trace="no"])
-+have_daq_packet_trace="no"
- AC_MSG_RESULT($have_daq_packet_trace)
- if test "x$have_daq_packet_trace" = "xyes"; then
-     AC_DEFINE([HAVE_DAQ_PKT_TRACE],[1],
-@@ -923,18 +798,7 @@ else
-     echo "DAQ version doesn't support packet trace."
- fi
- 
--AC_MSG_CHECKING([for daq verdict reason])
--AC_RUN_IFELSE(
--[AC_LANG_PROGRAM(
--[[
--#include 
--]],
--[[
--   DAQ_ModFlow_t fl;
--   fl.type = DAQ_MODFLOW_TYPE_VER_REASON;
--]])],
--[have_daq_verdict_reason="yes"],
--[have_daq_verdict_reason="no"])
-+have_daq_verdict_reason="no"
- AC_MSG_RESULT($have_daq_verdict_reason)
- if test "x$have_daq_verdict_reason" = "xyes"; then
-     AC_DEFINE([HAVE_DAQ_VERDICT_REASON],[1],
diff --git a/net/snort/patches/002-fix_include.patch b/net/snort/patches/002-fix_include.patch
deleted file mode 100644
index c3177c5bb..000000000
--- a/net/snort/patches/002-fix_include.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/configure.in
-+++ b/configure.in
-@@ -67,6 +67,11 @@ case "$host" in
-     AC_DEFINE([SUNOS],[1],[Define if SunOS])
-     sunos4="yes"
-     ;;
-+  *-openwrt*)
-+    linux="yes"
-+    AC_DEFINE([LINUX],[1],[Define if Linux])
-+    AC_SUBST(extra_incl)
-+    ;;
-   *-linux*)
-     linux="yes"
-     AC_DEFINE([LINUX],[1],[Define if Linux])
diff --git a/net/snort/patches/003-include-tirpc.patch b/net/snort/patches/003-include-tirpc.patch
deleted file mode 100644
index 16f0c1d0b..000000000
--- a/net/snort/patches/003-include-tirpc.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/src/dynamic-preprocessors/appid/service_plugins/service_rpc.c
-+++ b/src/dynamic-preprocessors/appid/service_plugins/service_rpc.c
-@@ -32,6 +32,7 @@
- #include "flow.h"
- #include "service_api.h"
- 
-+#include 
- #if defined(FREEBSD) || defined(OPENBSD)
- #include "rpc/rpc.h"
- #endif
diff --git a/net/snort/patches/900-Convert-project-to-PCRE2.patch b/net/snort/patches/900-Convert-project-to-PCRE2.patch
deleted file mode 100644
index 4e01347af..000000000
--- a/net/snort/patches/900-Convert-project-to-PCRE2.patch
+++ /dev/null
@@ -1,2114 +0,0 @@
-From 514af7b25f1f49d87963baf4fd057d9c85f518a7 Mon Sep 17 00:00:00 2001
-From: Christian Marangi 
-Date: Sat, 4 Nov 2023 01:30:37 +0100
-Subject: [PATCH] Convert project to PCRE2
-
-Convert project to PCRE2. Convert every example to PCRE2.
-
-Due to API changes examples needs to be updated accordingly with the new
-struct and API.
-
-The API name were voluntary changes to make sure the user of plugins is
-aware of the change and manually refresh the plugin with new code.
-
-Most of the time it's just PcreMatch to Pcre2Match and PCREInfo to
-PCRE2Info and the relative options (that are 1:1 compared to PCRE
-library).
-
-For complex case where ovector extraction is needed, refer to example
-36733 where new way with match data is used. Follow comments there for
-additional info.
-
-Signed-off-by: Christian Marangi 
----
- config.h.in                                   |   8 +-
- configure.in                                  |  67 ++++----
- src/detection-plugins/sp_pcre.c               | 149 +++++++++---------
- src/detection-plugins/sp_pcre.h               |   9 +-
- src/dynamic-plugins/sf_convert_dynamic.c      |  59 ++++---
- src/dynamic-plugins/sf_dynamic_engine.h       |  32 ++--
- src/dynamic-plugins/sf_dynamic_plugins.c      | 109 +++++++------
- src/dynamic-plugins/sf_engine/examples/3036.c |   8 +-
- src/dynamic-plugins/sf_engine/examples/3052.c |   8 +-
- src/dynamic-plugins/sf_engine/examples/3099.c |   8 +-
- .../sf_engine/examples/36733.c                |  40 +++--
- src/dynamic-plugins/sf_engine/examples/3682.c |  11 +-
- .../sf_engine/examples/bug31842.c             |   9 +-
- .../sf_engine/examples/bug35218.c             |  15 +-
- .../sf_engine/examples/sid1902.c              |   9 +-
- .../sf_engine/examples/sid2389.c              |   9 +-
- .../sf_engine/examples/sid9999.c              |   2 +-
- .../sf_engine/examples/web-client_test.c      |  18 +--
- .../sf_engine/sf_snort_detection_engine.c     |  20 +--
- .../sf_engine/sf_snort_detection_engine.h     |   2 +-
- .../sf_engine/sf_snort_plugin_api.c           |  10 +-
- .../sf_engine/sf_snort_plugin_api.h           |  39 +++--
- .../sf_engine/sf_snort_plugin_pcre.c          | 132 ++++++++++------
- .../appid/luaDetectorApi.c                    |  63 +++++---
- src/dynamic-preprocessors/imap/snort_imap.h   |   6 +-
- src/dynamic-preprocessors/pop/snort_pop.h     |   3 +-
- src/dynamic-preprocessors/smtp/snort_smtp.h   |   3 +-
- src/snort.c                                   |   3 -
- src/snort.h                                   |   1 -
- src/util.c                                    |   9 +-
- 30 files changed, 497 insertions(+), 364 deletions(-)
- mode change 100755 => 100644 src/dynamic-plugins/sf_engine/sf_snort_plugin_api.h
- mode change 100755 => 100644 src/dynamic-plugins/sf_engine/sf_snort_plugin_pcre.c
-
---- a/config.h.in
-+++ b/config.h.in
-@@ -133,8 +133,8 @@
- /* Define to 1 if you have the `pcap' library (-lpcap). */
- #undef HAVE_LIBPCAP
- 
--/* Define to 1 if you have the `pcre' library (-lpcre). */
--#undef HAVE_LIBPCRE
-+/* Define to 1 if you have the `pcre2' library (-lpcre2-8). */
-+#undef HAVE_LIBPCRE2
- 
- /* Define to 1 if you have the `pfring' library (-lpfring). */
- #undef HAVE_LIBPFRING
-@@ -190,8 +190,8 @@
- /* Can output the library version. */
- #undef HAVE_PCAP_LIB_VERSION
- 
--/* Define to 1 if you have the  header file. */
--#undef HAVE_PCRE_H
-+/* Define to 1 if you have the  header file. */
-+#undef HAVE_PCRE2_H
- 
- /* Define to 1 if you have the  header file. */
- #undef HAVE_PFRING_H
---- a/configure.in
-+++ b/configure.in
-@@ -455,65 +455,70 @@ AC_DEFUN([FAIL_MESSAGE],[
-    exit 1
- ])
- 
--AC_ARG_WITH(libpcre_includes,
--       [  --with-libpcre-includes=DIR    libpcre include directory],
--       [with_libpcre_includes="$withval"],[with_libpcre_includes="no"])
--
--AC_ARG_WITH(libpcre_libraries,
--       [  --with-libpcre-libraries=DIR   libpcre library directory],
--       [with_libpcre_libraries="$withval"],[with_libpcre_libraries="no"])
--
--if test "x$with_libpcre_includes" != "xno"; then
--    CPPFLAGS="${CPPFLAGS} -I${with_libpcre_includes}"
--    ICONFIGFLAGS="${ICONFIGFLAGS} -I${with_libpcre_includes}"
-+AC_ARG_WITH(libpcre2_includes,
-+       [  --with-libpcre2-includes=DIR    libpcre2 include directory],
-+       [with_libpcre2_includes="$withval"],[with_libpcre2_includes="no"])
-+
-+AC_ARG_WITH(libpcre2_libraries,
-+       [  --with-libpcre2-libraries=DIR   libpcre2 library directory],
-+       [with_libpcre2_libraries="$withval"],[with_libpcre2_libraries="no"])
-+
-+if test "x$with_libpcre2_includes" != "xno"; then
-+    CPPFLAGS="${CPPFLAGS} -I${with_libpcre2_includes}"
-+    ICONFIGFLAGS="${ICONFIGFLAGS} -I${with_libpcre2_includes}"
- else
--    CPPFLAGS="${CPPFLAGS} `pcre-config --cflags`"
-+    CPPFLAGS="${CPPFLAGS} `pcre2-config --cflags`"
- fi
- 
--if test "x$with_libpcre_libraries" != "xno"; then
--    LDFLAGS="${LDFLAGS}  -L${with_libpcre_libraries}"
-+if test "x$with_libpcre2_libraries" != "xno"; then
-+    LDFLAGS="${LDFLAGS}  -L${with_libpcre2_libraries}"
- else
--    LDFLAGS="${LDFLAGS} `pcre-config --libs`"
-+    LDFLAGS="${LDFLAGS} `pcre2-config --libs8`"
- fi
- 
--# PCRE configuration (required)
-+# PCRE2 configuration (required)
- # Verify that we have the headers
--PCRE_H=""
--AC_CHECK_HEADERS(pcre.h,, PCRE_H="no")
--if test "x$PCRE_H" = "xno"; then
-+PCRE2_H=""
-+AC_CHECK_HEADERS(pcre2.h,, PCRE2_H="no",[#define PCRE2_CODE_UNIT_WIDTH 8])
-+if test "x$PCRE2_H" = "xno"; then
-   echo
--  echo "   ERROR!  Libpcre header not found."
-+  echo "   ERROR!  Libpcre2 header not found."
-   echo "   Get it from http://www.pcre.org"
-   exit 1
- fi
- 
- # Verify that we have the library
--PCRE_L=""
--pcre_version_six=""
--AC_CHECK_LIB(pcre, pcre_compile, ,PCRE_L="no")
-+PCRE2_L=""
-+pcre2_version_six=""
-+AC_CHECK_LIB(pcre2-8, pcre2_compile_8, ,PCRE2_L="no")
- if test "x$PCRE_L" = "xno"; then
-     echo
--    echo "   ERROR!  Libpcre library not found."
-+    echo "   ERROR!  Libpcre2 library not found."
-     echo "   Get it from http://www.pcre.org"
-     echo
-     exit 1
- else
--    AC_MSG_CHECKING(for libpcre version 6.0 or greater)
--    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[
--       #if (PCRE_MAJOR < 6)
-+    AC_MSG_CHECKING(for libpcre2 version 10.0 or greater)
-+    AC_LINK_IFELSE([AC_LANG_PROGRAM([[
-+       #define PCRE2_CODE_UNIT_WIDTH 8
-+       #include 
-+       ]], [[
-+       #if (PCRE2_MAJOR < 10)
-        #error "Version failure"
-        #else
--       int a, b = 0, c = 0, d = 0;
--       pcre *tmp = NULL;
--       a = pcre_copy_named_substring(tmp, "", &b, c, "", "", d);
-+       int a;
-+       PCRE2_UCHAR b = { 0 };
-+       PCRE2_SIZE c;
-+       pcre2_match_data *match_data = NULL;
-+       a = pcre2_substring_copy_byname(match_data, (PCRE2_SPTR )"", &b, &c);
-        #endif
--      ]])],[pcre_version_six="yes"],[pcre_version_six="no"])
-+      ]])],[pcre2_version_ten="yes"],[pcre2_version_ten="no"])
- fi
- 
--if test "x$pcre_version_six" != "xyes"; then
-+if test "x$pcre2_version_ten" != "xyes"; then
-     AC_MSG_RESULT(no)
-     echo
--    echo "    ERROR!  Libpcre library version >= 6.0 not found."
-+    echo "    ERROR!  Libpcre2 library version >= 10.0 not found."
-     echo "    Get it from http://www.pcre.org"
-     echo
-     exit 1
---- a/src/detection-plugins/sp_pcre.c
-+++ b/src/detection-plugins/sp_pcre.c
-@@ -46,7 +46,8 @@
- 
- #include "sp_pcre.h"
- 
--#include 
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- 
- #include "snort.h"
- #include "profiler.h"
-@@ -60,7 +61,7 @@ extern PreprocStats ruleOTNEvalPerfStats
- #include "detection_util.h"
- 
- /*
-- * we need to specify the vector length for our pcre_exec call.  we only care
-+ * we need to specify the vector length for our pcre2_match call.  we only care
-  * about the first vector, which if the match is successful will include the
-  * offset to the end of the full pattern match.  If we decide to store other
-  * matches, make *SURE* that this is a multiple of 3 as pcre requires it.
-@@ -77,8 +78,8 @@ void PcreFree(void *d)
-     PcreData *data = (PcreData *)d;
- 
-     free(data->expression);
--    free(data->re);
--    free(data->pe);
-+    pcre2_match_context_free(data->match_context);
-+    pcre2_code_free(data->re);
-     free(data);
- }
- 
-@@ -161,7 +162,6 @@ void PcreDuplicatePcreData(void *src, Pc
-     pcre_dup->expression = pcre_src->expression;
-     pcre_dup->options = pcre_src->options;
-     pcre_dup->search_offset = 0;
--    pcre_dup->pe = pcre_src->pe;
-     pcre_dup->re = pcre_src->re;
- }
- 
-@@ -197,7 +197,7 @@ static void Ovector_Init(struct _SnortCo
-      * configuraton, we won't pcre capture count again, so save the max.  */
-     static int s_ovector_max = 0;
- 
--    /* The pcre_fullinfo() function can be used to find out how many
-+    /* The pcre2_pattern_info() function can be used to find out how many
-      * capturing subpatterns there are in a compiled pattern. The
-      * smallest size for ovector that will allow for n captured
-      * substrings, in addition to the offsets of the substring matched
-@@ -207,8 +207,6 @@ static void Ovector_Init(struct _SnortCo
- 
-     if (sc->pcre_ovector_size > s_ovector_max)
-         s_ovector_max = sc->pcre_ovector_size;
--
--    sc->pcre_ovector = (int *) SnortAlloc(s_ovector_max*sizeof(int));
- }
- 
- #if SNORT_RELOAD
-@@ -218,12 +216,12 @@ static void Ovector_Reload(struct _Snort
- }
- #endif
- 
--void PcreCapture(struct _SnortConfig *sc, const void *code, const void *extra)
-+void Pcre2Capture(struct _SnortConfig *sc, const void *code)
- {
-     int tmp_ovector_size = 0;
- 
--    pcre_fullinfo((const pcre *)code, (const pcre_extra *)extra,
--        PCRE_INFO_CAPTURECOUNT, &tmp_ovector_size);
-+    pcre2_pattern_info((const pcre2_code *)code,
-+        PCRE2_INFO_CAPTURECOUNT, &tmp_ovector_size);
- 
-     if (tmp_ovector_size > sc->pcre_ovector_size)
-         sc->pcre_ovector_size = tmp_ovector_size;
-@@ -268,10 +266,10 @@ void SnortPcreInit(struct _SnortConfig *
- 
-         if (pcre_data->expression)
-             free(pcre_data->expression);
--        if (pcre_data->pe)
--            free(pcre_data->pe);
-+        if (pcre_data->match_context)
-+            pcre2_match_context_free(pcre_data->match_context);
-         if (pcre_data->re)
--            free(pcre_data->re);
-+            pcre2_code_free(pcre_data->re);
- 
-         free(pcre_data);
-         pcre_data = pcre_dup;
-@@ -305,11 +303,12 @@ static inline void ValidatePcreHttpConte
- 
- void SnortPcreParse(struct _SnortConfig *sc, char *data, PcreData *pcre_data, OptTreeNode *otn)
- {
--    const char *error;
-+    PCRE2_UCHAR error[128];
-     char *re, *free_me;
-     char *opts;
-     char delimit = '/';
--    int erroffset;
-+    int errorcode;
-+    PCRE2_SIZE erroffset;
-     int compile_flags = 0;
-     unsigned http = 0;
- 
-@@ -381,17 +380,17 @@ void SnortPcreParse(struct _SnortConfig
-     /* process any /regex/ismxR options */
-     while(*opts != '\0') {
-         switch(*opts) {
--        case 'i':  compile_flags |= PCRE_CASELESS;            break;
--        case 's':  compile_flags |= PCRE_DOTALL;              break;
--        case 'm':  compile_flags |= PCRE_MULTILINE;           break;
--        case 'x':  compile_flags |= PCRE_EXTENDED;            break;
-+        case 'i':  compile_flags |= PCRE2_CASELESS;            break;
-+        case 's':  compile_flags |= PCRE2_DOTALL;              break;
-+        case 'm':  compile_flags |= PCRE2_MULTILINE;           break;
-+        case 'x':  compile_flags |= PCRE2_EXTENDED;            break;
- 
-             /*
-              * these are pcre specific... don't work with perl
-              */
--        case 'A':  compile_flags |= PCRE_ANCHORED;            break;
--        case 'E':  compile_flags |= PCRE_DOLLAR_ENDONLY;      break;
--        case 'G':  compile_flags |= PCRE_UNGREEDY;            break;
-+        case 'A':  compile_flags |= PCRE2_ANCHORED;            break;
-+        case 'E':  compile_flags |= PCRE2_DOLLAR_ENDONLY;      break;
-+        case 'G':  compile_flags |= PCRE2_UNGREEDY;            break;
- 
-             /*
-              * these are snort specific don't work with pcre or perl
-@@ -424,45 +423,37 @@ void SnortPcreParse(struct _SnortConfig
- 
-     /* now compile the re */
-     DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH, "pcre: compiling %s\n", re););
--    pcre_data->re = pcre_compile(re, compile_flags, &error, &erroffset, NULL);
-+    pcre_data->re = pcre2_compile((PCRE2_SPTR)re, PCRE2_ZERO_TERMINATED, compile_flags, &errorcode, &erroffset, NULL);
- 
-     if(pcre_data->re == NULL)
-     {
-+        pcre2_get_error_message(errorcode, error, 128);
-         FatalError("%s(%d) : pcre compile of \"%s\" failed at offset "
--                   "%d : %s\n", file_name, file_line, re, erroffset, error);
-+                   "%zu : %s\n", file_name, file_line, re, erroffset, error);
-     }
- 
-+    /* now create match context */
-+    pcre_data->match_context = pcre2_match_context_create(NULL);
-+    if(pcre_data->match_context == NULL)
-+    {
-+        FatalError("%s(%d) : failed to allocate memory for match context\n",
-+                   file_name, file_line);
-+    }
- 
-     /* now study it... */
--    pcre_data->pe = pcre_study(pcre_data->re, 0, &error);
-+    errorcode = pcre2_jit_compile(pcre_data->re, PCRE2_JIT_COMPLETE);
- 
--    if (pcre_data->pe)
-+    if (!errorcode)
-     {
-         if ((ScPcreMatchLimitNewConf(sc) != -1) && !(pcre_data->options & SNORT_OVERRIDE_MATCH_LIMIT))
-         {
--            if (pcre_data->pe->flags & PCRE_EXTRA_MATCH_LIMIT)
--            {
--                pcre_data->pe->match_limit = ScPcreMatchLimitNewConf(sc);
--            }
--            else
--            {
--                pcre_data->pe->flags |= PCRE_EXTRA_MATCH_LIMIT;
--                pcre_data->pe->match_limit = ScPcreMatchLimitNewConf(sc);
--            }
-+            pcre2_set_match_limit(pcre_data->match_context, ScPcreMatchLimitNewConf(sc));
-         }
- 
- #ifdef PCRE_EXTRA_MATCH_LIMIT_RECURSION
-         if ((ScPcreMatchLimitRecursionNewConf(sc) != -1) && !(pcre_data->options & SNORT_OVERRIDE_MATCH_LIMIT))
-         {
--            if (pcre_data->pe->flags & PCRE_EXTRA_MATCH_LIMIT_RECURSION)
--            {
--                pcre_data->pe->match_limit_recursion = ScPcreMatchLimitRecursionNewConf(sc);
--            }
--            else
--            {
--                pcre_data->pe->flags |= PCRE_EXTRA_MATCH_LIMIT_RECURSION;
--                pcre_data->pe->match_limit_recursion = ScPcreMatchLimitRecursionNewConf(sc);
--            }
-+            pcre2_set_depth_limit(pcre_data->match_context, ScPcreMatchLimitRecursionNewConf(sc));
-         }
- #endif
-     }
-@@ -471,30 +462,28 @@ void SnortPcreParse(struct _SnortConfig
-         if (!(pcre_data->options & SNORT_OVERRIDE_MATCH_LIMIT) &&
-              ((ScPcreMatchLimitNewConf(sc) != -1) || (ScPcreMatchLimitRecursionNewConf(sc) != -1)))
-         {
--            pcre_data->pe = (pcre_extra *)SnortAlloc(sizeof(pcre_extra));
-             if (ScPcreMatchLimitNewConf(sc) != -1)
-             {
--                pcre_data->pe->flags |= PCRE_EXTRA_MATCH_LIMIT;
--                pcre_data->pe->match_limit = ScPcreMatchLimitNewConf(sc);
-+                pcre2_set_match_limit(pcre_data->match_context, ScPcreMatchLimitNewConf(sc));
-             }
- 
- #ifdef PCRE_EXTRA_MATCH_LIMIT_RECURSION
-             if (ScPcreMatchLimitRecursionNewConf(sc) != -1)
-             {
--                pcre_data->pe->flags |= PCRE_EXTRA_MATCH_LIMIT_RECURSION;
--                pcre_data->pe->match_limit_recursion = ScPcreMatchLimitRecursionNewConf(sc);
-+                pcre2_set_depth_limit(pcre_data->match_context, ScPcreMatchLimitRecursionNewConf(sc));
-             }
- #endif
-         }
-     }
- 
--    if(error != NULL)
-+    if(errorcode)
-     {
-+        pcre2_get_error_message(errorcode, error, 128);
-         FatalError("%s(%d) : pcre study failed : %s\n", file_name,
-                    file_line, error);
-     }
- 
--    PcreCapture(sc, pcre_data->re, pcre_data->pe);
-+    Pcre2Capture(sc, pcre_data->re);
- 
-     PcreCheckAnchored(pcre_data);
- 
-@@ -515,13 +504,13 @@ void PcreCheckAnchored(PcreData *pcre_da
-     int rc;
-     unsigned long int options = 0;
- 
--    if ((pcre_data == NULL) || (pcre_data->re == NULL) || (pcre_data->pe == NULL))
-+    if ((pcre_data == NULL) || (pcre_data->re == NULL) || (pcre_data->match_context == NULL))
-         return;
- 
--    rc = pcre_fullinfo(pcre_data->re, pcre_data->pe, PCRE_INFO_OPTIONS, (void *)&options);
-+    rc = pcre2_pattern_info(pcre_data->re, PCRE2_INFO_ARGOPTIONS, (void *)&options);
-     switch (rc)
-     {
--        /* pcre_fullinfo fails for the following:
-+        /* pcre2_pattern_info fails for the following:
-          * PCRE_ERROR_NULL - the argument code was NULL
-          *                   the argument where was NULL
-          * PCRE_ERROR_BADMAGIC - the "magic number" was not found
-@@ -533,24 +522,24 @@ void PcreCheckAnchored(PcreData *pcre_da
-             /* This is the success code */
-             break;
- 
--        case PCRE_ERROR_NULL:
--            FatalError("%s(%d) pcre_fullinfo: code and/or where were NULL.\n",
-+        case PCRE2_ERROR_NULL:
-+            FatalError("%s(%d) pcre2_pattern_info: code and/or where were NULL.\n",
-                        __FILE__, __LINE__);
- 
--        case PCRE_ERROR_BADMAGIC:
--            FatalError("%s(%d) pcre_fullinfo: compiled code didn't have "
-+        case PCRE2_ERROR_BADMAGIC:
-+            FatalError("%s(%d) pcre2_pattern_info: compiled code didn't have "
-                        "correct magic.\n", __FILE__, __LINE__);
- 
--        case PCRE_ERROR_BADOPTION:
--            FatalError("%s(%d) pcre_fullinfo: option type is invalid.\n",
-+        case PCRE2_ERROR_BADOPTION:
-+            FatalError("%s(%d) pcre2_pattern_info: option type is invalid.\n",
-                        __FILE__, __LINE__);
- 
-         default:
--            FatalError("%s(%d) pcre_fullinfo: Unknown error code.\n",
-+            FatalError("%s(%d) pcre2_pattern_info: Unknown error code.\n",
-                        __FILE__, __LINE__);
-     }
- 
--    if ((options & PCRE_ANCHORED) && !(options & PCRE_MULTILINE))
-+    if ((options & PCRE2_ANCHORED) && !(options & PCRE2_MULTILINE))
-     {
-         /* This means that this pcre rule option shouldn't be reevaluted
-          * even if any of it's relative children should fail to match.
-@@ -579,6 +568,8 @@ static int pcre_search(const PcreData *p
-                        int start_offset,
-                        int *found_offset)
- {
-+    pcre2_match_data *match_data;
-+    PCRE2_SIZE *ovector;
-     int matched;
-     int result;
- 
-@@ -596,14 +587,19 @@ static int pcre_search(const PcreData *p
- 
-     *found_offset = -1;
- 
--    result = pcre_exec(pcre_data->re,  /* result of pcre_compile() */
--                       pcre_data->pe,  /* result of pcre_study()   */
--                       buf,            /* the subject string */
--                       len,            /* the length of the subject string */
--                       start_offset,   /* start at offset 0 in the subject */
--                       0,              /* options(handled at compile time */
--                       snort_conf->pcre_ovector,      /* vector for substring information */
--                       snort_conf->pcre_ovector_size);/* number of elements in the vector */
-+    match_data = pcre2_match_data_create(snort_conf->pcre_ovector_size, NULL);
-+    if (!match_data) {
-+        DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH, "pcre2_match_data_create failed to alloc mem!\n"););
-+        return 0;
-+    }
-+
-+    result = pcre2_match(pcre_data->re,            /* result of pcre2_compile() */
-+                       (PCRE2_SPTR)buf,            /* the subject string */
-+                       (PCRE2_SIZE)len,            /* the length of the subject string */
-+                       (PCRE2_SIZE)start_offset,   /* start at offset 0 in the subject */
-+                       0,                          /* options(handled at compile time */
-+                       match_data,                 /* match data for results */
-+                       pcre_data->match_context);  /* match context for JIT limits */
- 
-     if(result >= 0)
-     {
-@@ -615,23 +611,25 @@ static int pcre_search(const PcreData *p
-          * second is set to the offset of the first character after the end of a substring. The first pair,
-          * ovector[0] and ovector[1], identify the portion of the subject string matched by the entire pattern.
-          * The next pair is used for the first capturing subpattern, and so on. The value returned by
--         * pcre_exec() is the number of pairs that have been set. If there are no capturing subpatterns, the
-+         * pcre_match() is the number of pairs that have been set. If there are no capturing subpatterns, the
-          * return value from a successful match is 1, indicating that just the first pair of offsets has been set.
-          *
-          * In Snort's case, the ovector size only allows for the first pair and a single int for scratch space.
-          */
--        *found_offset = snort_conf->pcre_ovector[1];
-+        ovector = pcre2_get_ovector_pointer(match_data);
-+        *found_offset = ovector[1];
-         DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH,
-                                 "Setting Doe_ptr and found_offset: %p %d\n",
-                                 doe_ptr, found_offset););
-     }
--    else if(result == PCRE_ERROR_NOMATCH)
-+    else if(result == PCRE2_ERROR_NOMATCH)
-     {
-         matched = 0;
-     }
-     else
-     {
--        DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH, "pcre_exec error : %d \n", result););
-+        pcre2_match_data_free(match_data);
-+        DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH, "pcre2_match error : %d \n", result););
-         return 0;
-     }
- 
-@@ -641,6 +639,7 @@ static int pcre_search(const PcreData *p
-         matched = !matched;
-     }
- 
-+    pcre2_match_data_free(match_data);
-     return matched;
- }
- 
---- a/src/detection-plugins/sp_pcre.h
-+++ b/src/detection-plugins/sp_pcre.h
-@@ -49,17 +49,18 @@
- 
- void SetupPcre(void);
- 
--#include 
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- typedef struct _PcreData
- {
--    pcre *re;           /* compiled regex */
--    pcre_extra *pe;     /* studied regex foo */
-+    pcre2_code *re;           /* compiled regex */
-+    pcre2_match_context *match_context; /* regex match context */
-     int options;        /* sp_pcre specfic options (relative & inverse) */
-     char *expression;
-     uint32_t search_offset;
- } PcreData;
- 
--void PcreCapture(struct _SnortConfig *sc, const void *code, const void *extra);
-+void Pcre2Capture(struct _SnortConfig *sc, const void *code);
- void PcreFree(void *d);
- uint32_t PcreHash(void *d);
- int PcreCompare(void *l, void *r);
---- a/src/dynamic-plugins/sf_convert_dynamic.c
-+++ b/src/dynamic-plugins/sf_convert_dynamic.c
-@@ -52,9 +52,11 @@
- 
- extern void ParsePattern(char *, OptTreeNode *, int);
- extern void ParseProtectedPattern(char *, OptTreeNode *, int);
--extern void *pcreCompile(const char *pattern, int options, const char **errptr,
--    int *erroffset, const unsigned char *tableptr);
--extern void *pcreStudy(struct _SnortConfig *sc, const void *code, int options, const char **errptr);
-+extern void *pcre2MatchContextCreate(const void *gcontext);
-+extern void *pcre2Compile(const char *pattern, int options, int *errorcode, size_t *erroffset, void *matchcontext);
-+extern int pcre2JITCompile(struct _SnortConfig *sc, const void *code, const void *matchcontext, int options);
-+extern void pcre2MatchContextFree(const void *match_context);
-+extern void pcre2CodeFree(const void *code);
- 
- extern int SnortPcre(void *option_data, Packet *p);
- extern int FlowBitsCheck(void *option_data, Packet *p);
-@@ -517,20 +519,20 @@ static int ConvertProtectedContentOption
- static int ConvertPcreOption(SnortConfig *sc, Rule *rule, int index, OptTreeNode *otn)
- {
-     PcreData *pcre_data = (PcreData *) SnortAlloc(sizeof(PcreData));
--    PCREInfo *pcre_info = rule->options[index]->option_u.pcre;
-+    PCRE2Info *pcre2_info = rule->options[index]->option_u.pcre2;
-     OptFpList *fpl;
-     void *pcre_dup;
--    const char *error;
--    int erroroffset;
-+    int errorcode;
-+    size_t erroroffset;
- 
-     /* Need to recompile the expression so double free doesn't occur
-      * during reload */
- 
-     /* Compile & Study PCRE */
--    pcre_data->re = pcreCompile(
--        pcre_info->expr,
--        pcre_info->compile_flags,
--        &error,
-+    pcre_data->re = pcre2Compile(
-+        pcre2_info->expr,
-+        pcre2_info->compile_flags,
-+        &errorcode,
-         &erroroffset,
-         NULL
-         );
-@@ -541,37 +543,46 @@ static int ConvertPcreOption(SnortConfig
-         return -1;
-     }
- 
--    pcre_data->pe = pcreStudy(sc,
-+    pcre_data->match_context = pcre2MatchContextCreate(NULL);
-+    if (pcre_data->match_context == NULL) {
-+        pcre2CodeFree(pcre_data->re);
-+        free(pcre_data);
-+        return -1;
-+    }
-+
-+    errorcode = pcre2JITCompile(
-+        sc,
-         pcre_data->re,
--        pcre_info->compile_flags,
--        &error
-+        pcre_data->match_context,
-+        pcre2_info->compile_flags
-         );
- 
--    if (error)
-+    if (errorcode)
-     {
--        free(pcre_data->re);
-+        pcre2MatchContextFree(pcre_data->match_context);
-+        pcre2CodeFree(pcre_data->re);
-         free(pcre_data);
-         return -1;
-     }
- 
-     /* Copy to struct used for normal PCRE rules */
--    pcre_data->expression = SnortStrdup(pcre_info->expr);
-+    pcre_data->expression = SnortStrdup(pcre2_info->expr);
- 
-     /* Option values differ between PCREInfo and PcreData,
-      * so a straight copy of the options variable won't work. */
--    if (pcre_info->flags & CONTENT_RELATIVE)
-+    if (pcre2_info->flags & CONTENT_RELATIVE)
-         pcre_data->options |= SNORT_PCRE_RELATIVE;
- 
--    if (pcre_info->flags & NOT_FLAG)
-+    if (pcre2_info->flags & NOT_FLAG)
-         pcre_data->options |= SNORT_PCRE_INVERT;
- 
--    if (pcre_info->flags & CONTENT_BUF_RAW)
-+    if (pcre2_info->flags & CONTENT_BUF_RAW)
-         pcre_data->options |= SNORT_PCRE_RAWBYTES;
- 
--    if (pcre_info->flags & CONTENT_BUF_NORMALIZED)
-+    if (pcre2_info->flags & CONTENT_BUF_NORMALIZED)
-         pcre_data->options &= ~SNORT_PCRE_RAWBYTES;
- 
--    pcre_data->options |= HTTP_CONTENT(pcre_info->flags);
-+    pcre_data->options |= HTTP_CONTENT(pcre2_info->flags);
- 
-     PcreCheckAnchored(pcre_data);
- 
-@@ -584,10 +595,10 @@ static int ConvertPcreOption(SnortConfig
-     {
-         if (pcre_data->expression)
-             free(pcre_data->expression);
--        if (pcre_data->pe)
--            free(pcre_data->pe);
-+        if (pcre_data->match_context)
-+            pcre2MatchContextFree(pcre_data->match_context);
-         if (pcre_data->re)
--            free(pcre_data->re);
-+            pcre2CodeFree(pcre_data->re);
- 
-         free(pcre_data);
-         pcre_data = pcre_dup;
---- a/src/dynamic-plugins/sf_dynamic_engine.h
-+++ b/src/dynamic-plugins/sf_dynamic_engine.h
-@@ -139,11 +139,18 @@ typedef int (*DynamicDecompressFunc)(voi
- 
- #define ENGINE_DATA_VERSION 10
- 
--typedef void *(*PCRECompileFunc)(const char *, int, const char **, int *, const unsigned char *);
--typedef void *(*PCREStudyFunc)(struct _SnortConfig *, const void *, int, const char **);
--typedef int (*PCREExecFunc)(const void *, const void *, const char *, int, int, int, int *, int);
--typedef void (*PCRECapture)(struct _SnortConfig *, const void *, const void *);
--typedef void(*PCREOvectorInfo)(int **, int *);
-+typedef void *(*PCRE2CompileFunc)(const char *, int, int *, size_t *, void *);
-+typedef void *(*PCRE2MatchContextCreate)(const void *);
-+typedef int (*PCRE2JITCompileFunc)(struct _SnortConfig *, const void *, const void *, int);
-+typedef int (*PCRE2OvectorSizeFunc)(void);
-+typedef void *(*PCRE2MatchDataCreateFunc)(int, const void *);
-+typedef unsigned int (*PCRE2GetOvectorCountFunc)(const void *);
-+typedef void *(*PCRE2GetOvectorPointerFunc)(const void *);
-+typedef int (*PCRE2MatchRealFunc)(const void *, const char *, int, int, int, const void *, const void *);
-+typedef void (*PCRE2MatchDataFreeFunc)(const void *);
-+typedef void (*PCRE2MatchContextFreeFunc)(const void *);
-+typedef void (*PCRE2CodeFreeFunc)(const void *);
-+typedef void (*PCRE2Capture)(struct _SnortConfig *, const void *);
- 
- typedef struct _DynamicEngineData
- {
-@@ -175,9 +182,15 @@ typedef struct _DynamicEngineData
-     char **debugMsgFile;
-     int *debugMsgLine;
- 
--    PCRECompileFunc pcreCompile;
--    PCREStudyFunc pcreStudy;
--    PCREExecFunc pcreExec;
-+    PCRE2CompileFunc pcre2Compile;
-+    PCRE2MatchContextCreate pcre2MatchContextCreate;
-+    PCRE2JITCompileFunc pcre2JITCompile;
-+    PCRE2OvectorSizeFunc pcre2OvectorSize;
-+    PCRE2MatchDataCreateFunc pcre2MatchDataCreate;
-+    PCRE2GetOvectorCountFunc pcre2GetOvectorCount;
-+    PCRE2GetOvectorPointerFunc pcre2GetOvectorPointer;
-+    PCRE2MatchRealFunc pcre2MatchReal;
-+    PCRE2MatchDataFreeFunc pcre2MatchDataFree;
-     SfUnfold sfUnfold;
-     SfBase64Decode sfbase64decode;
-     GetAltDetectFunc GetAltDetect;
-@@ -190,8 +203,7 @@ typedef struct _DynamicEngineData
- 
-     UnregisterBit flowbitUnregister;
- 
--    PCRECapture pcreCapture;
--    PCREOvectorInfo pcreOvectorInfo;
-+    PCRE2Capture pcre2Capture;
- 
-     GetHttpBufferFunc getHttpBuffer;
-     DynamicDecompressInitFunc decompressInit;
---- a/src/dynamic-plugins/sf_dynamic_plugins.c
-+++ b/src/dynamic-plugins/sf_dynamic_plugins.c
-@@ -92,7 +92,8 @@ typedef HANDLE PluginHandle;
- #include "sf_iph.h"
- #include "fpdetect.h"
- #include "sfportobject.h"
--#include 
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- #include "parser.h"
- #include "event_wrapper.h"
- #include "util.h"
-@@ -1250,46 +1251,35 @@ void DynamicGetRuleData(void *p, const R
-     }
- }
- 
--void *pcreCompile(const char *pattern, int options, const char **errptr, int *erroffset, const unsigned char *tableptr)
-+void *pcre2Compile(const char *pattern, int options, int *errorcode, size_t *erroffset, void *compilecontect)
- {
-     options &= ~SNORT_PCRE_OVERRIDE_MATCH_LIMIT;
--    return (void *)pcre_compile(pattern, options, errptr, erroffset, tableptr);
-+    return (void *)pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, options, errorcode, (PCRE2_SIZE *)erroffset, (pcre2_compile_context *)compilecontect);
- }
- 
--void *pcreStudy(struct _SnortConfig *sc, const void *code, int options, const char **errptr)
-+void *pcre2MatchContextCreate(const void *generalcontext)
-+{
-+    return (void *)pcre2_match_context_create((pcre2_general_context  *)generalcontext);
-+}
-+
-+int pcre2JITCompile(struct _SnortConfig *sc, const void *code, const void *matchcontext, int options)
- {
--    pcre_extra *extra_extra;
-     int snort_options = options & SNORT_PCRE_OVERRIDE_MATCH_LIMIT;
-+    int errorcode;
- 
--    extra_extra = pcre_study((const pcre*)code, 0, errptr);
-+    errorcode = pcre2_jit_compile((pcre2_code*)code, PCRE2_JIT_COMPLETE);
- 
--    if (extra_extra)
-+    if (errorcode)
-     {
-         if ((ScPcreMatchLimitNewConf(sc) != -1) && !(snort_options & SNORT_PCRE_OVERRIDE_MATCH_LIMIT))
-         {
--            if (extra_extra->flags & PCRE_EXTRA_MATCH_LIMIT)
--            {
--                extra_extra->match_limit = ScPcreMatchLimitNewConf(sc);
--            }
--            else
--            {
--                extra_extra->flags |= PCRE_EXTRA_MATCH_LIMIT;
--                extra_extra->match_limit = ScPcreMatchLimitNewConf(sc);
--            }
-+            pcre2_set_match_limit((pcre2_match_context*)matchcontext, ScPcreMatchLimitNewConf(sc));
-         }
- 
- #ifdef PCRE_EXTRA_MATCH_LIMIT_RECURSION
-         if ((ScPcreMatchLimitRecursionNewConf(sc) != -1) && !(snort_options & SNORT_PCRE_OVERRIDE_MATCH_LIMIT))
-         {
--            if (extra_extra->flags & PCRE_EXTRA_MATCH_LIMIT_RECURSION)
--            {
--                extra_extra->match_limit_recursion = ScPcreMatchLimitRecursionNewConf(sc);
--            }
--            else
--            {
--                extra_extra->flags |= PCRE_EXTRA_MATCH_LIMIT_RECURSION;
--                extra_extra->match_limit_recursion = ScPcreMatchLimitRecursionNewConf(sc);
--            }
-+            pcre2_set_depth_limit((pcre2_match_context*)matchcontext, ScPcreMatchLimitRecursionNewConf(sc));
-         }
- #endif
-     }
-@@ -1298,40 +1288,62 @@ void *pcreStudy(struct _SnortConfig *sc,
-         if (!(snort_options & SNORT_PCRE_OVERRIDE_MATCH_LIMIT) &&
-             ((ScPcreMatchLimitNewConf(sc) != -1) || (ScPcreMatchLimitRecursionNewConf(sc) != -1)))
-         {
--            extra_extra = (pcre_extra *)SnortAlloc(sizeof(pcre_extra));
-             if (ScPcreMatchLimitNewConf(sc) != -1)
-             {
--                extra_extra->flags |= PCRE_EXTRA_MATCH_LIMIT;
--                extra_extra->match_limit = ScPcreMatchLimitNewConf(sc);
-+                pcre2_set_match_limit((pcre2_match_context*)matchcontext, ScPcreMatchLimitNewConf(sc));
-             }
- 
- #ifdef PCRE_EXTRA_MATCH_LIMIT_RECURSION
-             if (ScPcreMatchLimitRecursionNewConf(sc) != -1)
-             {
--                extra_extra->flags |= PCRE_EXTRA_MATCH_LIMIT_RECURSION;
--                extra_extra->match_limit_recursion = ScPcreMatchLimitRecursionNewConf(sc);
-+                pcre2_set_depth_limit((pcre2_match_context*)matchcontext, ScPcreMatchLimitRecursionNewConf(sc));
-             }
- #endif
-         }
-     }
- 
--    return extra_extra;
-+    return errorcode;
-+}
-+
-+int pcre2OvectorSize(void)
-+{
-+    return snort_conf->pcre_ovector_size;
-+}
-+
-+void *pcre2MatchDataCreate(int size, const void *generalcontext)
-+{
-+    return pcre2_match_data_create(size, (pcre2_general_context *)generalcontext);
-+}
-+
-+unsigned int pcre2GetOvectorCount(const void *match_data)
-+{
-+    return pcre2_get_ovector_count((pcre2_match_data *)match_data);
-+}
-+
-+void *pcre2GetOvectorPointer(const void *match_data)
-+{
-+    return pcre2_get_ovector_pointer((pcre2_match_data *)match_data);
-+}
-+
-+int pcre2MatchReal(const void *code, const char *subj,
-+             int len, int start, int options, const void *matchdata, const void *matchcontext)
-+{
-+    return pcre2_match((const pcre2_code *)code, (PCRE2_SPTR)subj, len, start, options, (pcre2_match_data *)matchdata, (pcre2_match_context *)matchcontext);
-+}
-+
-+void pcre2MatchDataFree(const void *match_data)
-+{
-+    pcre2_match_data_free((pcre2_match_data  *)match_data);
- }
- 
--/* pcreOvectorInfo
-- *
-- * Get the Ovector configuration for PCRE from the snort.conf
-- */
--void pcreOvectorInfo(int **ovector, int *ovector_size)
-+void pcre2MatchContextFree(const void *code)
- {
--    *ovector = snort_conf->pcre_ovector;
--    *ovector_size = snort_conf->pcre_ovector_size;
-+    pcre2_match_context_free((pcre2_match_context  *)code);
- }
- 
--int pcreExec(const void *code, const void *extra, const char *subj,
--             int len, int start, int options, int *ovec, int ovecsize)
-+void pcre2CodeFree(const void *code)
- {
--    return pcre_exec((const pcre *)code, (const pcre_extra *)extra, subj, len, start, options, ovec, ovecsize);
-+    pcre2_code_free((pcre2_code  *)code);
- }
- 
- static int setFlowId(const void* p, uint32_t id)
-@@ -1415,17 +1427,22 @@ int InitDynamicEngines(char *dynamic_rul
-     engineData.debugMsgLine = &no_line;
- #endif
- 
--    engineData.pcreStudy = &pcreStudy;
--    engineData.pcreCompile = &pcreCompile;
--    engineData.pcreExec = &pcreExec;
-+    engineData.pcre2JITCompile = &pcre2JITCompile;
-+    engineData.pcre2MatchContextCreate = &pcre2MatchContextCreate;
-+    engineData.pcre2Compile = &pcre2Compile;
-+    engineData.pcre2OvectorSize = &pcre2OvectorSize;
-+    engineData.pcre2MatchDataCreate = &pcre2MatchDataCreate;
-+    engineData.pcre2GetOvectorCount = &pcre2GetOvectorCount;
-+    engineData.pcre2GetOvectorPointer = &pcre2GetOvectorPointer;
-+    engineData.pcre2MatchReal = &pcre2MatchReal;
-+    engineData.pcre2MatchDataFree = &pcre2MatchDataFree;
- 
-     engineData.allocRuleData = &DynamicRuleDataAlloc;
-     engineData.freeRuleData = &DynamicRuleDataFree;
- 
-     engineData.flowbitUnregister = &DynamicFlowbitUnregister;
- 
--    engineData.pcreCapture = &PcreCapture;
--    engineData.pcreOvectorInfo = &pcreOvectorInfo;
-+    engineData.pcre2Capture = &Pcre2Capture;
-     engineData.getHttpBuffer = getHttpBuffer;
- 
-     engineData.decompressInit = &DynamicDecompressInit;
---- a/src/dynamic-plugins/sf_engine/examples/3036.c
-+++ b/src/dynamic-plugins/sf_engine/examples/3036.c
-@@ -104,7 +104,7 @@ static RuleOption rule3036option3 =
-     { &rule3036byte_test3 }
- };
- // pcre:"^.{27}", relative;
--static PCREInfo rule3036pcre4 =
-+static PCRE2Info rule3036pcre4 =
- {
-     "^.{27}", /* pattern */
-     NULL,                               /* holder for compiled pattern */
-@@ -166,7 +166,7 @@ static RuleOption rule3036option6 =
-     { &rule3036byte_jump6 }
- };
- // pcre:"^.{4}", relative;
--static PCREInfo rule3036pcre7 =
-+static PCRE2Info rule3036pcre7 =
- {
-     "^.{4}", /* pattern */
-     NULL,                               /* holder for compiled pattern */
-@@ -325,13 +325,13 @@ int rule3036eval(void *p) {
-                 // byte_test:size 1, value 128, operator &, offset 6, relative;
-                 if (byteTest(p, rule3036options[3]->option_u.byte, cursor_normal) > 0) {
-                     // pcre:"^.{27}", relative;
--                    if (pcreMatch(p, rule3036options[4]->option_u.pcre, &cursor_normal)) {
-+                    if (pcre2Match(p, rule3036options[4]->option_u.pcre2, &cursor_normal)) {
-                         // content:"|01 00|", offset 37, depth 2, relative;
-                         if (contentMatch(p, rule3036options[5]->option_u.content, &cursor_normal) > 0) {
-                             // byte_jump:size 4, offset -7, relative, endian little;
-                             if (byteJump(p, rule3036options[6]->option_u.byte, &cursor_normal) > 0) {
-                                 // pcre:"^.{4}", relative;
--                                if (pcreMatch(p, rule3036options[7]->option_u.pcre, &cursor_normal)) {
-+                                if (pcre2Match(p, rule3036options[7]->option_u.pcre2, &cursor_normal)) {
-                                     // content:"|00 00 00 00|", offset 16, depth 4, relative;
-                                     if (!(contentMatch(p, rule3036options[8]->option_u.content, &cursor_normal) > 0)) {
-                                         // byte_jump:size 4, offset 16, relative, endian little;
---- a/src/dynamic-plugins/sf_engine/examples/3052.c
-+++ b/src/dynamic-plugins/sf_engine/examples/3052.c
-@@ -93,7 +93,7 @@ static RuleOption rule3052option2 =
-     { &rule3052byte_test2 }
- };
- // pcre:"^.{27}", relative;
--static PCREInfo rule3052pcre3 =
-+static PCRE2Info rule3052pcre3 =
- {
-     "^.{27}", /* pattern */
-     NULL,                               /* holder for compiled pattern */
-@@ -155,7 +155,7 @@ static RuleOption rule3052option5 =
-     { &rule3052byte_jump5 }
- };
- // pcre:"^.{4}", relative;
--static PCREInfo rule3052pcre6 =
-+static PCRE2Info rule3052pcre6 =
- {
-     "^.{4}", /* pattern */
-     NULL,                               /* holder for compiled pattern */
-@@ -307,13 +307,13 @@ int rule3052eval(void *p) {
-             // byte_test:size 1, value 128, operator &, offset 6, relative;
-             if (byteTest(p, rule3052options[2]->option_u.byte, cursor_normal) > 0) {
-                 // pcre:"^.{27}", relative;
--                if (pcreMatch(p, rule3052options[3]->option_u.pcre, &cursor_normal)) {
-+                if (pcre2Match(p, rule3052options[3]->option_u.pcre2, &cursor_normal)) {
-                     // content:"|01 00|", offset 37, depth 2, relative;
-                     if (contentMatch(p, rule3052options[4]->option_u.content, &cursor_normal) > 0) {
-                         // byte_jump:size 4, offset -7, relative, endian little;
-                         if (byteJump(p, rule3052options[5]->option_u.byte, &cursor_normal) > 0) {
-                             // pcre:"^.{4}", relative;
--                            if (pcreMatch(p, rule3052options[6]->option_u.pcre, &cursor_normal)) {
-+                            if (pcre2Match(p, rule3052options[6]->option_u.pcre2, &cursor_normal)) {
-                                 // content:"|00 00 00 00|", offset 16, depth 4, relative;
-                                 if (!(contentMatch(p, rule3052options[7]->option_u.content, &cursor_normal) > 0)) {
-                                     // byte_jump:size 4, offset 16, relative, endian little;
---- a/src/dynamic-plugins/sf_engine/examples/3099.c
-+++ b/src/dynamic-plugins/sf_engine/examples/3099.c
-@@ -104,7 +104,7 @@ static RuleOption rule3099option3 =
-     { &rule3099byte_test3 }
- };
- // pcre:"^.{27}", relative;
--static PCREInfo rule3099pcre4 =
-+static PCRE2Info rule3099pcre4 =
- {
-     "^.{27}", /* pattern */
-     NULL,                               /* holder for compiled pattern */
-@@ -191,7 +191,7 @@ static RuleOption rule3099option7 =
-     { &rule3099byte_jump7 }
- };
- // pcre:"^.{4}", relative;
--static PCREInfo rule3099pcre8 =
-+static PCRE2Info rule3099pcre8 =
- {
-     "^.{4}", /* pattern */
-     NULL,                               /* holder for compiled pattern */
-@@ -392,7 +392,7 @@ int rule3099eval(void *p) {
-                 // byte_test:size 1, value 128, operator &, offset 6, relative;
-                 if (!(byteTest(p, rule3099options[3]->option_u.byte, cursor_normal) > 0)) {
-                     // pcre:"^.{27}", relative;
--                    if (pcreMatch(p, rule3099options[4]->option_u.pcre, &cursor_normal)) {
-+                    if (pcre2Match(p, rule3099options[4]->option_u.pcre2, &cursor_normal)) {
-                         // content:"&|00|", offset 29, depth 2, relative;
-                         if (contentMatch(p, rule3099options[5]->option_u.content, &cursor_normal) > 0) {
-                             // content:"|5C|PIPE|5C 00|", offset 4, nocase, relative;
-@@ -400,7 +400,7 @@ int rule3099eval(void *p) {
-                                 // byte_jump:size 2, offset -17, relative, endian little;
-                                 if (byteJump(p, rule3099options[7]->option_u.byte, &cursor_normal) > 0) {
-                                     // pcre:"^.{4}", relative;
--                                    if (pcreMatch(p, rule3099options[8]->option_u.pcre, &cursor_normal)) {
-+                                    if (pcre2Match(p, rule3099options[8]->option_u.pcre2, &cursor_normal)) {
-                                         // content:"|05|", depth 1, relative;
-                                         if (contentMatch(p, rule3099options[9]->option_u.content, &cursor_normal) > 0) {
-                                             // byte_test:size 1, value 16, operator &, offset 3, relative;
---- a/src/dynamic-plugins/sf_engine/examples/36733.c
-+++ b/src/dynamic-plugins/sf_engine/examples/36733.c
-@@ -25,7 +25,8 @@
- #include "config.h"
- #endif
- 
--#include "pcre.h"
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- #include "sf_snort_plugin_api.h"
- #include "sf_snort_packet.h"
- #include "web-misc_base64_decode.h"
-@@ -80,12 +81,12 @@ static RuleOption ruleAPACHEAUTHLDAPopti
- };
- 
- // pcre:"/^Authorization:\s*Basic/mi";
--static PCREInfo ruleAPACHEAUTHLDAPpcre0 =
-+static PCRE2Info ruleAPACHEAUTHLDAPpcre0 =
- {
-     "^Authorization:\\s*Basic\\s+", /* pattern (now in snort content format) */
-     0, /* compiled expression */
-     0, /* compiled extra */
--    PCRE_CASELESS | PCRE_MULTILINE, /* compile flags */
-+    PCRE2_CASELESS | PCRE2_MULTILINE, /* compile flags */
-     CONTENT_BUF_NORMALIZED, /* flags */ // XXX - need to add CONTENT_FAST_PATTERN support
-     0 /* offset */
- };
-@@ -99,7 +100,7 @@ static RuleOption ruleAPACHEAUTHLDAPopti
- };
- 
- // pcre:"/%[0-9]*\.?[0-9]*[:formatspecifiers:]/";
--static PCREInfo ruleAPACHEAUTHLDAPpcre1 =
-+static PCRE2Info ruleAPACHEAUTHLDAPpcre1 =
- {
- //    "%[-# +'I]*[0-9]*\\.?[0-9]*[qjzthdiouxefgcrslnp]", /* pattern (now in snort content format) */ // ZDNOTE
-     "%.+%.", 	/* regex.  The above is technically more correct, but this is faster and good enough */
-@@ -191,7 +192,7 @@ static int ruleAPACHEAUTHLDAPeval(void *
- 
-    // manual pcre stuff
-    int result;
--   int ovector[3];  // Needs to be a multiple of 3
-+   void *match_data;
- 
-    if(sp == NULL)
-       return RULE_NOMATCH;
-@@ -221,7 +222,7 @@ static int ruleAPACHEAUTHLDAPeval(void *
-    //DEBUG_WRAP(printf("found content:\"Authorization:\" %p\n", cursor));
- 
-    // pcre:"/^Authorization:\s*Basic\s+/mi"
--   if(pcreMatch(p, ruleAPACHEAUTHLDAPoptions[2]->option_u.pcre, &cursor) <= 0)
-+   if(pcre2Match(p, ruleAPACHEAUTHLDAPoptions[2]->option_u.pcre2, &cursor) <= 0)
-       return RULE_NOMATCH;
- 
-    //DEBUG_WRAP(printf("found pcre:\"/^Authorization:\\s*Basic\\s+/mi\" %p\n", cursor));
-@@ -238,14 +239,35 @@ static int ruleAPACHEAUTHLDAPeval(void *
- 
-    //DEBUG_WRAP(printf("Successfully base64 decoded (%s)(%d)\n", decodedbuf, decodedbytes));
- 
-+   match_data = pcre2MatchDataCreateWrapper();
-+   if (!match_data)
-+      return RULE_NOMATCH;
-+
-    // Now run our regex on the base64 decoding to find an attack
--   result = pcreExecWrapper(ruleAPACHEAUTHLDAPoptions[3]->option_u.pcre,
-+   result = pcre2MatchWrapper(ruleAPACHEAUTHLDAPoptions[3]->option_u.pcre2,
-                       (char *)decodedbuf,        // subject string
-                       decodedbytes,      // subject length
-                       0,                 // start offset
-                       0,                 // options (handled at compile time)
--                      ovector,           // ovector for storing result substrings
--                      sizeof(ovector)/sizeof(int));  // size of ovector
-+                      match_data);  // size of ovector
-+
-+    /* If ovector is required:
-+     * 1. declare a size_t *ovector
-+     * 2. after pcre2ExecWrapper...
-+     * 3. ovector = pcre2GetOvectorPointer(match_data);
-+     * 4. Use ovector as old implementation
-+     *
-+     * If required ovector_size:
-+     * 1. declare a unsigned int ovector_size
-+     * 2. after pcre2ExecWrapper...
-+     * 3. ovector_size =  pcre2GetOvectorCount(match_data);
-+     * 4. User ovector_size as old implementation
-+     *
-+     * ALWAYS REMEMBER TO USE THE MATCH DATA CREATE AND FREE BEFORE
-+     * EXEC WRAPPER
-+     */
-+
-+    pcre2MatchDataFreeWrapper(match_data);
- 
-    //DEBUG_WRAP(printf("result = %d\n", result));
- 
---- a/src/dynamic-plugins/sf_engine/examples/3682.c
-+++ b/src/dynamic-plugins/sf_engine/examples/3682.c
-@@ -9,7 +9,8 @@
- #include "config.h"
- #endif
- 
--#include "pcre.h"
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- #include "sf_snort_plugin_api.h"
- #include "sf_snort_packet.h"
- #include "detection_lib_meta.h"
-@@ -103,12 +104,12 @@ static RuleOption rule3682option3 =
- 
- /* pcre for sid 3682 */
- //pcre:"/Content-Type\x3A\s+audio\/(x-wav|mpeg|x-midi)/i";
--static PCREInfo rule3682pcre4 =
-+static PCRE2Info rule3682pcre4 =
- {
-     "Content-Type\\x3A\\s+audio\\/(x-wav|mpeg|x-midi)",               /* expression */
-     NULL,                       /* Holder for compiled expr */
-     NULL,                       /* Holder for compiled expr extra flags */
--    PCRE_CASELESS, /* Compile Flags */
-+    PCRE2_CASELESS, /* Compile Flags */
-     CONTENT_BUF_NORMALIZED,      /* Flags */
-     0 /* offset */
- };
-@@ -148,12 +149,12 @@ static RuleOption rule3682option5 =
- 
- /* pcre for sid 3682 */
- //pcre:"/filename=[\x22\x27]?.{1,221}\.(vbs|exe|scr|pif|bat)/i";
--static PCREInfo rule3682pcre6 =
-+static PCRE2Info rule3682pcre6 =
- {
-     "filename=[\\x22\\x27]?.{1,221}\\.(vbs|exe|scr|pif|bat)",               /* expression */
-     NULL,                       /* Holder for compiled expr */
-     NULL,                       /* Holder for compiled expr extra flags */
--    PCRE_CASELESS, /* Compile Flags */
-+    PCRE2_CASELESS, /* Compile Flags */
-     CONTENT_BUF_NORMALIZED,      /* Flags */
-     0 /* offset */
- };
---- a/src/dynamic-plugins/sf_engine/examples/bug31842.c
-+++ b/src/dynamic-plugins/sf_engine/examples/bug31842.c
-@@ -25,7 +25,8 @@
- #include "config.h"
- #endif
- 
--#include "pcre.h"
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- #include "sf_snort_plugin_api.h"
- #include "sf_snort_packet.h"
- 
-@@ -89,12 +90,12 @@ static RuleOption ruleSQUID_NTLM_AUTHopt
-     }
- };
- 
--static PCREInfo ruleSQUID_NTLM_AUTHpcre =
-+static PCRE2Info ruleSQUID_NTLM_AUTHpcre =
- {
-     "^Proxy-Authorization:\\s*NTLM\\s+", /* pattern to search for */
-     NULL,                               /* holder for compiled pattern */
-     NULL,                               /* holder for compiled pattern flags */
--    PCRE_CASELESS | PCRE_DOTALL | PCRE_MULTILINE,     /* compile flags */
-+    PCRE2_CASELESS | PCRE2_DOTALL | PCRE2_MULTILINE,     /* compile flags */
-     CONTENT_BUF_NORMALIZED,     /* content flags */
-     0 /* offset */
- };
-@@ -336,7 +337,7 @@ int ruleSQUID_NTLM_AUTHeval(void *p) {
-    }
- 
-    /* call pcre match */
--   if (pcreMatch(p, ruleSQUID_NTLM_AUTHoptions[2]->option_u.pcre, &cursor) <= 0) {
-+   if (pcre2Match(p, ruleSQUID_NTLM_AUTHoptions[2]->option_u.pcre2, &cursor) <= 0) {
-       return RULE_NOMATCH;
-    }
- 
---- a/src/dynamic-plugins/sf_engine/examples/bug35218.c
-+++ b/src/dynamic-plugins/sf_engine/examples/bug35218.c
-@@ -26,7 +26,8 @@
- #include "config.h"
- #endif
- 
--#include "pcre.h"
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- #include "sf_snort_plugin_api.h"
- #include "sf_snort_packet.h"
- 
-@@ -97,12 +98,12 @@ static RuleOption ruleEXCHANGE_BASE64_DE
-     }
- };
- 
--static PCREInfo ruleEXCHANGE_BASE64_DECODEpcre0 =
-+static PCRE2Info ruleEXCHANGE_BASE64_DECODEpcre0 =
- {
-     "^Content-Transfer-Encoding:\\s*base64\\s*$", /* pattern to search for */
-     NULL,                                         /* compiled_expr */
-     0,                                            /* compiled_extra */
--    PCRE_CASELESS | PCRE_MULTILINE,  /* compile_flags */
-+    PCRE2_CASELESS | PCRE2_MULTILINE,  /* compile_flags */
-     CONTENT_BUF_RAW,            /* flags:  must include a CONTENT_BUF_X */
-     0 /* offset */
- };
-@@ -119,12 +120,12 @@ static RuleOption ruleEXCHANGE_BASE64_DE
- /* Second PCRE just like above but with CONTENT_RELATIVE so we can find
-    additional base64 sections if they exist.
- */
--static PCREInfo ruleEXCHANGE_BASE64_DECODEpcre1 =
-+static PCRE2Info ruleEXCHANGE_BASE64_DECODEpcre1 =
- {
-     "^Content-Transfer-Encoding:\\s*base64\\s*$", /* pattern to search for */
-     NULL,                                         /* compiled_expr */
-     0,                                            /* compiled_extra */
--    PCRE_CASELESS | PCRE_MULTILINE,               /* compile_flags */
-+    PCRE2_CASELESS | PCRE2_MULTILINE,               /* compile_flags */
-     CONTENT_BUF_RAW | CONTENT_RELATIVE,           /* flags:  must include a CONTENT_BUF_X */
-     0 /* offset */
- };
-@@ -214,7 +215,7 @@ int ruleEXCHANGE_BASE64_DECODEeval(void
-    }
- 
-    /* call pcre match */
--   if (pcreMatch(sp, ruleEXCHANGE_BASE64_DECODEoptions[2]->option_u.pcre, &cursor_normal) <= 0) {
-+   if (pcre2Match(sp, ruleEXCHANGE_BASE64_DECODEoptions[2]->option_u.pcre2, &cursor_normal) <= 0) {
-       return RULE_NOMATCH;
-    }
- 
-@@ -286,7 +287,7 @@ int ruleEXCHANGE_BASE64_DECODEeval(void
- 
-       }  else { /* !in_base64_content */
-          // Find the next base64 content the easy way
--         if(pcreMatch(sp, ruleEXCHANGE_BASE64_DECODEoptions[3]->option_u.pcre, &cursor_normal) <= 0)
-+         if(pcre2Match(sp, ruleEXCHANGE_BASE64_DECODEoptions[3]->option_u.pcre2, &cursor_normal) <= 0)
-             return RULE_NOMATCH;
- 
-          // Another base64 section was found, set up for another loop
---- a/src/dynamic-plugins/sf_engine/examples/sid1902.c
-+++ b/src/dynamic-plugins/sf_engine/examples/sid1902.c
-@@ -12,7 +12,8 @@
- #include "config.h"
- #endif
- 
--#include "pcre.h"
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- #include "sf_snort_plugin_api.h"
- #include "sf_snort_packet.h"
- 
-@@ -59,12 +60,12 @@ static RuleOption rule1902option1 =
-     { &rule1902content1 }
- };
- // pcre:"\sLSUB\s[^\n]*?\s\{", dotall, multiline, nocase;
--static PCREInfo rule1902pcre2 =
-+static PCRE2Info rule1902pcre2 =
- {
-     "\\sLSUB\\s[^\\n]*?\\s\\{", /* pattern */
-     NULL,                               /* holder for compiled pattern */
-     NULL,                               /* holder for compiled pattern flags */
--    PCRE_CASELESS|PCRE_DOTALL|PCRE_MULTILINE,     /* compile flags */
-+    PCRE2_CASELESS|PCRE2_DOTALL|PCRE2_MULTILINE,     /* compile flags */
-     CONTENT_BUF_NORMALIZED,     /* content flags */
-     0 /* offset */
- };
-@@ -177,7 +178,7 @@ int rule1902eval(void *p) {
-         // content:"LSUB", nocase;
-         if (contentMatch(p, rule1902options[1]->option_u.content, &cursor_normal) > 0) {
-             // pcre:"\sLSUB\s[^\n]*?\s\{", dotall, multiline, nocase;
--            if (pcreMatch(p, rule1902options[2]->option_u.pcre, &cursor_normal)) {
-+            if (pcre2Match(p, rule1902options[2]->option_u.pcre2, &cursor_normal)) {
-                 // byte_test:size 5, value 256, operator >, relative, representation dec;
-                 if (byteTest(p, rule1902options[3]->option_u.byte, cursor_normal) > 0) {
-                     return RULE_MATCH;
---- a/src/dynamic-plugins/sf_engine/examples/sid2389.c
-+++ b/src/dynamic-plugins/sf_engine/examples/sid2389.c
-@@ -6,7 +6,8 @@
- #include "config.h"
- #endif
- 
--#include "pcre.h"
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- #include "sf_snort_plugin_api.h"
- #include "detection_lib_meta.h"
- 
-@@ -113,12 +114,12 @@ static RuleOption option2 =
-     { &content1 }
- };
- 
--static PCREInfo pcre1 =
-+static PCRE2Info pcre1 =
- {                           /* PCRE */
-     "^RNTO\\s[^\\n]{100}",               /* expression */
-     NULL,                       /* Holder for compiled expr */
-     NULL,                       /* Holder for compiled expr extra flags */
--    PCRE_DOTALL | PCRE_MULTILINE | PCRE_CASELESS, /* Compile Flags */
-+    PCRE2_DOTALL | PCRE2_MULTILINE | PCRE2_CASELESS, /* Compile Flags */
-     CONTENT_BUF_NORMALIZED,      /* Flags */
-     0 /* offset */
- };
-@@ -178,7 +179,7 @@ int sid2389Eval(void *p)
-         if (contentMatch(p, sid2389.options[1]->option_u.content, &norm_cur)>0)
-         {
-             /* Not relative to norm cursor */
--            if (pcreMatch(p, sid2389.options[2]->option_u.pcre, NULL))
-+            if (pcre2Match(p, sid2389.options[2]->option_u.pcre2, NULL))
-             {
-                 return RULE_MATCH;
-             }
---- a/src/dynamic-plugins/sf_engine/examples/sid9999.c
-+++ b/src/dynamic-plugins/sf_engine/examples/sid9999.c
-@@ -159,7 +159,7 @@ static CursorInfo loopCursor =
- /* these don't get structures... lets hope this works :) */
- /* pcre for sid 9999 */
- // pcre:"^[rbg]XYZ", relative;
--static PCREInfo rule9999pcre7 =
-+static PCRE2Info rule9999pcre7 =
- {
-     "^[rbg]XYZ", /* pattern */
-     NULL,                               /* holder for compiled pattern */
---- a/src/dynamic-plugins/sf_engine/examples/web-client_test.c
-+++ b/src/dynamic-plugins/sf_engine/examples/web-client_test.c
-@@ -85,12 +85,12 @@ static RuleOption rule64111option1 =
- };
- 
- // pcre:"IIS 7\x2e5 Detailed Error - 404\x2e0 - Not Found", nocase;
--static PCREInfo rule64111pcre2 =
-+static PCRE2Info rule64111pcre2 =
- {
-     "IIS 7\\x2e5 Detailed Error - 404\\x2e0 - Not Found", /* pattern */
-     NULL,                               /* holder for compiled pattern */
-     NULL,                               /* holder for compiled pattern flags */
--    PCRE_CASELESS,     /* compile flags */
-+    PCRE2_CASELESS,     /* compile flags */
-     CONTENT_BUF_NORMALIZED,     /* content flags */
-     0 /* offset */
- };
-@@ -256,12 +256,12 @@ static RuleOption rule64222option2 =
- };
- 
- // pcre:"SignUrl=[^\x26\s]*[\x22\x27\x28\x29\x3C\x3E]", payload uri, nocase;
--static PCREInfo rule64222pcre3 =
-+static PCRE2Info rule64222pcre3 =
- {
-     "SignUrl=[^\\x26\\s]*[\\x22\\x27\\x28\\x29\\x3C\\x3E]", /* pattern */
-     NULL,                               /* holder for compiled pattern */
-     NULL,                               /* holder for compiled pattern flags */
--    PCRE_CASELESS,     /* compile flags */
-+    PCRE2_CASELESS,     /* compile flags */
-     CONTENT_BUF_URI,     /* content flags */
-     0 /* offset */
- };
-@@ -428,12 +428,12 @@ static RuleOption rule64333option2 =
- };
- 
- // pcre:"SignUrl=[^\\x26\\s]*[\\x22\\x27\\x28\\x29\\x3C\\x3E]", payload uri, nocase;
--static PCREInfo rule64333pcre3 =
-+static PCRE2Info rule64333pcre3 =
- {
-     "SignUrl=[^\\\\x26\\\\s]*[\\\\x22\\\\x27\\\\x28\\\\x29\\\\x3C\\\\x3E]", /* pattern */
-     NULL,                               /* holder for compiled pattern */
-     NULL,                               /* holder for compiled pattern flags */
--    PCRE_CASELESS,     /* compile flags */
-+    PCRE2_CASELESS,     /* compile flags */
-     CONTENT_BUF_URI,     /* content flags */
-     0 /* offset */
- };
-@@ -550,7 +550,7 @@ int rule64111eval(void *p) {
-         // content:"IIS 7.5 Detailed Error - 404.0 - Not Found", depth 0, nocase, fast_pattern;
-         if (contentMatch(p, rule64111options[1]->option_u.content, &cursor_normal) > 0) {
-             // pcre:"IIS 7\x2e5 Detailed Error - 404\x2e0 - Not Found", nocase;
--            if (pcreMatch(p, rule64111options[2]->option_u.pcre, &cursor_normal)) {
-+            if (pcre2Match(p, rule64111options[2]->option_u.pcre2, &cursor_normal)) {
-                 return RULE_MATCH;
-             }
-         }
-@@ -576,7 +576,7 @@ int rule64222eval(void *p) {
-             // content:"SignUrl=", payload http_uri, depth 0, nocase;
-             if (contentMatch(p, rule64222options[2]->option_u.content, &cursor_http_uri) > 0) {
-                 // pcre:"SignUrl=[^\x26\s]*[\x22\x27\x28\x29\x3C\x3E]", payload uri, nocase;
--                if (pcreMatch(p, rule64222options[3]->option_u.pcre, &cursor_uri)) {
-+                if (pcre2Match(p, rule64222options[3]->option_u.pcre2, &cursor_uri)) {
-                     return RULE_MATCH;
-                 }
-             }
-@@ -603,7 +603,7 @@ int rule64333eval(void *p) {
-             // content:"SignUrl=", payload http_uri, depth 0, nocase;
-             if (contentMatch(p, rule64333options[2]->option_u.content, &cursor_http_uri) > 0) {
-                 // pcre:"SignUrl=[^\\x26\\s]*[\\x22\\x27\\x28\\x29\\x3C\\x3E]", payload uri, nocase;
--                if (pcreMatch(p, rule64333options[3]->option_u.pcre, &cursor_uri)) {
-+                if (pcre2Match(p, rule64333options[3]->option_u.pcre2, &cursor_uri)) {
-                     return RULE_MATCH;
-                 }
-             }
---- a/src/dynamic-plugins/sf_engine/sf_snort_detection_engine.c
-+++ b/src/dynamic-plugins/sf_engine/sf_snort_detection_engine.c
-@@ -899,11 +899,11 @@ int RegisterOneRule(struct _SnortConfig
-                 break;
-             case OPTION_TYPE_PCRE:
-                 {
--                    PCREInfo *pcre = option->option_u.pcre;
-+                    PCRE2Info *pcre2 = option->option_u.pcre2;
- 
--                    if (pcre->compiled_expr == NULL)
-+                    if (pcre2->compiled_expr == NULL)
-                     {
--                        if (PCRESetup(sc, rule, pcre))
-+                        if (PCRE2Setup(sc, rule, pcre2))
-                         {
-                             rule->initialized = 0;
-                             FreeOneRule(rule);
-@@ -1120,18 +1120,18 @@ static void FreeOneRule(void *data)
- 
-             case OPTION_TYPE_PCRE:
-                 {
--                    PCREInfo *pcre = option->option_u.pcre;
-+                    PCRE2Info *pcre2 = option->option_u.pcre2;
- 
--                    if (pcre->compiled_expr != NULL)
-+                    if (pcre2->match_context != NULL)
-                     {
--                        free(pcre->compiled_expr);
--                        pcre->compiled_expr = NULL;
-+                        pcre2_match_context_free(pcre2->match_context);
-+                        pcre2->match_context = NULL;
-                     }
- 
--                    if (pcre->compiled_extra != NULL)
-+                    if (pcre2->compiled_expr != NULL)
-                     {
--                        free(pcre->compiled_extra);
--                        pcre->compiled_extra = NULL;
-+                        pcre2_code_free(pcre2->compiled_expr);
-+                        pcre2->compiled_expr = NULL;
-                     }
-                 }
- 
---- a/src/dynamic-plugins/sf_engine/sf_snort_detection_engine.h
-+++ b/src/dynamic-plugins/sf_engine/sf_snort_detection_engine.h
-@@ -30,7 +30,7 @@
- #define SF_SNORT_DETECTION_ENGINE__H
- 
- int BoyerContentSetup(Rule *rule, ContentInfo *content);
--int PCRESetup(struct _SnortConfig *sc, Rule *rule, PCREInfo *pcreInfo);
-+int PCRE2Setup(struct _SnortConfig *sc, Rule *rule, PCRE2Info *pcre2Info);
- int ValidateHeaderCheck(Rule *rule, HdrOptCheck *optData);
- void ContentSetup(void);
- int ByteExtractInitialize(Rule *rule, ByteExtract *extractData);
---- a/src/dynamic-plugins/sf_engine/sf_snort_plugin_api.c
-+++ b/src/dynamic-plugins/sf_engine/sf_snort_plugin_api.c
-@@ -640,7 +640,7 @@ int isRelativeOption(RuleOption *option)
-         relative = option->option_u.content->flags & CONTENT_RELATIVE;
-         break;
-     case OPTION_TYPE_PCRE:
--        relative = option->option_u.pcre->flags & CONTENT_RELATIVE;
-+        relative = option->option_u.pcre2->flags & CONTENT_RELATIVE;
-         break;
-     case OPTION_TYPE_FLOWBIT:
-         /* Never relative */
-@@ -716,7 +716,7 @@ int ruleMatchInternal(SFSnortPacket *p,
-     int32_t origOffset = 0;
-     uint32_t origDepth = 0;
-     int continueLoop = 1;
--    PCREInfo *thisPCREInfo = NULL;
-+    PCRE2Info *thisPCREInfo = NULL;
- 
-     if (cursor)
-         startCursor = thisCursor = *cursor;
-@@ -736,7 +736,7 @@ int ruleMatchInternal(SFSnortPacket *p,
-             origOffset = thisContentInfo->offset;
-             break;
-         case OPTION_TYPE_PCRE:
--            thisPCREInfo = rule->options[optIndex]->option_u.pcre;
-+            thisPCREInfo = rule->options[optIndex]->option_u.pcre2;
-             origFlags = thisPCREInfo->flags;
-             origOffset = thisPCREInfo->offset;
-             break;
-@@ -760,8 +760,8 @@ int ruleMatchInternal(SFSnortPacket *p,
-             notFlag = rule->options[optIndex]->option_u.protectedContent->flags & NOT_FLAG;
-             break;
-         case OPTION_TYPE_PCRE:
--            retVal = pcreMatch(p, rule->options[optIndex]->option_u.pcre, &thisCursor);
--            notFlag = rule->options[optIndex]->option_u.pcre->flags & NOT_FLAG;
-+            retVal = pcre2Match(p, rule->options[optIndex]->option_u.pcre2, &thisCursor);
-+            notFlag = rule->options[optIndex]->option_u.pcre2->flags & NOT_FLAG;
-             break;
-         case OPTION_TYPE_FLOWBIT:
-             retVal = processFlowbits(p, rule->options[optIndex]->option_u.flowBit);
---- a/src/dynamic-plugins/sf_engine/sf_snort_plugin_api.h
-+++ b/src/dynamic-plugins/sf_engine/sf_snort_plugin_api.h
-@@ -30,7 +30,8 @@
- #ifndef SF_SNORT_PLUGIN_API_H_
- #define SF_SNORT_PLUGIN_API_H_
- 
--#include "pcre.h"
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- #include "stdio.h"
- 
- #ifndef WIN32
-@@ -211,26 +212,26 @@ typedef struct _CursorInfo
- } CursorInfo;
- 
- /*
--pcre.h provides flags:
-+pcre2.h provides flags:
- 
--PCRE_CASELESS
--PCRE_MULTILINE
--PCRE_DOTALL
--PCRE_EXTENDED
--PCRE_ANCHORED
--PCRE_DOLLAR_ENDONLY
--PCRE_UNGREEDY
-+PCRE2_CASELESS
-+PCRE2_MULTILINE
-+PCRE2_DOTALL
-+PCRE2_EXTENDED
-+PCRE2_ANCHORED
-+PCRE2_DOLLAR_ENDONLY
-+PCRE2_UNGREEDY
- */
- 
--typedef struct _PCREInfo
-+typedef struct _PCRE2Info
- {
-     char     *expr;
-     void     *compiled_expr;
--    void     *compiled_extra;
-+    void     *match_context;
-     uint32_t compile_flags;
-     uint32_t flags; /* must include a CONTENT_BUF_X */
-     int32_t   offset;
--} PCREInfo;
-+} PCRE2Info;
- 
- #define FLOWBIT_SET       0x01
- #define FLOWBIT_UNSET     0x02
-@@ -393,7 +394,7 @@ typedef struct _RuleOption
-         ContentInfo *content;
-         ProtectedContentInfo *protectedContent;
-         CursorInfo *cursor;
--        PCREInfo *pcre;
-+        PCRE2Info *pcre2;
-         FlowBitsInfo *flowBit;
-         ByteData *byte;
-         ByteExtract *byteExtract;
-@@ -482,7 +483,7 @@ ENGINE_LINKAGE int byteTest(void *p, Byt
- ENGINE_LINKAGE int byteMath(void *p, ByteData *byteData, const uint8_t *cursor);
- /* Same as extractValue plus setCursor */
- ENGINE_LINKAGE int byteJump(void *p, ByteData *byteData, const uint8_t **cursor);
--ENGINE_LINKAGE int pcreMatch(void *p, PCREInfo* pcre, const uint8_t **cursor);
-+ENGINE_LINKAGE int pcre2Match(void *p, PCRE2Info* pcre2, const uint8_t **cursor);
- ENGINE_LINKAGE int detectAsn1(void *p, Asn1Context* asn1, const uint8_t *cursor);
- ENGINE_LINKAGE int checkHdrOpt(void *p, HdrOptCheck *optData);
- ENGINE_LINKAGE int loopEval(void *p, LoopInfo *loop, const uint8_t **cursor);
-@@ -506,8 +507,12 @@ ENGINE_LINKAGE void detectFlagDisable(SF
- ENGINE_LINKAGE int getAltDetect(uint8_t **bufPtr, uint16_t *altLenPtr);
- ENGINE_LINKAGE void setAltDetect(uint8_t *buf, uint16_t altLen);
- 
--ENGINE_LINKAGE int pcreExecWrapper(const PCREInfo *pcre_info, const char *buf, int len, int start_offset,
--                                    int options, int *ovector, int ovecsize);
-+ENGINE_LINKAGE void *pcre2MatchDataCreateWrapper(void);
-+ENGINE_LINKAGE void pcre2MatchDataFreeWrapper(void *match_data);
-+ENGINE_LINKAGE int pcre2GetOvectorCountWrapper(void *match_data);
-+ENGINE_LINKAGE void *pcre2GetOvectorPointerWrapper(void *match_data);
-+ENGINE_LINKAGE int pcre2MatchWrapper(const PCRE2Info *pcre2_info, const char *buf, int len, int start_offset,
-+                                    int options, const void *match_data);
- 
- static inline int invertMatchResult(int retVal)
- {
---- a/src/dynamic-plugins/sf_engine/sf_snort_plugin_pcre.c
-+++ b/src/dynamic-plugins/sf_engine/sf_snort_plugin_pcre.c
-@@ -25,13 +25,14 @@
-  * Date: 5/2005
-  *
-  *
-- * PCRE operations for dynamic rule engine
-+ * PCRE2 operations for dynamic rule engine
-  */
- #ifdef HAVE_CONFIG_H
- #include "config.h"
- #endif
- 
--#include "pcre.h"
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- #include "sf_types.h"
- #include "snort_debug.h"
- #include "sf_dynamic_define.h"
-@@ -43,32 +44,38 @@
- /* Need access to the snort-isms that were passed to the engine */
- extern int checkCursorSimple(const uint8_t *cursor, int flags, const uint8_t *start, const uint8_t *end, int offset);
- extern int checkCursorInternal(void *p, int flags, int offset, const uint8_t *cursor);
--static int pcreMatchInternal(void *, PCREInfo*, const uint8_t **);
-+static int pcreMatchInternal(void *, PCRE2Info*, const uint8_t **);
- 
--int PCRESetup(struct _SnortConfig *sc, Rule *rule, PCREInfo *pcreInfo)
-+int PCRE2Setup(struct _SnortConfig *sc, Rule *rule, PCRE2Info *pcre2Info)
- {
--    const char *error;
--    int erroffset;
-+    size_t erroffset;
-+    int errorcode;
- 
--    pcreInfo->compiled_expr = (void *)_ded.pcreCompile(pcreInfo->expr,
--                                                    pcreInfo->compile_flags,
--                                                    &error,
-+    pcre2Info->compiled_expr = (void *)_ded.pcre2Compile(pcre2Info->expr,
-+                                                    pcre2Info->compile_flags,
-+                                                    &errorcode,
-                                                     &erroffset,
-                                                     NULL);
- 
--    if (!pcreInfo->compiled_expr)
-+    if (!pcre2Info->compiled_expr)
-     {
-         /* error doing compilation. */
--        _ded.errMsg("Failed to compile PCRE in dynamic rule [%d:%d]\n",
-+        _ded.errMsg("Failed to compile PCRE2 in dynamic rule [%d:%d]\n",
-             rule->info.genID, rule->info.sigID);
-         return -1;
-     }
--    else
-+
-+    pcre2Info->match_context = _ded.pcre2MatchContextCreate(NULL);
-+    if (!pcre2Info->match_context)
-     {
--        pcreInfo->compiled_extra = (void *)_ded.pcreStudy(sc, pcreInfo->compiled_expr, pcreInfo->compile_flags, &error);
-+        /* error doing match context */
-+        _ded.errMsg("Failed to allocate mem for PCRE2 match context [%d:%d]\n",
-+            rule->info.genID, rule->info.sigID);
-+        return -1;
-     }
- 
--    if (error)
-+    errorcode = _ded.pcre2JITCompile(sc, pcre2Info->compiled_expr, pcre2Info->match_context, pcre2Info->compile_flags);
-+    if (errorcode)
-     {
-         /* error doing study. */
-         _ded.errMsg("Failed to study PCRE in dynamic rule [%d:%d]\n",
-@@ -76,51 +83,82 @@ int PCRESetup(struct _SnortConfig *sc, R
-         return -1;
-     }
- 
--    _ded.pcreCapture(sc, pcreInfo->compiled_expr, pcreInfo->compiled_extra);
-+    _ded.pcre2Capture(sc, pcre2Info->compiled_expr);
- 
- 
-     return 0;
- }
- 
- /**
-- *  * Wrapper for pcre_exec to expose ovector.
-+ *  * Wrapper for pcre2_match_data_create to run match_data.
-+ *   */
-+ENGINE_LINKAGE void *pcre2MatchDataCreateWrapper(void)
-+{
-+    return _ded.pcre2MatchDataCreate(_ded.pcre2OvectorSize(), NULL);
-+}
-+
-+/**
-+ *  * Wrapper for pcre2_match_data_free to run match_data.
-+ *   */
-+ENGINE_LINKAGE void pcre2MatchDataFreeWrapper(void *match_data)
-+{
-+    _ded.pcre2MatchDataFree(match_data);
-+}
-+
-+/**
-+ *  * Wrapper for pcre2_get_ovector_count to run match_data.
-+ *   */
-+ENGINE_LINKAGE int pcre2GetOvectorCountWrapper(void *match_data)
-+{
-+    return _ded.pcre2GetOvectorCount(match_data);
-+}
-+
-+/**
-+ *  * Wrapper for pcre2_get_ovector_pointer to run match_data.
-  *   */
--ENGINE_LINKAGE int pcreExecWrapper(const PCREInfo *pcre_info, const char *buf, int len, int start_offset,
--                                    int options, int *ovector, int ovecsize)
-+ENGINE_LINKAGE void *pcre2GetOvectorPointerWrapper(void *match_data)
-+{
-+    return _ded.pcre2GetOvectorPointer(match_data);
-+}
-+
-+/**
-+ *  * Wrapper for pcre2_match to run match_data.
-+ *   */
-+ENGINE_LINKAGE int pcre2ExecWrapper(const PCRE2Info *pcre2_info, const char *buf, int len, int start_offset,
-+                                    int options, const void *match_data)
- {
-     int result;
-     int matched;
- 
--    if(pcre_info == NULL
-+    if(pcre2_info == NULL
-         || buf == NULL
-         || len <= 0
-         || start_offset < 0
-         || start_offset >= len
--        || ovector == NULL)
-+        || match_data == NULL)
-     {
-         return 0;
-     }
- 
--    result = _ded.pcreExec(pcre_info->compiled_expr,    /* result of pcre_compile() */
--                     pcre_info->compiled_extra,   /* result of pcre_study()   */
-+    result = _ded.pcre2MatchReal(pcre2_info->compiled_expr,    /* result of pcre_compile() */
-                      buf,                         /* the subject string */
-                      len,                         /* the length of the subject string */
-                      start_offset,                /* start at offset 0 in the subject */
-                      options,                     /* options(handled at compile time */
--                     ovector,                     /* vector for substring information */
--                     ovecsize);    /* number of elements in the vector */
-+                     match_data,                  /* match_data for results */
-+                     pcre2_info->match_context);  /* match_context for JIT limits */
- 
-     if(result >= 0)
-     {
-         matched = 1;
-     }
--    else if(result == PCRE_ERROR_NOMATCH)
-+    else if(result == PCRE2_ERROR_NOMATCH)
-     {
-         matched = 0;
-     }
-     else
-     {
--        DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH, "pcre_exec error : %d \n", result););
-+        DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH, "pcre_match error : %d \n", result););
-         return 0;
-     }
- 
-@@ -128,7 +166,7 @@ ENGINE_LINKAGE int pcreExecWrapper(const
- }
- 
- /*
-- * we need to specify the vector length for our pcre_exec call.  we only care
-+ * we need to specify the vector length for our pcre2_match call.  we only care
-  * about the first vector, which if the match is successful will include the
-  * offset to the end of the full pattern match.  If we decide to store other
-  * matches, make *SURE* that this is a multiple of 3 as pcre requires it.
-@@ -136,7 +174,7 @@ ENGINE_LINKAGE int pcreExecWrapper(const
- #define SNORT_PCRE_OVECTOR_SIZE 3
- 
- /**
-- * Perform a search of the PCRE data.
-+ * Perform a search of the PCRE2 data.
-  *
-  * @param pcre_data structure that options and patterns are passed in
-  * @param buf buffer to search
-@@ -148,21 +186,18 @@ ENGINE_LINKAGE int pcreExecWrapper(const
-  *
-  * @return 1 when we find the string, 0 when we don't (unless we've been passed a flag to invert)
-  */
--static int pcre_test(const PCREInfo *pcre_info,
-+static int pcre2_test(const PCRE2Info *pcre2_info,
-                        const char *buf,
-                        int len,
-                        int start_offset,
-                        int *found_offset)
- {
-+    void *match_data;
-+    size_t *ovector;
-     int matched;
-     int result;
- 
--    int *ovector;
--    int ovector_size;
--
--    _ded.pcreOvectorInfo(&ovector, &ovector_size);
--
--    if(pcre_info == NULL
-+    if(pcre2_info == NULL
-        || buf == NULL
-        || len <= 0
-        || start_offset < 0
-@@ -174,50 +209,59 @@ static int pcre_test(const PCREInfo *pcr
-         return 0;
-     }
- 
-+    match_data = _ded.pcre2MatchDataCreate(_ded.pcre2OvectorSize(), NULL);
-+    if (!match_data) {
-+        DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH,
-+                                "Returning 0 because match data failed!\n"););
-+        return 0;
-+    }
-+
-     *found_offset = -1;
- 
--    result = _ded.pcreExec(pcre_info->compiled_expr,/* result of pcre_compile() */
--                       pcre_info->compiled_extra,   /* result of pcre_study()   */
-+    result = _ded.pcre2MatchReal(pcre2_info->compiled_expr,/* result of pcre_compile() */
-                        buf,                         /* the subject string */
-                        len,                         /* the length of the subject string */
-                        start_offset,                /* start at offset 0 in the subject */
-                        0,                           /* options(handled at compile time */
--                       ovector,                     /* vector for substring information */
--                       ovector_size);               /* number of elements in the vector */
-+                       match_data,                  /* match_data vector */
-+                       pcre2_info->match_context);  /* match context for limits */
- 
-     if(result >= 0)
-     {
-         matched = 1;
-     }
--    else if(result == PCRE_ERROR_NOMATCH)
-+    else if(result == PCRE2_ERROR_NOMATCH)
-     {
-         matched = 0;
-     }
-     else
-     {
--        DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH, "pcre_exec error : %d \n", result););
-+        _ded.pcre2MatchDataFree(match_data);
-+        DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH, "pcre_match error : %d \n", result););
-         return 0;
-     }
- 
-     if (found_offset)
-     {
-+        ovector = _ded.pcre2GetOvectorPointer(match_data);
-         *found_offset = ovector[1];
-         DEBUG_WRAP(DebugMessage(DEBUG_PATTERN_MATCH,
-                                 "Setting buffer and found_offset: %p %d\n",
-                                 buf, found_offset););
-     }
- 
-+    _ded.pcre2MatchDataFree(match_data);
-     return matched;
- }
- 
--ENGINE_LINKAGE int pcreMatch(void *p, PCREInfo* pcre_info, const uint8_t **cursor)
-+ENGINE_LINKAGE int pcre2Match(void *p, PCRE2Info* pcre_info, const uint8_t **cursor)
- {
-     if (pcre_info->flags & NOT_FLAG)
-         return invertMatchResult(pcreMatchInternal(p, pcre_info, cursor));
-     return pcreMatchInternal(p, pcre_info, cursor);
- }
- 
--static int pcreMatchInternal(void *p, PCREInfo* pcre_info, const uint8_t **cursor)
-+static int pcreMatchInternal(void *p, PCRE2Info* pcre_info, const uint8_t **cursor)
- {
-     const uint8_t *buffer_start;
-     int buffer_len;
-@@ -295,7 +339,7 @@ static int pcreMatchInternal(void *p, PC
-     }
- 
- 
--    pcre_found = pcre_test(pcre_info, (const char *)buffer_start, buffer_len, pcre_info->offset, &pcre_offset);
-+    pcre_found = pcre2_test(pcre_info, (const char *)buffer_start, buffer_len, pcre_info->offset, &pcre_offset);
- 
-     if (pcre_found)
-     {
---- a/src/dynamic-preprocessors/appid/luaDetectorApi.c
-+++ b/src/dynamic-preprocessors/appid/luaDetectorApi.c
-@@ -38,7 +38,8 @@
- #include "luaDetectorModule.h"
- #include "luaDetectorApi.h"
- #include "luaDetectorFlowApi.h"
--#include 
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- #include "httpCommon.h"
- #include "sf_multi_mpse.h"
- #include "fw_appid.h"
-@@ -54,7 +55,6 @@
- #include "detector_cip.h"
- 
- #define DETECTOR "Detector"
--#define OVECCOUNT 30    /* should be a multiple of 3 */
- #define URL_LIST_STEP_SIZE  5000
- 
- typedef enum {
-@@ -1355,7 +1355,7 @@ static int Detector_getPacketDir(
-     return 1;
- }
- 
--/**Perform a pcre match with grouping. A simple regular expression match with no grouping
-+/**Perform a pcre2 match with grouping. A simple regular expression match with no grouping
-  * can also be performed.
-  *
-  * @param Lua_State* - Lua state variable.
-@@ -1371,12 +1371,15 @@ static int Detector_getPcreGroups(
-     Detector *detector;
-     char *pattern;
-     unsigned int offset;
--    pcre *re;
--    int ovector[OVECCOUNT];
--    const char *error;
--    int erroffset;
-+    pcre2_code *re;
-+    pcre2_match_data *match_data;
-+    PCRE2_UCHAR error[128];
-+    int errorcode;
-+    PCRE2_SIZE erroffset;
-     int rc, i;
-     DetectorUserData *detectorUserData = checkDetectorUserData(L, 1);
-+    unsigned int oveccount;
-+    size_t *ovector;
- 
-     pattern = (char *)lua_tostring(L, 2);
-     offset = lua_tonumber(L, 3);     /*offset can be zero, no check necessary. */
-@@ -1390,49 +1393,56 @@ static int Detector_getPcreGroups(
- 
-     {
-         /*compile the regular expression pattern, and handle errors */
--        re = pcre_compile(
--                pattern,          /*the pattern */
--                PCRE_DOTALL,      /*default options - dot matches everything including newline */
--                &error,           /*for error message */
--                &erroffset,       /*for error offset */
--                NULL);            /*use default character tables */
-+        re = pcre2_compile(
-+                (PCRE2_SPTR)pattern,    /*the pattern */
-+                PCRE2_ZERO_TERMINATED,  /*zero terminated string*/
-+                PCRE2_DOTALL,           /*default options - dot matches everything including newline */
-+                &errorcode,             /*for error message */
-+                &erroffset,             /*for error offset */
-+                NULL);                  /*use default character tables */
- 
-         if (re == NULL)
-         {
--            _dpd.errMsg("PCRE compilation failed at offset %d: %s\n",erroffset, error);
-+            pcre2_get_error_message(errorcode, error, 128);
-+            _dpd.errMsg("PCRE2 compilation failed at offset %zu: %s\n",erroffset, error);
-             return 0;
-         }
- 
-+        match_data = pcre2_match_data_create_from_pattern(re, NULL);
-+        if (!match_data) {
-+            _dpd.errMsg("PCRE2 failed to alloc data for match data\n");
-+            return 0;
-+        }
- 
-         /*pattern match against the subject string. */
--        rc = pcre_exec(
-+        rc = pcre2_match(
-                 re,                                     /*compiled pattern */
--                NULL,                                   /*no extra data */
--                (char *)detector->validateParams.data,  /*subject string */
--                detector->validateParams.size,          /*length of the subject */
--                offset,                                 /*offset 0 */
-+                (PCRE2_SPTR)detector->validateParams.data,  /*subject string */
-+                (PCRE2_SIZE)detector->validateParams.size,          /*length of the subject */
-+                (PCRE2_SIZE)offset,                                 /*offset 0 */
-                 0,                                      /*default options */
--                ovector,                                /*output vector for substring information */
--                OVECCOUNT);                             /*number of elements in the output vector */
--
-+                match_data,                                /*output vector for substring information */
-+                NULL);                             /*number of elements in the output vector */
- 
-         if (rc < 0)
-         {
-             /*Matching failed: clubbing PCRE_ERROR_NOMATCH with other errors. */
--            pcre_free(re);
-+            pcre2_match_data_free(match_data);
-+            pcre2_code_free(re);
-             return 0;
-         }
- 
-         /*Match succeded */
- 
-         /*printf("\nMatch succeeded at offset %d", ovector[0]); */
--        pcre_free(re);
- 
-+        oveccount = pcre2_get_ovector_count(match_data);
-+        ovector = pcre2_get_ovector_pointer(match_data);
- 
-         if (rc == 0)
-         {
-             /*overflow of matches */
--            rc = OVECCOUNT/3;
-+            rc = oveccount/3;
-             /*printf("ovector only has room for %d captured substrings", rc - 1); */
-             _dpd.errMsg("ovector only has room for %d captured substrings\n",rc - 1);
-         }
-@@ -1447,6 +1457,9 @@ static int Detector_getPcreGroups(
-         lua_pushlstring(L, (char *)detector->validateParams.data + ovector[2*i], ovector[2*i+1] - ovector[2*i]);
-     }
- 
-+    pcre2_match_data_free(match_data);
-+    pcre2_code_free(re);
-+
-     return rc;
- }
- 
---- a/src/dynamic-preprocessors/imap/snort_imap.h
-+++ b/src/dynamic-preprocessors/imap/snort_imap.h
-@@ -38,7 +38,8 @@
- 
- /* Includes ***************************************************************/
- 
--#include 
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- 
- #include "sf_snort_packet.h"
- #include "imap_config.h"
-@@ -216,8 +217,7 @@ typedef struct _IMAPMimeBoundary
- 
- typedef struct _IMAPPcre
- {
--    pcre       *re;
--    pcre_extra *pe;
-+    pcre2_code       *re;
- 
- } IMAPPcre;
- 
---- a/src/dynamic-preprocessors/pop/snort_pop.h
-+++ b/src/dynamic-preprocessors/pop/snort_pop.h
-@@ -38,7 +38,8 @@
- 
- /* Includes ***************************************************************/
- 
--#include 
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- 
- #include "sf_snort_packet.h"
- #include "pop_config.h"
---- a/src/dynamic-preprocessors/smtp/snort_smtp.h
-+++ b/src/dynamic-preprocessors/smtp/snort_smtp.h
-@@ -39,7 +39,8 @@
- 
- /* Includes ***************************************************************/
- 
--#include 
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include 
- 
- #include "sf_snort_packet.h"
- #include "ssl.h"
---- a/src/snort.c
-+++ b/src/snort.c
-@@ -4449,9 +4449,6 @@ void SnortConfFree(SnortConfig *sc)
- 
-     OtnxMatchDataFree(sc->omd);
- 
--    if (sc->pcre_ovector != NULL)
--        free(sc->pcre_ovector);
--
-     if ( sc->event_queue_config )
-         EventQueueConfigFree(sc->event_queue_config);
- 
---- a/src/snort.h
-+++ b/src/snort.h
-@@ -826,7 +826,6 @@ typedef struct _SnortConfig
-     long int tagged_packet_limit;            /* config tagged_packet_limit */
-     long int pcre_match_limit;               /* config pcre_match_limit */
-     long int pcre_match_limit_recursion;     /* config pcre_match_limit_recursion */
--    int *pcre_ovector;
-     int pcre_ovector_size;
- 
- #ifdef PERF_PROFILING
---- a/src/util.c
-+++ b/src/util.c
-@@ -78,7 +78,8 @@ static struct mallinfo mi;
- #include "plugbase.h"
- #include "sf_types.h"
- #include "sflsq.h"
--#include "pcre.h"
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include "pcre2.h"
- #include "mpse.h"
- #include "ppm.h"
- #include "active.h"
-@@ -175,7 +176,7 @@ double CalcPct(uint64_t cnt, uint64_t to
- int DisplayBanner(void)
- {
-     const char * info;
--    const char * pcre_ver;
-+    PCRE2_UCHAR buffer[32];
-     const char * zlib_ver;
- 
-     info = getenv("HOSTTYPE");
-@@ -184,7 +185,7 @@ int DisplayBanner(void)
-         info="";
-     }
- 
--    pcre_ver = pcre_version();
-+    pcre2_config(PCRE2_CONFIG_VERSION, buffer);
-     zlib_ver = zlib_version;
- 
-     LogMessage("\n");
-@@ -204,7 +205,7 @@ int DisplayBanner(void)
- #ifdef HAVE_PCAP_LIB_VERSION
-     LogMessage("           Using %s\n", pcap_lib_version());
- #endif
--    LogMessage("           Using PCRE version: %s\n", pcre_ver);
-+    LogMessage("           Using PCRE2 version: %s\n", buffer);
-     LogMessage("           Using ZLIB version: %s\n", zlib_ver);
-     LogMessage("\n");
- 
diff --git a/net/snort3/Makefile b/net/snort3/Makefile
index b1a2da382..b7658c4d0 100644
--- a/net/snort3/Makefile
+++ b/net/snort3/Makefile
@@ -6,12 +6,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=snort3
-PKG_VERSION:=3.1.77.0
+PKG_VERSION:=3.1.78.0
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/snort3/snort3/archive/refs/tags/
-PKG_HASH:=cb98c0d15caa7c84da24995e8521f42f4e86a860b9748418154d8649b6a0db2d
+PKG_HASH:=08a51223c22aa3196e6dc959d3b52df03da9a458877ff7e77fa9c4ee8eb8947c
 
 PKG_MAINTAINER:=W. Michael Petullo , John Audia 
 PKG_LICENSE:=GPL-2.0-only
@@ -25,7 +25,7 @@ define Package/snort3
   SUBMENU:=Firewall
   SECTION:=net
   CATEGORY:=Network
-  DEPENDS:=+libstdcpp +libdaq3 +libdnet +libopenssl +libpcap +libpcre +libpthread +libuuid +zlib +libhwloc +libtirpc @HAS_LUAJIT_ARCH +luajit +libatomic +kmod-nft-queue
+  DEPENDS:=+libstdcpp +libdaq3 +libdnet +libopenssl +libpcap +libpcre +libpthread +libuuid +zlib +libhwloc +libtirpc @HAS_LUAJIT_ARCH +luajit +libatomic +kmod-nft-queue +liblzma
   TITLE:=Lightweight Network Intrusion Detection System
   URL:=http://www.snort.org/
   MENU:=1
@@ -52,7 +52,7 @@ CMAKE_OPTIONS += \
 	-DMAKE_PDF_DOC:BOOL=NO \
 	-DMAKE_TEXT_DOC:BOOL=NO \
 	-DHAVE_LIBUNWIND=OFF \
-	-DHAVE_LZMA=OFF
+	-DHAVE_LZMA=ON
 
 TARGET_CFLAGS  += -I$(STAGING_DIR)/usr/include/daq3 -I$(STAGING_DIR)/usr/include/tirpc
 TARGET_LDFLAGS += -L$(STAGING_DIR)/usr/lib/daq3 -ltirpc
diff --git a/net/snort3/files/main.uc b/net/snort3/files/main.uc
index c8e039417..3a15f73c6 100644
--- a/net/snort3/files/main.uc
+++ b/net/snort3/files/main.uc
@@ -90,7 +90,7 @@ const snort_config = {
 
 	mode:            config_item("enum",  [ "ids", "ips" ]),
 	method:          config_item("enum",  [ "pcap", "afpacket", "nfq" ]),
-	action:          config_item("enum",  [ "alert", "block", "drop", "reject" ]),
+	action:          config_item("enum",  [ "default", "alert", "block", "drop", "reject" ]),
 	interface:       config_item("str",   [ uci.get("network", "wan", "device") ]),
 	snaplen:         config_item("range", [ 1518, 65535 ]),     // int daq.snaplen = 1518: set snap length (same as -s) { 0:65535 }
 
@@ -137,7 +137,9 @@ snort
                       PID file (why?).  Default /var/log
     openappid       - Enabled inspection using the 'openappid' package
                       See 'opkg info openappid'
-    action          - 'alert', 'block', 'reject' or 'drop'
+    action          - Override the specified action of your rules.  One of 'default',
+                      'alert', 'block', 'reject' or 'drop', where 'default' means use
+                      the rule as defined and don't override.
     method          - 'pcap', 'afpacket' or 'nfq'
     snaplen         - int daq.snaplen = 1518: set snap length (same as -s) { 0:65535 }
     include         - User-defined snort configuration, applied at end of generated snort.lua
diff --git a/net/snort3/files/snort.config b/net/snort3/files/snort.config
index b7d379010..e6b516451 100644
--- a/net/snort3/files/snort.config
+++ b/net/snort3/files/snort.config
@@ -25,7 +25,9 @@
 #                       PID file (why?).  Default /var/log
 #     openappid       - Enabled inspection using the 'openappid' package
 #                       See 'opkg info openappid'
-#     action          - 'alert', 'block', 'reject' or 'drop'
+#     action          - Override the specified action of your rules.  One of 'default',
+#                       'alert', 'block', 'reject' or 'drop', where 'default' means use
+#                       the rule as defined and don't override.
 #     method          - 'pcap', 'afpacket' or 'nfq'
 #     snaplen         - int daq.snaplen = 1518: set snap length (same as -s) { 0:65535 }
 #     include         - User-defined snort configuration, applied at end of generated snort.lua
@@ -59,7 +61,7 @@ config snort 'snort'
 	option openappid       '0'              # one of [0, 1]
 	option mode            'ids'            # one of [ids, ips]
 	option method          'pcap'           # one of [pcap, afpacket, nfq]
-	option action          'alert'          # one of [alert, block, drop, reject]
+	option action          'default'        # one of [default, alert, block, drop, reject]
 	option interface       'eth0'           # a string
 	option snaplen         '1518'           # 1518 <= x <= 65535
 	option include         ''               # a path string
diff --git a/net/snort3/files/snort.uc b/net/snort3/files/snort.uc
index dc36e898d..62dae71ca 100644
--- a/net/snort3/files/snort.uc
+++ b/net/snort3/files/snort.uc
@@ -52,7 +52,9 @@ snort  = {
 ips = {
   mode            = '{{ line_mode }}',
   variables       = default_variables,
+{% if (snort.action != 'default'): %}
   action_override = '{{ snort.action }}',
+{% endif %}
 {% if (getenv("_SNORT_WITHOUT_RULES") == "1"): %}
   -- WARNING: THIS IS A TEST-ONLY CONFIGURATION WITHOUT ANY RULES.
 {% else %}
diff --git a/net/snowflake/Makefile b/net/snowflake/Makefile
index 56019d076..97535516f 100644
--- a/net/snowflake/Makefile
+++ b/net/snowflake/Makefile
@@ -1,13 +1,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=snowflake
-PKG_VERSION:=2.8.0
+PKG_VERSION:=2.8.1
 PKG_RELEASE:=1
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL=https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
 PKG_SOURCE_VERSION:=v$(PKG_VERSION)
-PKG_MIRROR_HASH:=20ff3c292be6d91f535b009b95578d708daeb8b88cc2290e69feade7b844bf60
+PKG_MIRROR_HASH:=27561a12117762cce618890202a906c582b7858356b315c93b316e8acb289b57
 
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE
diff --git a/net/tailscale/Makefile b/net/tailscale/Makefile
index e514fc983..f9b088e5d 100644
--- a/net/tailscale/Makefile
+++ b/net/tailscale/Makefile
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=tailscale
-PKG_VERSION:=1.56.1
+PKG_VERSION:=1.58.2
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/tailscale/tailscale/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=56b7d25c704e3c22e9e20dcb55695cd9c816878d2c172a73c64aac42e460fd41
+PKG_HASH:=452f355408e4e2179872387a863387e06346fc8a6f9887821f9b8a072c6a5b0a
 
 PKG_MAINTAINER:=Jan Pavlinec 
 PKG_LICENSE:=BSD-3-Clause
@@ -25,33 +25,22 @@ PKG_BUILD_PARALLEL:=1
 PKG_BUILD_FLAGS:=no-mips16
 
 GO_PKG:=\
-	tailscale.com/cmd/tailscale \
 	tailscale.com/cmd/tailscaled
 GO_PKG_LDFLAGS:=-X 'tailscale.com/version.longStamp=$(PKG_VERSION)-$(PKG_RELEASE) (OpenWrt)'
 GO_PKG_LDFLAGS_X:=tailscale.com/version.shortStamp=$(PKG_VERSION)
+GO_PKG_TAGS:=ts_include_cli
 
 include $(INCLUDE_DIR)/package.mk
 include ../../lang/golang/golang-package.mk
 
-define Package/tailscale/Default
+define Package/tailscale
   SECTION:=net
   CATEGORY:=Network
   SUBMENU:=VPN
   TITLE:=Zero config VPN
   URL:=https://tailscale.com
-  DEPENDS:=$(GO_ARCH_DEPENDS)
-endef
-
-define Package/tailscaled
-  $(call Package/tailscale/Default)
-  TITLE+= (daemon)
-  DEPENDS+= +ca-bundle +kmod-tun
-endef
-
-define Package/tailscale
-  $(call Package/tailscale/Default)
-  TITLE+= (utility)
-  DEPENDS+= +tailscaled
+  DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle +kmod-tun
+  PROVIDES:=tailscaled
 endef
 
 define Package/tailscale/description
@@ -59,24 +48,17 @@ define Package/tailscale/description
   and cloud instances. Even when separated by firewalls or subnets.
 endef
 
-Package/tailscaled/description:=$(Package/tailscale/description)
-
-define Package/tailscaled/conffiles
+define Package/tailscale/conffiles
 /etc/config/tailscale
 /etc/tailscale/
 endef
 
 define Package/tailscale/install
-	$(INSTALL_DIR) $(1)/usr/sbin
-	$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/tailscale $(1)/usr/sbin
-endef
-
-define Package/tailscaled/install
 	$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d $(1)/etc/config
 	$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/tailscaled $(1)/usr/sbin
+	$(LN) tailscaled $(1)/usr/sbin/tailscale
 	$(INSTALL_BIN) ./files//tailscale.init $(1)/etc/init.d/tailscale
 	$(INSTALL_DATA) ./files//tailscale.conf $(1)/etc/config/tailscale
 endef
 
 $(eval $(call BuildPackage,tailscale))
-$(eval $(call BuildPackage,tailscaled))
diff --git a/net/tcpreplay/Makefile b/net/tcpreplay/Makefile
index 5e993c256..d4496b7cb 100644
--- a/net/tcpreplay/Makefile
+++ b/net/tcpreplay/Makefile
@@ -17,7 +17,7 @@ PKG_HASH:=3ff9753cc43bb15e77832cee657e3030dbcdd957fa247e6abacc605689e24051
 
 PKG_LICENSE:=GPL-3.0
 PKG_LICENSE_FILES:=docs/LICENSE
-PKG_CPE_ID:=cpe:/a:appneta:tcpreplay
+PKG_CPE_ID:=cpe:/a:broadcom:tcpreplay
 
 PKG_FIXUP:=autoreconf
 PKG_BUILD_PARALLEL:=1
diff --git a/net/travelmate/Makefile b/net/travelmate/Makefile
index ef0bf2779..7ade58aab 100644
--- a/net/travelmate/Makefile
+++ b/net/travelmate/Makefile
@@ -1,13 +1,13 @@
 #
-# Copyright (c) 2016-2023 Dirk Brenken (dev@brenken.org)
+# Copyright (c) 2016-2024 Dirk Brenken (dev@brenken.org)
 # This is free software, licensed under the GNU General Public License v3.
 #
 
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=travelmate
-PKG_VERSION:=2.1.1
-PKG_RELEASE:=3
+PKG_VERSION:=2.1.2
+PKG_RELEASE:=2
 PKG_LICENSE:=GPL-3.0-or-later
 PKG_MAINTAINER:=Dirk Brenken 
 
diff --git a/net/travelmate/files/README.md b/net/travelmate/files/README.md
index c089e668e..5b794cd55 100644
--- a/net/travelmate/files/README.md
+++ b/net/travelmate/files/README.md
@@ -43,9 +43,8 @@ To avoid these kind of deadlocks, travelmate will set all station interfaces to
 
 ## Installation & Usage
 * **Please note:** before you start with travelmate ...
-    * you should setup at least one Access Point, ideally on a separate radio,
-    * if you're updating from a former 1.x release, please use the '--force-reinstall --force-maintainer' options in opkg,
-    * and remove any existing travelmate related uplink stations in your wireless config manually
+    * setup at least one AP, ideally on a separate radio
+    * if you're using a single radio unit set the AP channel to 'auto'
 * download [travelmate](https://downloads.openwrt.org/snapshots/packages/x86_64/packages)
 * download [luci-app-travelmate](https://downloads.openwrt.org/snapshots/packages/x86_64/luci)
 * install both packages (_opkg install travelmate_, _opkg install luci-app-travelmate_)
diff --git a/net/travelmate/files/travelmate.init b/net/travelmate/files/travelmate.init
index be10d77f2..4a7dbf260 100755
--- a/net/travelmate/files/travelmate.init
+++ b/net/travelmate/files/travelmate.init
@@ -1,5 +1,5 @@
 #!/bin/sh /etc/rc.common
-# Copyright (c) 2016-2023 Dirk Brenken (dev@brenken.org)
+# Copyright (c) 2016-2024 Dirk Brenken (dev@brenken.org)
 # This is free software, licensed under the GNU General Public License v3.
 
 # set (s)hellcheck exceptions
@@ -15,6 +15,7 @@ extra_command "setup" "[] [] [] Setup the travelmate uplink
 trm_init="/etc/init.d/travelmate"
 trm_script="/usr/bin/travelmate.sh"
 trm_pidfile="/var/run/travelmate.pid"
+trm_scanfile="/var/run/travelmate.scan"
 
 boot() {
 	if [ -s "${trm_pidfile}" ]; then
@@ -76,19 +77,20 @@ status_service() {
 }
 
 scan() {
-	local result scan_name radio="${1}"
+	local result radio="${1}"
 
+	: > "${trm_scanfile}"
 	if [ -z "${radio}" ]; then
-		scan_name="$(ubus -S call network.wireless status 2>/dev/null | jsonfilter -q -l1 -e '@[@.up=true].interfaces[0].ifname')"
+		radio="$(ubus -S call network.wireless status 2>/dev/null | jsonfilter -q -l1 -e '@[@.up=true].interfaces[0].ifname')"
 	fi
-	result="$(iwinfo "${radio:-${scan_name}}" scan 2>/dev/null |
+	result="$(iwinfo "${radio}" scan 2>/dev/null |
 		awk 'BEGIN{FS="[[:space:]]"}/Address:/{var1=$NF}/ESSID:/{var2="";
 		for(i=12;i<=NF;i++)if(var2==""){var2=$i}else{var2=var2" "$i}}/Channel:/{var3=$NF}/Quality:/{split($NF,var0,"/")}/Encryption:/{var4="";
 		for(j=12;j<=NF;j++)if(var4==""){var4=$j}else{var4=var4" "$j};printf "    %-11i%-10s%-35s%-20s%s\n",(var0[1]*100/var0[2]),var3,var2,var1,var4}' |
 		sort -rn)"
-	printf "%s\n" "::: Available nearby uplinks on '${radio:-${scan_name}}'"
-	printf "%s\n" ":::"
+	printf "::: %s\n:::\n" "Available nearby uplinks on '${radio}'"
 	if [ -n "${result}" ]; then
+		printf "%s\n" "${result}" > "${trm_scanfile}"
 		printf "%-15s%-10s%-35s%-20s%s\n" "    Strength" "Channel" "ESSID" "BSSID" "Encryption"
 		printf "%s\n" "    --------------------------------------------------------------------------------------"
 		printf "%s\n" "${result}"
@@ -162,13 +164,13 @@ setup() {
 }
 
 assoc() {
-	local result assoc_name radio="${1}"
+	local result radio="${1}"
 
 	if [ -z "${radio}" ]; then
-		assoc_name="$(ubus -S call network.wireless status 2>/dev/null | jsonfilter -q -l1 -e '@[@.*.*.config.mode="ap"].interfaces[0].ifname')"
+		radio="$(ubus -S call network.wireless status 2>/dev/null | jsonfilter -q -l1 -e '@[@.*.*.config.mode="ap"].interfaces[0].ifname')"
 	fi
-	result="$(iwinfo "${radio:-${assoc_name}}" assoc 2>/dev/null | awk '/^[A-Z0-9:]+/{printf "    %s\n",$1}')"
-	printf "%s\n" "::: Associated wlan stations on '${radio:-${assoc_name}}'"
+	result="$(iwinfo "${radio}" assoc 2>/dev/null | awk '/^[A-Z0-9:]+/{printf "    %s\n",$1}')"
+	printf "%s\n" "::: Associated wlan stations on '${radio}'"
 	printf "%s\n" ":::"
 	if [ -n "${result}" ]; then
 		printf "%s\n" "    MAC addresses"
diff --git a/net/travelmate/files/travelmate.sh b/net/travelmate/files/travelmate.sh
index dca5bc896..0af2e4ac6 100755
--- a/net/travelmate/files/travelmate.sh
+++ b/net/travelmate/files/travelmate.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 # travelmate, a wlan connection manager for travel router
-# Copyright (c) 2016-2023 Dirk Brenken (dev@brenken.org)
+# Copyright (c) 2016-2024 Dirk Brenken (dev@brenken.org)
 # This is free software, licensed under the GNU General Public License v3.
 
 # set (s)hellcheck exceptions
@@ -692,6 +692,16 @@ f_check() {
 				if [ -n "${ifname}" ] && [ "${enabled}" = "1" ]; then
 					trm_ifquality="$(${trm_iwinfo} "${ifname}" info 2>/dev/null | awk -F '[ ]' '/Link Quality: [0-9]+\/[0-9]+/{split($NF,var0,"/");printf "%i\n",(var0[1]*100/var0[2])}')"
 					if [ -z "${trm_ifquality}" ]; then
+						trm_ifstatus="$("${trm_ubuscmd}" -S call network.interface dump 2>/dev/null | "${trm_jsoncmd}" -ql1 -e "@.interface[@.device=\"${ifname}\"].up")"
+						if { [ -n "${trm_connection}" ] && [ "${trm_ifstatus}" = "false" ]; } || [ "${wait_time}" -eq "${trm_maxwait}" ]; then
+							f_log "info" "no signal from uplink"
+							f_vpn "disable"
+							unset trm_connection
+							trm_ifstatus="${status}"
+							f_ctrack "end"
+							f_jsnup
+							break
+						fi
 						continue
 					elif [ "${trm_ifquality}" -ge "${trm_minquality}" ]; then
 						trm_ifstatus="$("${trm_ubuscmd}" -S call network.interface dump 2>/dev/null | "${trm_jsoncmd}" -ql1 -e "@.interface[@.device=\"${ifname}\"].up")"
diff --git a/net/uspot/Makefile b/net/uspot/Makefile
index 9d6dd6485..9207c77b9 100644
--- a/net/uspot/Makefile
+++ b/net/uspot/Makefile
@@ -8,9 +8,9 @@ PKG_MAINTAINER:=Thibaut VARÈNE 
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/f00b4r0/uspot.git
-PKG_SOURCE_DATE:=2023-11-30
-PKG_SOURCE_VERSION:=7e1e21b0f8425205d719b99a392fa893b3e512e6
-PKG_MIRROR_HASH:=494c616159b16d978fe00348ebe50c77a48f1db98d624ed613f3cca2d39e3a6e
+PKG_SOURCE_DATE:=2024-01-09
+PKG_SOURCE_VERSION:=c4b6f2f0bb1e9d2da4adc8cb3523cd7e440d7584
+PKG_MIRROR_HASH:=fa6be10e0479a9dc71b8c21e57b07aac09c8938e8e7120045816a5cd4b949343
 
 CMAKE_SOURCE_SUBDIR:=src
 
@@ -25,7 +25,7 @@ define Package/uspot
   DEPENDS:=+conntrack \
 	   +libblobmsg-json +liblucihttp-ucode +libradcli +libubox +libubus +libuci \
 	   +spotfilter \
-	   +ucode +ucode-mod-math +ucode-mod-nl80211 +ucode-mod-rtnl +uhttpd-mod-ucode +ucode-mod-uloop
+	   +ucode +ucode-mod-log +ucode-mod-math +ucode-mod-nl80211 +ucode-mod-rtnl +uhttpd-mod-ucode +ucode-mod-uloop
 
 endef
 
@@ -49,6 +49,7 @@ define Package/uspot-www
   CATEGORY:=Network
   TITLE:=uspot default user interface files
   DEPENDS:=+uspot
+  PKGARCH:=all
 endef
 
 define Package/uspot-www/description
@@ -63,6 +64,7 @@ define Package/uspotfilter
   PROVIDES:=spotfilter
   CONFLICTS:=spotfilter
   DEPENDS:=+conntrack +nftables-json +ucode +ucode-mod-rtnl +ucode-mod-uloop
+  PKGARCH:=all
 endef
 
 define Package/uspotfilter/description
diff --git a/net/v2ray-geodata/Makefile b/net/v2ray-geodata/Makefile
index 144bc218b..18d2cd26f 100644
--- a/net/v2ray-geodata/Makefile
+++ b/net/v2ray-geodata/Makefile
@@ -12,31 +12,31 @@ PKG_MAINTAINER:=Tianling Shen 
 
 include $(INCLUDE_DIR)/package.mk
 
-GEOIP_VER:=202312071808
+GEOIP_VER:=202401250041
 GEOIP_FILE:=geoip.dat.$(GEOIP_VER)
 define Download/geoip
   URL:=https://github.com/v2fly/geoip/releases/download/$(GEOIP_VER)/
   URL_FILE:=geoip.dat
   FILE:=$(GEOIP_FILE)
-  HASH:=1c8d8bd5e8966a115d2ba16739660ef8ea1ebbb812fec4f87c699df479721652
+  HASH:=cb005854fd16474df068a3a5ce78c845ae6cb53cbce80f6a7ad84b6f52f28a84
 endef
 
-GEOSITE_VER:=20231212122459
+GEOSITE_VER:=20240123112230
 GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
 define Download/geosite
   URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
   URL_FILE:=dlc.dat
   FILE:=$(GEOSITE_FILE)
-  HASH:=954adf9b4e999839073715566ab5df3f2177ad97741ce78dcea9b0795ef30614
+  HASH:=7c2efd90b7e3137e6bc68a78e641b5d9d5790330aa1de129510eeb432f020ec5
 endef
 
-GEOSITE_IRAN_VER:=202312110026
+GEOSITE_IRAN_VER:=202401220028
 GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER)
 define Download/geosite-ir
   URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/
   URL_FILE:=iran.dat
   FILE:=$(GEOSITE_IRAN_FILE)
-  HASH:=0f5a1c31c0b905d6619d5b917a1031defb17f5a556e604327d9bc49ee3de962f
+  HASH:=c0070879b1e98e748ecefbd63306566d44ec1dad3237176655f5f282ba014da7
 endef
 
 define Package/v2ray-geodata/template
diff --git a/net/v2raya/Makefile b/net/v2raya/Makefile
index a47d533a0..88d16acc8 100644
--- a/net/v2raya/Makefile
+++ b/net/v2raya/Makefile
@@ -5,12 +5,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=v2rayA
-PKG_VERSION:=2.2.4.3
-PKG_RELEASE:=1
+PKG_VERSION:=2.2.4.6
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/v2rayA/v2rayA/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=8ebb1790ac57b795a03a13f830d316206040627486bd204158b04917a8c817b7
+PKG_HASH:=22285b2fdf321d68993b38ad738f4af210920757d7944691a78e151abd99cb3a
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/service
 
 PKG_LICENSE:=AGPL-3.0-only
@@ -59,7 +59,7 @@ define Download/v2raya-web
 	URL:=https://github.com/v2rayA/v2rayA/releases/download/v$(PKG_VERSION)/
 	URL_FILE:=web.tar.gz
 	FILE:=$(WEB_FILE)
-	HASH:=187b498b8b5fdac765309c9ae23efb1ccd74e01d713682c44b4aa7689c99017c
+	HASH:=09109442abac13801b7b82433fccbb769657b1d292ac4820af179c297e845135
 endef
 
 define Build/Prepare
diff --git a/net/v2raya/files/v2raya.config b/net/v2raya/files/v2raya.config
index 8ebf318cd..66b66b243 100644
--- a/net/v2raya/files/v2raya.config
+++ b/net/v2raya/files/v2raya.config
@@ -5,9 +5,6 @@ config v2raya 'config'
 	# Listening address
 	option address '0.0.0.0:2017'
 
-	# v2rayA configuration directory
-	option config '/etc/v2raya'
-
 	# Make sure your IPv6 network works fine before you turn it on.
 	# Optional values: auto, on, off.
 	option ipv6_support 'auto'
@@ -19,9 +16,6 @@ config v2raya 'config'
 	# Optional values: trace, debug, info, warn or error
 	option log_level 'info'
 
-	# The path of log file
-	option log_file '/var/log/v2raya/v2raya.log'
-
 	# Maximum number of days to keep log files
 	option log_max_days '3'
 
diff --git a/net/v2raya/files/v2raya.init b/net/v2raya/files/v2raya.init
index b4a719613..1e55a187e 100755
--- a/net/v2raya/files/v2raya.init
+++ b/net/v2raya/files/v2raya.init
@@ -40,12 +40,13 @@ start_service() {
 	procd_set_param command "$PROG"
 	procd_set_param env XDG_DATA_HOME="/usr/share"
 
+	append_env "config" "/etc/v2raya"
+	append_env "log_file" "/var/log/v2raya/v2raya.log"
+
 	append_env_arg "config" "address" "0.0.0.0:2017"
-	append_env_arg "config" "config" "/etc/v2raya"
 	append_env_arg "config" "ipv6_support" "auto"
 	append_env_arg "config" "nftables_support" "auto"
 	append_env_arg "config" "log_level" "info"
-	append_env_arg "config" "log_file" "/var/log/v2raya/v2raya.log"
 	append_env_arg "config" "log_max_days" "3"
 	append_env_arg "config" "v2ray_bin"
 	append_env_arg "config" "v2ray_confdir"
diff --git a/net/wifischedule/Makefile b/net/wifischedule/Makefile
index 98e748c4d..7dc28a9fb 100644
--- a/net/wifischedule/Makefile
+++ b/net/wifischedule/Makefile
@@ -16,7 +16,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=wifischedule
 PKG_VERSION:=1.0.5
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_LICENSE:=PRPL
 
 PKG_MAINTAINER:=Nils Koenig  
@@ -54,7 +54,7 @@ define Package/wifischedule/install
 	$(INSTALL_DIR) $(1)/etc/config
 	$(INSTALL_DATA) ./net/etc/config/wifi_schedule $(1)/etc/config/wifi_schedule
 	$(INSTALL_DIR) $(1)/etc/init.d
-	$(INSTALL_DATA) ./net/etc/init.d/wifi_schedule $(1)/etc/init.d/wifi_schedule
+	$(INSTALL_BIN) ./net/etc/init.d/wifi_schedule $(1)/etc/init.d/wifi_schedule
 endef
 
 define Package/wifischedule/postinst
diff --git a/net/wifischedule/net/usr/bin/wifi_schedule.sh b/net/wifischedule/net/usr/bin/wifi_schedule.sh
index 9787bc37d..9adadd212 100755
--- a/net/wifischedule/net/usr/bin/wifi_schedule.sh
+++ b/net/wifischedule/net/usr/bin/wifi_schedule.sh
@@ -277,14 +277,16 @@ _should_wifi_enabled()
 startup()
 {
     _log "startup"
-    local _enable_wifi=$(_should_wifi_enabled)
-    if [[ ${_enable_wifi} -eq 0 ]]
-    then
-        _log "enable wifi"
-        enable_wifi
-    else 
-        _log "disable wifi"
-        disable_wifi
+    local global_enabled=$(_get_uci_value ${GLOBAL}.enabled) || _exit 1
+    if [ ${global_enabled} -eq 1 ]; then
+        local _enable_wifi=$(_should_wifi_enabled)
+        if [ ${_enable_wifi} -eq 0 ]; then
+            _log "enable wifi"
+            enable_wifi
+        else
+            _log "disable wifi"
+            disable_wifi
+        fi
     fi
 }
 
diff --git a/net/xray-core/Makefile b/net/xray-core/Makefile
index fb0f89a23..ed1f7e97a 100644
--- a/net/xray-core/Makefile
+++ b/net/xray-core/Makefile
@@ -1,12 +1,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=xray-core
-PKG_VERSION:=1.8.6
+PKG_VERSION:=1.8.7
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/XTLS/Xray-core/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=d828296c9f29f9e59a61ab73d44f072ab2a30fe979679e39aea43b33ddb7d6bf
+PKG_HASH:=e8f46177d792b89700f164ca28fbf1a3c7d95a3ecf98871cb0dd5e474b46a859
 
 PKG_MAINTAINER:=Tianling Shen 
 PKG_LICENSE:=MPL-2.0
diff --git a/sound/shairport-sync/Makefile b/sound/shairport-sync/Makefile
index 26310d50d..8a490b983 100644
--- a/sound/shairport-sync/Makefile
+++ b/sound/shairport-sync/Makefile
@@ -7,12 +7,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=shairport-sync
-PKG_VERSION:=3.3.9
+PKG_VERSION:=4.3.2
 PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/mikebrady/shairport-sync/tar.gz/$(PKG_VERSION)?
-PKG_HASH:=17990cb2620551caa07a1c3b371889e55803071eaada04e958c356547a7e1795
+PKG_HASH:=dfb485c0603398032a00e51f84b874749bbf155b257adda3d270d5989de08bfd
 
 PKG_MAINTAINER:=Ted Hess , \
 		Mike Brady 
@@ -29,7 +29,7 @@ define Package/shairport-sync/default
   SECTION:=sound
   CATEGORY:=Sound
   TITLE:=AirPlay compatible audio player
-  DEPENDS:=@AUDIO_SUPPORT +libpthread +alsa-lib +libconfig +libdaemon +libpopt
+  DEPENDS:=@AUDIO_SUPPORT +libpthread +alsa-lib +libconfig +libdaemon +libpopt +libstdcpp +libplist +libsodium +libgcrypt +libffmpeg-full +libuuid +nqptp
   PROVIDES:=shairport-sync
   URL:=https://github.com/mikebrady/shairport-sync
 endef
@@ -78,6 +78,8 @@ endef
 CONFIGURE_ARGS += \
 	--with-alsa \
 	--with-libdaemon \
+	--with-airplay-2 \
+	--with-pipe \
 	--with-metadata
 
 ifeq ($(BUILD_VARIANT),openssl)
diff --git a/sound/shairport-sync/patches/010-no-cxx.patch b/sound/shairport-sync/patches/010-no-cxx.patch
index ac44eb616..e69de29bb 100644
--- a/sound/shairport-sync/patches/010-no-cxx.patch
+++ b/sound/shairport-sync/patches/010-no-cxx.patch
@@ -1,35 +0,0 @@
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -23,10 +23,6 @@ else
- endif
- endif
- 
--if USE_APPLE_ALAC
--  shairport_sync_SOURCES += apple_alac.cpp
--endif
--
- if USE_CUSTOMPIDDIR
- AM_CFLAGS+= \
- 	-DPIDDIR=\"$(CUSTOM_PID_DIR)\"
-@@ -80,11 +76,6 @@ if USE_PA
- shairport_sync_SOURCES += audio_pa.c
- endif
- 
--if USE_CONVOLUTION
--shairport_sync_SOURCES += FFTConvolver/AudioFFT.cpp FFTConvolver/FFTConvolver.cpp FFTConvolver/Utilities.cpp FFTConvolver/convolver.cpp
--AM_CXXFLAGS += -std=c++11
--endif
--
- if USE_DNS_SD
- shairport_sync_SOURCES += mdns_dns_sd.c
- endif
---- a/configure.ac
-+++ b/configure.ac
-@@ -23,7 +23,6 @@ fi
- 
- # Checks for programs.
- AC_PROG_CC
--AC_PROG_CXX
- AC_PROG_INSTALL
- 
- PKG_PROG_PKG_CONFIG([0.9.0])
diff --git a/utils/bcm27xx-eeprom/Makefile b/utils/bcm27xx-eeprom/Makefile
index 8b9851e6a..326ba2c3f 100644
--- a/utils/bcm27xx-eeprom/Makefile
+++ b/utils/bcm27xx-eeprom/Makefile
@@ -1,12 +1,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=bcm27xx-eeprom
-PKG_VERSION:=v2022.04.26-138a1
+PKG_VERSION:=v.2024.01.05-2712
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/raspberrypi/rpi-eeprom/tar.gz/$(PKG_VERSION)?
-PKG_HASH:=7c54839e68f226c5853fb63c8a1539b729d84b2e6bac311a51766c601d10a413
+PKG_HASH:=ae1d9f10e4383ee39b291b4b3be1be583f6f32f806f65a1431da65ca4ccffe39
 
 PKG_LICENSE:=BSD-3-Clause Custom
 PKG_LICENSE_FILES:=LICENSE
@@ -18,15 +18,39 @@ include $(INCLUDE_DIR)/package.mk
 TAR_OPTIONS:=--strip-components 1 $(TAR_OPTIONS)
 TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS)
 
-define Package/bcm27xx-eeprom
+define Package/bcm27xx-eeprom/Default
   SECTION:=utils
   CATEGORY:=Utilities
-  DEPENDS:=bcm27xx-userland +blkid +coreutils +coreutils-od +pciutils +python3-light
+endef
+
+define Package/bcm27xx-eeprom
+$(call Package/bcm27xx-eeprom/Default)
   TITLE:=BCM27xx EEPROM tools
+  DEPENDS:=bcm27xx-userland +blkid +coreutils +coreutils-od +mount-utils +pciutils +python3-light
+endef
+
+define Package/bcm2711-eeprom
+$(call Package/bcm27xx-eeprom/Default)
+  TITLE:=BCM2711 EEPROM tools
+  DEPENDS:=+bcm27xx-eeprom
+endef
+
+define Package/bcm2712-eeprom
+$(call Package/bcm27xx-eeprom/Default)
+  TITLE:=BCM2712 EEPROM tools
+  DEPENDS:=+bcm27xx-eeprom
 endef
 
 define Package/bcm27xx-eeprom/description
-  BCM27xx EEPROM tools.
+  BCM27xx EEPROM config and update tools.
+endef
+
+define Package/bcm2711-eeprom/description
+  BCM2711 EEPROM config and update tools.
+endef
+
+define Package/bcm2712-eeprom/description
+  BCM2712 EEPROM config and update tools.
 endef
 
 define Build/Compile
@@ -45,15 +69,28 @@ define Package/bcm27xx-eeprom/install
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/rpi-eeprom-config $(1)/usr/bin
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/rpi-eeprom-digest $(1)/usr/bin
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/rpi-eeprom-update $(1)/usr/bin
+endef
 
-	$(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader
-	$(CP) $(PKG_BUILD_DIR)/firmware/release-notes.md $(1)/lib/firmware/raspberrypi/bootloader
+define Package/bcm2711-eeprom/install
+	$(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader-2711
+	$(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader-2711/default
+	$(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader-2711/latest
 
-	$(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader/critical
-	$(CP) $(PKG_BUILD_DIR)/firmware/critical/ $(1)/lib/firmware/raspberrypi/bootloader/
+	$(CP) $(PKG_BUILD_DIR)/firmware-2711/release-notes.md $(1)/lib/firmware/raspberrypi/bootloader-2711
+	$(CP) $(PKG_BUILD_DIR)/firmware-2711/default $(1)/lib/firmware/raspberrypi/bootloader-2711
+	$(CP) $(PKG_BUILD_DIR)/firmware-2711/latest $(1)/lib/firmware/raspberrypi/bootloader-2711
+endef
 
-	$(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader/stable
-	$(CP) $(PKG_BUILD_DIR)/firmware/stable/ $(1)/lib/firmware/raspberrypi/bootloader/
+define Package/bcm2712-eeprom/install
+	$(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader-2712
+	$(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader-2712/default
+	$(INSTALL_DIR) $(1)/lib/firmware/raspberrypi/bootloader-2712/latest
+
+	$(CP) $(PKG_BUILD_DIR)/firmware-2712/release-notes.md $(1)/lib/firmware/raspberrypi/bootloader-2712
+	$(CP) $(PKG_BUILD_DIR)/firmware-2712/default $(1)/lib/firmware/raspberrypi/bootloader-2712
+	$(CP) $(PKG_BUILD_DIR)/firmware-2712/latest $(1)/lib/firmware/raspberrypi/bootloader-2712
 endef
 
 $(eval $(call BuildPackage,bcm27xx-eeprom))
+$(eval $(call BuildPackage,bcm2711-eeprom))
+$(eval $(call BuildPackage,bcm2712-eeprom))
diff --git a/utils/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch b/utils/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch
index b0b5f2e0f..4404fc3b6 100644
--- a/utils/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch
+++ b/utils/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch
@@ -1,4 +1,4 @@
-From da37f7b051fe6833e25e78184cc9217dd4379187 Mon Sep 17 00:00:00 2001
+From a7c4e8f246dc58b4c83293b11f6443528065dc70 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= 
 Date: Mon, 23 Mar 2020 10:10:55 +0100
 Subject: [PATCH] rpi-eeprom-update: OpenWrt defaults
@@ -8,34 +8,29 @@ Content-Transfer-Encoding: 8bit
 
 Signed-off-by: Álvaro Fernández Rojas 
 ---
- rpi-eeprom-update         | 6 +++---
- rpi-eeprom-update-default | 5 +++--
- 2 files changed, 6 insertions(+), 5 deletions(-)
+ rpi-eeprom-update         | 4 ++--
+ rpi-eeprom-update-default | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
 
 --- a/rpi-eeprom-update
 +++ b/rpi-eeprom-update
-@@ -24,9 +24,9 @@ else
- fi
+@@ -25,7 +25,7 @@ fi
  
  # Selects the release sub-directory
--FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-default}
-+FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-stable}
- FIRMWARE_IMAGE_DIR=${FIRMWARE_IMAGE_DIR:-${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}}
+ FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-default}
 -FIRMWARE_BACKUP_DIR=${FIRMWARE_BACKUP_DIR:-/var/lib/raspberrypi/bootloader/backup}
 +FIRMWARE_BACKUP_DIR=${FIRMWARE_BACKUP_DIR:-${FIRMWARE_ROOT}/backup}
  ENABLE_VL805_UPDATES=${ENABLE_VL805_UPDATES:-1}
- RECOVERY_BIN=${RECOVERY_BIN:-${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}/recovery.bin}
- BOOTFS=${BOOTFS:-/boot}
+ CM4_ENABLE_RPI_EEPROM_UPDATE=${CM4_ENABLE_RPI_EEPROM_UPDATE:-0}
+ RPI_EEPROM_UPDATE_CONFIG_TOOL="${RPI_EEPROM_UPDATE_CONFIG_TOOL:-raspi-config}"
 --- a/rpi-eeprom-update-default
 +++ b/rpi-eeprom-update-default
-@@ -1,8 +1,8 @@
+@@ -1,7 +1,7 @@
  
  FIRMWARE_ROOT=/lib/firmware/raspberrypi/bootloader
--FIRMWARE_RELEASE_STATUS="critical"
-+FIRMWARE_RELEASE_STATUS="stable"
- FIRMWARE_IMAGE_DIR="${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}"
+ FIRMWARE_RELEASE_STATUS="default"
 -FIRMWARE_BACKUP_DIR="/var/lib/raspberrypi/bootloader/backup"
 +FIRMWARE_BACKUP_DIR="${FIRMWARE_ROOT}/backup"
- BOOTFS=/boot
- USE_FLASHROM=0
  EEPROM_CONFIG_HOOK=
+ 
+ # BOOTFS can be set here to override auto-detection in rpi-eeprom-update
diff --git a/utils/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-change-default-include-path.patch b/utils/bcm27xx-eeprom/patches/0002-rpi-eeprom-update-change-default-include-path.patch
similarity index 53%
rename from utils/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-change-default-include-path.patch
rename to utils/bcm27xx-eeprom/patches/0002-rpi-eeprom-update-change-default-include-path.patch
index 535d07ebe..840cd286f 100644
--- a/utils/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-change-default-include-path.patch
+++ b/utils/bcm27xx-eeprom/patches/0002-rpi-eeprom-update-change-default-include-path.patch
@@ -1,4 +1,4 @@
-From 6674d49dea0104031b3f54df4c7a356dc4307bb2 Mon Sep 17 00:00:00 2001
+From fc552b1e5c503c530763e40d2b83df55c5c2e9a3 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= 
 Date: Wed, 25 Mar 2020 20:58:35 +0100
 Subject: [PATCH] rpi-eeprom-update: change default include path
@@ -8,8 +8,8 @@ Content-Transfer-Encoding: 8bit
 
 Signed-off-by: Álvaro Fernández Rojas 
 ---
- rpi-eeprom-update | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
+ rpi-eeprom-update | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
 
 --- a/rpi-eeprom-update
 +++ b/rpi-eeprom-update
@@ -24,7 +24,16 @@ Signed-off-by: Álvaro Fernández Rojas 
  fi
  
  LOCAL_MODE=0
-@@ -380,7 +380,7 @@ The system should then boot normally.
+@@ -423,7 +423,7 @@ checkDependencies() {
+       echo "Run with -h for more information."
+       echo
+       echo "To enable flashrom programming of the EEPROM"
+-      echo "Add these the following entries to /etc/default/rpi-eeprom-update"
++      echo "Add these the following entries to /etc/bcm27xx-eeprom.conf"
+       echo "RPI_EEPROM_USE_FLASHROM=1"
+       echo "CM4_ENABLE_RPI_EEPROM_UPDATE=1"
+       echo 
+@@ -514,7 +514,7 @@ The system should then boot normally.
  
  If /boot does not correspond to the boot partition and this
  is not a NOOBS system, then the mount point for BOOTFS should be defined
@@ -33,7 +42,7 @@ Signed-off-by: Álvaro Fernández Rojas 
  
  A backup of the current EEPROM config file is written to ${FIRMWARE_BACKUP_DIR}
  before applying the update.
-@@ -413,7 +413,7 @@ Options:
+@@ -546,7 +546,7 @@ Options:
     -u Install the specified VL805 (USB EEPROM) image file.
  
  Environment:
@@ -42,3 +51,12 @@ Signed-off-by: Álvaro Fernández Rojas 
  
  EEPROM_CONFIG_HOOK
  
+@@ -618,7 +618,7 @@ must first be enabled by removing ENABLE
+ via usbboot.
+ 
+ After enabling self-update set the CM4_ENABLE_RPI_EEPROM_UPDATE=1 environment
+-variable or define it in /etc/default/rpi-eeprom-update.
++variable or define it in /etc/bcm27xx-eeprom.conf.
+ 
+ N.B. If there is a power failure during SELF_UPDATE the EEPROM write may fail and
+ usbboot must be used to flash the bootloader EEPROM. SELF_UPDATE is not recommended
diff --git a/utils/bcm27xx-eeprom/patches/0004-rpi-eeprom-update-chmod-silent-f-is-not-supported.patch b/utils/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-chmod-silent-f-is-not-supported.patch
similarity index 89%
rename from utils/bcm27xx-eeprom/patches/0004-rpi-eeprom-update-chmod-silent-f-is-not-supported.patch
rename to utils/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-chmod-silent-f-is-not-supported.patch
index 5872f12da..344d001d8 100644
--- a/utils/bcm27xx-eeprom/patches/0004-rpi-eeprom-update-chmod-silent-f-is-not-supported.patch
+++ b/utils/bcm27xx-eeprom/patches/0003-rpi-eeprom-update-chmod-silent-f-is-not-supported.patch
@@ -1,4 +1,4 @@
-From 8376ac74390af0ad736c88615e128b82a75eebc0 Mon Sep 17 00:00:00 2001
+From 62ec3384358bda60269c131d3880795bc8cdc3ce Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= 
 Date: Fri, 19 Feb 2021 10:54:23 +0100
 Subject: [PATCH] rpi-eeprom-update: chmod silent (-f) is not supported
@@ -13,7 +13,7 @@ Signed-off-by: Álvaro Fernández Rojas 
 
 --- a/rpi-eeprom-update
 +++ b/rpi-eeprom-update
-@@ -200,7 +200,7 @@ applyRecoveryUpdate()
+@@ -216,7 +216,7 @@ applyRecoveryUpdate()
                  || die "Failed to copy ${TMP_EEPROM_IMAGE} to ${BOOTFS}"
  
          # For NFS mounts ensure that the files are readable to the TFTP user
@@ -22,7 +22,7 @@ Signed-off-by: Álvaro Fernández Rojas 
                  || die "Failed to set permissions on eeprom update files"
     fi
  
-@@ -211,7 +211,7 @@ applyRecoveryUpdate()
+@@ -227,7 +227,7 @@ applyRecoveryUpdate()
                  || die "Failed to copy ${VL805_UPDATE_IMAGE} to ${BOOTFS}/vl805.bin"
  
          # For NFS mounts ensure that the files are readable to the TFTP user
diff --git a/utils/bcm27xx-eeprom/patches/0005-rpi-eeprom-config-change-default-text-editor.patch b/utils/bcm27xx-eeprom/patches/0004-rpi-eeprom-config-replace-nano-with-vi-as-default-ed.patch
similarity index 54%
rename from utils/bcm27xx-eeprom/patches/0005-rpi-eeprom-config-change-default-text-editor.patch
rename to utils/bcm27xx-eeprom/patches/0004-rpi-eeprom-config-replace-nano-with-vi-as-default-ed.patch
index 6feb7602c..3cbdd7162 100644
--- a/utils/bcm27xx-eeprom/patches/0005-rpi-eeprom-config-change-default-text-editor.patch
+++ b/utils/bcm27xx-eeprom/patches/0004-rpi-eeprom-config-replace-nano-with-vi-as-default-ed.patch
@@ -1,6 +1,19 @@
+From 8d1e47c956ae10d1146114f7fcd4eb0d33187d08 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= 
+Date: Tue, 16 Jan 2024 16:25:40 +0100
+Subject: [PATCH] rpi-eeprom-config: replace nano with vi as default editor
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Álvaro Fernández Rojas 
+---
+ rpi-eeprom-config | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
 --- a/rpi-eeprom-config
 +++ b/rpi-eeprom-config
-@@ -166,8 +166,8 @@ def edit_config(eeprom=None):
+@@ -184,8 +184,8 @@ def edit_config(eeprom=None):
      """
      Implements something like 'git commit' for editing EEPROM configs.
      """
@@ -11,7 +24,7 @@
      if 'EDITOR' in os.environ:
          editor = os.environ['EDITOR']
  
-@@ -428,7 +428,7 @@ Operating modes:
+@@ -484,7 +484,7 @@ Operating modes:
  
     To cancel the pending update run 'sudo rpi-eeprom-update -r'
  
diff --git a/utils/cryptsetup/Makefile b/utils/cryptsetup/Makefile
index 70a014222..48acf95bb 100644
--- a/utils/cryptsetup/Makefile
+++ b/utils/cryptsetup/Makefile
@@ -18,6 +18,7 @@ PKG_HASH:=410ded65a1072ab9c8e41added37b9729c087fef4d2db02bb4ef529ad6da4693
 PKG_MAINTAINER:=Daniel Golle 
 PKG_LICENSE:=GPL-2.0-or-later LGPL-2.1-or-later
 PKG_LICENSE_FILES:=COPYING COPYING.LGPL
+PKG_CPE_ID:=cpe:/a:cryptsetup_project:cryptsetup
 
 PKG_FIXUP:=autoreconf
 PKG_INSTALL:=1
diff --git a/utils/docker-compose/Makefile b/utils/docker-compose/Makefile
index 5a09ef79c..a76433548 100644
--- a/utils/docker-compose/Makefile
+++ b/utils/docker-compose/Makefile
@@ -1,14 +1,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=compose
-PKG_VERSION:=2.23.3
+PKG_VERSION:=2.24.3
 PKG_RELEASE:=1
 PKG_LICENSE:=Apache-2.0
 PKG_LICENSE_FILES:=LICENSE
 
 PKG_SOURCE:=v$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/docker/compose/tar.gz/v${PKG_VERSION}?
-PKG_HASH:=29ba96c8d398fbc6f7c791c65e70b97e7df116223f2996062441093258d914fe
+PKG_HASH:=255b6e204c87a0d13e9f28cc3e60c39ce81c879a6df5d14d3202fff159f467db
 
 PKG_MAINTAINER:=Javier Marcet 
 
diff --git a/utils/fuse-overlayfs/Makefile b/utils/fuse-overlayfs/Makefile
index 5d5526153..3d52aa3cf 100644
--- a/utils/fuse-overlayfs/Makefile
+++ b/utils/fuse-overlayfs/Makefile
@@ -1,12 +1,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=fuse-overlayfs
-PKG_VERSION:=1.7.1
+PKG_VERSION:=1.13
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/containers/fuse-overlayfs/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=fe2c076aed7b8669e7970301a99c0b197759b611035d8199de4c0add7d2fb2b4
+PKG_HASH:=96d10344921d5796bcba7a38580ae14a53c4e60399bb90b238ac5a10b3bb65b2
 
 PKG_MAINTAINER:=W. Michael Petullo 
 PKG_LICENSE:=GPL-3.0-or-later
diff --git a/utils/restic/Makefile b/utils/restic/Makefile
index 89963c085..b59a89b4e 100644
--- a/utils/restic/Makefile
+++ b/utils/restic/Makefile
@@ -1,12 +1,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=restic
-PKG_VERSION:=0.16.2
+PKG_VERSION:=0.16.3
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/restic/restic/tar.gz/v${PKG_VERSION}?
-PKG_HASH:=88165b5b89b6064df37a9964d660f40ac62db51d6536e459db9aaea6f2b2fc11
+PKG_HASH:=a94d6c1feb0034fcff3e8b4f2d65c0678f906fc21a1cf2d435341f69e7e7af52
 
 PKG_LICENSE:=BSD-2-Clause
 PKG_LICENSE_FILES:=LICENSE
diff --git a/utils/semodule-utils/Makefile b/utils/semodule-utils/Makefile
index bfd94baac..fe2d723bb 100644
--- a/utils/semodule-utils/Makefile
+++ b/utils/semodule-utils/Makefile
@@ -6,12 +6,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=semodule-utils
-PKG_VERSION:=3.5
+PKG_VERSION:=3.6
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/SELinuxProject/selinux/releases/download/$(PKG_VERSION)
-PKG_HASH:=c9a550a737051ebaf2c102f665c7ec2f85e7232870980aa0067998459b414283
+PKG_HASH:=eedb88f2b2124e538f2d614be063c0d9ac3eacc0c51a4da44500ca1ed1ba16f4
 
 PKG_MAINTAINER:=W. Michael Petullo 
 PKG_LICENSE:=GPL-2.0-only
diff --git a/utils/setools/Makefile b/utils/setools/Makefile
index 39eef7cd7..e4cf10e68 100644
--- a/utils/setools/Makefile
+++ b/utils/setools/Makefile
@@ -6,12 +6,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=setools
-PKG_VERSION:=4.4.3
+PKG_VERSION:=4.4.4
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=https://github.com/SELinuxProject/setools/releases/download/$(PKG_VERSION)
-PKG_HASH:=2f751599dbed0d628fb268a3302dd8c578829f302bd28e8c08e182aef7fd5cb8
+PKG_HASH:=3c5fa76a674fe3f6890d900df59b9d142e4b63c9ffbde653904f90ed6e666ef9
 
 PKG_BUILD_DEPENDS:=python-cython/host # Cython>=0.27
 
diff --git a/utils/shared-mime-info/Makefile b/utils/shared-mime-info/Makefile
index b1b7a8a91..5e25608de 100644
--- a/utils/shared-mime-info/Makefile
+++ b/utils/shared-mime-info/Makefile
@@ -6,7 +6,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=shared-mime-info
-PKG_VERSION:=2.2
+PKG_VERSION:=2.4
 PKG_RELEASE:=2
 
 PKG_MAINTAINER:=W. Michael Petullo 
@@ -16,7 +16,7 @@ PKG_LICENSE_FILES:=COPYING
 
 PKG_SOURCE:=shared-mime-info-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=https://gitlab.freedesktop.org/xdg/$(PKG_NAME)/-/archive/$(PKG_VERSION)
-PKG_HASH:=418c480019d9865f67f922dfb88de00e9f38bf971205d55cdffab50432919e61
+PKG_HASH:=32dc32ae39ff1c1bf8434dd3b36770b48538a1772bc0298509d034f057005992
 
 PKG_BUILD_DEPENDS:=gettext-full/host
 
@@ -27,7 +27,7 @@ include $(INCLUDE_DIR)/meson.mk
 define Package/shared-mime-info
   SECTION:=utils
   CATEGORY:=Utilities
-  DEPENDS:=+glib2 +libxml2
+  DEPENDS:=+glib2 +libxml2 +libstdcpp
   TITLE:=MIME-type information
   URL:=https://freedesktop.org/wiki/Software/shared-mime-info/
 endef
diff --git a/utils/shared-mime-info/patches/001-no-xmllint.patch b/utils/shared-mime-info/patches/001-no-xmllint.patch
index f5200bab8..92588bca9 100644
--- a/utils/shared-mime-info/patches/001-no-xmllint.patch
+++ b/utils/shared-mime-info/patches/001-no-xmllint.patch
@@ -1,6 +1,6 @@
 --- a/meson.build
 +++ b/meson.build
-@@ -20,7 +20,7 @@ config.set_quoted('VERSION', meson.proje
+@@ -21,7 +21,7 @@ config.set_quoted('VERSION', meson.proje
  ###############################################################################
  # Find tools
  
diff --git a/utils/sms-tool/Makefile b/utils/sms-tool/Makefile
index e206c48e8..696fe08e0 100644
--- a/utils/sms-tool/Makefile
+++ b/utils/sms-tool/Makefile
@@ -10,9 +10,9 @@ PKG_RELEASE:=1
 
 PKG_SOURCE_URL:=https://github.com/obsy/sms_tool
 PKG_SOURCE_PROTO:=git
-PKG_SOURCE_DATE:=2022-03-21
-PKG_SOURCE_VERSION:=f07699ab5189656f595ffa75872c8938bf4b40ac
-PKG_MIRROR_HASH:=0d114a97eb7aeadd95b49281d29371ba0570382125c34f3f8668d34fd0290f46
+PKG_SOURCE_DATE:=2023-09-21
+PKG_SOURCE_VERSION:=1b6ca03284fd65db8799dbf7c6224210093786b0
+PKG_MIRROR_HASH:=6cfb176b475471462709b1e917276b7bade8ec58cff1ee6d5130caac80586b4e
 
 PKG_MAINTAINER:=Andrey Butirsky 
 PKG_LICENSE:=Apache-2.0
diff --git a/utils/stress-ng/Makefile b/utils/stress-ng/Makefile
index ebdaab8fb..72f8932c6 100644
--- a/utils/stress-ng/Makefile
+++ b/utils/stress-ng/Makefile
@@ -6,12 +6,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=stress-ng
-PKG_VERSION:=0.17.03
+PKG_VERSION:=0.17.04
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/ColinIanKing/stress-ng/tar.gz/refs/tags/V$(PKG_VERSION)?
-PKG_HASH:=3646118dcd683bf1929357e67d36c75f950e849db48f26d298b11028e78f3e7a
+PKG_HASH:=60c37d8b1effc5772fb30f638e20b1de01e0488e274e283301c3fd6c707d8538
 
 PKG_MAINTAINER:=Alexandru Ardelean 
 PKG_LICENSE:=GPL-2.0-only
diff --git a/utils/stress-ng/patches/001-disable-extra-stressors.patch b/utils/stress-ng/patches/001-disable-extra-stressors.patch
index c9dd59cfe..ddbe3ee14 100644
--- a/utils/stress-ng/patches/001-disable-extra-stressors.patch
+++ b/utils/stress-ng/patches/001-disable-extra-stressors.patch
@@ -1,15 +1,17 @@
 --- a/Makefile.config
 +++ b/Makefile.config
-@@ -326,9 +326,9 @@ clean:
+@@ -326,10 +326,10 @@ clean:
+ .PHONY: libraries
  libraries: \
  	configdir \
- 	LIB_AIO LIB_APPARMOR LIB_BSD LIB_CRYPT LIB_DL \
+-	LIB_ACL LIB_AIO LIB_APPARMOR LIB_BSD LIB_CRYPT LIB_DL \
 -	LIB_EGL LIB_GBM LIB_GLES2 LIB_IPSEC_MB LIB_JPEG \
 -	LIB_JUDY LIB_KMOD LIB_MD LIB_MPFR LIB_PTHREAD LIB_PTHREAD_SPINLOCK \
 -	LIB_RT LIB_SCTP LIB_XXHASH LIB_Z
++	LIB_AIO LIB_APPARMOR LIB_BSD LIB_CRYPT LIB_DL \
 +	LIB_IPSEC_MB LIB_JPEG \
 +	LIB_JUDY LIB_KMOD LIB_MD LIB_PTHREAD LIB_PTHREAD_SPINLOCK \
 +	LIB_RT LIB_SCTP LIB_Z
  
- LIB_AIO:
- 	$(call check,test-libaio,HAVE_LIB_AIO,$(LIB_AIO),$(LIB_AIO))
+ LIB_ACL:
+ 	$(call check,test-libacl,HAVE_LIB_ACL,$(LIB_ACL),$(LIB_ACL))
diff --git a/utils/swig/Makefile b/utils/swig/Makefile
index ecd128f52..ea8ac5471 100644
--- a/utils/swig/Makefile
+++ b/utils/swig/Makefile
@@ -7,12 +7,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=swig
-PKG_VERSION:=4.1.1
+PKG_VERSION:=4.2.0
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/$(PKG_NAME)
-PKG_HASH:=2af08aced8fcd65cdb5cc62426768914bedc735b1c250325203716f78e39ac9b
+PKG_HASH:=261ca2d7589e260762817b912c075831572b72ff2717942f75b3e51244829c97
 
 PKG_MAINTAINER:=John Crispin , Hirokazu MORIKAWA 
 PKG_LICENSE:=GPL-3.0-or-later
diff --git a/utils/syncthing/Makefile b/utils/syncthing/Makefile
index 80e6cfb20..149c3b63c 100644
--- a/utils/syncthing/Makefile
+++ b/utils/syncthing/Makefile
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=syncthing
 PKG_VERSION:=1.27.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=syncthing-source-v$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/syncthing/syncthing/releases/download/v$(PKG_VERSION)
diff --git a/utils/syncthing/files/syncthing.init b/utils/syncthing/files/syncthing.init
index 7bcb90dae..9fa1ddf40 100644
--- a/utils/syncthing/files/syncthing.init
+++ b/utils/syncthing/files/syncthing.init
@@ -55,6 +55,8 @@ start_service() {
 
 	config_load "syncthing"
 
+	local group=$(id -gn $user)
+
 	# Some of the default values below might not match the defaults
 	#   in /etc/config/syncthing: the reason is to remain backwards
 	#   compatible with the older versions of this service as it
@@ -67,12 +69,12 @@ start_service() {
 		[ -d "$IDX_DB" ] || mkdir -p "$IDX_DB"
 
 		# A separate step to handle an upgrade use case
-		[ -d "$IDX_DB" ] && chown -R $user:$user "$IDX_DB"
+		[ -d "$IDX_DB" ] && chown -R $user:$group "$IDX_DB"
 	fi
 
 	[ -d "$home" ] || mkdir -p "$home"
 	# A separate step to handle an upgrade use case
-	[ -d "$home" ] && chown -R $user:$user "$home"
+	[ -d "$home" ] && chown -R $user:$group "$home"
 
 	# Changes to "niceness"/macprocs are not picked up by "reload_config"
 	#   nor by "restart": the service has to be stopped/started