Validated WHM session context
The WHM CGI preserves the validated cp_security_token required by the native cPanel session. Existing request validation, taint mode and same-origin response boundaries remain in place.
DH20.29 maps to technical package DCSF 15.10.32. The public bootstrap accepts only this exact signed release and its closed artifact inventory.
This release combines WHM context, LFD state and installer repairs with the regression fix found on canary. It supersedes DH20.28; the 51-item security register remains a separate count, without counting tests as vulnerabilities.
The WHM CGI preserves the validated cp_security_token required by the native cPanel session. Existing request validation, taint mode and same-origin response boundaries remain in place.
LFD compacts csf.temppids within its existing size and record limits, using LF_FLUSH to age process records. Accumulated temporary state no longer prevents normal tracking from recording new process identities.
The compatibility repair sets appropriate permissions only for public cPanel META modules. It does not broaden access across private configuration or the complete cPanel tree.
DH20.29 safely repairs a missing final LF in csf.resellers and corrects the shell error found on the canary. DH20.28 / 15.10.31 is superseded because its reseller repair path was faulty.
The comparison accepts a different listing order for independent chains while preserving rule order inside each chain and the remaining policy checks. Reordering independent chains alone no longer causes a false policy mismatch.
Maintainer qualification passed all 77 Linux test files. The autossltest2 canary update completed with CSF/LFD active and configuration preserved. The separately checked production host has passed dry-run only; this is not a production-upgrade claim.
Model choices offered by this release: gpt-5-mini, gpt-5.4-mini, gpt-5.6-terra. Availability depends on the administrator’s OpenAI API account.
Selected local security diagnostics are sent to OpenAI after activation. Recognised secret values are redacted, but this is not an anonymity guarantee. store=false is not a Zero Data Retention guarantee; the API account and provider data policies still apply. Optional API usage is billed separately from the free DCSF software. Findings need administrator review and do not guarantee that every security issue is detected.
Linux release qualification: 77/77. Public-bootstrap checks: 85/85.
Package 15.10.32 adds JSON::PP to installer preflight and the os.pl runtime check while preserving the separation between system Perl, cPanel private Perl and explicit CPAN fallback.
Outside cPanel, DCSF repairs the closed module list through exact RPM capabilities or Debian package mappings. DNF and YUM retain GPG verification, while APT rejects unauthenticated and insecure repositories.
The installer inventories required modules before preflight and after repair. Attempts are bounded, must make measurable progress and succeed only when the entire closed list imports again.
The system CPAN fallback is disabled by default. The operator must pass --allow-cpan-fallback; DCSF uses a fixed HTTPS MetaCPAN mirror, closed module names and validated work directories.
On cPanel, DCSF always validates /usr/local/cpanel/3rdparty/bin/perl, derives the matching versioned cpanm and explicitly invokes it through that same private interpreter without mixing /usr/bin/perl libraries.
OLSPanel requires JSON::PP. RPM selects the signed perl(JSON::PP) capability, Debian selects libjson-pp-perl, cPanel uses private cpanm and system CPAN still requires explicit --allow-cpan-fallback.
Canary PASS: An earlier public --dryrun canary authenticated the release under test, selected the correct installer and left every regular file directly below /etc/csf byte-identical.
Package 15.10.32 bounds the iframe to 640–1,200 pixels, scrolls it internally and returns it to the top after navigation. The masked modal, Watch System Logs, Search for IP and Firewall Allow remain visible while trusted-policy and real-backend checks are retained.
The modules directory is optional. Detection accepts only supported canonical roots and a safe root-owned /etc/olspanel/base_dir declaration.
Before writing, the adapter only reads metadata for /etc/csf, /etc/csf/csf.conf and /etc/csf/csf.cloudflare. --dryrun executes the same checks without changing files.
Symlinks, non-regular files, non-root ownership, group/world writable metadata and protected files with more than one hard link are rejected before installation with the exact failing path.
After installation, /etc/csf becomes root:root 0700 while csf.conf and csf.cloudflare become root:root 0600 with exactly one hard link. Existing contents remain byte-identical.
If csf.cloudflare is missing, it may be installed only from the verified signed package; an existing file is not replaced.
The generic installer stops when recursive chmod or chown fails instead of continuing to a PASS message.
A missing directory is created only during a real installation as root:root 0755. DCSF records privately that it created the path.
Uninstall removes the parent only when DCSF created it and it remains empty. Foreign or non-empty content is preserved.
Preflight and the os.pl runtime check require JSON::PP. Repair uses signed RPM capability perl(JSON::PP), Debian package libjson-pp-perl, cPanel private cpanm or the explicitly enabled system CPAN fallback.
After generic installation but before publishing or restarting panel integration, the adapter runs an isolated perl -T -c backend check. Failure stops OLSPanel integration.
OLSPanel serves images from the authenticated /usr/local/csf/lib/webmin/csf/images tree, where the signed package installs assets including csf.svg.
The backend loads /usr/local/csf/lib/ConfigServer/panel-action-policy.json with require_trusted => 1 instead of using the CyberPanel-specific default path. The complete parent chain and file must be root-controlled and non-writable by others.
The installer sends a bounded read-only binary request through the actual taint-mode backend. The response may not exceed 16 MiB and must contain the DCSF interface marker before integration is published or restarted. After the extmail.uck.katowice.pl upgrade, the complete Django-to-Perl-backend path returned HTTP 200.
Protected actions use a dedicated modal with a bounded type="password" field instead of window.prompt(). Escape, the cancel control and backdrop cancellation safely stop the operation, and the visible field is cleared immediately after the credential is handed to the request.
Search System Logs and Watch System Logs accept only a one-to-twenty digit nocache value. Progress ends after every response, failed requests display their HTTP status, and live search and watch checks returned HTTP 200.
Intercepted navigation is deduplicated, deferred to the next event turn and explicitly submitted to _self with visible progress. Quick Allow and configuration save retain a complete nonempty response instead of an empty frame.
Tests through the real Perl backend found the newly added address, displayed the Firewall Allow list and returned normal Done and Return controls. The temporary entry was removed and the final csf.allow digest exactly matched its pre-test value.
The action iframe stays between 640 and 1,200 pixels, scrolls long content internally and returns to the top after every navigation. The live test kept the outer page at 1,000 pixels with scroll position zero, so Search for IP, Firewall Allow, Watch System Logs and the reauthentication modal remained visible.
The installer, signed update manifest, public verification key, package digest and release identity are published together.
The 15.10.32 archive is bound by digest to the signed manifest.
The bootstrap pins the RSA-3072 key, signature, SHA-256, size and closed file inventory.
JSON::PP is required by preflight and the os.pl runtime check; RPM uses signed capability perl(JSON::PP), while Debian uses libjson-pp-perl.
System CPAN runs only with --allow-cpan-fallback and uses a fixed HTTPS MetaCPAN mirror.
The installer validates /usr/local/cpanel/3rdparty/bin/perl and uses matching cpanm through that same interpreter.
The backend loads /usr/local/csf/lib/ConfigServer/panel-action-policy.json with require_trusted => 1; the complete path chain must be root-controlled.
After generic installation and before publishing or restarting integration, the adapter runs perl -T -c and a real read-only framed request. The response is capped at 16 MiB and must contain the DCSF interface marker.
Protected actions use a bounded type="password" field without window.prompt(); Escape, cancellation and backdrop cancellation stop the operation, and the visible field is cleared immediately.
Search System Logs and Watch System Logs always end their progress state. Deferred _self navigation preserves results for Quick Allow, configuration save, Search for IP and Firewall Allow.
The iframe stays between 640 and 1,200 pixels, scrolls internally and returns to the top after navigation, keeping results and the reauthentication modal visible.
Images are served from /usr/local/csf/lib/webmin/csf/images, where the signed package also provides csf.svg.
Detection does not require modules, validates safe base_dir and cp.service, and runs the same preflight in --dryrun.
Read-only preflight checks /etc/csf, csf.conf and csf.cloudflare metadata; symlinks and unsafe hard links are rejected with the exact path.
/etc/csf is finalized as root:root 0700, while csf.conf and csf.cloudflare become root:root 0600 without changing existing contents.
A recursive chmod or chown failure in the generic installer stops installation.
Modules is created as root:root 0755 only during installation; uninstall removes it only with recorded provenance and while it remains empty.
The release retains bounded replay, audit, correlation and isolated OpenLiteSpeed log collection.
DH20.29 maps unambiguously to technical DCSF version 15.10.32.
The package passed 77 of 77 gates and the public bootstrap passed 85 of 85 checks.
The bootstrap identifies the server state before changing installed files and does not treat an upgrade as a fresh installation.
Requires an explicit --testing or --production profile. The recommended first run uses --testing.
The installer detects the current version, refuses downgrades and asks before an upgrade or same-version reinstall.
It authenticates the complete package and validates cPanel private Perl with matching cpanm first, then asks for approval. After confirmation it creates a private configuration and firewall backup, checks rollback, removes the cPanel RPM and installs DCSF.
For a fresh installation, start with --testing. For an upgrade, run the script without a profile flag to preserve the existing TESTING value and answer the installer prompt.
Download the script to a file, verify the published digest and contents, then run it explicitly.
curl -fsSLo dcsf-install.sh https://dcsf.net/install.sh
printf '%s %s\n' '86cf07a9c45c1cc9a5eab7b8f9b360af98455a67927f7e52c78be2c5ff7d34f8' dcsf-install.sh | sha256sum -c -
less dcsf-install.sh
sudo sh dcsf-install.sh --testingAll three domains serve identical bytes from one protected publication directory.
| Public release | DH20.29 |
|---|---|
| Technical version | 15.10.32 |
| SHA-256 package | ba8e5a738dec83bf4ef3abd8b59add85e88f495555f5dd8f116d837b70f86268 |
| Package size | 5,869,701 bytes |
| Closed inventory | 585 entries · SHA-256 be8bc9f4b9a04c505394c0ca3a6aa5a79aa3a819dcbb1e687daf687f7cdbc1a9 |
| SHA-256 manifest | 60c115a5d63f91725c40c66ce0647436a500cc27930edbf8614d22b4463c003f |
| Release gates | 77/77 PASS |
| Public-bootstrap checks | 85/85 PASS |
| Package source commit | 784481c2223e709ec9ab0a3e9bcc8cc41071293f |
| Release tag commit | 3849ed6a3f0b58cd5f1afaca1241d0e73f6fb90a |
| Release branch | fix/centos6-compat |
| Tag | DH20.29 |
| Manifest | manifest.txt · signature |
| Public metadata | release.json · install.sh.sha256 |
| Licence | GNU GPLv3 |