NAS-142000 / 27.0.0 / Set the syslog ident for PAM records from middlewared (by anodos325) (#20132)
Original PR: https://github.com/truenas/middleware/pull/20130
Co-authored-by: Andrew Walker <andrew.walker at truenas.com>
[lld-macho] Put ObjC class stubs in __objc_clsstubs
ld64 puts class stubs (_objc_msgSendClass$...) in their own section, __TEXT,__objc_clsstubs, between the stubs and __objc_stubs, on arm64 and arm64e. lld mixed them into __objc_stubs. Do as ld64 does.
The section has an explicit place in the __TEXT order, and thunk generation, the map file and order files treat it like __objc_stubs.
Assisted-by: Claude Code
[llvm-objdump] Read ObjC references through chained fixups
llvm-objdump names the selector or class reference that an instruction loads by reading the pointer in sections such as __objc_selrefs. With chained fixups, as on arm64e, each of these pointers holds an encoded fixup instead, so few or none of them got a name, and a bound class reference showed as "bad class ref".
Read them through the fixups that libObject already decodes: a rebase gives its target, and a bind reads as zero, as it does without chained fixups, so a class reference gets its name from the bind table, which now includes chained binds. The bind table also serves --objc-meta-data, which now names bound class references too. For a pointer format that libObject does not decode, llvm-objdump warns and reads the pointers as before.
Two lld tests now check the arm64e selector references they had left unchecked.
Assisted-by: Claude Code
[lld-macho] Delegate small arm64e class stubs to ARM64
Small arm64e class stubs now call the ARM64 writer, as ARM64e::writeObjCMsgSendStub does for selector stubs, so the shared code handles only fast stubs and no longer needs a placeholder _objc_msgSend slot. GOT slot addresses come from GotSection::getVA. The output is unchanged.
Co-authored-by: Nico Weber <thakis at chromium.org>
Assisted-by: Claude Code
NAS-145062 / 27.0.0 / Fix `serialize_result` fallback (by themylogin) (#20137)
`serialize_result` was broken trivially and didn't have any integration
tests (and unit tests didn't cover failure mode).
Added explicit integration tests for secret redaction for invalid rows.
There only a few plugins left. Everything else has been already
converted to the new style that simply ignores invalid rows.
Original PR: https://github.com/truenas/middleware/pull/20115
---------
Co-authored-by: themylogin <themylogin at gmail.com>
NAS-144234 / 27.0.0 / Remove the TNC-delivered license when leaving TrueNAS Connect (by sonicaj) (#20134)
This PR adds changes to remove the license TrueNAS Connect delivered
when the system leaves TNC, either because the user disabled it or
because TNC de-registered the system (heartbeat/ACME 401). Without this
the license daemon kept honoring the TNC license until its signed
expiry, so paid entitlements persisted after leaving TNC.
Only a community license carrying TNC_SUB is removed. TNC_SUB can also
appear on commercial/enterprise licenses, so the type check is what
keeps paid licenses untouched. Removal deletes the license file, waits
for the daemon to reload and fires `system.post_license_update` so
entitlements, alerts and services re-evaluate. It is best effort: any
failure is logged and never fails the disable or de-registration.
Original PR: https://github.com/truenas/middleware/pull/20107
Co-authored-by: Waqar Ahmed <waqarahmedjoyia at live.com>
NAS-145003 / 27.0.0 / Renew TNC certificate when the ARI lookup fails (by sonicaj) (#20135)
This PR fixes an issue where the TNC certificate was never renewed when
the current ACME CA could not answer the ARI lookup for it, which
happens when TNC moves the account to a CA that did not issue the
certificate (LE and ZeroSSL answer 404, GTS 400). Every ARI error was
treated as "renewal not needed" and the TNC certificate was only looked
at in its last 5 days, so it was skipped daily until it expired.
ARI is now consulted on every daily run with `renew_days` as the floor.
A 400/404 for a certificate issued at least 7 days ago triggers an
immediate renewal without `replaces`; the age guard keeps a fault on our
side or the CA's from reissuing daily across the fleet. Other ARI errors
fall back to the floor instead of vetoing renewal, an expired
certificate renews without querying ARI, and `renew_cert` is serialized
so the boot/failover state check and `renew_certs` cannot both issue a
certificate.
Depends on https://github.com/truenas/truenas_crypto_utils/pull/19 for
[10 lines not shown]
[CIR][mlir][ABI] Add IndirectAliased (byref) argument lowering (#230415)
**Summary:**
Stacked on PR #229991
This PR includes the following changes:
ABIRewriteContext:
- Added `ArgKind::IndirectAliased` and
`ArgClassification::getIndirectAliased` to the MLIR ABI library.
CallConvLowering:
- Mapped classic `IndirectAliased` to the new kind instead of asserting.
CIRABIRewriteContext:
- Rewrite a `byref` parameter to a pointer in its own address space.
- Attach `llvm.align`, `llvm.noundef` and `llvm.byref(T)` to the
parameter and to call operands.
- Callee copies the object into its param slot, as for byval.
- Call site forwards matching storage or copies into a "byref" slot.
[7 lines not shown]
www/drupal11: update to 11.4.10
11.4.8 (2026-09-26)
This is a patch (bugfix) release of Drupal 11.
11.4.9 (2026-10-09)
This is a patch (bugfix) release of Drupal 11.
11.4.10 (2026-10-14)
Security issues fixed
This release fixes security vulnerabilities. Sites are urged to update
immediately after reading the following security announcements and release
notes:
* Drupal core - Critical - Remote code execution - SA-CORE-2026-014
[15 lines not shown]
NAS-144926 / 28.0.0-BETA.1 / Submit usage statistics once a day and gather space cheaply (#20110)
## Problem
Usage statistics were submitted at a random time after every middleware
start, so reboots, restarts and failovers could send them more than once
a day.
Gathering also walked every dataset and zvol on every pool and read
space properties for each one, when only counts, root dataset space,
zvol `used` and the `used` of backed-up datasets were needed. The
per-pool entries only had `capacity`, so used and free space couldn't be
told apart, and `data_without_backup_size` summed `used` over every
dataset, counting nested data once per level.
## Solution
- **Submit at most once every 24 hours.** The time of the last
successful submission is kept in keyvalue, `usage.start` only submits
once 24 hours have passed since then, and the next run is scheduled for
24 hours after it, or 24 hours from now if the attempt raises, so an
unexpected error can't stop future runs until middleware restarts. When
[27 lines not shown]
www/php-ja-wordpress: update to 7.0.8
7.0.8 (2026-10-28)
* An Editor+ stored cross-site scripting (XSS) issue in the personal data
erasure requests screen reported by Anthropic
* A Contributor+ stored cross-site scripting (XSS) issue via whitespace in
block delimiters reported by Rafie Muhammad (Awesome Motive, Inc.)
* An information disclosure issue exposing unpublished Customizer changes to
unauthenticated visitors reported by Antonio Lorensius Silaban
* A hardening fix for unescaped usernames on the multisite Network Users
screens reported by Anthropic
* A permissions issue letting custom roles that moderate comments read, edit
and delete notes on posts they can’t edit reported by Ramon of the
WordPress Security Team
[41 lines not shown]
www/wordpress: update to 7.0.8
7.0.8 (2026-10-28)
* An Editor+ stored cross-site scripting (XSS) issue in the personal data
erasure requests screen reported by Anthropic
* A Contributor+ stored cross-site scripting (XSS) issue via whitespace in
block delimiters reported by Rafie Muhammad (Awesome Motive, Inc.)
* An information disclosure issue exposing unpublished Customizer changes to
unauthenticated visitors reported by Antonio Lorensius Silaban
* A hardening fix for unescaped usernames on the multisite Network Users
screens reported by Anthropic
* A permissions issue letting custom roles that moderate comments read, edit
and delete notes on posts they can’t edit reported by Ramon of the
WordPress Security Team
[41 lines not shown]
NAS-145088 / 28.0.0-BETA.1 / Use `raise FileShouldNotExist()` (#20138)
Although `raise FileShouldNotExist` is a valid Python code, it just
looks wrong.
It's the only exception class that is raised like this across our
codebase.
[flang] [Semantics] [NFC] Use copy-initialization for DerivedTypeDetails:ordinalComponentName (#238674)
Brace-initializing the in-class static constexpr char array fails to
compile with Visual Studio 2019 16.11 (MSVC 19.29.30156). Use the equals
form instead. The array value is unchanged, and the change keeps Flang
buildable with the Visual Studio 2019 16.8 minimum listed in
GettingStarted.md.
Keep other writers off S3 bucket datasets
## Problem
Middleware only refused a writer whose own path was at or inside a BUCKET bucket's dataset, and only when the writer was saved. A writable share or task on a parent dataset and several path-based writers were never checked, and renaming a dataset that held a bucket left the bucket row on the old name.
## Solution
These are best-effort guard rails against misconfiguration.
- **Writers above a bucket.** Writable shares and tasks whose writes cross into child mounts, home directories and the anonymous FTP root are refused on or above a bucket's dataset, on save and on enable. Creating or recovering a bucket where such a writer already reaches it is refused too, and rsync and cloud sync pulls re-check before each run.
- **Path-based writers.** iSCSI and NVMe-oF file extents, VM disks and container devices, `filesystem` writes, VM disk conversion, update uploads, the cloud backup cache and restore, and recursive permission changes inside a bucket outside `s3data` get the same check. Webshare honours `readonly`.
- **Rename.** Renaming a dataset that holds a bucket is refused, since the running service pins the bucket's mount and the row would keep the old name.
- **`Middleware._call`** no longer drops keyword arguments for coroutine methods.
[CodeExtractor] Handle non-instruction assumption conditions (#238462)
Replaces the `cast<Instruction>` in CodeExtractor's assumption cache
verifier with `dyn_cast` so it no longer asserts when an assumption's
condition is not an instruction such as a function argument like`call
void @llvm.assume(i1 %condition)`
Since only instructions can have moved into the outlined function, other
values can be skipped.
The verifier is also now run under `#ifndef NDEBUG` rather than only
with `-debug-only=code-extractor`.