Files
webmin/logrotate/force.cgi
Ilia Ross 466f499e65 Fix openSUSE logrotate vendor overlay handling
This PR updates the Log File Rotation module for openSUSE Leap 16's split `/usr/etc` and `/etc` configuration model.

- Select the local main configuration when present, otherwise use the vendor configuration.

- Recursively merge vendor and local drop-ins using the same precedence as `logrotate-all`.

- Display vendor configurations while keeping `/usr/etc` read-only.

- Copy vendor files into matching `/etc` overrides before editing or deleting them.

- Preserve empty overrides so deleted vendor rotations remain disabled.

- Use the openSUSE wrapper for scheduled rotation and the effective configuration set for forced rotation.

- Keep behavior unchanged on distributions that do not enable the vendor overlay.

Includes regression coverage for selection, precedence, copy-on-write, deletion, scheduling, backups, and protection against direct vendor writes.

Closes [#2682](https://github.com/webmin/webmin/issues/2682).
2026-08-03 02:36:05 +02:00

38 lines
957 B
Perl
Executable File

#!/usr/local/bin/perl
# Force log rotate
require './logrotate-lib.pl';
&ui_print_header(undef, $text{'force_title'}, "");
# Save this CGI from being killed by the rotation of Webmin's own logs
$SIG{'TERM'} = 'IGNORE';
print $text{'force_doing'},"\n";
&clean_environment();
# Force the same effective main and drop-in configs selected by the distro
# wrapper, while avoiding duplicate files already reached through includes.
my $main = &get_main_config_file();
my (undef, undef, $files) = &get_config($main);
my @configs = ($main, &get_add_file_configs($files));
my $configs = join(" ", map { &quote_path($_) } @configs);
$out = &backquote_logged("$config{'logrotate'} -f $configs 2>&1");
&reset_environment();
if ($out) {
print "<pre>$out</pre>";
}
else {
print "<br>";
}
if ($? && $out) {
print $text{'force_failed'},"<br>\n";
}
else {
print $text{'force_done'},"<br>\n";
}
&webmin_log("force");
&ui_print_footer("", $text{'index_return'});