[ Avaa Bypassed ]




Upload:

Command:

www-data@3.128.247.220: ~ $
#!/usr/bin/perl
# fsdump-lib.pl
# Common functions for doing filesystem backups with dump

BEGIN { push(@INC, ".."); };
use WebminCore;
&init_config();
if ($gconfig{'os_type'} =~ /^\S+\-linux$/) {
	do "linux-lib.pl";
	}
else {
	do "$gconfig{'os_type'}-lib.pl";
	}
&foreign_require("mount", "mount-lib.pl");
%access = &get_module_acl();

$cron_cmd = "$module_config_directory/backup.pl";
$newtape_cmd = "$module_config_directory/newtape.pl";
$notape_cmd = "$module_config_directory/notape.pl";
$multi_cmd = "$module_config_directory/multi.pl";
$rmulti_cmd = "$module_config_directory/rmulti.pl";
$ftp_cmd = "$module_config_directory/ftp.pl";

# list_dumps()
# Returns a list of all scheduled dumps
sub list_dumps
{
local (@rv, $f);
opendir(DIR, $module_config_directory);
foreach $f (sort { $a cmp $b } readdir(DIR)) {
	next if ($f !~ /^(\S+)\.dump$/);
	push(@rv, &get_dump($1));
	}
closedir(DIR);
return @rv;
}

# get_dump(id)
sub get_dump
{
local %dump;
&read_file("$module_config_directory/$_[0].dump", \%dump) || return undef;
$dump{'id'} = $_[0];
return \%dump;
}

# save_dump(&dump)
sub save_dump
{
$_[0]->{'id'} = $$.time() if (!$_[0]->{'id'});
&lock_file("$module_config_directory/$_[0]->{'id'}.dump");
&write_file("$module_config_directory/$_[0]->{'id'}.dump", $_[0]);
&unlock_file("$module_config_directory/$_[0]->{'id'}.dump");
}

# delete_dump(&dump)
sub delete_dump
{
&lock_file("$module_config_directory/$_[0]->{'id'}.dump");
unlink("$module_config_directory/$_[0]->{'id'}.dump");
&unlock_file("$module_config_directory/$_[0]->{'id'}.dump");
}

# directory_filesystem(dir)
# Returns the filesystem type of some directory , or the full details
# if requesting an array
sub directory_filesystem
{
local $fs;
foreach my $m (sort { length($a->[0]) <=> length($b->[0]) }
	         &mount::list_mounted()) {
	local $l = length($m->[0]);
	if ($m->[0] eq $_[0] || $m->[0] eq "/" ||
	    (length($_[0]) >= $l && substr($_[0], 0, $l+1) eq $m->[0]."/")) {
		$fs = $m;
		}
	}
return wantarray ? @$fs : $fs->[2];
}

# is_mount_point(dir)
# Returns 1 if some directory is a filesystem mount point
sub is_mount_point
{
local ($dir) = @_;
foreach my $m (&mount::list_mounted()) {
	return 1 if ($m->[0] eq $dir);
	}
return 0;
}

# same_filesystem(fs1, fs2)
# Returns 1 if type filesystem types are the same
sub same_filesystem
{
local ($fs1, $fs2) = @_;
$fs1 = "ext2" if ($fs1 eq "ext3");
$fs2 = "ext2" if ($fs2 eq "ext3");
return lc($fs1) eq lc($fs2);
}

# date_subs(string, [time])
sub date_subs
{
local ($path, $time) = @_;
local $rv;
if ($config{'date_subs'}) {
	eval "use POSIX";
	eval "use posix" if ($@);
	local @tm = localtime($time || time());
	&clear_time_locale();
	$rv = strftime($path, @tm);
	&reset_time_locale();
	}
else {
	$rv = $path;
	}
if ($config{'webmin_subs'}) {
	$rv = &substitute_template($rv, { });
	}
return $rv;
}

# execute_before(&dump, handle, escape)
# Executes the before-dump command, and prints the output. Returns 1 on success
# or 0 on failure
sub execute_before
{
my ($dump, $h, $esc) = @_;
if ($dump->{'before'}) {
	&set_dump_envs($dump);
	&open_execute_command(before, "($dump->{'before'}) 2>&1 </dev/null", 1);
	while(<before>) {
		print $h $esc ? &html_escape($_) : $_;
		}
	close(before);
	&reset_dump_envs();
	return !$?;
	}
return 1;
}

