CHips L MINI SHELL

CHips L pro

Current Path : /proc/self/root/proc/3/task/3/cwd/usr/local/rvglobalsoft/rvglobalsoft/lib/RVL/
Upload File :
Current File : //proc/self/root/proc/3/task/3/cwd/usr/local/rvglobalsoft/rvglobalsoft/lib/RVL/System.pm

#!/usr/bin/perl
package RVL::System;
##LICENSE##
use strict;
use warnings;

use File::Path qw(make_path);
use File::Copy;
use File::Basename qw(&basename &dirname);
use Digest::MD5 qw(md5_hex);

use Class::Std::Utils;
{
	sub cp {
		my $source = (defined($_[0]) && $_[0] ne "") ? $_[0] : undef;
		my $dest = (defined($_[1]) && $_[1] ne "") ? $_[1] : undef;
		my $res = 1;
		
		if (defined($source) && defined($dest) && -e $source && $source ne $dest) {
			$res = (copy($source, $dest)) ? 1 : "The existing directory dose not permit to copy file";
		}
		
		return $res;
	}
	
    sub mkdirp {
        my ($dirname) = $_[0];
        my ($mode) = (defined($_[1]) && RVL::String::is_string($_[1]) && $_[1] ne "") ? $_[1] : 0755;
        my ($owner) = (defined($_[2]) && RVL::String::is_string($_[2]) && $_[2] ne "") ? $_[2] : undef;
        my ($group) = (defined($_[3]) && RVL::String::is_string($_[3]) && $_[3] ne "") ? $_[3] : undef;
        my $res = 1;
                                    
                                    
        if (!-d $dirname) {
        	if (defined($owner) && defined($group)) {
        		eval { make_path $dirname, {mode => $mode, owner=> $owner, group=> $group} };
        	} elsif (defined($owner)) {
        		eval { make_path $dirname, {mode => $mode, owner=> $owner} };
        	} elsif (defined($group)) {
                eval { make_path $dirname, {mode => $mode, group=> $group} };
            } else {
            	eval { make_path $dirname, {mode => $mode} };
            }
            
            if ($@) {
                $res = "The existing directory dose not permit to create new directory: $dirname";
            }
        }
        
        return $res; 
    }
    
    sub md5 {
	    my ($data) = $_[0];
	    return md5_hex($data);
	}
	
	sub getUserOwer {
		my $source = shift;
		my $owner = "";
		if (-e $source) {
			my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($source);
			$owner = getpwuid($uid);
		}
		return $owner;
	}
	
	sub getUserGroup {
        my $source = shift;
        my $group = "";
        if (-e $source) {
            my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($source);
            $group = getgrgid($gid);
        }
        return $group;
	}
	
	sub getMode {
		my $source = shift;
        my $smode = "";
        if (-e $source) {
        	use Fcntl ':mode';
            my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($source);
            $smode = sprintf "%04o", S_IMODE($mode);
        }
        return $smode;
	}
	
	sub getDiskQuotaPartition {
	   	my $partiition = (defined($_[0]) && $_[0] ne "") ? $_[0] : undef;
	   	my $quota = { block => undef, used  => undef, available => undef };
	   	
	   	if (defined($partiition) && -d $partiition) {
	   		
	   		my $cmd = `df $partiition`;
	   		my @data = split(" ", $cmd);
	   		if (scalar(@data) > 0) {
	   			
	   			if (defined($data[8]) && $data[8] ne "") {
                    $quota->{'block'} = $data[8];
                }
                if (defined($data[9]) && $data[9] ne "") {
                    $quota->{'used'} = $data[9];
                }
	   			if (defined($data[10]) && $data[10] ne "") {
	   				$quota->{'available'} = $data[10];
	   			}
	   			
	   		}
	   		
	   	}
	   	
	   	return $quota;
	}
	
	sub isAlertQuotaPartition {
		my $partiition = (defined($_[0]) && $_[0] ne "") ? $_[0] : undef;
		my $source = (defined($_[1])) ? $_[1] : "";
		my $res = 0;
		
		if (-f $source) {
			my $quota = RVL::System::getDiskQuotaPartition($partiition);
			if (defined($quota->{'available'})) {
				if (RVL::File::filesize($source) > $quota->{'available'}) {
					$res = 1;
				}
			}
		}
		
		return $res;
	}
	
	sub touch {
	    my ($fullFile) = @_;
	    my $path = dirname($fullFile);
	    
	    my $res = 1;
	    if (!-d $path) {
	        $res = RVL::System::mkdirp($path);
	    }
	    
	    if ($res == 1) {
    	    if(!-f $fullFile){
                if (open(my $FILE, '>', $fullFile)) {
                    close($FILE);
                } else {
                    $res = $!." on $fullFile";
                }
            }
	    }
	    
	    return $res;
	}
	
	sub getIPList{
        my ($opt) = $_[0];
        #TODO หา ip list
        if (!defined $opt) {
            return RVL::System::_getMainIPList();
        } elsif ($opt eq 1) {
            #TODO หา all list
            return RVL::System::_getAllIPList();;
        }
    }
    
    sub _getMainIPList{
        my($system, $ethdev,$ips, @IPS);
        $ethdev = '';
        chomp($system = RVL::System::callBackticks("uname -s"));
        if ( -f "/etc/wwwacct.conf") {
            if (open(CONF,"/etc/wwwacct.conf")) {
                while(<CONF>) {
                    s/\n//g;
                    if ($_ !~ /^;/) {
                        if ($_ =~ /ETHDEV/) {
                            (undef,$ethdev) = split(/ /, $_);
                        }
                    }   
                }
                close(CONF);
            }
        }
        
        if ($system =~ /freebsd/i || $ethdev eq "") {
            $ips = RVL::System::callBackticks("/sbin/ifconfig -a");
        } else {
            $ips = RVL::System::callBackticks("/sbin/ifconfig $ethdev");
        }
        @IPS = split(/\n/, $ips);
        foreach my $ip (@IPS) {
            if ($ip =~ /(\d*)\.(\d*)\.(\d*).(\d*)/) {
                if ($1 ne "127") {
                    return "$1.$2.$3.$4";
                }
            }
        }
        return "0.0.0.0";
    }
    
    sub _getAllIPList {
        my $ifconfigs = RVL::System::callBackticks("/sbin/ifconfig -a");
        my @IPS = split(/\n/, $ifconfigs);
        my @allIP = ();
        foreach my $ip (@IPS) {
            if ($ip =~ /(\d*)\.(\d*)\.(\d*).(\d*)/) {
                if ($1 ne "127") {
                    push(@allIP, "$1.$2.$3.$4");
                }
            }
        }
        
        return @allIP;
    }
    
    sub callBackticks{
        my $cmd = join(' ', @_);
    
        if (-f '.rvsBackticks') {
            system('rm -f .rvsBackticks');
        }
        
        my ($TestBackticks) = `echo 'RV Test Backticks'`;
        my ($skipBackticks) = 0;
        if ($TestBackticks !~/RV Test Backticks/) {
            $skipBackticks = 1;
        }
        if (-f '.skipBackticks' || $skipBackticks eq 1) {
            system("$cmd > .rvsBackticks 2>&1");
        }
        my ($resuft);
        if (-f '.rvsBackticks') {
            my ($fd);
            open($fd, '<', '.rvsBackticks');
            $resuft = join('',<$fd>);
            close($fd);
            system('rm -f .rvsBackticks');
        } else {
            $resuft = `$cmd`;
        }
     
        return $resuft;
    }
	
}
1;

