Fix to hide scripts that mustn't be run directly; fix bugs

This commit is contained in:
Ilia
2022-04-25 17:04:01 +03:00
parent dfbf80b3b1
commit d865737a45
6 changed files with 96 additions and 95 deletions

View File

@@ -12,14 +12,14 @@ $< == 0 || die "atboot.pl must be run as root";
if ($init_mode eq "osx") {
# Darwin System
&enable_at_boot("webmin", "Webmin administration server",
"$config_directory/start >/dev/null 2>&1 </dev/null",
"$config_directory/stop");
"$config_directory/.start-init >/dev/null 2>&1 </dev/null",
"$config_directory/.stop-init");
}
elsif ($init_mode eq "local") {
# Add to the boot time rc script
$lref = &read_file_lines($config{'local_script'});
for($i=0; $i<@$lref && $lref->[$i] !~ /^exit\s/; $i++) { }
splice(@$lref, $i, 0, "$config_directory/start >/dev/null 2>&1 </dev/null # Start $ucproduct");
splice(@$lref, $i, 0, "$config_directory/.start-init >/dev/null 2>&1 </dev/null # Start $ucproduct");
&flush_file_lines();
}
elsif ($init_mode eq "init") {
@@ -58,7 +58,7 @@ elsif ($init_mode eq "init") {
&print_tempfile(ACTION, "case \"\$1\" in\n");
&print_tempfile(ACTION, "'start')\n");
&print_tempfile(ACTION, "\t$config_directory/start >/dev/null 2>&1 </dev/null\n");
&print_tempfile(ACTION, "\t$config_directory/.start-init >/dev/null 2>&1 </dev/null\n");
&print_tempfile(ACTION, "\tRETVAL=\$?\n");
if ($config{'subsys'}) {
&print_tempfile(ACTION, "\tif [ \"\$RETVAL\" = \"0\" ]; then\n");
@@ -68,7 +68,7 @@ elsif ($init_mode eq "init") {
&print_tempfile(ACTION, "\t;;\n");
&print_tempfile(ACTION, "'stop')\n");
&print_tempfile(ACTION, "\t$config_directory/stop\n");
&print_tempfile(ACTION, "\t$config_directory/.stop-init\n");
&print_tempfile(ACTION, "\tRETVAL=\$?\n");
if ($config{'subsys'}) {
&print_tempfile(ACTION, "\tif [ \"\$RETVAL\" = \"0\" ]; then\n");
@@ -96,7 +96,7 @@ elsif ($init_mode eq "init") {
&print_tempfile(ACTION, "\t;;\n");
&print_tempfile(ACTION, "'restart')\n");
&print_tempfile(ACTION, "\t$config_directory/stop ; $config_directory/start\n");
&print_tempfile(ACTION, "\t$config_directory/.stop-init ; $config_directory/.start-init\n");
&print_tempfile(ACTION, "\tRETVAL=\$?\n");
&print_tempfile(ACTION, "\t;;\n");
@@ -124,8 +124,8 @@ elsif ($init_mode eq "systemd") {
&enable_at_boot(
$product,
"$ucproduct server daemon",
"$config_directory/start-init",
"$config_directory/stop-init",
"$config_directory/.start-init",
"$config_directory/.stop-init",
undef,
{ 'pidfile' => $var_directory."/miniserv.pid",
'opts' => {
@@ -136,16 +136,17 @@ elsif ($init_mode eq "systemd") {
}
elsif ($init_mode eq "rc" || $init_mode eq "upstart") {
# Create RC or upstart script
&enable_at_boot($product, $ucproduct, "$config_directory/start",
"$config_directory/stop",
undef,
{ 'fork' => 1,
'pidfile' => $var_directory."/miniserv.pid" });
&enable_at_boot($product, $ucproduct,
"$config_directory/.start-init",
"$config_directory/.stop-init",
undef,
{ 'fork' => 1,
'pidfile' => $var_directory."/miniserv.pid" });
}
elsif ($init_mode eq "launchd") {
# Create launchd script
&create_launchd_agent(&launchd_name($product),
"$config_directory/start --nofork", 1);
"$config_directory/.start-init --nofork", 1);
}
$config{'atboot_product'} = $product;

View File

@@ -269,7 +269,7 @@ if [ "\$1" = 0 ]; then
# has taken it's place. Run uninstalls and stop the server
(cd /usr/libexec/webmin ; WEBMIN_CONFIG=/etc/webmin WEBMIN_VAR=/var/webmin LANG= /usr/libexec/webmin/run-uninstalls.pl) >/dev/null 2>&1 </dev/null
/etc/webmin/stop >/dev/null 2>&1 </dev/null
/etc/webmin/stop-init --kill >/dev/null 2>&1 </dev/null
/etc/webmin/.stop-init --kill >/dev/null 2>&1 </dev/null
fi
fi
/bin/true

View File

@@ -520,7 +520,7 @@ else {
# Re-generating main
# Start main
open(START, ">$config_directory/start-init");
open(START, ">$config_directory/.start-init");
print START "#!/bin/sh\n";
print START "echo Starting Webmin server in $wadir\n";
print START "trap '' 1\n";
@@ -537,10 +537,10 @@ else {
print START "exec '$wadir/miniserv.pl' $config_directory/miniserv.conf\n";
}
close(START);
$start_cmd = "$config_directory/start-init";
$start_cmd = "$config_directory/start";
# Stop main
open(STOP, ">$config_directory/stop-init");
open(STOP, ">$config_directory/.stop-init");
print STOP "#!/bin/sh\n";
print STOP "if [ \"\$1\" = \"--kill\" ]; then\n";
print STOP " echo Force stopping Webmin server in $wadir\n";
@@ -565,32 +565,32 @@ else {
close(STOP);
# Restart main
open(RESTART, ">$config_directory/restart-init");
open(RESTART, ">$config_directory/.restart-init");
print RESTART "#!/bin/sh\n";
print RESTART "$config_directory/stop-init\n";
print RESTART "$config_directory/start-init\n";
print RESTART "$config_directory/.stop-init\n";
print RESTART "$config_directory/.start-init\n";
close(RESTART);
# Force reload main
open(FRELOAD, ">$config_directory/restart-by-force-kill-init");
open(FRELOAD, ">$config_directory/.restart-by-force-kill-init");
print FRELOAD "#!/bin/sh\n";
print FRELOAD "$config_directory/stop-init --kill\n";
print FRELOAD "$config_directory/start-init\n";
print FRELOAD "$config_directory/.stop-init --kill\n";
print FRELOAD "$config_directory/.start-init\n";
close(FRELOAD);
# Reload main
open(RELOAD, ">$config_directory/reload-init");
open(RELOAD, ">$config_directory/.reload-init");
print RELOAD "#!/bin/sh\n";
print RELOAD "echo Reloading Webmin server in $wadir\n";
print RELOAD "pidfile=\`grep \"^pidfile=\" $config_directory/miniserv.conf | sed -e 's/pidfile=//g'\`\n";
print RELOAD "kill -USR1 \`cat \$pidfile\`\n";
close(RELOAD);
chmod(0755, "$config_directory/start-init");
chmod(0755, "$config_directory/stop-init");
chmod(0755, "$config_directory/restart-init");
chmod(0755, "$config_directory/restart-by-force-kill-init");
chmod(0755, "$config_directory/reload-init");
chmod(0755, "$config_directory/.start-init");
chmod(0755, "$config_directory/.stop-init");
chmod(0755, "$config_directory/.restart-init");
chmod(0755, "$config_directory/.restart-by-force-kill-init");
chmod(0755, "$config_directory/.reload-init");
# Re-generating supplementary
@@ -603,15 +603,15 @@ else {
# Create symlinks
# Start init.d
symlink("$config_directory/start-init", "$config_directory/start");
symlink("$config_directory/.start-init", "$config_directory/start");
# Stop init.d
symlink("$config_directory/stop-init", "$config_directory/stop");
symlink("$config_directory/.stop-init", "$config_directory/stop");
# Restart init.d
symlink("$config_directory/restart-init", "$config_directory/restart");
symlink("$config_directory/.restart-init", "$config_directory/restart");
# Force reload init.d
symlink("$config_directory/restart-by-force-kill-init", "$config_directory/restart-by-force-kill");
symlink("$config_directory/.restart-by-force-kill-init", "$config_directory/restart-by-force-kill");
# Reload init.d
symlink("$config_directory/reload-init", "$config_directory/reload");
symlink("$config_directory/.reload-init", "$config_directory/reload");
# For systemd
my $systemctlcmd = `which systemctl`;
@@ -642,14 +642,14 @@ else {
# Force reload systemd
open(FRELOADD, ">$config_directory/restart-by-force-kill");
print FRELOADD "$config_directory/stop-init --kill >/dev/null 2>&1\n";
print FRELOADD "$config_directory/.stop-init --kill >/dev/null 2>&1\n";
print FRELOADD "$systemctlcmd stop webmin\n";
print FRELOADD "$systemctlcmd start webmin\n";
close(FRELOADD);
# Reload systemd
open(RELOADD, ">$config_directory/reload");
print RELOADD "$config_directory/reload-init >/dev/null 2>&1\n";
print RELOADD "$config_directory/.reload-init >/dev/null 2>&1\n";
close(RELOADD);
chmod(0755, "$config_directory/start");

102
setup.sh
View File

@@ -603,61 +603,61 @@ if [ "$noperlpath" = "" ]; then
fi
# Re-generating main
rm -f $config_dir/stop-init $config_dir/start-init $config_dir/restart-init $config_dir/restart-by-force-kill-init $config_dir/reload-init
rm -f $config_dir/.stop-init $config_dir/.start-init $config_dir/.restart-init $config_dir/.restart-by-force-kill-init $config_dir/.reload-init
echo "Creating start and stop init scripts.."
# Start main
echo "#!/bin/sh" >>$config_dir/start-init
echo "echo Starting Webmin server in $wadir" >>$config_dir/start-init
echo "trap '' 1" >>$config_dir/start-init
echo "LANG=" >>$config_dir/start-init
echo "export LANG" >>$config_dir/start-init
echo "unset PERLIO" >>$config_dir/start-init
echo "export PERLIO" >>$config_dir/start-init
echo "PERLLIB=$PERLLIB" >>$config_dir/start-init
echo "export PERLLIB" >>$config_dir/start-init
echo "#!/bin/sh" >>$config_dir/.start-init
echo "echo Starting Webmin server in $wadir" >>$config_dir/.start-init
echo "trap '' 1" >>$config_dir/.start-init
echo "LANG=" >>$config_dir/.start-init
echo "export LANG" >>$config_dir/.start-init
echo "unset PERLIO" >>$config_dir/.start-init
echo "export PERLIO" >>$config_dir/.start-init
echo "PERLLIB=$PERLLIB" >>$config_dir/.start-init
echo "export PERLLIB" >>$config_dir/.start-init
uname -a | grep -i 'HP/*UX' >/dev/null
if [ $? = "0" ]; then
echo "exec '$wadir/miniserv.pl' \$* $config_dir/miniserv.conf &" >>$config_dir/start-init
echo "exec '$wadir/miniserv.pl' \$* $config_dir/miniserv.conf &" >>$config_dir/.start-init
else
echo "exec '$wadir/miniserv.pl' \$* $config_dir/miniserv.conf" >>$config_dir/start-init
echo "exec '$wadir/miniserv.pl' \$* $config_dir/miniserv.conf" >>$config_dir/.start-init
fi
# Stop main
echo "#!/bin/sh" >>$config_dir/stop-init
echo "if [ \"\$1\" = \"--kill\" ]; then" >>$config_dir/stop-init
echo " echo Force stopping Webmin server in $wadir" >>$config_dir/stop-init
echo "else" >>$config_dir/stop-init
echo " echo Stopping Webmin server in $wadir" >>$config_dir/stop-init
echo "fi" >>$config_dir/stop-init
echo "pidfile=\`grep \"^pidfile=\" $config_dir/miniserv.conf | sed -e 's/pidfile=//g'\`" >>$config_dir/stop-init
echo "pid=\`cat \$pidfile\` 2>/dev/null" >>$config_dir/stop-init
echo "if [ \"\$pid\" != \"\" ]; then" >>$config_dir/stop-init
echo " kill \$pid || exit 1" >>$config_dir/stop-init
echo " touch $var_dir/stop-flag" >>$config_dir/stop-init
echo " if [ \"\$1\" = \"--kill\" ]; then" >>$config_dir/stop-init
echo " sleep 1" >>$config_dir/stop-init
echo " ((ps axf | grep \"webmin\/miniserv\.pl\" | awk '{print \"kill -9 -- -\" \$1}' | bash) || kill -9 -- -\$pid || kill -9 \$pid) 2>/dev/null" >>$config_dir/stop-init
echo " fi" >>$config_dir/stop-init
echo " exit 0" >>$config_dir/stop-init
echo "else" >>$config_dir/stop-init
echo " if [ \"\$1\" = \"--kill\" ]; then" >>$config_dir/stop-init
echo " (ps axf | grep \"webmin\/miniserv\.pl\" | awk '{print \"kill -9 -- -\" \$1}' | bash) 2>/dev/null" >>$config_dir/stop-init
echo " fi" >>$config_dir/stop-init
echo "fi" >>$config_dir/stop-init
echo "#!/bin/sh" >>$config_dir/.stop-init
echo "if [ \"\$1\" = \"--kill\" ]; then" >>$config_dir/.stop-init
echo " echo Force stopping Webmin server in $wadir" >>$config_dir/.stop-init
echo "else" >>$config_dir/.stop-init
echo " echo Stopping Webmin server in $wadir" >>$config_dir/.stop-init
echo "fi" >>$config_dir/.stop-init
echo "pidfile=\`grep \"^pidfile=\" $config_dir/miniserv.conf | sed -e 's/pidfile=//g'\`" >>$config_dir/.stop-init
echo "pid=\`cat \$pidfile\` 2>/dev/null" >>$config_dir/.stop-init
echo "if [ \"\$pid\" != \"\" ]; then" >>$config_dir/.stop-init
echo " kill \$pid || exit 1" >>$config_dir/.stop-init
echo " touch $var_dir/stop-flag" >>$config_dir/.stop-init
echo " if [ \"\$1\" = \"--kill\" ]; then" >>$config_dir/.stop-init
echo " sleep 1" >>$config_dir/.stop-init
echo " ((ps axf | grep \"webmin\/miniserv\.pl\" | awk '{print \"kill -9 -- -\" \$1}' | bash) || kill -9 -- -\$pid || kill -9 \$pid) 2>/dev/null" >>$config_dir/.stop-init
echo " fi" >>$config_dir/.stop-init
echo " exit 0" >>$config_dir/.stop-init
echo "else" >>$config_dir/.stop-init
echo " if [ \"\$1\" = \"--kill\" ]; then" >>$config_dir/.stop-init
echo " (ps axf | grep \"webmin\/miniserv\.pl\" | awk '{print \"kill -9 -- -\" \$1}' | bash) 2>/dev/null" >>$config_dir/.stop-init
echo " fi" >>$config_dir/.stop-init
echo "fi" >>$config_dir/.stop-init
# Restart main
echo "#!/bin/sh" >>$config_dir/restart-init
echo "$config_dir/stop-init" >>$config_dir/restart-init
echo "$config_dir/start-init" >>$config_dir/restart-init
echo "#!/bin/sh" >>$config_dir/.restart-init
echo "$config_dir/.stop-init" >>$config_dir/.restart-init
echo "$config_dir/.start-init" >>$config_dir/.restart-init
# Force reload main
echo "#!/bin/sh" >>$config_dir/restart-by-force-kill-init
echo "$config_dir/stop-init --kill" >>$config_dir/restart-by-force-kill-init
echo "$config_dir/start-init" >>$config_dir/restart-by-force-kill-init
echo "#!/bin/sh" >>$config_dir/.restart-by-force-kill-init
echo "$config_dir/.stop-init --kill" >>$config_dir/.restart-by-force-kill-init
echo "$config_dir/.start-init" >>$config_dir/.restart-by-force-kill-init
# Reload main
echo "#!/bin/sh" >>$config_dir/reload-init
echo "echo Reloading Webmin server in $wadir" >>$config_dir/reload-init
echo "pidfile=\`grep \"^pidfile=\" $config_dir/miniserv.conf | sed -e 's/pidfile=//g'\`" >>$config_dir/reload-init
echo "kill -USR1 \`cat \$pidfile\`" >>$config_dir/reload-init
echo "#!/bin/sh" >>$config_dir/.reload-init
echo "echo Reloading Webmin server in $wadir" >>$config_dir/.reload-init
echo "pidfile=\`grep \"^pidfile=\" $config_dir/miniserv.conf | sed -e 's/pidfile=//g'\`" >>$config_dir/.reload-init
echo "kill -USR1 \`cat \$pidfile\`" >>$config_dir/.reload-init
chmod 755 $config_dir/stop-init $config_dir/start-init $config_dir/restart-init $config_dir/restart-by-force-kill-init $config_dir/reload-init
chmod 755 $config_dir/.stop-init $config_dir/.start-init $config_dir/.restart-init $config_dir/.restart-by-force-kill-init $config_dir/.reload-init
echo "..done"
echo ""
@@ -667,15 +667,15 @@ echo ""
rm -f $config_dir/stop $config_dir/start $config_dir/restart $config_dir/restart-by-force-kill $config_dir/reload
# Start init.d
ln -s $config_dir/start-init $config_dir/start >/dev/null 2>&1
ln -s $config_dir/.start-init $config_dir/start >/dev/null 2>&1
# Stop init.d
ln -s $config_dir/stop-init $config_dir/stop >/dev/null 2>&1
ln -s $config_dir/.stop-init $config_dir/stop >/dev/null 2>&1
# Restart init.d
ln -s $config_dir/restart-init $config_dir/restart >/dev/null 2>&1
ln -s $config_dir/.restart-init $config_dir/restart >/dev/null 2>&1
# Force reload init.d
ln -s $config_dir/restart-by-force-kill-init $config_dir/restart-by-force-kill >/dev/null 2>&1
ln -s $config_dir/.restart-by-force-kill-init $config_dir/restart-by-force-kill >/dev/null 2>&1
# Reload init.d
ln -s $config_dir/reload-init $config_dir/reload >/dev/null 2>&1
ln -s $config_dir/.reload-init $config_dir/reload >/dev/null 2>&1
# For systemd create different start/stop scripts
systemctlcmd=`which systemctl` >/dev/null 2>&1
@@ -694,12 +694,12 @@ if [ -x "$systemctlcmd" ]; then
echo "$systemctlcmd restart webmin" >>$config_dir/restart
# Force reload systemd
echo "#!/bin/sh" >>$config_dir/restart-by-force-kill
echo "$config_dir/stop-init --kill >/dev/null 2>&1" >>$config_dir/restart-by-force-kill
echo "$config_dir/.stop-init --kill >/dev/null 2>&1" >>$config_dir/restart-by-force-kill
echo "$systemctlcmd stop webmin" >>$config_dir/restart-by-force-kill
echo "$systemctlcmd start webmin" >>$config_dir/restart-by-force-kill
# Reload systemd
echo "#!/bin/sh" >>$config_dir/reload
echo "$config_dir/reload-init >/dev/null 2>&1" >>$config_dir/reload
echo "$config_dir/.reload-init >/dev/null 2>&1" >>$config_dir/reload
# Fix existing systemd webmin.service file to update start and stop commands
(cd "$wadir/init" ; WEBMIN_CONFIG=$config_dir WEBMIN_VAR=$var_dir "$wadir/init/updateboot.pl" "webmin")

View File

@@ -19,10 +19,10 @@ DESC="web-based administration interface for Unix systems"
NAME=Webmin
PIDFILE=/var/webmin/miniserv.pid
SCRIPTNAME=/etc/init.d/webmin
START=/etc/webmin/start-init
STOP=/etc/webmin/stop-init
RELOAD=/etc/webmin/reload-init
FORCERELOAD=/etc/webmin/restart-by-force-kill-init
START=/etc/webmin/.start-init
STOP=/etc/webmin/.stop-init
FORCERESTART=/etc/webmin/.restart-by-force-kill-init
RELOAD=/etc/webmin/.reload-init
LOCKFILE=/var/lock/subsys/webmin
CONFFILE=/etc/webmin/miniserv.conf
@@ -71,7 +71,7 @@ restart)
RETVAL=$?
;;
restart-by-force-kill)
$FORCERELOAD
$FORCERESTART
RETVAL=$?
;;
reload|force-reload)

View File

@@ -3,8 +3,8 @@ Description=Webmin server daemon
After=syslog.target
[Service]
ExecStart=/etc/webmin/start-init
ExecStop=/etc/webmin/stop-init
ExecStart=/etc/webmin/.start-init
ExecStop=/etc/webmin/.stop-init
PIDFile=/var/webmin/miniserv.pid
Type=forking
KillMode=none