# execute_after(&dump, handle, escape)
# Executes the before-dump command, and prints the output. Returns 1 on success
# or 0 on failure
sub execute_after
{
my ($dump, $h, $esc) = @_;
if ($dump->{'after'}) {
	&set_dump_envs($dump);
	&open_execute_command(after, "($dump->{'after'}) 2>&1 </dev/null", 1);
	while(<after>) {
		print $h $esc ? &html_escape($_) : $_;
		}
	close(after);
	&reset_dump_envs();
	return !$?;
	}
return 1;
}

# set_dump_envs(&dump)
# Sets FSDUMP_ environment variables based on attributes of the dump
sub set_dump_envs
{
my ($dump) = @_;
foreach my $k (keys %$dump) {
	$ENV{'FSDUMP_'.uc($k)} = $dump->{$k};
	}
}

# reset_dump_envs()
# Clear all variables set by set_dump_envs
sub reset_dump_envs
{
foreach my $k (keys %ENV) {
	delete($ENV{$k}) if ($k =~ /^FSDUMP_/);
	}
}

# running_dumps(&procs)
# Returns a list of backup jobs currently in progress, and their statuses
sub running_dumps
{
local ($p, @rv, %got);
foreach $p (@{$_[0]}) {
	if (($p->{'args'} =~ /$cron_cmd\s+(\S+)/ ||
	    $p->{'args'} =~ /$module_root_directory\/backup.pl\s+(\S+)/) &&
	    $p->{'args'} !~ /^\/bin\/(sh|bash|csh|tcsh)/) {
		local $backup = &get_dump($1);
		local $sfile = "$module_config_directory/$1.$p->{'pid'}.status";
		local %status;
		if (&read_file($sfile, \%status)) {
			$backup->{'status'} = \%status;
			$backup->{'pid'} = $p->{'pid'};
			push(@rv, $backup);
			$got{$sfile} = 1 if (!$status{'end'});
			}
		}
	}
# Remove any left over .status files
opendir(DIR, $module_config_directory);
local $f;
foreach $f (readdir(DIR)) {
	local $path = "$module_config_directory/$f";
	unlink($path) if ($path =~ /\.status$/ && !$got{$path});
	}
closedir(DIR);
return @rv;
}

# can_edit_dir(dir)
# Returns 1 if some backup can be used or edited
sub can_edit_dir
{
return 1 if ($access{'dirs'} eq '*');
local ($d, $dd);
local @ddirs = !ref($_[0]) ? ( $_[0] ) :
	       $supports_multiple ? split(/\s+/, $_[0]->{'dir'}) :
				    ( $_[0]->{'dir'} );
foreach $dd (@ddirs) {
	local $anyok = 0;
	foreach $d (split(/\t+/, $access{'dirs'})) {
		$anyok = 1 if (&is_under_directory($d, $dd));
		}
	return 0 if (!$anyok);
	}
return 1;
}

sub create_wrappers
{
&foreign_require("cron", "cron-lib.pl");
&cron::create_wrapper($notape_cmd, $module_name, "notape.pl");
&cron::create_wrapper($newtape_cmd, $module_name, "newtape.pl");
&cron::create_wrapper($multi_cmd, $module_name, "multi.pl");
&cron::create_wrapper($rmulti_cmd, $module_name, "rmulti.pl");
}

# new_header(title)
sub new_header
{
print "</table></td></tr></table><br>\n";
print "<table border width=100%>\n";
print "<tr $tb> <td><b>$_[0]</b></td> </tr>\n";
print "<tr $cb> <td><table width=100%>\n";
}

# dump_directories(&dump)
sub dump_directories
{
if (!&multiple_directory_support($_[0]->{'fs'})) {
	return $_[0]->{'dir'};
	}
elsif ($_[0]->{'tabs'}) {
	return split(/\t+/, $_[0]->{'dir'});
	}
else {
	return split(/\s+/, $_[0]->{'dir'});
	}
}

