[ Avaa Bypassed ]




Upload:

Command:

www-data@3.149.253.148: ~ $
# grub-lib.pl
# Functions for parsing and editing a grub menu file

BEGIN { push(@INC, ".."); };
use WebminCore;
&init_config();

%title_order = ( 'lock', 10,
		 'root', 5,
		 'kernel', 4,
		 'chainloader', -1,
		 'initrd', 2,
		 'boot', 1 );

# get_menu_config()
# Parses the config file into a list of title structures
sub get_menu_config
{
local $lnum = 0;
local (@rv, $title);
open(CONF, "<".$config{'menu_file'});
while(<CONF>) {
	s/#.*$//;
	s/\r|\n//g;
	if (/^\s*(\S+)\s*=\s*(.*)/ || /^\s*(\S+)\s*(.*)/) {
		if ($title && $1 ne 'title') {
			# directive in an existing section
			if (defined($title->{$1})) {
				# Multiple values!
				$title->{$1} .= "\0".$2;
				}
			else {
				$title->{$1} = $2;
				}
			$title->{'eline'} = $lnum;
			}
		else {
			# top-level title or option
			local $d = { 'name' => $1,
				     'value' => $2,
				     'line' => $lnum,
				     'eline' => $lnum,
				     'index' => scalar(@rv) };
			push(@rv, $d);
			$title = $d if ($1 eq 'title');
			}
		}
	$lnum++;
	}
close(CONF);
return \@rv;
}

# save_directive(&config, &old|name, &new)
sub save_directive
{
local $old;
if (!$_[1] || ref($_[1])) {
	$old = $_[1];
	}
else {
	$old = &find($_[1], $_[0]);
	}
local @lines;
if (defined($_[2])) {
	@lines = ( "$_[2]->{'name'} $_[2]->{'value'}" );
	foreach $k (sort { $title_order{$b} <=> $title_order{$a} }
			 keys %{$_[2]}) {
		if ($k !~ /^(name|value|line|eline|index)$/) {
			if ($_[2]->{$k} eq '') {
				push(@lines, $k);
				}
			else {
				foreach my $v (split(/\0/, $_[2]->{$k})) {
					push(@lines, $k." ".$v);
					}
				}
			}
		}
	}
local $lref = &read_file_lines($config{'menu_file'});
if ($old) {
	# Replace one entry in the file
	splice(@$lref, $old->{'line'}, $old->{'eline'} - $old->{'line'} + 1,
	       @lines);
	}
elsif ($_[2]->{'name'} eq 'title') {
	# Append to file
	push(@$lref, "", @lines);
	}
else {
	# Insert before titles
	local $t = &find("title", $_[0]);
	if ($t) {
		splice(@$lref, $t->{'line'}, 0, @lines);
		}
	else {
		push(@$lref, "", @lines);
		}
	}
}

# swap_directives(&dir1, &dir2)
# Swaps two blocks in the config file
sub swap_directives
{
my ($dir1, $dir2) = @_;
local $lref = &read_file_lines($config{'menu_file'});
if ($dir1->{'line'} > $dir2->{'line'}) {
	($dir1, $dir2) = ($dir2, $dir1);
	}
my @lines1 = @$lref[$dir1->{'line'} .. $dir1->{'eline'}];
my @lines2 = @$lref[$dir2->{'line'} .. $dir2->{'eline'}];
my $len1 = $dir1->{'eline'} - $dir1->{'line'} + 1;
my $len2 = $dir2->{'eline'} - $dir2->{'line'} + 1;
splice(@$lref, $dir2->{'line'}, $len2, @lines1);
splice(@$lref, $dir1->{'line'}, $len1, @lines2);
}

# find(name, &config)
sub find
{
local @rv;
foreach $c (@{$_[1]}) {
	push(@rv, $c) if ($c->{'name'} eq $_[0]);
	}
return wantarray ? @rv : $rv[0];
}

# find_value(name, &config)
sub find_value
{
local @rv = &find($_[0], $_[1]);
return !@rv ? undef : wantarray ? map { $_->{'value'} } @rv : $rv[0]->{'value'};
}

