mirror of
https://github.com/webmin/webmin.git
synced 2025-07-20 16:48:46 +00:00
108 lines
2.8 KiB
Perl
Executable File
108 lines
2.8 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# mass_start_stop.cgi
|
|
# Start or stop multiple actions at once
|
|
|
|
require './init-lib.pl';
|
|
&ReadParse();
|
|
@sel = split(/\0/, $in{'idx'});
|
|
@sel || &error($text{'mass_enone2'});
|
|
|
|
$start = 1 if ($in{'start'} || $in{'addboot_start'});
|
|
$stop = 1 if ($in{'stop'} || $in{'delboot_stop'});
|
|
$restart = 1 if ($in{'restart'});
|
|
$enable = 1 if ($in{'addboot'} || $in{'addboot_start'});
|
|
$disable = 1 if ($in{'delboot'} || $in{'delboot_stop'});
|
|
|
|
&ui_print_unbuffered_header(undef, $start || $enable ? $text{'mass_start'} :
|
|
$restart ? $text{'mass_restart'} :
|
|
$text{'mass_stop'}, "");
|
|
|
|
if ($start || $stop || $restart) {
|
|
# Starting or stopping a bunch of actions
|
|
$SIG{'TERM'} = 'ignore'; # Restarting webmin may kill this script
|
|
&foreign_require("proc", "proc-lib.pl");
|
|
$access{'bootup'} || &error($text{'ss_ecannot'});
|
|
|
|
# build list of normal and broken actions
|
|
($initrl) = &get_inittab_runlevel();
|
|
@iacts = &list_actions();
|
|
foreach $a (@iacts) {
|
|
@ac = split(/\s+/, $a);
|
|
push(@acts, $ac[0]);
|
|
local $order = "9" x $config{'order_digits'};
|
|
if ($ac[0] =~ /^\//) {
|
|
push(@actsf, $ac[0]);
|
|
}
|
|
else {
|
|
push(@actsf, "$config{'init_dir'}/$ac[0]");
|
|
local @lvls = &action_levels(
|
|
$start || $restart ? 'S' : 'K', $ac[0]);
|
|
foreach $lon (@lvls) {
|
|
local ($l, $o, $n) = split(/\s+/, $lon);
|
|
if ($l eq $initrl) {
|
|
$order = $o;
|
|
last;
|
|
}
|
|
}
|
|
}
|
|
push(@orders, $order);
|
|
}
|
|
|
|
if ($start || $restart) {
|
|
@sel = sort { $orders[$a] <=> $orders[$b] } @sel;
|
|
}
|
|
else {
|
|
@sel = sort { $orders[$b] <=> $orders[$a] } @sel;
|
|
}
|
|
foreach $idx (@sel) {
|
|
local $cmd = "$actsf[$idx] ".($start ? "start" :
|
|
$restart ? "restart" :
|
|
"stop");
|
|
print &text('ss_exec', "<tt>$cmd</tt>"),"<p>\n";
|
|
print "<pre>";
|
|
&clean_environment();
|
|
&foreign_call("proc", "safe_process_exec_logged", $cmd, 0, 0, STDOUT, undef, 1);
|
|
&reset_environment();
|
|
print "</pre>\n";
|
|
push(@selacts, $acts[$idx]);
|
|
}
|
|
&webmin_log($start ? 'massstart' :
|
|
$restart ? 'massrestart' : 'massstop', 'action',
|
|
join(" ", @selacts));
|
|
}
|
|
|
|
if ($enable || $disable) {
|
|
# Enabling or disabling a bunch of actions
|
|
$access{'bootup'} == 1 || &error($text{'edit_ecannot'});
|
|
@iacts = &list_actions();
|
|
foreach $a (@iacts) {
|
|
@ac = split(/\s+/, $a);
|
|
push(@acts, $ac[0]);
|
|
}
|
|
@toboot = map { $acts[$_] } @sel;
|
|
foreach $b (@toboot) {
|
|
if ($b =~ /^\//) {
|
|
&error(&text('mass_ebroken', $ac[0]));
|
|
}
|
|
}
|
|
if ($enable) {
|
|
# Enable them all
|
|
foreach $b (@toboot) {
|
|
print &text('mass_enable', "<tt>$b</tt>"),"<p>\n";
|
|
&enable_at_boot($b);
|
|
}
|
|
}
|
|
else {
|
|
# Disable them all
|
|
foreach $b (@toboot) {
|
|
print &text('mass_disable', "<tt>$b</tt>"),"<p>\n";
|
|
&disable_at_boot($b);
|
|
}
|
|
}
|
|
&webmin_log($enable ? 'massenable' : 'massdisable', 'action',
|
|
join(" ", @toboot));
|
|
}
|
|
|
|
&ui_print_footer("", $text{'index_return'});
|
|
|