=pod

=head1 System

Lib System.

=head1 HOW IT WORKS

=head2 cp()
@param String $source - File name source
@param String $dest - File name destination
@return Boolean
simple:
            my $res = RVL::System::cp("/home/puttipong/public_html/test.html", "/home/puttipong/public_html/test-5.html");

=head2 mkdirp()
@param String $dirname - Directory name source
@param Integer $mode - Mode
@param String $owner - Owner
@param String $group - Group
@return mix TRUE on success or STRING on error
simple: my $res = RVL::System::mkdirp("/var/rvexploitescanner/conf2/test/", 0644, "puttipong", "puttipong");
           
reference: http://search.cpan.org/~dland/File-Path-2.08/Path.pm
          
=head2 md5()
@param String $data - Data
@return String
simple: my $filename = "/home/puttipong/public_html/test.php";
           my $md5 = RVL::System::md5(RVL::File::file_get_contents($filename));
           
=head2 getUserOwer()
@param String $source - File name source
@return String $owner
simple: my $owner = RVL::System::getUserOwer("/home/puttipong/public_html/test.php");

=head2 getUserGroup
@param String $source - File name source
@return String $group
simple: my $group = RVL::System::getUserGroup("/home/puttipong/public_html/test.php");

=head2  getMode
@param String $source - File name source
@return String $smode          
simple: my $smode = RVL::System::getMode("/home/puttipong/public_html/test.php");
          
=head2 getDiskQuotaPartition
@param String $partiition - Patition
@return HASH $quota
simple: my $quota = RVL::System::getDiskQuotaPartition(__CONSTANT__::EXS_PATH);
    
$VAR1 = {
		          'used' => '67581988',
		          'block' => '234443632',
		          'available' => '154952524'
		       };
		       
=head2 isAlertQuotaPartition
@param String $partiition - Patition
@param String $source - Source file name
@return Boolean 
simple: my $res = RVL::System::isAlertQuotaPartition(__CONSTANT__::EXS_PATH, "/home/puttipong/public_html/test.html");		       
          
=cut

Copyright 2K16 - 2K18 Indonesian Hacker Rulez