# linux_to_bios(device)
# Converts a Linux device file like /dev/hda into a GRUB bios disk like (hd0)
sub linux_to_bios
{
if ($_[0] =~ /^(\/dev\/[hs]d[a-z])(\d+)$/ ||
    $_[0] =~ /^(\/dev\S+\/)part(\d+)$/ ||
    $_[0] =~ /^(\/dev\S+c\d+d\d+)p(\d+)$/) {
	# A partition on a disk .. get the disk's device, and then add the part
	local ($dev, $part) = ($1, $2-1);
	$dev .= "disc" if ($dev =~ /\/$/);
	local $dsk = &linux_to_bios($dev);
	$dsk =~ /^\(([a-z]+\d+)\)$/ || return undef;
	return "($1,$part)";
	}
local @map = &get_device_map();
local @st = stat($_[0]);
if (@map) {
	foreach $m (@map) {
		local @mst = stat($m->[1]);
		if ($m->[1] eq $_[0] ||
		    @mst && @st && $mst[0] == $st[0] && $mst[1] == $st[1]) {
			return $m->[0];
			}
		}
	}

# Have to guess based on the device name :(
return $_[0] =~ /\/dev\/hd([a-d])$/ ? "(hd".(ord($1)-97).")" :
       $_[0] =~ /\/dev\/fd([0-4])$/ ? "(fd$1)" : undef;
}

# bios_to_linux(device)
# Converts a GRUB bios disk like (hd0) to a Linux device file like /dev/hda
sub bios_to_linux
{
if ($_[0] =~ /^\(([a-z]+\d+),(\d+)\)$/) {
	# A partition on a BIOS disk .. get the disk device, and add the part
	local ($dev, $part) = ($1, $2+1);
	local $dsk = &bios_to_linux("($dev)");
	if ($dsk =~ /^(\/dev\/[hs]d[a-z])$/) {
		return $dsk.$part;
		}
	elsif ($dsk =~ /^(\/dev\S+\/)disc$/) {
		return $1."part".$part;
		}
	elsif ($dsk =~ /^(\/dev\S+c\d+d\d+)$/) {
		return $dsk.$part;
		}
	else {
		return undef;
		}
	}
local @map = &get_device_map();
if (@map) {
	foreach $m (@map) {
		if ($m->[0] eq $_[0]) {
			return $m->[1];
			}
		}
	}

# Have to guess from BIOS name :(
return $_[0] =~ /^\(hd(\d+)\)$/ ? "/dev/hd".chr($1+97) :
       $_[0] =~ /^\(fd([0-4])\)$/ ? "/dev/fd$1" : undef;
}

# get_device_map()
# Returns the device.map file contents, or an empty list if there is none
sub get_device_map
{
local ($dm, $temp, @rv);
if (!$config{'device_map'} || !-r $config{'device_map'}) {
	# Run GRUB to build the map now
	$dm = $temp = &transname();
	open(GRUB, "|$config{'grub_path'} --batch --device-map=$temp >/dev/null 2>&1");
	print GRUB "quit\n";
	close(GRUB);
	}
else {
	# Just use the existing file
	$dm = $config{'device_map'};
	}
open(MAP, "<".$dm);
while(<MAP>) {
	s/\r|\n//g;
	s/#.*$//;
	if (/^(\S+)\s+(\S+)/) {
		push(@rv, [ $1, $2 ]);
		}
	}
close(MAP);
unlink($temp) if ($temp);
return @rv;
}


Filemanager

