!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/usr/share/webmin/virtual-server/   drwxrwxr-x
Free 28.62 GB of 117.98 GB (24.26%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     downgrade-license.pl (6.24 KB)      -rwxrwxr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl

=head1 downgrade-licence.pl

Downgrade Virtualmin Pro system to GPL version

This program downgrades Virtualmin Pro system to GPL by performing various
actions like, swapping Pro package with GPL variant, locking resellers accounts,
automatically switching repositories and reverting the license to GPL.
The only required parameter to perform downgrade is C<--perform>. Be careful,
this program will not ask for confirmation before performing downgrade.

=cut

package virtual_server;
if (!$module_name) {
    $main::no_acl_check++;
    $ENV{'WEBMIN_CONFIG'} ||= "/etc/webmin";
    $ENV{'WEBMIN_VAR'} ||= "/var/webmin";
    if ($0 =~ /^(.*)\/[^\/]+$/) {
        chdir($pwd = $1);
        }
    else {
        chop($pwd = `pwd`);
        }
    $0 = "$pwd/downgrade-licence.pl";
    require './virtual-server-lib.pl';
    $< == 0 || die "downgrade-licence.pl must be run as root";
    }
&set_all_text_print();
@OLDARGV = @ARGV;

# Parse args
while(@ARGV > 0) {
    local $a = shift(@ARGV);
    if ($a eq "--perform") {
        $downgrade = 1;
        }
    }
$downgrade || &usage();

my $gpl_repos_warning = "GPL version is already installed!";
my $gpl_downgrading_repository = "Downgrading Virtualmin repository ..";
my $gpl_downgrading_package = "Downgrading Virtualmin package ..";
my $gpl_downgrading_license = "Downgrading Virtualmin license ..";
my $gpl_downgrading_all_done = "Your system has been successfully downgraded to Virtualmin GPL! Thank you for giving Virtualmin Pro a try.";
my $gpl_downgrading_some_failed = "Downgrading to Virtualmin GPL finished with errors! Thank you for giving Virtualmin Pro a try.";
my $gpl_downgrading_done = ".. done";
my $gpl_downgrading_failed = ".. failed";
my $gpl_downgrading_failed_not_supported = ".. failed : automated downgrading is not yet supported for installations using .wbm.gz files";
my $gpl_downgrading_failed_status;

# Downgrade RHEL repo and the package
if (-r $virtualmin_yum_repo) {
    my $found = 0;
    my $lref = &read_file_lines($virtualmin_yum_repo);
    
    my $gpl_warning = ("@{$lref}" =~ /\/gpl\//);
    if ($gpl_warning) {
        print $gpl_repos_warning . "\n";
        exit(1);
        }

    &$first_print($gpl_downgrading_repository);
    &lock_file($virtualmin_yum_repo);
    foreach my $l (@$lref) {
        if ($l =~ /^baseurl=(https?):/) {
            $l =~ s/(:\/\/)[0-9]+:[a-zA-Z-0-9]+\@/$1/;
            
            # Virtualmin 7 repo format (/vm/7/pro/rpm/noarch/)
            if ($l =~ /\/(vm\/(?|([7-9])|([0-9]{2,4}))\/(rpm|pro)(\/.*))/) {
                next if ($l !~ /noarch/);
                $l =~ s/(\/pro)/\/gpl/;
                $found++;
                }
            # Virtualmin 6 repo format
            else {
                $l =~ s/(\/vm\/[\d]+)/$1\/gpl/;    
                $found++;
                }
            }
        # New repos have Pro in title too
        if ($l =~ /^name=/ && $l =~ /Virtualmin\s+\d+\s+Professional/) {
            $l =~ s/(Professional)/GPL/;
            }
        }
    &flush_file_lines($virtualmin_yum_repo);
    &unlock_file($virtualmin_yum_repo);
    &$second_print($found ? $gpl_downgrading_done : $gpl_downgrading_failed);

    # Downgrade package
    if ($found) {
        &lock_all_resellers;
        &$first_print($gpl_downgrading_package);
        &execute_command("yum clean all");
        my $rv = &execute_command("yum -y downgrade wbm-virtual-server");
        &$second_print(!$rv ? $gpl_downgrading_done : "$gpl_downgrading_failed : $rv");
        $gpl_downgrading_failed_status++ if ($rv);
        }
    else {
        &$first_print($gpl_downgrading_package);
        &$second_print($gpl_downgrading_failed);
        $gpl_downgrading_failed_status++;
        }
    }

# Downgrade Debian/Ubuntu repo and the package
elsif (-r $virtualmin_apt_repo) {
    local $found = 0;
    local $lref = &read_file_lines($virtualmin_apt_repo);
    
    my $gpl_warning = ("@{$lref}" =~ /\/gpl\//);
    if ($gpl_warning) {
        print $gpl_repos_warning . "\n";
        exit(1);
        }
    
    &$first_print($gpl_downgrading_repository);
    &lock_file($virtualmin_apt_repo);
    foreach my $l (@$lref) {
        # Virtualmin 7 repo format (/vm/7/pro/rpm/noarch/)
        if ($l =~ /^deb(.*?)(http|https):\/\/$upgrade_virtualmin_host\/(vm\/(?|([7-9])|([0-9]{2,4}))\/(pro)(\/.*))/) {
            $l =~ s/(\/pro)/\/gpl/;
               $found++;
            }
        # Virtualmin 6 repo format (/vm/7/gpl/apt virtualmin main)
        elsif ($l =~ /^deb(.*?)(https?):/) {
               $l =~ s/(:\/\/)[0-9]+:[a-zA-Z-0-9]+\@/$1/;  
               $l =~ s/(\/vm\/[\d]+)/$1\/gpl/; 
               $found++;
            }
        }
    &flush_file_lines($virtualmin_apt_repo);
    &unlock_file($virtualmin_apt_repo);
    &$second_print($found ? $gpl_downgrading_done : $gpl_downgrading_failed);
    $gpl_downgrading_failed_status++ if (!$found);
    if (-d $virtualmin_apt_auth_dir) {
        unlink("$virtualmin_apt_auth_dir/virtualmin.conf");
        }

    # Downgrade package
    if ($found) {
        &lock_all_resellers;
        &$first_print($gpl_downgrading_package);
        &execute_command("apt-get clean && apt-get update");
        my $rv;
        foreach my $n (reverse(1..12)) {
            $rv = &execute_command("apt-get -y install --allow-downgrades --reinstall webmin-virtual-server=*.gpl-$n");
            last if (!$rv);
            }
        &$second_print(!$rv ? $gpl_downgrading_done : "$gpl_downgrading_failed : $rv");
        $gpl_downgrading_failed_status++ if ($rv);
        }
    else {
        &$first_print($gpl_downgrading_package);
        &$second_print($gpl_downgrading_failed);
        $gpl_downgrading_failed_status++;
        }
    }

# Downgrade wbm.gz install.
else {
    # https://software.virtualmin.com/vm/7/gpl/wbm/virtual-server-7.9.0.gpl-1.wbm.gz
    # Downgrade package
    &$first_print($gpl_downgrading_package);
    &$second_print($gpl_downgrading_failed_not_supported);
    }
# Downgrade Virtualmin licence file
&$first_print($gpl_downgrading_license);
&lock_file($virtualmin_license_file);
%lfile = ( 'SerialNumber' => "GPL",
           'LicenseKey' => "GPL" );
&write_env_file($virtualmin_license_file, \%lfile);
&unlock_file($virtualmin_license_file);
# Remove license status file too
unlink($licence_status);
&$second_print($gpl_downgrading_done);
&clear_links_cache();
&run_post_actions_silently();
&virtualmin_api_log(\@OLDARGV);

# Display final message
if ($gpl_downgrading_failed_status) {
    &$first_print($gpl_downgrading_some_failed);
    }
else {
    &$first_print($gpl_downgrading_all_done);
    }

# Lock reseller accounts first
sub lock_all_resellers
{
my @resels = &list_resellers();
foreach my $resel (@resels) {
    my $oldresel = { %{$resel} };
    $resel->{'pass'} = "!".$resel->{'pass'}
        if ($resel->{'pass'} !~ /^!/);
    &modify_reseller($resel, $oldresel);
    }
}

sub usage
{
print "$_[0]\n\n" if ($_[0]);
print "Downgrade Virtualmin Pro system to GPL.\n";
print "\n";
print "virtualmin downgrade-licence --perform\n";
exit(1);
}



:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0044 ]--