Skip to content
NEW:
[API] Expand common:get-ip{,6}-address to include pool when invoked as Appliance Administrator.
[API] misc:release-fsghost(), examine active processes for referenced file that exists solely in process space, in other words a file whose inode is no longer referenced in the OS. Covers situations where for example Postfix may update but file permissions are non-atomic which in turn may result in an invalid copy of postdrop without appropriate setuid permissions for injection into mail queue. Offending sites are frozen, processes terminated, and mount cache emptied before restoring to previous state.
[API] misc:run-cron(), run all or specific module crons immediately, bypassing timers.
[Cgroup] v2. Overhauled interface, fewer mountpoints, faster PHP-FPM startups. Run cpcmd scope:set cgroup.version 2 (reboot necessary).
[Internal] Error_Reporter::exception_convert() convert an exception into a lightweight message that retains frame info. Useful for capturing exception upgrades in nested code with retained context.
[Scopes] LDA delivery deletion controllable on a global scale using mail.spam-deletion-threshold. Likewise spam scoring threshold set by mail.spam-threshold. Deletion threshold may be overrode on a per-site basis, as well as score threshold with SpamAssassin. rspamd scoring threshold is still global.
[Web Apps] Document roots symlinked as subdirectories within existing domain structures treated as subsites within parent hostname ("subsite" feature).

FIXED:
[Backend] One-off housekeeping overwrites primary housekeeping/cron pid. If cron exits abnormally, backend cannot restart as it becomes untracked.
[Backend] Race condition between nsswitch systemd source removal in group database during install and cron.
[DAPHNIE] Truncating a value over field limit creates null dereference through unregistered cgroup statistic within metric provider. Introduce anonymous statistics whose type is inferred from database result.
[Database] [database] => concurrency_limit takes precedence over individual database limits.
[DNS] validate_template() Ephemeral account changes results in null invariant return.
[Laravel] Logic inversion precludes cache generation.
[Manage Users] Duplicate username label.
[OS] Shell timezone.
[PHP] .user.ini ignored without specifying DOCUMENT_ROOT environment var.
[Scopes] cp.config settings missing.
[Scopes] system.integrity-check deactivation delays deactivation until second run.

CHANGED:
[Bootstrapper] Report backend log if admin creation fails.
[Bootstrapper] Delay cron tasks until FST fully provisioned.
[Cgroup] Reinitialize blkio controller on bugged kernel to ensure monotonic counters properly reinitialized.
[DNS] Normalize Hetzner NS records.
[Laravel] Refer to laravel/laravel as installation basis instead of framework.
[Laravel] Run composer/artisan commands as approot owner.
[Let's Encrypt] During _acme-challenge TXT probe, explicitly request authoritative results to ensure propagation without forwarding in split-view DNS setups.
[Scripts] mapCheck removes orphaned sites.
[UI] Acquire screenshots on subpaths.
[Web Apps] Hostnames may be overwritten by rediscovering on multihomed directory.
[Web Apps] Updateable versions in UI follow webapp:is-current logic.
[Webmail] Changing webmail location attempts SSL issuance for new subdomain.
[Yum] Updating apps may now pull in new dependencies.

REMOVED:
[Ghost] Drop -D flag, originally a means to bypass permission checks but now unconditionally sets NODE_ENV=development.
[UI] Hide DNS tab when provider is "null".
[UI] Remove SPF Setup when provider is "null".
[Web Apps] Deduplicate same paths.