Name Type Size Permission Actions
images Folder 0755
lang Folder 0755
CHANGELOG File 449 B 0644
backup_config.pl File 601 B 0755
cgi_args.pl File 229 B 0755
config File 69 B 0644
config-coherent-linux File 99 B 0644
config-debian-linux File 59 B 0644
config-gentoo-linux File 65 B 0644
config-mandrake-linux File 65 B 0644
config-openmamba-linux File 103 B 0644
config-pardus-linux File 65 B 0644
config-redhat-linux-7.2-7.4 File 66 B 0644
config-redhat-linux-8.0-ALL File 99 B 0644
config-solaris File 74 B 0644
config-syno-linux File 69 B 0644
config-trustix-linux File 99 B 0644
config.info File 235 B 0644
config.info.bg File 417 B 0644
config.info.ca File 276 B 0644
config.info.cs File 255 B 0644
config.info.de File 284 B 0644
config.info.es File 278 B 0644
config.info.fr File 258 B 0644
config.info.it File 284 B 0644
config.info.ja File 290 B 0644
config.info.ms File 244 B 0644
config.info.nl File 250 B 0644
config.info.no File 247 B 0644
config.info.pl File 136 B 0644
config.info.ru File 279 B 0644
config.info.uk File 296 B 0644
config.info.zh_TW File 188 B 0644
down.cgi File 364 B 0755
edit_global.cgi File 1.87 KB 0755
edit_title.cgi File 2.92 KB 0755
grub-lib.pl File 5.12 KB 0755
index.cgi File 2.2 KB 0755
install.cgi File 1.65 KB 0755
install_check.pl File 368 B 0755
log_parser.pl File 453 B 0755
module.info File 246 B 0644
module.info.af File 0 B 0644
module.info.af.auto File 171 B 0644
module.info.ar File 0 B 0644
module.info.ar.auto File 218 B 0644
module.info.be File 0 B 0644
module.info.be.auto File 255 B 0644
module.info.bg File 0 B 0644
module.info.bg.auto File 282 B 0644
module.info.ca File 173 B 0644
module.info.ca.auto File 13 B 0644
module.info.cs File 32 B 0644
module.info.cs.auto File 161 B 0644
module.info.da File 0 B 0644
module.info.da.auto File 168 B 0644
module.info.de File 176 B 0644
module.info.de.auto File 14 B 0644
module.info.el File 0 B 0644
module.info.el.auto File 307 B 0644
module.info.es File 34 B 0644
module.info.es.auto File 169 B 0644
module.info.eu File 0 B 0644
module.info.eu.auto File 156 B 0644
module.info.fa File 0 B 0644
module.info.fa.auto File 259 B 0644
module.info.fi File 0 B 0644
module.info.fi.auto File 189 B 0644
module.info.fr File 42 B 0644
module.info.fr.auto File 161 B 0644
module.info.he File 0 B 0644
module.info.he.auto File 237 B 0644
module.info.hr File 0 B 0644
module.info.hr.auto File 188 B 0644
module.info.hu File 0 B 0644
module.info.hu.auto File 217 B 0644
module.info.it File 25 B 0644
module.info.it.auto File 137 B 0644
module.info.ja File 33 B 0644
module.info.ja.auto File 195 B 0644
module.info.ko File 29 B 0644
module.info.ko.auto File 150 B 0644
module.info.lt File 0 B 0644
module.info.lt.auto File 201 B 0644
module.info.lv File 0 B 0644
module.info.lv.auto File 194 B 0644
module.info.ms File 155 B 0644
module.info.ms.auto File 13 B 0644
module.info.mt File 0 B 0644
module.info.mt.auto File 168 B 0644
module.info.nl File 24 B 0644
module.info.nl.auto File 162 B 0644
module.info.no File 29 B 0644
module.info.no.auto File 145 B 0644
module.info.pl File 31 B 0644
module.info.pl.auto File 157 B 0644
module.info.pt File 0 B 0644
module.info.pt.auto File 224 B 0644
module.info.pt_BR File 0 B 0644
module.info.pt_BR.auto File 233 B 0644
module.info.ro File 0 B 0644
module.info.ro.auto File 196 B 0644
module.info.ru File 40 B 0644
module.info.ru.auto File 219 B 0644
module.info.sk File 0 B 0644
module.info.sk.auto File 172 B 0644
module.info.sl File 0 B 0644
module.info.sl.auto File 167 B 0644
module.info.sv File 0 B 0644
module.info.sv.auto File 157 B 0644
module.info.th File 0 B 0644
module.info.th.auto File 298 B 0644
module.info.tr File 0 B 0644
module.info.tr.auto File 212 B 0644
module.info.uk File 0 B 0644
module.info.uk.auto File 265 B 0644
module.info.ur File 0 B 0644
module.info.ur.auto File 240 B 0644
module.info.vi File 0 B 0644
module.info.vi.auto File 224 B 0644
module.info.zh File 0 B 0644
module.info.zh.auto File 150 B 0644
module.info.zh_TW File 29 B 0644
module.info.zh_TW.auto File 131 B 0644
save_global.cgi File 1.78 KB 0755
save_title.cgi File 2.17 KB 0755
up.cgi File 360 B 0755