ⓘ Skip invalid `#mysql50#.` entries in SQL and mysqlshow database listings so stray directories don't break the MariaDB page. Preserve valid dot-prefixed, hash-prefixed, and legacy database names.
Reproduce by creating an ordinary `.config` directory in MariaDB's data directory and opening the Webmin MariaDB module. On AlmaLinux, starting `user@27.service` also reproduces the issue because the globally enabled Podman user restart service creates `.config` and `.local` in the mysql account's home. Podman is one possible source, and the failure doesn't depend on it.
Fixes https://forum.virtualmin.com/t/error-accessing-mariadb-server-through-webmin/138118
This PR fixes Webmin being killed when package updates trigger overlapping restarts.
I found this while upgrading packages on a Debian 13 Pro, with the upgrade finished, but Webmin stopped responding, and tracing showed a second `SIGHUP` killing it during startup.
The fix keeps restart and reload signals pending across `exec()` and installs their handlers early in startup.
This patch fixes detection and editing of native XFS quota options.
It recognizes short aliases before reboot and saves them without triggering systemd's generic quota handling.
It removes conflicting options when enabling quotas, while preserving noquota when both user and group quotas remain off.
Rel.: https://github.com/virtualmin/Virtualmin-Config/commit/cadb0db
This fixes missing permission checks in the MySQL manual configuration editor, with both read and write endpoints now require full configuration permissions to match the existing checks used by the configuration editor.
This fixes path traversal and command injection in Custom Commands file editors.
It replaces shell-based path expansion with confined Perl expansion and validates non-path parameters.
It also applies ownership and permissions without invoking a shell.
This PR fixes the Apache config test hanging for about 20 seconds when the server's own hostname doesn't resolve.
Without a global `ServerName`, Apache looks up the system hostname in DNS before it finishes the test, and Virtualmin runs this test every time its server list and dashboard load, so those pages look frozen.
The test now passes a placeholder `ServerName` with `-C` and runs `httpd` directly where Red Hat's `apachectl` refuses extra arguments. If this quick test fails, the original test runs, so only real config errors are reported.
On an Alma 10 VM with broken DNS, the check dropped from 20 seconds to 0.03 seconds.
This PR fixes#2853, where buttons made by `ui_buttons_row` do nothing in strict browsers like Pale Moon.
Each form was placed between table rows, which HTML doesn't allow, so the browser closed it right away and left the button outside it.
Now the form sits inside the button cell, and any fields in the description cell are linked to it with the HTML5 form attribute.
The page looks exactly the same.
Fixes https://github.com/webmin/webmin/issues/2853
This PR adds `real_os_version_full` so the dashboard can show Debian point releases such as 12.15.
It preserves existing version comparisons and updates the field through installation, OS refreshes, and manual settings.
Older detection caches are refreshed automatically.
Fixes: https://forum.virtualmin.com/t/os-detection-version-with-point-release-on-dashboard/138091
This PR fixes WebSocket transfers that stall when unread data remains buffered.
Miniserv now drains buffered browser data before waiting for more network traffic.
The receive library avoids extra blocking reads and handles temporary read errors without disconnecting.
Tested and verified over HTTPS with Terminal and live stats on Rocky 10 and Ubuntu 26.04.
I discovered these issues while working on and testing new Cloudmin's SSH-based guest File Manager integration, which I decided to drop for now.
This PR updates the framed gray theme with a modern light and dark design while keeping its frameset and old class names without adding any extra complexity on Perl or JS side.
The left menu becomes a floating panel with product logos, a product switch and a loading bar, and the system information page uses the new UI lib widgets for tiles and cards.
Color scheme that follows the browser or can be forced from the theme settings.
This PR fixes WebSocket routes being lost when miniserv configuration changes multiple times within one second.
Read `miniserv.conf` directly so locked updates use the current configuration.
The previous cache could reuse stale data because it compared modification times in whole seconds.
Add a regression test covering route additions and removals with an unchanged modification time.