New hashes for all 3 platforms after fixing the bug where VHosts with
SSL context but missing listener map entries served the wrong cert.
rhel9: 04921afbad94e7ee69bc93a73985e318df93f28b2b0d578447b0ef43dc6e3818
ubuntu: ae2564742f362d3e34ea814dff37edeb8f8b73ae9ca1484ba78e2453a3987429
rhel8: 855b6bccb4a7893914506a07185cffd834bd31a7f7c080b5b4190283def7fa3e
The previous string replace only matched 'adminEmails root@localhost'
exactly. On fresh OLS installs where adminEmails may have a different value
or different spacing, the replace would silently fail and Auto-SSL config
would never be injected. Use re.sub to match the adminEmails line regardless
of its value.
The string replace matched only 'adminEmails' keyword instead of the
full existing line 'adminEmails root@localhost', causing
the remaining ' root@localhost' to trail onto the acmeEmail
line and break ACME account registration.
Universal binaries with all features config-driven (PHPConfig API, Origin
Header Forwarding, ReadApacheConf with Portmap, Auto-SSL ACME v2,
ModSecurity ABI compatibility). Updates install, upgrade, and modSec paths.
Install:
- install.py: in preFlightsChecks.call(), replace missing CyberPanel python
with /usr/bin/python3 and force shell=True so any code path (including
old/cached script) never hits FileNotFoundError.
Upgrade:
- cyberpanel_upgrade.sh: resolve CP_PYTHON (CyberPanel, CyberCP, python3)
before running upgrade.py and configure.py; use it for both.
- plogical/upgrade.py: add _python_for_manage(), use it in GeneralMigrations,
collectstatic, and upgradePip so migrations/collectstatic work when
/usr/local/CyberPanel/bin/python is missing.
- install.py: only use system Python or /usr/local/CyberCP/bin/python for migrations;
never add /usr/local/CyberPanel paths to candidate list (often missing on fresh install)
- install_utils.py: if command uses /usr/local/CyberPanel/bin/python and it does not
exist, substitute /usr/bin/python3 and force shell=True so old/cached install.py
also works without failing
- install_default_keys: use shell rm -f and ssh-keygen with stdin=y for no prompt
- Migrations: try system Python (/usr/bin/python3) first, then venv paths
- Use absolute path /usr/local/CyberCP/manage.py for makemigrations/migrate/collectstatic
- Avoid FileNotFoundError for missing /usr/local/CyberPanel/bin/python on fresh install
- Resolve symlinks and require executable file before using a path
- Skip paths that are broken symlinks or not executable (e.g. /usr/local/CyberPanel -> CyberCP when venv missing)
- Catch FileNotFoundError/OSError from subprocess when testing --version
- Ensures system python3 is used when venv paths are invalid
- cyberpanel.sh: clear MariaDB-server* from dnf.conf/yum.conf before running installer so MariaDB-server can be installed (fixes exclude filtering on retry/partial install)
- cyberpanel.sh: try refs/heads/v2.5.5-dev.tar.gz for branch archive; remove installer MariaDB patch; softer chmod message
- install.py: sed fallback to strip MariaDB-server from dnf exclude if Python logic fails
- install.py: create venv at /usr/local/CyberCP if missing; add system python3 fallback for migrations; download composer.sh before chmod; remove existing SSH keys before ssh-keygen
- installCyberPanel.py: remove MariaDB-server from dnf exclude before install
- cyberpanel.sh: ensure ports 8090 and 7080 listening after install; final status shows port accessibility
- backupUtilities.py: remove existing cyberpanel keys before ssh-keygen to avoid Overwrite prompt
- install.py: allow --mariadb-version 10.11 (with 11.8, 12.1); use --nobest for 10.11/11.8 on RHEL; accept existing 10.x
- cyberpanel.sh: prompt and --mariadb-version accept 10.11; only pass --mariadb-version if install.py supports it; fix MySQLdb check (no __version__)
- cyberpanel_upgrade.sh: accept 10.11 in --mariadb-version and prompt; Check_Root allow uid 0 when SUDO set; Branch_Check avoid double v (vv2.5.5-dev); early root check
- cyberpanel.sh: ask MariaDB version (11.8/12.1) first even in --auto; add --mariadb-version
- install/install.py: remove existing SSH key before ssh-keygen to avoid Overwrite (y/n) prompt
- install/installCyberPanel.py: use MariaDB 11.8 and --nobest for AlmaLinux 9 / cent8 to fix client dependency
- install/installCyberPanel.py: required by venvsetup.sh sed commands
- install/env_generator.py: parity with stable/v2.4.4
No other merges; install paths that run venvsetup.sh will no longer fail.
- plogical/firewallUtilities: fix inverted success/failure (result==1 = success); write blocked_ips.log under CyberCP/data for cyberpanel write access
- plogical/processUtilities: when root, use normalExecutioner return value so executioner reflects actual command success/failure
- firewall/firewallManager: addBannedIP uses FirewallUtilities.blockIP; ACL and all errors return JSON with error_message/error; rollback store if block fails
- baseTemplate/views: blockIPAddress uses FirewallUtilities.blockIP instead of subprocess
- baseTemplate/homePage: inline Ban IP calls /firewall/addBannedIP with ip/reason/duration; show server error in notifications
- baseTemplate/system-status.js: handle string response and show server error_message in success and error callbacks
- Pure-FTPd: use Quota maxfiles:maxsize (100000:100000) instead of invalid 'Quota yes'
in install templates and enableFTPQuota (website.py) so daemon starts
- serverStatus: run systemctl as root, return detailed error on service start failure
- FTP quota UI: better error display and feedback for enable quota action
- Doc: to-do/PURE-FTPD-QUOTA-SYNTAX-FIX.md
- Fix delete for domain and Root File Manager: use sudo helper when
lscpd/executioner fails (TOKEN/sendCommand issues)
- Add safe-delete-path and safe-move-path helpers for base64 path handling
- Add ACLManager.isPathInsideHome and isFilePathSafeForShell for path validation
- Fix upload authorization for Root File Manager (domainName empty)
- Harden outputExecutioner result checks to prevent 500 on None
- Update Bootstrap CDN for CSP compatibility
- Improve error display and a11y focus management in modals
- Resolves#1670: files with special characters can be uploaded/deleted
- saveSSHConfigs() now writes only one Port line (was writing one per
existing Port line, causing duplicate Port entries and 'Address
already in use' from sshd)
- Match only actual 'Port N' directive; exclude GatewayPorts and other
lines containing 'Port'
- If no Port line exists in config, append one
Fixes: https://github.com/usmannasir/cyberpanel/issues/1668#issue-3881969535
- install.py: use preFlightsChecks.mariadb_version in mariadb_repo_setup
- venvsetup.sh: prompt for MariaDB 11.8/12.1 in interactive install, pass --mariadb-version to install.py
- cyberpanel_upgrade.sh: add MARIADB_VER (default 11.8), --mariadb-version arg, interactive prompt, write /etc/cyberpanel/mariadb_version, use in MariaDB.repo
- plogical/upgrade.py: read mariadb_version from /etc/cyberpanel/mariadb_version in fix_almalinux9_mariadb(), default 11.8
- Install: add LiteSpeed repo (repo.litespeed.sh), install openlitespeed; keep official binary if >= 1.8.5, else optional custom binary overlay
- Upgrade: add repo, upgrade openlitespeed package; only run installCustomOLSBinaries if version < 1.8.5
- LSWS: fallback to 6.3.4 when API empty in cyberpanel_upgrade.sh and venvsetup.sh; sed lsws-6.0 and lsws-6.3.4 to latest stable
- plogical/upgrade: add_litespeed_repo(), get_installed_ols_version(); install.py: add_litespeed_repo(), get_installed_ols_version()
Only files that match current live server; excludes settings.py (deployment-specific), pluginHolder/pluginInstaller (repo ahead), install/cyberpanel scripts (diff), and deleted static files (still on server).
- Add CyberCPLogFileWriter.get_current_timestamp() for errorSanitizer (fixes 500 logging)
- After upgrade/install: fetch meta.xml from raw GitHub and overwrite installed file so
store version (e.g. 1.1.0) is correct even when archive ZIP is cached/stale
- Upgrade/install: discover ZIP top-level folder and match plugin folder case-insensitively
- Improves redisManager/memcacheManager upgrade and all store installs
Skip dynamic plugin URL inclusion for plugins that are on disk but not
in Django INSTALLED_APPS to avoid RuntimeError when loading models.
Plugin installer adds apps to INSTALLED_APPS on install; this prevents
breakage when that step was missed or reverted.
- pluginHolder/urls.py: Discover plugins from /usr/local/CyberCP and source
paths (/home/cyberpanel/plugins, /home/cyberpanel-plugins); dynamically
include each plugin's urls so /plugins/<name>/settings/ works without
hardcoding. Add source path to sys.path when loading from source.
- CyberCP/urls.py: Remove hardcoded _plugin_routes; all plugin routes now
served via pluginHolder dynamic inclusion.
Fixes 404 on /plugins/contaboAutoSnapshot/settings/ and any installed plugin
settings page. No per-plugin core changes required.