This PR fixes the Package Updates module reporting "no updates" when dnf check-update fails.
DNF prints its error to stderr and exits with status 1, but the module only read stdout, so a failed check looked like an empty list and was cached for hours. Users could go weeks or months without seeing that updates were blocked!
The module now checks the exit status. When a check fails, it keeps the last known list, shows the error on the module and refresh pages, and retries after 15 minutes instead of caching an empty result.
Scheduled checks email the failure instead of acting on the old list, and in new-only mode the failure is emailed once until a check succeeds again.
Fixes https://forum.virtualmin.com/t/no-warning-of-dnf-error-suppressing-update/138052
This patch fixes FTPS backups failing on servers that require TLS session reuse.
It reuses the control connection's TLS session for data uploads.
It adds coverage for an actual passive-mode upload and was verified against a live ProFTPD server.
https://github.com/webmin/webmin/issues/2849#issuecomment-5752478469
This patch fixes the Backup Configuration destination selector by using the new select-based UI.
It keeps existing field names and backup behavior unchanged.
It also ensures browser downloads bypass AJAX and submit correctly.
This patch fixes comments before skipped `IfModule`, `IfDefine`, and `IfVersion` blocks being attached to the next parsed directive.
For example:
```apache
# SSL-only settings
<IfModule mod_ssl.c>
SSLEngine on
</IfModule>
ServerName example.test
```
When `mod_ssl` was unavailable, Webmin attached `# SSL-only settings` to `ServerName`. Deleting `ServerName` could then remove the wrong line and produce:
```apache
# SSL-only settings
<IfModule mod_ssl.c>
SSLEngine on
```
This fix clears comments belonging to skipped conditionals. Deleting `ServerName` now leaves the complete `IfModule` block unchanged.
This PR fixes incorrect line numbers when Apache directives contain nested blocks.
It preserves comments during rewrites and correctly tracks every nested line.
This prevents Virtualmin from corrupting custom Apache configurations.
Fixes: https://github.com/virtualmin/virtualmin-gpl/issues/1153
RFC 9989 (DMARCbis) removes the pct tag, but the DMARC form validated
the percentage as mandatory and always assigned it, so every record
written through Webmin contained pct=.
Treat the field like the sp field directly below it: when it is empty,
delete the tag. Values 0-100 are still accepted and validated for
anyone who deliberately uses pct during a rollout. join_dmarc() already
skips tags with an empty value, so no change was needed there.
Fixes#2843
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This PR fixes concurrent Nginx updates using stale config data.
It reloads the config after locking and safely handles nested locks and included files.
This PR fixes delays when IPv6 DNS lookups stall otherwise working IPv4 connections.
The earlier changes ([04c74877](04c74877c3) and [8a6f7784](8a6f778410)) added fallback across available IPv4 and IPv6 addresses, which this PR preserves.
Resolving both families upfront appears to have been an implementation choice, yet now IPv6 is resolved only when no IPv4 connection succeeds.
Unit tests and real socket compatibility tests passed on Alma 10 and Debian 13.