#!/usr/bin/perl
#список директорий вебмина
my @directories = `find /usr/share/webmin -type d -maxdepth 1`;
foreach $dir (@directories)
{
	$dir =~ s/\/usr\/share\/webmin\///g;
}
my @webmin_p = `cat /gsw/etc/webmin/webmin_p.acl`;

my @webmin_w = `cat /gsw/etc/webmin/webmin_w.acl`;
restore(\@directories,\@webmin_p,"/gsw/etc/webmin/webmin_p.acl");
restore(\@directories,\@webmin_w,"/gsw/etc/webmin/webmin_w.acl");

sub restore()
{
	( my $directories, $pluginslist,$path ) = @_;
	my @dirs=@$directories;
	my $WEBMINACL;
	open (WEBMINACL,">$path");
	foreach $str (@$pluginslist)
	{
		my @suspect_plugins;
		$str=~s/^\s+//g;
		my @plugins = split( /\s{1,}/, $str );
		for(my $i=1;$i<scalar(@plugins);$i++)
		{
			my $plugin=$plugins[$i];
			my $ind = FindElemByName( \@dirs, $plugin );
			if ( $ind < 0 )
			{
				push( @suspect_plugins, $plugin );
				delete $plugins[$i];
			}
		}
		my $i=0;
		while (scalar(@suspect_plugins)!=0) 
		{						
			foreach my $dir (@$directories)
			{
				$dir=~s/\n//g;
				$_=$suspect_plugins[$i];
				if(/\b$dir\b/)
				{
					my $tmp1="$1";
					push(@plugins,$tmp1);
					delete $suspect_plugins[$i];
					$i=0;
					last;					
				}else
				{				
				if(/($dir)(\S+)/)
				{
					my $tmp1="$1";
					my $tmp2="$2";			
					push(@plugins,$tmp1);
					my $idx=FindElemByName(\@dirs,$tmp2);
					if($idx<0)
					{
      					   push(@suspect_plugins,$tmp2);					
					}
					else
					{
					  push(@plugins,$tmp2);
					}
					delete $suspect_plugins[$i];
					$i=0;
					last;
					
				}
				}
			}
			if($i==scalar(@suspect_plugins))
			{
				last;
			}
			$i++;
		}
		my $str1;
		foreach $plugin (@plugins)
		{
			$str1=$str1.$plugin." ";
		}
		$str1=~s/\s{2,}/ /g;
		print WEBMINACL $str1,"\n";		
	}
close(WEBMINACL);
}

sub FindElemByName()
{
	( my $mass, my $name ) = @_;
	my @m=@$mass;
	my $index=-1;
	for ( $i = 0 ; $i < scalar(@m) ; $i++ )
	{
		my $tmp=$m[$i];

		if ( $tmp =~/\b${name}\b/ )
		{
			$index=$i;
		}
	}
	return $index;
}
