Skip to content

Tags

Tags give the ability to mark specific points in history as being important
  • v3.2.45.2
    FIXED:
    [License] Workaround for X1 intermediate CA expiry. Introduce a 1 in 10 lottery to perform a license renewal whenever an authority is within 30 days of expiration. Coordination policy has changed to introduce a new CA approximately 90 days of expiration. Next CA rotation, X2, will occur before on or before August 2, 2027. Licenses may be renewed before the automated license check using "bin/scripts/license.php renew --force" with ApisCP root.
    
  • v3.2.45.1
    FIXED:
    [Laravel] Derived classes perform version check.
    [SSL Certificates] Null dereference.
    [Web Apps] Callback order is non-deterministic when multiple callbacks exist in a hash table. Perform validity check during gc to ensure Web App has installed properly if attempting rollback.
    [Web Apps] Pending install reports future relocated path.
    
    CHANGED:
    [PHP-FPM] Bypass reload call on pools pending socket activation.
    
  • v3.2.45
    NEW:
    [Scopes] cp.role, turnkey setting panel specialization. See INSTALL.md.
    [ssl] trust_endpoint(), import certificate in named uri into pki truststore.
    
    FIXED:
    [Argos] systemd-resolved monitoring always deactivated due to trailing markup in conditional expression.
    [File Manager] Recursive chmod ignored.
    [Hetzner] Weak record match generates type error.
    [Keyring] Encrypted value cannot be decoded if it is also a default setting.
    [Invoiceninja] Corrupted install throws unhandled exception on version check.
    [Laravel] Installable version diverts from laravel/laravel versioning in 11.x.
    [Let's Encrypt] Reissuing certificates issued after June would discard certificate from internal registry when strict mode is disabled.
    [misc] flush_cp_version() flushes incorrect cache tier.
    [Opcenter] Improper dependency ordering generates lookup error when pgsql,enabled.
    [pgsql] edit_user() doubly encrypts an encrypted password. Add support for SCRAM.
    [pgsql] import() errors unreported.
    [PostgreSQL] Creating a database explicitly grants USAGE, CREATE on public schema with PostgreSQL v15. These permissions are no longer implicitly granted. Issue is nonreproducible on 16.
    [Process] Device field reported in maps() as unsigned long.
    [Rampart] Reloading firewalld purges fail2ban rules.
    [Scopes] Fatal error setting Maxmind key in auth.geoip-key.
    [Timezone] Select timezones, including Europe/Kyiv, are unsupported prior to ICU 72.
    [Timezone] Timezone changes lost in concurrent writer situation.
    
    CHANGED:
    [Bootstrapper] multiphp_build is automatically set depending upon requested PHP version.
    [Bootstrapper] Reorder installation process to clarify completion.
    [Bootstrapper] Start services after firewall configured.
    [ImageMagick] RPM hook for ImageMagick-libs update that forces a library refresh for resident libMagickCore handles.
    [Let's Encrypt] Enhance debugging diagnostics.
    [Let's Encrypt] Add R10, R11 fingerprints introduced in June.
    [Logging] Filtered messages preserve caller order.
    [mapCheck] Correct group within vfs.
    [misc] release_fsghost() bypasses backend elevation if possible.
    [Net] Report resolver in diagnostics.
    [PostgreSQL] Permitted user extension list extracted to config.ini in [pgsql] => user_extensions.
    [Quota] Soft quota, which triggers grace period flag, set too low at 99% resulting in mailbox disablement if an account straddles this threshold too long. Move soft quota to 1 MB below hard.
    [Rampart] Reload of firewalld with overlapping rules may impair network connectivity. Perform a full restart to ensure network is available.
    [Transfer] Disable peer name verification when target server is numeric. Enables usage if self-signed certificate is in pki truststore (see ssl:trust-endpoint).
    [Web Apps] Deferred callbacks may be cancelled in event of failure.
    [Web Apps] Inexact versions always take latest release.
    
  • v3.2.44
    NEW:
    [Accounts] Project quota support. A tertiary quota tier for grouping multiple accounts under a shared block/inode quota. Assignment done within diskquota,group service parameter. See Resource enforcement.md.
    [Database] MariaDB and PostgreSQL listening IPs may be set using mysql.listening-ips and pgsql.listening-ips Scopes respectively.
    [Mail] SRS secret may be rolled ahead of 48 hour validity period using mail:roll-srs or setting [mail] => srs_autoroll. See SECURITY.md.
    [Mail] catch-all and external forwarding may be set granularly per site in mail,catchallfwd and mail,extfwd.
    [Map] "textfile" type maps support duplicate keys.
    [PHP] ionCube 8.4 support.
    [Route53] Support multiple same-origin records.
    [UI] Defining NO_AUTH=1 in an app bypasses authentication/authorization checks.
    
    FIXED:
    [Bootstrapper] Mitogen runtime socket lost on /tmp remount.
    [CLI] Strings that contain array metacharacters without proper demarcation syntax parsed as array.
    [DNS] Provisioning a domain performs unconditional reset, ignoring existing record presence.
    [Frontend] Shutting down httpd service within backend asserts PHP7 module.
    [Kernel] Modern EFI-based systems with multiple drives in softraid may boot of hard drives in round robin fashion. EFI may not be raided thus grub2 configuration must be updated on each EFI system partition. Resolves issues with cgroupv2 on OVH systems.
    [Laravel] Version cap applies floor.
    [Opcenter] Service parameters that accept "DEFAULT" report "DEFAULT" upon service value expansion if parameter has not yet been committed to account.
    [Opcenter] Escape metacharacters in site creation command.
    [PowerDNS] All records of same name, content, RR must share same TTL - se PowerDNS/pdns#10921.
    [PowerDNS] Remove all records when parameter value omitted.
    [Subdomains] Multi-level subdomains cannot be removed.
    [Transfer] --stage non-persisted over a collection of sites. --all preserves buffer across runs.
    [WordPress] Versionless themes and plugins generate type error.
    
    CHANGED:
    [API] site:wipe returns challenge token.
    [API] Modules that implement _cron() must implement Tasking interface. Schedules may be suspended by passing null to $interval.
    [Cloudflare] URI RR type deprecates "content" parameter in favor of "target".
    [Discourse] 3.2+ compatibility.
    [DNS] Rely on internal cache for asynchronous record modifications before consulting authoritative servers.
    [FTP] Set passive address for machines behind NAT.
    [FTP] vsftpd configuration may be overrode in Bootstrapper. See Customizing.md.
    [Logging] silence() macro usage bypasses suppression in debug mode.
    [Migration] Importing from backup will administratively add missing domains to profile to ensure addon domains may be properly added. Such a situation arises if the account was created, then an import applied to account.
    [Migration] Running specific stage in cPanel backup restore as --do includes dependent components.
    [Net] IpCommon:bound() autodetects family.
    [Opcenter] Reorder cgroup, diskquota dependency map such that removing quota would not inhibit cgrules generation.
    [UI] /.well-known URI maps to storage/well-known/.
    [vfs] Alias ImageMagick "convert" binary to "magick".
    [vfs] Package synchronizer implements --remove-all, --auto alternatives states.
    [vfs] Update ghostscript dependencies.
    [Web Apps] "fortify" is now a transient property.
    [Web Apps] Version reports triadic falsey state: "false" on failure, "" during install, and "null" on irresolvable.
    
    REMOVED:
    [Transfer] Original migration log reported database users without prefix as API handled without prefix. Retaining behavior results in ambiguity when namespaced user is named after dbaseadmin as the API prefers fully-qualified users now but falls back to prefixless.
    
  • v3.2.43
    FIXED:
    [Bootstrapper] Mitogen lxml module blacklist in software/imagick role.
    [Cgroup] Last named group in cgroup.controllers reports unmounted.
    [Cloudflare] Reading values from auth.yaml, use cloudflare.email parameter if scalar value detected for "key".
    [Ghost] Update reports old version.
    [Migration] Mailbox conflict generates separate argument exception.
    [Opcenter] 6.x kernels may not expose device-mapper queueing directly relying instead on intrerogating slave members to determine underlying block.
    [Transfer] multiPHP unavailable on target server generates unhandled exception.
    [vfs] Apply missing PostgreSQL 16, PHP 8.3 Remi package hooks.
    
    CHANGED:
    [Bootstrapper] Restart PostgreSQL if needed for TimescaleDB extension update.
    [Cgroup] v2 default on all new installs. v2 reduces mount-point pollution with a monolithic controller per group reducing overhead on php-fpm service startup.
    [email] convert_mailbox()- invokable by user administrator.
    [Linode] Rely on 53/UDP for record lookups until 53/TCP access is restored by Linode.
    [php] Passing "null" to $version parameter resets PHP pool to system default.
    [Synchronizer] Terminate rpmdb processes to acquire a reader lock.
    [Webapps] Update best-match algorithm to prefer same major if an 8.x installer is requested but a 6.x installer is published after the last available 8.x installer.
    [Webapps] Rewrite meta initialization such that parseInstallOptions() sets meta, notifyInstalled() commits it. A separate call is no longer needed to initializeMeta() within an app installation routine. Likewise all callbacks registered will fire once meta is committed.
    
    REMOVED:
    [Discourse] GeoIP key no longer mandatory.
    
  • v3.2.42.3
    CHANGED:
    [Let's Encrypt] Support E5/E6 signing intermediaries effective June 6.
    
  • v3.2.42.2
    FIXED:
    [MariaDB] CapabilityBoundingSet/AmbientCapabilities conflict with changes introduced in 10.4.34+, initially triggered in 10.5.25 release. See MariaDB/server@76a27155b4cd for further details.
    
    CHANGED:
    [MariaDB] Floor query_cache_size to nearest power of 2.
    
    REMOVED:
    [cgroup] Incompatible cgroupv1 configuration upon migration to v2.
    
  • v3.2.42.1
    NEW:
    [SourceGuardian] PHP 8.3 support.
    
    FIXED:
    [Filesystem] getMountOptions() detects first path that starts with path.
    
    CHANGED:
    [Cgroup] Workaround for blkcg_iostat_update kernel panic present in 4.18.0-513.
    [Internal] fatal()/report() supports symbolic messages.
    [Scopes] php.version incorrectly reports next system version as multiPHP.
    [WordPress] In event of PHP fatal error, still attempt to salvage database configuration.
    
  • v3.2.42
    NEW:
    [Anyversion] direct()- apply raw command against nvm, pyenv, rbenv, goenv wrappers.
    [Cgroup] Delegative authority technology preview. Unlimited suballocatable resource groups enforced kernel space by cgroupv2. See Resource enforcement.md.
    [Internal] Jobs may be executed with suppression filters.
    [Keyring] Secure storage of platform hints. Accompanying module "keyring". See Authentication.md.
    [PHP] AVIF support on PHP 8.1+.
    [Platform] Supervisory mode, set panel_headless=True + has_dns_only=True + webserver_type=null for a management-only variation. Works with DNS-only/testing licenses. Useful on hypervisors.
    [Transfers] --all option performs transfer of all non-suspended sites on server.
    
    FIXED:
    [Anyversion] Reverse interpreter version to match least significant first otherwise "18" incorrectly matches 18.20 in [18.20,18.50] whereas wrapper pulls "18.50".
    [Bootstrapper] Incorrect substitution in memory-ranged crashkernel values.
    [Cgroup] Files in /etc/cgconfig.d ignored on startup.
    [Ghost] Specifying localhost.localdomain may result in incorrect grant evaluation on dual-stack networks.
    [Net] Interface address scope, off-by-one in removal.
    [Opcenter] DeleteDomain hooks ignored in API.
    [Subdomains] Subdomains created within /var/subdomain generate inaccessible paths.
    [Tuned] Active profile must be set through tuned-adm.
    
    CHANGED:
    [Bootstrapper] Factor into consideration memory savings of disabling crashkernel when calculating memory threshold.
    [Dashboard] Fetch load average as soon as possible before other requests are enqueued to reflect the normalized run-queue depth.
    [Ghost] Remove older releases after successful update.
    [Ghost] Switch to ghost-cli to apisnetworks/ghost-cli-lite, without systemd/Ubuntu mannerisms.
    [MySQL] Perform quick, transactional database exports which no longer require table locks.
    [PHP] Report identifier to syslog as php-fpm/siteXX-pool. Disambiguate startup errors in /var/log/messages plus facilitate identification of rogue syslog messages. Remove block on changing error_log setting, which has valid cases in WordPress when WP_DEBUG_LOG is true.
    [Postfix] Downgrade SpamCop quality while row with Office365 continues, https://forum.spamcop.net/topic/73128-massive-spams-from-microsoft/.
    [Postfix] postscreen DNS lists broken out to "postfix_dnsbl_sites". Default behavior of performing DNSBL checks behind postscreen can be reverted to old behavior (< 2.8) by setting postfix_postscreen_dnsbl_bypass=true in Bootstrapper. Bypassing DNSBL checks in Postscreen moves the checks to the smtpd client, which may be skipped entirely based upon results in client_access. Note, this method is less efficient but allows for a recipient to subvert any DNSBL checks.
    [PostgreSQL] Update timezone with system.timezone scope.
    [PowerDNS] Tag SOA creation with ctime, site, and server for better tracking.
    [Scopes] apache.system-directive supports array values, e.g. ['BROTLI':false,'STRICT':true].
    [Syslog] Standardize idents as <service>/<site><?-optional identifier>.
    [System] CVE-2024-2961 hotfix. POC drops May 10.
    [WordPress] Set FS_METHOD to "direct" on release fortification.
    
    REMOVED:
    [Backend] Remove PHP-FPM dependency in theme acquisition.
    [Packages] bind-utils, use dig instead of host.
    [PHP-FPM] Administratively set values for opcache.restrict_api, mirrors default and session.save_path, /tmp is preferred for its ephemeral storage but justification for permanent restriction is insufficient.
    [PHP-FPM] Explicit controller names may be picked up with cgclassify + cgrules.conf.
    [tuned] Dynamic tuning.
    
  • v3.2.41
    NEW:
    [Internal] preempt() complement to defer(), pushes a deferred callback to head of queue.
    [Internal] Symbolic messages, prefixed with ":", may be filtered by its symbol instead of literal message.
    [Scopes] backups.automatic-database-exports, routine exports of database backups or triggered manually. See Backups.md.
    [Scopes] system.process-limits, control vfs ulimit parameters. See Limits.md.
    [Tests] "DEBUG_PRESERVE_SITE" env presence controls ephemeral account deletion. Used to examining unit tests post-mortem.
    [Tests] Upgrade ladder test runner. Perform iterative upgrade on app against range. See tests/runners/.
    [Web Apps] BookStack, Flarum, Invoice Ninja, and Vanilla Forums.
    [Web Apps] Deferrable reconfigurables. Reconfigurables that may be set at install time yet only fire (apply) after installation or at invocation time on an installed app.
    
    FIXED:
    [API] Symlinks incorrectly copied as files.
    [Bandwidth] Site without bandwidth records triggers a warning.
    [Bootstrapper] Setting admin password before Postfix configured on an install loop prevents mail dispatch when bootstrapper-resume is started interactively.
    [HTTP] Force-resolve target domains upon redirection.
    [Laravel] Punycode domain names in composer.json.
    [PHP] Workspace parent directory removed by periodic tmpfiles sweep is not recreated due to inadequate stat checks.
    [Web Apps] PHP-FPM caches docroot referent resulting in spurious "No input file specified" upon reinstalling a relinked docroot path in a hot worker.
    [Web Apps] Releases sorted by page.
    
    CHANGED:
    [Anyversion] Facilitate module builds by moving temporary directory to /var/tmp.
    [API] file:delete will remove empty directories when $recurse is false.
    [API] php:pool-set-state(), add support for "reload" to perform graceful reload of PHP-FPM.
    [CLI] Success status reported. Previously level was blank.
    [Datastream] Reduce read syscall overhead.
    [GMail] Update MX records ASPMX2/3 to ALT3/4.
    [Internal] Web Apps release fetch accepts version normalization callback.
    [Laravel] Additional version check such that create-project package is at most 1 release behind target framework release date. Addresses condition in which laravel/framework 10.3.1 is requested yet laravel/laravel 10.3.3 boilerplate contains updated code in laravel/framework 10.10.1+. 10.0.5 would be the ideal candidate by timestamp.
    [Laravel] Reconfigure APP_URL on SSL reconfiguration.
    [MariaDB] Restore 11.0.1+ binary names.
    [MultiPHP] Link PHP CLI binaries into /usr/local/bin if requested version varies from system.
    [Transfer] Remote API access defaults to SSL.
    [Web Apps] Add vendor link.
    [Web Apps] Apps based on Composer no longer expect an approot beneath docroot.
    [Web Apps] Graceful handling of irresolvable docroots. Application root shall report main document root when the domain is unbound to account.
    [Web Apps] Subshell invocations of "php" binary pick up multiPHP directory.
    [Web Apps] Silence "subdomain docroot is directory" in Web App update emails.
    
    REMOVED:
    [Internal] Duplicate download routine in Webapps, Util\HTTP.
    [Login] Potentially confusing characters in set "iIloO0" from password reset dialog.
    
  • v3.2.40
    NEW:
    [Anyversion] python, go API modules.
    
    FIXED:
    [Anyversion] Modified .bashrc files may lack rbenv/pyenv/nvm/goenv wiring. Always include in API calls.
    [Cgroup] 5.x kernels before 5.8 lack root-level memory.stat, cpu.stat counters in cgroupv2. Approximate system usage through procfs. Requires a combination of mainline kernel from ELrepo + cgroupv2 to trigger.
    [Cgroup] Erroneous "frozen" state in v2.
    [Firewall] fail2ban.whitelist removal has no effect.
    [Firewall] SASL failed login match.
    [Opcenter] Modifying diskquota,quota must cancel pending amnesty rollback.
    
    CHANGED:
    [Ansible] 8.x compatibility.
    [Bootstrapper] Forced reboot exits with 0 to allow ExecStartPost processing in abrupt termination.
    [Discouse] 3.1 support.
    [Mail] SMTP smuggling workaround on CentOS 7.
    [Manage Mailboxes] Bulk add converts user to local delivery.
    [Opcenter] Bypass logging local bandwidth.
    [PostgreSQL] "unaccent" extension may be enabled.
    [PostgreSQP] RPM key update.
    [RPM] Convert MariaDB + MongoDB repositories to INI directives.
    [vfs] VFS ulimits stored as templated dict. Any values encoded in there are repeated verbatim in FST/siteinfo/etc/security/limits.d/10-apnscp-user.conf.
    [Wordpress] Implicitly update wp-cli-login upgrade.
    
    REMOVED:
    [pman] run()- scalar arguments are deprecated. An array or hash must be used in future versions.
    [rspamd] v3.7.3 lock.
    
  • v3.2.39.2
    SECURITY:
    [Logs] log:set-logrotation() permits arbitrary directives processed as root. A malicious script could be set as a postrotate action to grant elevated privileges. No such exploit is known to exist.
    
    NEW:
    [Joomla] v5 support.
    [PHP] 8.3 support.
    [Web Apps] Manifests support a "depth" parameter to separate the document root from application root of arbitrary depth.
    
    FIXED:
    [cgroup] cpuset controller requires cpus + mems to be declared. In case of cgroup,cpupin=None, this controller may be created with empty parameters upon boot for cgroupv1 resulting in cgclassify failure when explicitly bound.
    [file] stat() missing file race condition.
    [Opcenter] atomic writes forget mode/ownership.
    [PHP Pools] Switching from user-owned to apache terminates all user processes on account.
    
  • v3.2.39.1
    NEW:
    [Internal] Filesystem::atomicWrite() performs synchornous write followed by atomic libc rename() request. Intended to provide guarantee of non-partial reads.
    [ionCube] PHP 8.2 support.
    [SourceGuardian] PHP 8.2 support.
    [webapps] available()- report Web Apps available for install.
    
    FIXED:
    [Configuration] Type representation in non-debug mode.
    [Lararia] Jobs always generate new session. A race condition can arise in which the user requests install in UI, job begins to process, user logs out (destroys session), then elevated backend request goes to cold worker that cannot be resumed.
    [Opcenter] cgroup,enabled always calls freshenSite() which in turn invalidates other sessions instantiated against site. Web Apps installed with first-time SSL issuance trigger this behavior introduced in #4f60e7ea, in which the installation shadow session has precedence. Perform loose inspection of parameters to determine freshenSite() requirement.
    [PHP] Resuscitating a PHP-FPM pool from a failed state may encounter race condition on asynchronous socket re-enablement + restart operation.
    [rspamd] hotfix rspamd/rspamd#4703 [BUG] 3.7.4 fails to start on RHEL 9.3
    [vsftpd] C7 always performs rsa_cert_file directive check on start.
    [web] Renaming subdomain creates index.html placeholder.
    
    CHANGED:
    [Backend] Pin hot worker to authentication context.
    [Let's Encrypt] All DNS timeouts observe [dns] => lookup_timeout.
    [Let's Encrypt] append() honors strict tolerance setting.
    [pman] kill() runs as process owner if owner uid meets minimum UID and within user list.
    [Users] Limit GECOS to 128 characters. Longer values may result in underruns in re-entrant getpwnam() implementations.
    
  • v3.2.39
    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.
    
  • v3.2.38.2
    FIXED:
    [Opcenter] systemd implements quasi subset of shell expansion without subshell execution. When forcing a housekeeping run, invoke sh directly to grab backend pid. Resolves Let's Encrypt certificate renewal if nightly panel updates disabled.
    
    CHANGED:
    [DNS] get_zone_data() on a parented domain returns null.
    [Scopes] Both metrics.enabled + cp.update-policy pull in apnscp/install-services role.
    
  • v3.2.38.1
    NEW:
    [Filesystem] Support differing filesystem types between / and /home.
    
    FIXED:
    [Backend] SIGCHLD handler consumes exit status before proc_get_status() may examine this. Use exit code contained in siginfo struct as workaround. Freeze panel PHP to 8.1.21 until GH#11498 rollback patch is released in 8.1.23.
    [Cgroup] cpuacct controller loses precision on conversion.
    [Web Apps] Screenshot storage location may be uninitialized.
    
    CHANGED:
    [Auth] An unspecified protocol in [auth] => server_query implies https.
    [Bootstrapper] Observe custom mount options in /etc/fstab for / and /home.
    [Bootstrapper] tmpfs_cleave_rate sets percentage total server memory allocated to /tmp. Final value is the exponentiated integer (base 2).
    [file] Canonicalize paths in symlink calculations.
    [multiPHP] Note when setting php.version scope would replace multiPHP build.
    
  • v3.2.38
    NEW:
    [Scopes] kernel.crashguard, controls crashguard/kexec usage. kernel.panic-asr determines the timeout for an automated reboot in event of a panic.
    
    FIXED:
    [Cgroup] Kernel panic resetting blkio counter on non-root container between kernel 4.18.0-477 and 4.18.0-504
    [DNS] Missing NS records yields invalid auto-generation.
    [file] Incorrect bitwise symlink mask.
    [Nextcloud] Propagate ENV to occ.
    [Opcenter] Demoting primary domain loses domainmap lookup.
    [Rampart] Unwrap nested ban reason.
    [Scopes] system.monthly-integrity-check, update role reference.
    [Task Scheduler] Setting CRON_TZ in unordered spool exceeds line boundary due to defect in dba_replace/dba_delete parsing in non-uniform ini file.
    [Web Apps] Unhandled exception on PHP variant apps when PHP-FPM is disabled.
    [Wordpress] Fetching a define() constant inhibits reuse on and after retrieved node.
    
    CHANGED:
    [admin] get_meta_from_domain() renamed to get_meta_from_site(). Deprecated, scheduled for removal in v4.
    [Cgroup] Always create controllers in cgconfig.
    [Cloudflare] Parse complex arguments if set in [dns] => provider_key. Support for 1000+ domain pagination.
    [Ghost] Detection now looks for "GhostServer.js".
    [Let's Encrypt] Staging removes all conflicting _acme-challenge TXT records.
    [MySQL] Update ping() logic to anticipate mysqli_sql_exception.
    [Opcenter] Optimize user/group/shadow operations.
    [PostgreSQL] Previous implementation permitted superuser. Deny all database connections on rename.
    [Scopes] apache.evasive-whitelist and rampart.fail2ban-whitelist remediate if whitelisted IP is presently banned.
    [Scripts] mapCheck.php updates admin user within VFS.
    [Transfer] Permit accounts with different MySQL and PostgreSQL prefixes.
    [Wordpress] Reimplement theme versioning. Previously suspended due to wp-cli/extension-command#349.
    [Wordpress] Update WP_SITEURL, WP_HOME during rename.
    
    REMOVED:
    [Opcenter] Expensive fuser check in lock detection.
    
  • v3.2.37.2
    FIXED:
    [haproxy] haproxy pgdg channel removes override directory, conf.d/.
    
  • v3.2.37.1
    NEW:
    [PHP] SVG imagick support.
    
    FIXED:
    [Internal] Bugs reported with an encoded backend send unsupported NUL bytes.
    [Internal] Code rot in various routines.
    [Metrics] Missing TimescaleDB v2 hook at RPM update.
    [phpMyAdmin] Invalid client password throws unhandled exception.
    [Transfer] Reapplying a completed migration checks old UUID value.
    
    CHANGED:
    [Bootstrapper] php/install-pecl-module renamed to php/install-extension.
    [git] Trust ApisCP code root for git v2.39+.
    [MySQL] Use MariaDB versioning instead of MySQL equivalence.
    [PostgreSQL] v15 compatibility. Assigning permissions to a database requires explicit grants on "public" schema.
    [Web Apps] Fallback to system PHP binary when multiPHP unavailable.
    
  • v3.2.37
    NEW:
    [Core] PHP 8.1
    [Discourse] v3.0. Requires Redis 6.2+ in apisnetworks/redis.
    [Internal] Account\Enumerate::matches() performs free-form match against account on site, domain, invoice, or invoice group.
    [php] pool_get_policy()- read settings from php-policy.yml; pool_set_policy()- admin-only overrides of policy settings, supports dot notation.
    [Scopes] mysql.connection-limit, psql.connection-limit- set database server connection limits.
    
    FIXED:
    [Backend] fsize limit may not be overridden in subshell.
    [CLI] DEBUG=0 may not be overrode from enabled state.
    [CLI] Quoted expressions that contain a colon misinterpreted as keyed hash.
    [DBus] GetUnit() always reports transformed unit name. Use GetUnitFileState to confirm presence of unit on server.
    [DigitalOcean] Duplicate apex NS records.
    [Drupal] Preserve .htaccess during docroot relocation.
    [Joomla] Manager role returned as administrator.
    [Manage Mailboxes] "Select All" selects filtered elements.
    [Mange Users] JavaScript bindings inactive.
    [Migrations] Mailbox detection skips Maildir imports through premature return.
    [Nextcloud] Dispatcher rules missing in v26+.
    [Opcenter] Setting [auth] => suspended_login=false blocks deleting of suspended accounts.
    [Settings] Timezone modification applied asynchronously.
    [WordPress] db_config() ignores pool version.
    
    CHANGED:
    [Bootstrapper] Cap make concurrency to 8.
    [DNS Manager] Reset missing postback confirmation.
    [Filesystem] Update major:minor block extraction to 64-bit implementation.
    [Frontend] Bind to ::1 when IPv6 available.
    [Opcenter] --fd usage supersedes immediate exit after json dump. Hard exit masks exit codes elsewhere in script.
    [Opcenter] --reconfig regenerates logrotate cronjob as needed.
    [php] CLI usage follows memory_limit value set in PHP policy.
    [Scopes] Updating timezone with system.timezone updates timezone setting in VFS.
    [Scripts] mapCheck replaces stale records in appldb.
    [WordPress] Execute wp-cli as docroot owner.
    [WordPress] SSO routine skips theme load.
    
    REMOVED:
    [ClamAV] Aggressive Foxhole signatures (11, 18, 20, 22, Zip-fs197).