# run_ssh_command(command, output-fh, output-mode, password)
# Run some command and display it's output, possibly providing a password
# if one is requested
sub run_ssh_command
{
local ($cmd, $fh, $fhmode, $pass) = @_;
&foreign_require("proc", "proc-lib.pl");
local ($cfh, $fpid) = &proc::pty_process_exec_logged($cmd);
local ($wrong_password, $got_login, $connect_failed);
local $out;
local $stars = ("*" x length($pass));
while(1) {
	local $rv = &wait_for($cfh, "password:|Password\\s+for\\s+\\S+:", "yes\\/no", "(^|\\n)\\s*Permission denied.*\n", "ssh: connect.*\n", ".*\n");
	if ($wait_for_input !~ /^\s*DUMP:\s+ACLs\s+in\s+inode/i) {
		$wait_for_input =~ s/\Q$pass\E/$stars/g;
		if ($fhmode) {
			print $fh &html_escape($wait_for_input);
			}
		else {
			print $fh $wait_for_input;
			}
		}
	if ($rv == 0) {
		syswrite($cfh, "$pass\n");
		}
	elsif ($rv == 1) {
		syswrite($cfh, "yes\n");
		}
	elsif ($rv == 2) {
		$wrong_password++;
		last;
		}
	elsif ($rv == 3) {
		$connect_failed++;
		}
	elsif ($rv < 0) {
		last;
		}
	}
close($cfh);
local $got = waitpid($fpid, 0);
return $?;
}

# rsh_command_input(selname, textname, value)
# Returns HTML for selecting an rsh command
sub rsh_command_input
{
local ($selname, $textname, $rsh) = @_;
local $ssh = &has_command("ssh");
local $r = $ssh && $rsh eq $ssh ? 1 :
	   $rsh eq $ftp_cmd ? 3 :
	   $rsh ? 2 : 0;
local @opts = ( [ 0, $text{'dump_rsh0'} ],
		[ 1, $text{'dump_rsh1'} ],
		[ 3, $text{'dump_rsh3'} ] );
if ($r == 2) {
	push(@opts, [ 2, $text{'dump_rsh2'}." ".
			 &ui_textbox($textname, $rsh, 30) ]);
	}
return &ui_radio($selname, $r, \@opts);
}

# rsh_command_parse(selname, textname)
# Returns the rsh command to use for a backup/restore, based on %in
sub rsh_command_parse
{
local ($selname, $textname) = @_;
if ($in{$selname} == 0) {
	return undef;
	}
elsif ($in{$selname} == 1) {
	local $ssh = &has_command("ssh");
	$ssh || &error($text{'dump_essh'});
	return $ssh;
	}
elsif ($in{$selname} == 3) {
	return $ftp_cmd;
	}
else {
	$in{$textname} =~ /^(\S+)/ && &has_command("$1") ||
		&error($text{'dump_ersh'});
	return $in{$textname};
	}
}

1;


Filemanager

