Private
Server IP : 195.201.23.43  /  Your IP : 3.22.187.118
Web Server : Apache
System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64
User : kdecoratie ( 1041)
PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/share/webmin/cluster-webmin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /usr/share/webmin/cluster-webmin/delete_mod.cgi
#!/usr/bin/perl
# delete_mod.cgi
# Delete a module from one or all servers, after asking for confirmation

require './cluster-webmin-lib.pl';
&ReadParse();
@servers = &list_servers();
@hosts = &list_webmin_hosts();
if ($in{'server'} < 0) {
	# Find servers that have the module or theme
	foreach $h (@hosts) {
		foreach $m (@{$h->{'modules'}}, @{$h->{'themes'}}) {
			if ($m->{'dir'} eq $in{'mod'}) {
				local ($s) = grep { $_->{'id'} == $h->{'id'} }
						  @servers;
				push(@got, $s);
				$gotmap{$s} = $h;
				$best = $s if (!$s->{'id'});
				last;
				}
			}
		}
	$s = $best ? $best : $got[0];
	}
else {
	($s) = grep { $_->{'id'} == $in{'server'} } @servers;
	($h) = grep { $_->{'id'} == $in{'server'} } @hosts;
	@got = ( $s );
	$gotmap{$s} = $h;
	}
$h = $gotmap{$s};
foreach $m ($in{'type'} eq 'mod' ? @{$h->{'modules'}} : @{$h->{'themes'}}) {
	$info = $m if ($m->{'dir'} eq $in{'mod'});
	}

# Setup error handler for down hosts
sub del_error
{
$del_error_msg = join("", @_);
}
&remote_error_setup(\&del_error);
&remote_foreign_require($s->{'host'}, "webmin", "webmin-lib.pl");

&ui_print_header(undef, $text{'delete_title'}, "");
if ($in{'sure'}) {
	# do the deletion in separate processes
	print "<br><b>",&text("delete_header_$in{'type'}",
			      $info->{'desc'}),"</b><p>\n";
	$p = 0;
	foreach $g (@got) {
		local ($rh = "READ$p", $wh = "WRITE$p");
		pipe($rh, $wh);
		if (!fork()) {
			close($rh);
			local $h = $gotmap{$g};

			# Check for any dependencies on this host
			foreach $m (@{$h->{'modules'}}) {
				foreach $d (split(/\s+/, $m->{'depends'})) {
					push(@{$ondeps{$d}}, $m);
					}
				}
			if ($ondeps{$in{'mod'}}) {
				print $wh &serialise_variable([ 0, &text('delete_edepends', join(", ", map { $_->{'desc'} } @{$ondeps{$in{'mod'}}})) ]);
				exit;
				}

			# Delete the module
			&remote_foreign_require($g->{'host'}, "webmin",
					     "webmin-lib.pl") if ($s ne $g);
			&remote_foreign_require($g->{'host'}, "acl",
						"acl-lib.pl");
			local $desc = &remote_foreign_call($g->{'host'},
				"webmin", "delete_webmin_module", $in{'mod'},
				$in{'acls'});
			if ($del_error_msg) {
				print $wh &serialise_variable([ 0, $del_error_msg ]);
				}
			elsif ($desc) {
				print $wh &serialise_variable([ 1, $desc ]);
				}
			else {
				print $wh &serialise_variable([ 0, $text{'delete_egone'} ]);
				}

			# Re-request all users and groups from the server
			local @newmods = grep { $_->{'dir'} ne $in{'mod'} }
					      @{$h->{'modules'}};
			local @newthemes = grep { $_->{'dir'} ne $in{'mod'} }
					        @{$h->{'themes'}};
			$h->{'modules'} = \@newmods;
			$h->{'themes'} = \@newthemes;
			$h->{'users'} = [ &remote_foreign_call($g->{'host'},
						"acl", "list_users") ];
			$h->{'groups'} = [ &remote_foreign_call($g->{'host'},
						"acl", "list_groups") ];
			&save_webmin_host($h);

			close($wh);
			exit;
			}
		close($wh);
		$p++;
		}

	# Read back the results
	$p = 0;
	foreach $g (@got) {
		local $rh = "READ$p";
		local $line = <$rh>;
		local $rv = &unserialise_variable($line);
		close($rh);
		local $d = &server_name($g);

		if (!$rv->[0]) {
			print &text('delete_error', $d, $rv->[1]),"<br>\n";
			}
		else {
			print &text('delete_success', $d, $rv->[1]),"<br>\n";
			}
		$p++;
		}
	print "<p><b>$text{'delete_done'}</b><p>\n";
	}
else {
	# Ask if the user is sure..
	$rroot = &remote_eval($s->{'host'}, "webmin", '$root_directory');
	$sz = &remote_foreign_call($s->{'host'}, "webmin", "disk_usage_kb",
				   "$rroot/$in{'mod'}");
	print "<center>\n";
	if ($in{'server'} < 0) {
		print &text("delete_rusure_$in{'type'}",
		    "<b>$info->{'desc'}</b>", $sz),"<p>\n";
		}
	else {
		print &text("delete_rusure2_$in{'type'}",
		    "<b>$info->{'desc'}</b>", $sz, &server_name($s)),"<p>\n";
		}
	print "<form action=delete_mod.cgi>\n";
	print "<input type=hidden name=mod value=\"$in{'mod'}\">\n";
	print "<input type=hidden name=type value=\"$in{'type'}\">\n";
	print "<input type=hidden name=server value=\"$in{'server'}\">\n";
	print "<input type=hidden name=sure value=1>\n";
	print "<input type=submit value=\"$text{'delete_ok'}\"><br>\n";
	print "<input type=checkbox name=acls value=1> $text{'delete_acls'}\n";
	print "</center></form>\n";
	}

&remote_finished();
&ui_print_footer("", $text{'index_return'});

Private