The generic per-executable version probe and the old test.sh both invoke
tcpreplay --version. Under the QEMU test runtime tcpreplay and
tcpreplay-edit abort at startup on the interface link probe
("eth0: SIOCETHTOOL(ETHTOOL_GLINK) ioctl failed: Not a tty") before
autoopts can print the version, which fails the tcpreplay-all test and
warns on the standalone tcpreplay/tcpreplay-edit packages.
Add a test-version.sh that disables the flaky generic probe and asserts
each tool's version without needing an interface, and rewrite test.sh to
exercise the file-processing core (tcpcapinfo dissect, tcprewrite edit,
tcpprep cache) on a small synthesized capture instead of shelling out to
--version, which the CI infrastructure already covers.
Refresh PKG_HASH from the release tarball. Drop
001-allow-external-library-checks-to-be-disabled.patch: its check_lib /
check_lib_apparmor mechanism is upstream as of 0.21.04, so emptying a
LIB_* variable already skips that library check and the Makefile's
LIB_*= opt-out keeps working without the patch.
Pin the new LIB_NL and LIB_GENL probes off: 0.21.04 added netlink
stressors that would otherwise link libnl from staging_dir without a
corresponding DEPENDS, making the build non-deterministic.
Define __UAPI_DEF_ETHHDR=0: 4.6.0 added XDP support, so txring.h now
pulls <linux/if_ether.h> while sendpacket.h pulls <netinet/if_ether.h>,
and on musl both define struct ethhdr. The macro makes the kernel header
defer the struct to libc, fixing the redefinition.
Drop expiry, groupmems and logoutd from SHADOW_APPLETS: shadow 4.20
removed these applets (their sources are gone from the tarball and
src/Makefile.am no longer builds them), so shadow-expiry,
shadow-groupmems and shadow-logoutd have no binary to install.
Update the login.defs bcrypt sed: 4.20's etc/login.defs ships the
commented default "#ENCRYPT_METHOD SHA512" instead of
"#ENCRYPT_METHOD DES", so the old pattern matched nothing and left
ENCRYPT_METHOD unset.
Refresh 004-fix-su-controoling-term.patch for the shifted su.c line
numbers and add the missing git-am header.
Refresh PKG_HASH from the python.org release tarball, and bump
PYTHON3_PIP_VERSION to 26.2.1 to match the pip wheel bundled in 3.14.7's
ensurepip (it already matches the python-pip package version).
Refresh the patches against the new source; only the hunk offsets shift.
Daniel Golle [Mon, 24 Aug 2026 02:06:28 +0000 (03:06 +0100)]
uvol: update to 1.2, expose volume operations over ubus
Move the storage backend probe, the ctx construction, the locking
helpers and the volume-name check out of the CLI script into
/usr/lib/uvol/common.uc, so a second entry point can reuse them
without duplicating the logic.
Publish ubus object 'uvol' with the volume operations and a readiness
query. Consumers such as uxc are pure ubus frontends and must not exec
the command line tool. Ship an rpcd exec plugin, installed by the uvol
package itself, taking the same locks as the CLI so both entry points
stay serialised. As stdout is the plugin's reply channel, point file
descriptor 1 at stderr for the duration of a call.
Send a 'uvol.ready' ubus event at the end of 'uvol boot', carrying the
active backend name and whether the .meta volume is ready. Consumers
such as uxc can wait for this event instead of polling volume state.
Sending is best-effort: boot keeps its exit code even when ubusd is
not reachable.
Daniel Golle [Mon, 24 Aug 2026 02:06:10 +0000 (03:06 +0100)]
uvol: update to 1.1.1, harden backend invocation and volume-name handling
Volume names were interpolated into shell command lines at every
backend call site, so a name containing shell metacharacters ran
arbitrary commands as root. ucode's system() takes an array and execs
it directly, so every call site that interpolates a name, a device or
a path now passes an argument vector instead. Three sites genuinely
want a shell and keep it, with their arguments quoted: the lvm()
helper reads its JSON report via popen(), the content-addressed digest
pipeline quotes the volume path, and taking a volume down attempts a
umount whether or not anything mounted it, so that one keeps its
redirection and is now shared by both backends instead of spelt out
per call site. Suppressed errors that were only hiding a useless
diagnostic are dropped, and the filesystem grow tool is now located by
searching PATH instead of asking a shell.
lvm matches lvname with its own regular expression, and a volume name
was placed in that expression raw, so a dot in a name matched any
character instead of itself: a volume called a.b resolved to an
unrelated axb. Dotted names are the norm, since uxc composes a data
volume as <container>.<volname>; the name is now escaped where the
selection expression is built.
Every lvs, vgs and pvs caller dereferenced straight into the JSON
report, so an lvm invocation that failed to produce one, or failed to
run at all, crashed with a reference error instead of an error code.
Both now report through the .retval every caller already checks.
Volume names reaching the command line are now restricted to
^[A-Za-z0-9_][A-Za-z0-9._-]*$: a leading dot is reserved for uvol's
own volumes such as .meta, and a leading dash would be read as an
option by the backend tools. Only the read-only verbs may name an
internal volume, closing remove, down and resize being able to target
the metadata volume, which the backends never rejected the way mount
registration does; uvol's own boot path calls the backend directly
and is unaffected. The check runs before the per-volume lock, which is
keyed on the volume name too, which is why the -j flag is now consumed
before both. A rejected name exits 22 rather than falling off the end
of the script, which reports success.
Reachable only by root today, through the command line or a volume
name composed by uxc from an author-controlled registration; fixed as
defence in depth.
Fixes: 6350c7bc6 ("uvol: replace with re-write in ucode") Signed-off-by: Daniel Golle <redacted>
Daniel Golle [Fri, 21 Aug 2026 05:55:20 +0000 (06:55 +0100)]
gnunet: update to 0.29.0
v0.28.0:
- util: added GNUNET_CRYPTO_aead_* APIs; removed deprecated
GNUNET_CRYPTO_symmetric_*, GNUNET_CRYPTO_QUALITY_*,
GNUNET_CRYPTO_hash_create_random, GNUNET_CRYPTO_hash_to_aes_key; switched
various crypto primitives from gcrypt to libsodium; deprecated
xsalsa20poly1305/AES-CTR and ECDSA (services moved to EdDSA where
applicable)
- gnsrecord: new Seal/Open API
- pq: added GNUNET_JSON_pack_conditional, array_int16 query/result specs
v0.29.0:
- curl: added GNUNET_CURL_job_add_stream (streams a response body instead
of buffering it) and GNUNET_CURL_job_set_paused
- peerstore: GNUNET_PEERSTORE_Processor now has a single documented
termination signal (NULL record ends iteration; handle released before
the call returns)
- core: fixed a bug in nonce selection in the handshake, among other bugs
- util: added GNUNET_TIME_round_up_utc/round_down_utc; fixed
GNUNET_static_assert to actually assert at compile time; added
GNUNET_MQ_try_handle_message
- namecache: added API to drop cache entries
Refreshed 0005-meson-detect-libcurl-gnutls.patch (hunk offsets only, no
content change).
Not build-verified: a pre-existing host python3/ncurses build failure
affecting every package in this feed blocks the build before it
reaches gnunet's own compile step.
Daniel Golle [Fri, 21 Aug 2026 05:55:04 +0000 (06:55 +0100)]
libextractor: update to 1.19
1.15: fix potential 4 MB on-stack allocation / stack-based buffer overflow
in the OLE2 plugin.
1.16: security fix to not honour LIBEXTRACTOR_PREFIX when linked into a
SUID binary running as root; fix tIME chunk parser in PNG plugin, QT
mime-type detection, wrong constant in REAL plugin, multi-chunked
decompression in DEB plugin, GIF plugin memory leak, W32 IPC error
handling, gzip-compressed header bit-flags.
1.17: fix various minor issues, including a missing 0 terminator in ZIP
handling under particular circumstances.
1.18: detect secure execution mode properly when deciding whether to
honour LIBEXTRACTOR_PREFIX (use secure_getenv()/issetugid()/real vs
effective UID-GID instead of only checking for root).
1.19: add RTF and msoffice plugins; fix bugs and performance issues in
the unzip logic, an offset calculation issue in the WAV extractor, and
minor memory leaks in the ELF extractor; add OSS-Fuzz support.
Add the two new plugins to PLUGINS so they actually get built and
packaged rather than compiled and silently dropped. Per
src/plugins/Makefile.am upstream, neither needs a new dependency:
libextractor_rtf is unconditional (same group as the already-packaged
riff/ps plugins), and libextractor_msoffice only requires HAVE_ZLIB
(same group as the already-packaged deb/odf/zip plugins), which is
already satisfied.
Not build-verified: a pre-existing host python3/ncurses build failure
affecting every package in this feed blocks the build well before it
reaches libextractor's own compile step.
Daniel Golle [Fri, 21 Aug 2026 13:40:13 +0000 (14:40 +0100)]
exim: update to 4.100
Security release, plus one further release the same day.
4.99.5:
JH/01 Restrict named-queue names. Previously, files could be corrupted by
poor choices of name. (GCVE-25-2026-07-45-1)
JH/02 Do not expand a local_part gotten from a .forward file, under
force_command in a pipe transport. (GCVE-25-2026-07-45-3)
4.100: fixes a use-after-free in duplicate processing combined with
continued transport; fixes crashes after deferred local deliveries
from an uninitialised pointer, and excessive DNS lookups on temporary
errors for remote deliveries, both from a mistaken 4.99 optimisation;
fixes a memory leak in DNS lookups present since 4.95; fixes
Proxy-protocol connections evaluating host-based ACL options
(host_reject_connection, helo_verify_hosts, message_size_limit, and
others) against the proxy's own address/name instead of the real
client behind it. Also: dbm lookups no longer return tainted data by
mistake, RFC2047-encoding header size counting, DMARC for empty
envelope senders, and a number of smaller build/portability fixes.
Refreshed patches/030-openssl-deprecated.patch,
patches/100-localscan_dlopen.patch and patches/200-fix-build.patch
for context moved by the version bump. patches/100 also needed six
log_write() call sites fixed: 4.100 dropped log_write()'s leading
selector argument, so the patch's dlopen-failure diagnostics were
passing LOG_MAIN|LOG_REJECT into the format-string slot. All four
patches, including 050, now carry git am headers.
Extended patches/050-fix-crosscompile.patch: 4.100 fixed the dkim.o
partial-link rule in src/miscmods/Makefile (raw `ld -r` -> `$(LD) -r`)
but left the sibling dmarc.o/dmarc_native.o and sieve_filter.o rules
on the unqualified `ld`, which cannot parse a foreign architecture's
relocations when cross-compiling. Applied the same fix to both; these
are the only two `ld -r` sites left in the pristine 4.100 tree.
Build-verified locally for the gnutls and ldap variants on
x86_64/musl.
Daniel Golle [Sun, 23 Aug 2026 20:06:40 +0000 (21:06 +0100)]
oci-runtime-tools: skip the version check for oci-runtime-tests
runtimetest and the ~60 validation/*.go binaries oci-runtime-tests
installs are OCI compliance tests, not user-facing tools, and none
of them has a version flag. Probing one runs the test it implements
instead: CI's generic check reported 58 of 60 missing the version
string and failed the build, and the one it did run tried to read
rootfs-386.tar.gz relative to the probe's working directory rather
than /usr/libexec/oci-runtime-test, so it also failed outright.
Add a test.sh: skip oci-runtime-tests outright, since none of its
binaries can report a version, and keep the generic check for
oci-runtime-tool by replicating it directly now that --version
reports the right string.
Daniel Golle [Sun, 23 Aug 2026 18:29:42 +0000 (19:29 +0100)]
oci-runtime-tools: report the real version string
main.version was linked to PKG_SOURCE_VERSION, the upstream commit
hash, rather than PKG_VERSION, the human-readable string everything
else (the tarball name, the package version, CI's own version probe)
actually means by "version". oci-runtime-tool --version therefore
printed the commit hash twice ("<hash>, commit: <hash>") and never
the string 1.3.0.20260316, which is what CI's generic runtime test
greps stdout for, so the check failed on every push regardless of
this PR's actual content.
gitCommit stays on PKG_SOURCE_VERSION, since that is genuinely what
it is; only version was wrong.
Daniel Golle [Wed, 19 Aug 2026 06:08:49 +0000 (07:08 +0100)]
oci-runtime-tools: install the test rootfs archives on x86
The install recipe guarded both archives with CONFIG_x86, a symbol OpenWrt
never defines: the target symbol is CONFIG_TARGET_x86 and the architecture
symbols are CONFIG_i386 and CONFIG_x86_64. No archive was therefore packaged
and every validation test stopped at "rootfs-amd64.tar.gz: Cannot open".
Key each archive off the architecture symbol that matches it, i686 included,
so the package's own architecture guard and the archive it installs cannot
disagree.
The choice moves out of the install recipe, since a conditional inside a
define has to start at the beginning of the line to be a directive at all,
which leaves no way to indent it as the packaging guidelines ask for.
Daniel Golle [Wed, 19 Aug 2026 06:08:26 +0000 (07:08 +0100)]
oci-runtime-tools: build runtimetest statically
runtimetest is copied into the validation bundle, whose rootfs carries a
static busybox and no dynamic loader, so the dynamically linked binary the
generic Go recipe produces fails to execute and every validation test that
inspects the container from the inside aborts.
Build that one command again as the static binary upstream's own runtimetest
target produces. Upstream gets there by asking the external linker for a
static link, while disabling cgo reaches the same result without fighting the
-linkmode external that the generic Go recipe would otherwise impose.
1.0.10:
* Fix race in thread-per-connection mode on wake-up signal
* Fix rare assertion failure in relation to suspend-and-resume processing
1.0.9:
* Enfocing a minimal size on the PSK.
* Fix support for red zones in memorypool.
* Fix rare over-writing of HTTP version string
* Fix rare crash from adding connection
1.0.8:
* Fixing vulnerabilities
1.0.7:
* Fixing various vulnerabilities
1.0.6:
* Fix various minor issues, like theoretical integer overflows for extreme inputs or NULL
1.0.5:
* Also ensuring other HTTP client headers that should be unique are unique.
1.0.4
* Fixed bug where additional "Content-Length" headers were ignored
1.0.3:
* Fixed bug in connection list traversal logic that could
Daniel Golle [Thu, 20 Aug 2026 14:07:44 +0000 (15:07 +0100)]
postgresql: update to 18.6
Security release from 18.4 (18.5 was never released, pulled post-wrap
due to a regression). A dump/restore is not required for those running
18.x, but see the migration notes below for the first three security
fixes, GIN index reltuples corruption, and btree_gist/ltree reindexing.
- restrict logical decoding output plugins to a new
output_plugin_libraries allowlist; previously a replication user
could load any library for logical decoding (CVE-2026-6471)
- fix contrib/pgcrypto PGP encryption to detect unsupported ciphers;
previously an OpenSSL cipher rejection (e.g. FIPS mode) was ignored
and pgcrypto silently XORed plaintext instead of encrypting it
(CVE-2026-14663)
- fix psql to skip in-line data following a scripted
"COPY ... FROM STDIN" even when the COPY fails before
PGRES_COPY_IN, closing a SQL-injection hazard in scripts that
exercise failing COPY commands (CVE-2026-6464)
- cross-check the output row type of a portal running EXECUTE/FETCH;
divergent declared row types between the outer and inner portal
could lead to server memory disclosure and arbitrary code execution
(CVE-2026-16239)
- fix a buffer overrun with a long time zone abbreviation in
to_char(), which could crash the server or be exploited for
arbitrary code execution (CVE-2026-14669)
Plus a variety of other fixes from 18.4; see the upstream release notes
for the complete list.
Daniel Golle [Thu, 20 Aug 2026 13:53:54 +0000 (14:53 +0100)]
libxmp: update to 4.7.2
4.7.1:
- fixed crashes and other bugs in the smix API; rewrote the smix WAV
loader to support stereo samples
- fixed XM channel default instrument memory, IT high offset/oversized
offset handling, MED synth/hybrid finetune conversion
- fixed Magnetic Fields Packer track loading and optimised tracks
- fixed path_join when loading a module from the current directory
- fixed loading truncated/broken Startrekker AM instruments and their
precedence, envelope, P.FALL and FQ toneporta bugs
- allowed Archimedes MUSX modules to load with a broken SDAT instrument
subchunk
- fixed various -fsanitize=shift-base warnings
4.7.2:
- fixed loading Startrekker modules from memory/handle/callbacks
- fixed a cmake build failure for certain Apple targets (e.g. tvOS)
- fixed stb-vorbis floor1 inverse_db_table indexing, a missing part of
the CVE-2019-13220 fix
Daniel Golle [Thu, 20 Aug 2026 13:41:12 +0000 (14:41 +0100)]
gnupg2: update to 2.5.21
New and extended features:
- gpg, gpgsm: use a partial file on decryption, remove on failure
(disable with --compatibility-flags=no-partial-file-guard)
- gpg: use the INT_RCP_FPR subpacket in revocation signatures
- create a pkgversioninfo.txt file when building with the speedo build
system
Bug fixes:
- gpg: fixed a potential use-after-free in batch key generation when
handling the keyserver URL option
- gpgsm: fixed a regression in gpgsm_verify with expired certificates
- gpgsm: require a minimum tag length for GCM decryption
(CVE-2026-34182)
- scd: limit the size of returned APDU objects from faulty cards; fixed
the condition to retrieve ATR
Daniel Golle [Thu, 20 Aug 2026 13:29:51 +0000 (14:29 +0100)]
gpgme: update to 2.1.2
2.1.1:
- gpgme_op_export now also returns operational errors
- w32: improved debug output in spawn/selection functions, improved
serialization between reader and writer threads, added CRLF handling
for armored output in gpgme-json
Daniel Golle [Thu, 20 Aug 2026 13:27:47 +0000 (14:27 +0100)]
gawk: update to 5.4.1
Changes from 5.4.0 to 5.4.1:
1. Fixed a performance problem in PMA with backing store files 1G or
more in size, by disabling assertions in support/pma.c.
2. Fixed a bug in gensub() when using MinRX.
3. Revised all files that referred to the FSF's old address.
4. Confirmed MinRX case-insensitive matching behaviour is correct per
POSIX even where one character has multiple alternative case
variants; documented and added tests for it.
5. Unary plus and minus now force their operands to be numeric.
6. Documented the intdiv extension (man page and manual description).
Daniel Golle [Thu, 20 Aug 2026 13:14:57 +0000 (14:14 +0100)]
exfatprogs: update to 1.4.3
exfatprogs 1.4.2 - released 2026-06-15
CHANGES:
- install lsdosattr and chdosattr in /bin instead of /sbin
BUG FIXES:
- dump.exfat: prevent heap buffer overflow in name parsing
exfatprogs 1.4.3 - released 2026-08-14
CHANGES:
- honor the user's full locale for diagnostic messages and date formatting
- mkfs.exfat: report final fsync errors and suppress completion messages
with "-q"
- fsck.exfat: increase scan speed when scanning large unused directory
tails
BUG FIXES:
- fix building DOS attribute utilities with non-Bash shells
- dump.exfat/fsck.exfat: ignore reserved allocation-bitmap bits when
counting clusters
- fsck.exfat: reject invalid sector sizes without crashing
- mkfs.exfat: notify the kernel after creating partition tables; generate
GUIDs with correct version/variant fields
- mkfs.exfat/tune.exfat: use standard GUID byte order for GUID input/output
- libexfat: fix directory iterator alignment for large offsets
- prevent allocation bitmap size overflow near the maximum cluster count
Maxim Storchak [Sun, 23 Aug 2026 09:02:33 +0000 (12:02 +0300)]
tmux: update to 3.7c
* Build with jemalloc on macOS to avoid what appears to be a bug in calloc (issue 5385).
* Fix scrollbar initial state so they appear on new windows (issue 5339).
* Check time periodically in loops rather than every one (issue 5367).
* Use message-style again as default for message-format.
* Unzoom before creating floating panes to avoid a crash.
Daniel Golle [Thu, 20 Aug 2026 12:53:36 +0000 (13:53 +0100)]
ccid: update to 1.8.2
1.8.1:
- Correctly close the slots of a multi-slots reader
- Fix 3 minor issues found by AISLE in partnership with Red Hat
- Correctly report IFD_NO_SUCH_DEVICE in InterruptRead
1.8.2:
- Fix initialisation of composite devices (like Yubico tokens)
- Correctly close the slots of a multi-slots reader (serial)
Daniel Golle [Thu, 20 Aug 2026 13:31:46 +0000 (14:31 +0100)]
libp11: update to 0.4.20
0.4.19:
- added native KEYMGMT, SIGNATURE and ASYM_CIPHER operations to the
PKCS#11 provider, enabling OpenSSL 4.x support and improving RSA
interoperability
- added support for ML-DSA, SLH-DSA and FALCON key generation, signing
and verification; PQC key generation examples and provider tests
- added PKCS#11 provider support for ECDH, X25519 and X448 key exchange,
including X25519/X448 key generation
- improved Ed25519/Ed448 public-key resolution with certificate fallback
- fixed use-after-free crashes after enumerating additional PKCS#11 keys
- fixed a potential out-of-bounds write while parsing PKCS#11 URI
attributes
- fixed PKCS#11 session, attribute and key-reference leaks
0.4.20:
- added PKCS#11 3.2 interface discovery and updated the bundled header
to version 3.2
- added PKCS#11 provider support for ML-KEM-512/768/1024 key generation,
encapsulation and decapsulation
- added PKCS11_evp_pkey_decapsulate() API
- added provider signature AlgorithmIdentifier support, including
RSA-PSS parameters and correct default salt length handling
- fixed RSA-PSS salt length parsing and spurious OpenSSL errors
- fixed session-pool races and deadlocks during concurrent key
generation and cryptographic operations
- fixed key-cache and OpenSSL 1.x RSA object use-after-free bugs
- fixed provider EC parameter lifetime handling and resource leaks
during EC, RSA, EdDSA and XDH operations and context cleanup
- fixed installation of p11_ver.h, required by p11_err.h
Daniel Golle [Thu, 20 Aug 2026 20:30:13 +0000 (21:30 +0100)]
python3: stop forcing the ncursesw/{ncurses,panel}.h checks to "no"
d883c02a4106 ("python3: pin host curses to the SDK's narrow ncurses",
2026-05-28) forced every curses header check Python's configure.ac
runs to "no", specifically to keep host ncurses's (then narrow-only)
build from being shadowed by whatever curses headers the build host's
own distro happened to ship under /usr/include.
That assumption broke when openwrt/openwrt@18725c45a33a ("ncurses:
bump to 6.6.20260801") switched host ncurses to track ncurses' git
snapshots rather than the old 6.4 tarball: ncurses 6.6+ defaults to
building wide-character support for ABI 6 (cf_dft_widec, gated on
cf_cv_abi_default which is just the major version - this is a policy
change accumulated in ncurses' own git history since 6.4 was tagged,
not something OpenWrt or ncurses deliberately changed for wide-char
specifically). Host ncurses now produces ncursesw.pc/panelw.pc, which
Python 3.14's configure.ac finds independently via its own
PKG_CHECK_MODULES(CURSES, ncursesw)-style pkg-config probe ("checking
for ncursesw... yes") - a check that was never gated by these ac_cv_*
overrides in the first place. That flips on the wide-character code
paths in Modules/_cursesmodule.c, while the ac_cv_header_ncursesw_*=no
overrides still force the *header* checks to fail, so the actual
#include falls through to the stale narrow ncurses/ncurses.h. The
result is a mismatch between what pkg-config says is available and
what header actually got included, producing:
./Modules/_cursesmodule.c: error: implicit declaration of function
'unget_wch'; did you mean 'ungetch'?
(and similarly for wget_wch, wins_nwstr, mvwins_nwstr - every
wide-character-only curses function).
Fix this at the python3/ncurses integration boundary rather than by
touching ncurses' own host build behaviour globally (see
openwrt/openwrt#24811, which tried --disable-widec on host ncurses
and had to be reverted: it also drops extended colors from host tic,
shrinking MAX_ENTRY_SIZE 32768->4096 so tic can no longer process the
xterm/xterm-256color terminfo entries needed to assemble the target
terminfo package). Since host ncurses's own -I.../include/ncursesw
already gets added via pkg-config's Cflags substitution regardless of
these overrides, stop forcing ac_cv_header_ncursesw_{ncurses,panel}_h
to "no" - configure now genuinely finds ncursesw/ncurses.h in
staging_dir/hostpkg, consistent with what its own pkg-config check
already reports, and both detection paths agree.
ac_cv_header_ncursesw_curses_h stays forced, along with the bare
(non-w) curses.h/ncurses.h/panel.h checks: host ncurses is configured
with --without-curses-h, so staging_dir/hostpkg/include/ncursesw/ has
no curses.h of its own to genuinely detect - a real "yes" here could
only ever come from the build host's own /usr/include/ncursesw/
curses.h (e.g. Fedora's ncurses-devel), the exact distro-shadowing
this override block exists to prevent.
Verified end to end: clean host python3 rebuild against unmodified
current ncurses compiles Modules/_cursesmodule.c and
Modules/_curses_panel.c without error, and the resulting
staging_dir/hostpkg python3.14 successfully `import curses` with
unget_wch present.
Fixes: d883c02a4106 ("python3: pin host curses to the SDK's narrow ncurses") Signed-off-by: Daniel Golle <redacted>
Dirk Brenken [Fri, 21 Aug 2026 19:46:55 +0000 (21:46 +0200)]
banip: release 1.8.12-1
* new option ban_monitorallowed: in allowlist-only mode
the log monitor only honours the local allowlist, so attackers
from an explicitly allowed segment can be banned (fixes openwrt/luci#8950)
* adds the allowlist.local.v4/.v6 Sets, built from /etc/banip/banip.allowlist only,
referenced by no rule
* allowlist-only mode: skip only those external feeds whose direction is
fully covered by the allowlist, instead of skipping all or none — split Sets included
* f_lookup keeps the monitor Set in sync with resolved domains
* f_restore: no more bogus per-proto restore attempts for the allowlist
* f_report: batched and deduplicated geo lookups, correct Set names in the report
* readme update
userpath adds to and removes from the user's PATH. Its only consumer in
the feed was pipx, which has just been removed, so python-userpath now
has no users. Remove it as well.
pipx installs and runs Python applications in isolated virtual
environments. That workflow sees little use on OpenWrt's embedded
targets, and keeping the package current has become a recurring
maintenance burden as upstream keeps adding build- and run-time
dependencies to support it. Nothing in the feed depends on pipx, so
remove it.
Start from ulogd 2.0.8, using `--enable-XYZ` instead of `--with-XYZ`
https://git.netfilter.org/ulogd2/commit/configure.ac?id=794f0385ab60fd8c52ff3ce498c8aac78b58ac20
prosody: do not drive the service through prosodyctl
prosodyctl refuses start, stop, restart and reload once it detects an
init system, and /etc/init.d/prosody makes that detection always true.
The refusal is fatal, so the service could neither be started nor
stopped:
ERROR: Use of 'prosodyctl stop' is disabled in this installation
because we detected that this system uses rc.d for managing
services.
Let procd supervise the daemon directly with -F instead, and reload the
configuration with SIGHUP, which is what prosody expects.
nut: enable shared NSS certificate/key database for upsd and upsmon
Create a group to allow sharing directories files between upsd and
upsmon, and create a shared NSS certificate/key database on postinst
of nut-common (providing the database dir does not already exist).
Also enables preserving the shared database across sysupgrades.
Roc Lai [Tue, 14 Jul 2026 23:04:33 +0000 (07:04 +0800)]
frp: migrate generated configuration from INI to TOML
Migrate frpc and frps configuration generation to the TOML format used by
current frp releases.
- generate TOML configuration from UCI options
- add UCI defaults migration for existing installations
- install additional fragments under /etc/frp/frpc.d and /etc/frp/frps.d
- preserve manual raw TOML fragment support without exposing it in LuCI
- keep client and server TCP mux settings aligned
- update the package metadata for the current frp release artifacts
Dirk Brenken [Tue, 18 Aug 2026 18:49:20 +0000 (20:49 +0200)]
travelmate: release 2.4.8-1
* distinguish an active run cycle from an idle daemon in the
runtime status: 'processing' is now only reported while f_main
is actually running, an idle daemon without uplink reports
'not connected' instead
* settle the status file at the end of f_main, so a leftover
'processing' does not survive into the sleep phase
* README: document the travelmate_status values and the LuCI
button behaviour
Daniel Golle [Sat, 15 Aug 2026 04:45:18 +0000 (05:45 +0100)]
comrade: add package
Serverless peer-to-peer terminal sharing: a host shares a tmux session
that a client joins with a token, over a hole-punched link discovered on
the mainline DHT or link-local multicast, wrapped in an end-to-end SSH
session with the host key pinned in the token.
comrade adds no crypto of its own and follows whatever backend libssh
already links; OpenWrt's libssh uses mbedTLS, so this resolves to
monocypher.
Daniel Golle [Sat, 15 Aug 2026 04:45:18 +0000 (05:45 +0100)]
monocypher: add package
A small, auditable, portable cryptographic library. It provides the
BLAKE2b and Ed25519 primitives that an mbedTLS-based libssh lacks, so
comrade can follow that backend without pulling in libcrypto.
Daniel Golle [Sat, 15 Aug 2026 04:45:18 +0000 (05:45 +0100)]
kcp: add package
KCP, a reliable ARQ protocol offering a TCP-like ordered stream over an
unreliable datagram transport. Built shared as libkcp with an imposed
soname, since upstream sets none.
Josef Schlehofer [Tue, 18 Aug 2026 08:38:10 +0000 (10:38 +0200)]
syslog-ng: install the configuration with INSTALL_CONF
/etc/syslog-ng.conf is installed with INSTALL_DATA, so it ends up
world readable at 0644. The file holds the credentials of every
destination that needs them, so install it with INSTALL_CONF and
0600 instead, as the rest of the tree does for configuration under
/etc.
Josef Schlehofer [Mon, 10 Aug 2026 08:18:30 +0000 (10:18 +0200)]
openzwave: rename version check test.sh to test-version.sh
In actions-shared-workflows the version is now checked in
test-version.sh, while test.sh is left for the generic tests.
MinOZW reports "OpenZWave Version 1.6-1965-g3fff11d2" while PKG_VERSION
is 1.6.1965, so the generic probe never matches and fails the package
for not providing the version. As the only executable in the package it
takes the whole run down; the presence check was already there for that
reason, it just could not suppress the probe from test.sh. Record that
in the file: the format mismatch is not evident from the code.
Give libopenzwave and openzwave-config arms of their own as well, so
that an unknown sub-package fails loudly instead of falling off the end
of the case and returning 0.
Josef Schlehofer [Mon, 10 Aug 2026 08:18:29 +0000 (10:18 +0200)]
domoticz: rename version check test.sh to test-version.sh
In actions-shared-workflows the version is now checked in
test-version.sh, while test.sh is left for the generic tests.
The script only asserts that the binary is present, because domoticz
reports no version; say so in the file, so that a later reader does not
'fix' the override by adding a version probe.
Add a default arm as well, so that an unknown sub-package fails loudly
instead of falling off the end of the case and returning 0.
Josef Schlehofer [Mon, 10 Aug 2026 08:18:17 +0000 (10:18 +0200)]
attr: check the version in test-version.sh
In actions-shared-workflows the version is now checked in
test-version.sh, while test.sh is left for the generic tests.
While moving it, assert the version where it can be asserted. The
package installs attr, getfattr and setfattr, and the latter two do
implement --version:
printf("%s " VERSION "\\n", progname);
so only attr itself needs the presence check; its getopt string is
"s:V:g:r:lqLRS", where -V takes a value rather than printing a version.
The greps carry an explicit || exit 1: the harness uses only the exit
status of the whole script, so without it a failed match would be
discarded by the [ -x ] that ends the arm and the assertion would never
report anything.
Give libattr an arm of its own as well, so that an unknown sub-package
fails loudly instead of falling off the end of the case and returning 0.
openNDS (open Network Demarcation Service) is a high
performance, small footprint captive portal supporting both CPD and
CPI (RFC 8910 and RFC 8908) methods.
Moved from the openwrt/routing feed, as discussed in
https://github.com/openwrt/routing/issues/184.
Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
Josef Schlehofer [Tue, 18 Aug 2026 07:28:03 +0000 (09:28 +0200)]
syslog-ng: do not install syslog-ng-update-virtualenv
The script creates and updates the private Python virtualenv that the
Python module runs from, but the package is built with --disable-python,
so there is nothing for it to do. It cannot even parse its arguments on
a stock image:
/usr/bin/syslog-ng-update-virtualenv: line 30: getopt: not found
Error parsing arguments
batman-adv: fix build against kernels backporting kmalloc_obj
The compat definitions of kzalloc_obj(), kmalloc_obj() and
kmalloc_objs() were guarded by a version range which carves out only
specific stable backports. These helpers are backported on demand to
stable kernel branches, so on a newer stable kernel they collide
with the definitions in include/linux/slab.h and the module fails to
build:
compat-hacks.h:52:9: error: "kzalloc_obj" redefined [-Werror]
./include/linux/slab.h:963:9: note: this is the location of the
previous definition
CI showed this on exactly the four targets sitting on
KERNEL_PATCHVER 6.12 - mips_24kc, powerpc_8548, arm_cortex-a15 and
arm_cortex-a9 - while the six 6.18 targets passed.
Guard each definition on the macro name instead, so the compat code
steps aside whenever the kernel provides the helper, without having
to track which point release of which stable series picked up the
backport.
This mirrors what batman-adv carries in compat-include/linux/slab.h.
That file is not used by this package, which force-includes its own
compat-hacks.h instead, so the same fix has to be applied here as
well. slab.h is included explicitly, because unlike the upstream
file this header does not otherwise pull it in.
batman-adv: use return instead of continue in the migration script
proto_batadv_to_batadv_hardif() uses continue to skip a section, but
there is no loop in the function itself. POSIX leaves continue
without an enclosing loop in the current function unspecified; ash
walks the dynamic call stack and lands on the loop inside
config_foreach, which happens to produce the intended behaviour.
Use return, which expresses the intent directly and does not depend
on how config_foreach is implemented.
Reported-by: openwrt-ai[bot] Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
/etc/config/batman-adv is registered as a conffile although the
package never installs it: files/ only ships the uci-defaults
migration script and the netifd proto handlers. The migration script
itself removes /etc/config/batman-adv as its last step once the
settings have been moved into /etc/config/network, so the entry is
left over from the layout that predates batadv_hardif.
Reported-by: openwrt-ai[bot] Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
B.A.T.M.A.N. Advanced is a routing protocol for multi-hop
ad-hoc mesh networks implemented as a kernel module. It builds
against the mac80211 backport like in the routing feed.
Moved from the openwrt/routing feed, as discussed in
https://github.com/openwrt/routing/issues/184.
Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
Mesh11sd autonomously manages all aspects of an 802.11s mesh
network, with dynamic mesh parameters across all nodes and point to
multi-point vxlan tunneling.
Moved from the openwrt/routing feed, as discussed in
https://github.com/openwrt/routing/issues/184.
Carries three backports on top of the routing feed's copy, all from
the 7.2.0 development cycle and all pointed out by upstream:
- 443cdb4c handles the informational options before get_current_setup()
runs. The setup pass waits for br-lan through wait_for_interface(),
so on a host without that bridge "mesh11sd -v" took the full
interface_timeout, ten seconds by default. That is invisible on a
running router and fatal in the package CI, which kills each version
probe after ten seconds.
- 9d18091f makes the script header agree with the LICENSE file the
project ships. It claimed GPL version 3 or later while the file is
GPL version 2, so PKG_LICENSE follows it to GPL-2.0-or-later.
- d0db5353 fixes a typo in get_current_setup(): the length came from
$apmon_cgi_dir, which is never set, so strlen was always 0 and the
trailing slash check read the wrong character.
The submenu is Mesh rather than the Network top level the feed copy
used; the other mesh packages follow once the move from the routing
feed is complete.
get_interface_address() calls io.open() and dereferences the result
without checking it. /sys/class/net does not contain interfaces
only: with the bonding module loaded it also holds the plain file
bonding_masters, which the `ls -1` in get_interfaces_names() returns
and which has no address below it. io.open() then returns nil and
the script dies with "attempt to index a nil value", so no bat-hosts
data is published at all on such a node.
Return nil when the file cannot be opened and skip those entries in
the caller, which would otherwise index the interface table with
nil. get_hostname() gets the same guard.
Reported-by: openwrt-ai[bot] Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
alfred is a user space daemon for distributing arbitrary local
information (e.g. hostnames or vis data) over a batman-adv mesh
network in a decentralized fashion via IPv6 link-local multicast.
Moved from the openwrt/routing feed, as discussed in
https://github.com/openwrt/routing/issues/184.
The one deviation from the feed copy is SUBMENU:=Wireless, which the
feed copy does not set at all: without it the package sits ungrouped at
the top of the Network menu. Wireless keeps it next to mesh11sd and
batctl, which move across with the same value. A dedicated Mesh submenu
is the better home for all three and is worth adding once enough of the
mesh packages have landed to justify it.
Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
"managment" is user visible in the description of all three variants.
The MAKE_VARS and MAKE_FLAGS continuation lines were indented with
spaces while every other multi-line list in the file uses a tab.
Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
The CONFIG_* switches were assembled into a newline separated string
and smuggled to the build through a shell variable via shexport, so
the Makefile read:
MAKE_FLAGS += $$$$$(call shvar,batctl_config)
They can simply be listed on the make command line instead. The
result is identical, since later assignments on the command line
override earlier ones, exactly as the "n first, then y" order of the
old string relied on. The longest variant expands to 96 assignments,
about 2 KB, so there is no length concern that would justify the
indirection.
Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
batctl is the user space configuration and debugging tool for
the B.A.T.M.A.N. Advanced kernel module. It is packaged in three
variants (tiny, default, full) with different sets of subcommands.
Moved from the openwrt/routing feed, as discussed in
https://github.com/openwrt/routing/issues/184.
The one deviation from the feed copy is SUBMENU:=Wireless, which the
feed copy does not set at all: without it the three variants sit
ungrouped at the top of the Network menu. Wireless keeps them next to
mesh11sd and alfred, which move across with the same value. A dedicated
Mesh submenu is the better home for all three and is worth adding once
enough of the mesh packages have landed to justify it.
Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
Daniel Golle [Tue, 18 Aug 2026 00:10:34 +0000 (01:10 +0100)]
transmission: rebuild against the versioned libdht
libdht now installs libdht.so.0 with a soname and an ABI_VERSION, so the
package it depends on is libdht0 rather than libdht. Bump PKG_RELEASE to
force the rebuild that picks that up.
No other change is needed: DHT_LIBRARY still points at the libdht.so
development symlink, and the resulting binary records the soname, so
transmission-daemon links libdht.so.0 and depends on libdht0.
Daniel Golle [Tue, 18 Aug 2026 00:10:27 +0000 (01:10 +0100)]
libdht: give the shared library a soname
The library installed as a bare libdht.so with no SONAME, so consumers
recorded the filename as their DT_NEEDED and there was no way to express
an ABI break. Build it as libdht.so.0 with a matching soname and declare
ABI_VERSION, so the package is versioned like any other shared library.
jech/dht makes no ABI promise of its own, so 0 is a packaged ABI epoch:
bump PKG_ABI_VERSION if the exported surface changes. That epoch is now
a single variable referenced from ABI_VERSION, the soname, the output
filename and the symlink target, rather than repeated literally in all
four places, matching the pattern already used by libcurl-gnutls.
Also pass TARGET_CFLAGS/TARGET_CPPFLAGS/TARGET_LDFLAGS to the compile
and link, which the hand-written rules had skipped, and fix
PKG_LICENSE_FILES: jech/dht ships LICENCE, not LICENSE, so the declared
file was never found.
Josef Schlehofer [Mon, 17 Aug 2026 07:12:36 +0000 (09:12 +0200)]
librespeed-cli: update to 1.0.14
All twelve backported patches are part of this release, so dropping them.
Release notes: https://github.com/librespeed/speedtest-cli/releases/tag/v1.0.14
rust: build soft-float on soft-float PowerPC subtargets
RUSTC_TARGET_ARCH comes from the GNU triple, so every 32-bit PowerPC
subtarget gets powerpc-unknown-linux-musl. That triple is hard-float and
mpc85xx is not: its e500v2 has no floating-point unit, and the toolchain
reports _SOFT_FLOAT and calls __divdf3 for a division.
So rustc emits lfd, stfd and fdiv for a core with no floating-point
registers, and passes doubles in a way nothing else in the image does. It
does not fail outright — a speed test reported negative throughput, and
formatting one of those values tripped an assertion inside core.
Pass -Ctarget-feature=-hard-float where CONFIG_SOFT_FLOAT says so. The same
flag has to reach the std that rust/host builds, or std and the packages
linked against it disagree about how a double is passed.
rust: fix compare_exchange_weak never succeeding on mpc85xx
LLVM places the release fence of a cmpxchg between the load-linked and the
store-conditional. On e500v2 that clears the reservation, so the
store-conditional always fails. The strong form retries and re-reserves; the
weak form has no retry and can never succeed.
fetch_update in core is a weak retry loop, so it spins forever and anything
using it hangs. A tokio reactor livelocks on its first I/O event, burning
CPU without issuing a syscall, which makes async Rust unusable on the
subtarget.
Carry the fix as a patch until it reaches a rustc release. It adds a
TargetLowering hook, defaulting to false, so only PowerPC changes.
nodogsplash: fix config generation in the init script
Three problems in the generated configuration:
- The error message for a missing configuration file prints $file,
which is never set, instead of $val, which holds the path.
- The warning for the unsupported FAS options prints the value of
the option instead of its name, so the message does not say which
option is unsupported.
- gatewayinterface is emitted twice: once resolved to a device via
network_get_device() as "GatewayInterface", and once more by the
generic option loop with the raw UCI value. When the value names a
network section rather than a device, the second line overrides
the resolved device with a name nodogsplash cannot use.
Reported-by: openwrt-ai[bot] Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
Nodogsplash is a captive portal that offers a simple way to
provide restricted access to the Internet by showing a splash page
to the user before Internet access is granted.
Moved from the openwrt/routing feed, as discussed in
https://github.com/openwrt/routing/issues/184.
Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
Josef Schlehofer [Sat, 15 Aug 2026 10:12:39 +0000 (12:12 +0200)]
luajit2: update to 2026-07-31
Also refresh 020-riscv64-support.patch from the current state of
openresty/luajit2#236. The previous snapshot defined
asm_tail_prep(ASMState *as), but since openresty/luajit2 commit 68354f44 the callers pass a second TraceNo argument, so the riscv64
build failed with:
lj_asm.c:2559:5: error: too many arguments to function 'asm_tail_prep'
The refreshed patch carries the upstream adaptation and restores the
build. The other four patches apply unchanged.
Josef Schlehofer [Sat, 15 Aug 2026 09:21:08 +0000 (11:21 +0200)]
luajit2: fix build and runtime on powerpc
luajit2 currently fails to link for powerpc: lj_vm.o emits PLT calls
that force BSS-PLT, which the inline-PLT relocations emitted by GCC 12
and newer do not support. Add the same GOT-based fix that
lang/lua/luajit has carried as 060-ppc-musl.patch since 2019.
With that in place the package builds, but ipairs() and pairs() turn
out to be broken on 32-bit big-endian soft-float targets. Both are
regressions in luajit2's PPC64 patch and do not affect upstream
LuaJIT. To be submitted to openresty/luajit2 as well.
Carsten Schuette [Wed, 12 Aug 2026 16:41:37 +0000 (18:41 +0200)]
btrfs-progs: remove no-mold flag as it builds fine with mold 2.42.0
btrfs-progs have a no-mold flag since 2025. With latest mold 2.42.0
released a few days ago, the changes from #26541 can be reverted as
btrfs-progs compiles fine with mold.
Josef Schlehofer [Mon, 10 Aug 2026 07:56:58 +0000 (09:56 +0200)]
olsrd: record why the version check logs "Terminated"
olsrd leaves through olsr_exit(), which ends the process with
raise(SIGTERM) rather than returning from main, so the shell reports
"Terminated" right after the version banner even for a plain
`olsrd -v`. The pipeline status comes from grep, so the check itself
is unaffected, but the line in the CI log looks like a failure to
anyone reading it.
Note it in the script so the next reader does not go hunting.
Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
olsrd builds its version banner from the VERS make variable, which
defaults to the upstream development version "pre-0.9.9", so
`olsrd -v` never mentioned the version the package was built from.
The source tarball carries no git metadata either, so the git hash
in that string is always zero:
olsr.org - pre-0.9.9-git_0000000-hash_5fd8976...
Pass PKG_VERSION as VERS, the same way alfred and batctl already
pass REVISION, so the banner identifies the packaged revision. This
also lets test-version.sh check the real version instead of merely
confirming that the binary starts.
Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
olsrd: reject non-address input before eval in olsrd-neigh.sh
olsrd-neigh.sh builds shell variable names from data announced by
other nodes in the mesh and passes them through eval:
eval IP_${ip//[.:]/_}="$hostname"
eval re-parses the string after the quotes have been consumed by the
first expansion pass, so a hostname of `x;reboot` announced by a
remote node is executed as a command on every node that runs the
utility. The values come from the nameservice plugin's hosts file
and from the txtinfo plugin, both of which carry unauthenticated
remote input.
Discard entries containing anything other than the characters that
can legitimately appear in an address or hostname before they reach
eval, in both places.
Reported-by: openwrt-ai[bot] Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
olsrd: initialize the LQ multiplier list pointer in the ubus handler
The ubus add_interface handler allocates a struct olsr_lq_mult with
malloc() and assigns only ->addr and ->value, leaving ->next
uninitialized before the node is published into cnf->lq_mult. olsrd
walks that list with
for (mult = cnf->lq_mult; mult != NULL; mult = mult->next)
so the first traversal follows an indeterminate pointer.
Chain the new node onto the existing list, which is what the
configuration file parser does for LinkQualityMult in
src/cfgparser/oparse.y. This also makes the orig_lq_mult_cnt++ on
the next line consistent, since the entry really is prepended to the
list instead of replacing it.
Reported-by: openwrt-ai[bot] Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
The only file shipped by olsrd-utils is olsrd-neigh.sh, which
sources /usr/share/libubox/jshn.sh on its third line. That file
belongs to the jshn package, which is not pulled in by the
olsrd -> libubus -> libubox dependency chain, so on a minimal image
the utility fails immediately with "not found".
Reported-by: openwrt-ai[bot] Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>
olsrd: fix respawn_threshold lookup in the IPv6 init script
The UCI option is spelled respawn_threshold, as documented in
files/olsrd6.config and as read by files/olsrd4.init, but the IPv6
init script looks up _respawn_threshold. The lookup never matches,
so a user-configured value is silently ignored and the built-in
default of 3600 is always used.
Reported-by: openwrt-ai[bot] Signed-off-by: Josef Schlehofer <redacted> Co-authored-by: Claude Fable 5 <redacted>