Name Type Size Permission Actions
help Folder 0755
images Folder 0755
lang Folder 0755
CHANGELOG File 3.42 KB 0644
acl_security.pl File 1.16 KB 0755
backup.cgi File 2.27 KB 0755
backup.pl File 3.17 KB 0755
cgi_args.pl File 361 B 0755
config File 91 B 0644
config.info File 534 B 0644
config.info.ar File 640 B 0644
config.info.ca File 658 B 0644
config.info.cs File 437 B 0644
config.info.de File 632 B 0644
config.info.es File 430 B 0644
config.info.hu File 0 B 0644
config.info.ko File 451 B 0644
config.info.nl File 608 B 0644
config.info.no File 588 B 0644
config.info.pl File 672 B 0644
config.info.pt_BR File 440 B 0644
config.info.ru File 144 B 0644
config.info.uk File 157 B 0644
defaultacl File 39 B 0644
delete_dumps.cgi File 720 B 0755
edit_dump.cgi File 5.54 KB 0755
feedback_files.pl File 229 B 0755
freebsd-lib.pl File 12.2 KB 0755
fsdump-lib.pl File 8.1 KB 0755
ftp.pl File 3.69 KB 0755
index.cgi File 4.63 KB 0755
install_check.pl File 379 B 0755
irix-lib.pl File 8.19 KB 0755
kill.cgi File 877 B 0755
linux-lib.pl File 23.24 KB 0755
log_parser.pl File 770 B 0755
macos-lib.pl File 12.2 KB 0755
module.info File 447 B 0644
module.info.af File 0 B 0644
module.info.af.auto File 162 B 0644
module.info.ar File 232 B 0644
module.info.ar.auto File 19 B 0644
module.info.be File 0 B 0644
module.info.be.auto File 307 B 0644
module.info.bg File 0 B 0644
module.info.bg.auto File 298 B 0644
module.info.ca File 138 B 0644
module.info.ca.auto File 17 B 0644
module.info.cs File 31 B 0644
module.info.cs.auto File 116 B 0644
module.info.da File 0 B 0644
module.info.da.auto File 152 B 0644
module.info.de File 146 B 0644
module.info.de.auto File 13 B 0644
module.info.el File 0 B 0644
module.info.el.auto File 355 B 0644
module.info.es File 50 B 0644
module.info.es.auto File 149 B 0644
module.info.eu File 0 B 0644
module.info.eu.auto File 170 B 0644
module.info.fa File 0 B 0644
module.info.fa.auto File 235 B 0644
module.info.fi File 0 B 0644
module.info.fi.auto File 188 B 0644
module.info.fr File 0 B 0644
module.info.fr.auto File 191 B 0644
module.info.he File 0 B 0644
module.info.he.auto File 188 B 0644
module.info.hr File 0 B 0644
module.info.hr.auto File 168 B 0644
module.info.hu File 31 B 0644
module.info.hu.auto File 155 B 0644
module.info.it File 0 B 0644
module.info.it.auto File 181 B 0644
module.info.ja File 0 B 0644
module.info.ja.auto File 231 B 0644
module.info.ko File 32 B 0644
module.info.ko.auto File 125 B 0644
module.info.lt File 0 B 0644
module.info.lt.auto File 178 B 0644
module.info.lv File 0 B 0644
module.info.lv.auto File 157 B 0644
module.info.ms File 123 B 0644
module.info.ms.auto File 19 B 0644
module.info.mt File 0 B 0644
module.info.mt.auto File 153 B 0644
module.info.nl File 27 B 0644
module.info.nl.auto File 130 B 0644
module.info.no File 35 B 0644
module.info.no.auto File 127 B 0644
module.info.pl File 102 B 0644
module.info.pl.auto File 18 B 0644
module.info.pt File 0 B 0644
module.info.pt.auto File 159 B 0644
module.info.pt_BR File 41 B 0644
module.info.pt_BR.auto File 127 B 0644
module.info.ro File 0 B 0644
module.info.ro.auto File 164 B 0644
module.info.ru File 50 B 0644
module.info.ru.auto File 218 B 0644
module.info.sk File 0 B 0644
module.info.sk.auto File 160 B 0644
module.info.sl File 0 B 0644
module.info.sl.auto File 176 B 0644
module.info.sv File 0 B 0644
module.info.sv.auto File 158 B 0644
module.info.th File 0 B 0644
module.info.th.auto File 265 B 0644
module.info.tr File 0 B 0644
module.info.tr.auto File 162 B 0644
module.info.uk File 0 B 0644
module.info.uk.auto File 305 B 0644
module.info.ur File 0 B 0644
module.info.ur.auto File 223 B 0644
module.info.vi File 0 B 0644
module.info.vi.auto File 183 B 0644
module.info.zh File 0 B 0644
module.info.zh.auto File 119 B 0644
module.info.zh_TW File 30 B 0644
module.info.zh_TW.auto File 98 B 0644
multi.pl File 572 B 0755
newtape.cgi File 592 B 0755
newtape.pl File 1.58 KB 0755
notape.pl File 493 B 0755
prefs.info File 21 B 0644
restore.cgi File 935 B 0755
restore_form.cgi File 1.1 KB 0755
rmulti.pl File 784 B 0755
save_dump.cgi File 3.97 KB 0755
solaris-lib.pl File 6.36 KB 0755
uninstall.pl File 347 B 0755