JFIF$        dd7 

Viewing File: /usr/local/cpanel/scripts/unpkgacct

#!/bin/bash
eval 'if [ -x /usr/local/cpanel/3rdparty/bin/perl ]; then exec /usr/local/cpanel/3rdparty/bin/perl -x -- $0 ${1+"$@"}; else exec /usr/bin/perl -x $0 ${1+"$@"}; fi;'
  if 0;

#!/usr/bin/perl
# cpanel - scripts/unpkgacct                         Copyright 2022 cPanel, L.L.C.
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cpanel license. Unauthorized copying is prohibited

# NOTE: This script is designed to run on other systems during a transfer, usually as /usr/bin/perl.

package scripts::unpkgacct;

BEGIN {
    unshift @INC, '/usr/local/cpanel';
    my %seen_inc;
    @INC = grep { !/(?:^\.|\.\.|\/\.+)/ && !$seen_inc{$_}++ } @INC;
    undef %seen_inc;
}

require 5.006;

use Errno;

our $VERSION = '1.0';

run(@ARGV) if !caller;

sub run {
    my (@argv) = @_;

    local $| = 1;

    if ( grep { m{version} } @argv ) {
        print "unpkgacct VERSION $VERSION\n";
        return;
    }

    my ( $user, $mntpoint ) = @argv;

    if ( !_is_sane_username($user) && !enXim($user) ) {
        die "$0: invalid account “$user”\n";
    }

    #die() is for sanity
    $mntpoint ||= getmntpoint() || die 'Failed to find mountpoint!';

    my @paths_to_check = (
        "$mntpoint/cpmove-${user}",
        "$mntpoint/cpmove-${user}-split",
        "$mntpoint/cpmove-${user}.tar.gz",
        "$mntpoint/cpmove-${user}.tar",
    );

    my @paths_to_remove;
    for my $path (@paths_to_check) {
        next if -l $path;

        my $err = $!;

        if ( -e _ ) {

            #Exists and is not a symlink -> delete
            print "Found archive: $path\n";
            push @paths_to_remove, $path;
        }
        elsif ( $err != Errno::ENOENT ) {

            #lstat() shouldn’t fail except for ENOENT.
            warn "lstat($path): $err";
        }
    }

    if ( !( -d '/usr/local/cpanel' ) && $! ) {
        if ( $!{'ENOENT'} ) {
            push @paths_to_remove, '/etc/trueuserdomains';
        }
        else {
            warn "stat(/usr/local/cpanel): $!";
        }
    }

    if (@paths_to_remove) {
        exec( '/bin/rm', '--recursive', '--force', '--', @paths_to_remove ) or die "exec(rm): $!";
    }

    print "The mountpoint “$mntpoint” does not contain any archives for “$user”.\n";

    return;
}

## case 34397 deprecation: use Cpanel::Filesys::Home::get_homematch_with_most_free_space
sub getmntpoint {

    my ($homedir);
    my ($homematch);

    open( CONF, "/etc/wwwacct.conf" );
    while (<CONF>) {
        $_ =~ s/\n//g;
        if ( $_ !~ /^;/ ) {
            if ( $_ =~ /HOMEDIR/ ) {
                ( undef, $homedir ) = split( / /, $_ );
            }
            if ( $_ =~ /HOMEMATCH/ ) {
                ( undef, $homematch ) = split( / /, $_ );
            }
        }
    }
    close(CONF);
    $homedir =~ s/\/$//g;

    ## case 34397: mark for deprecation
    my $disk = `df`;

    my $max     = 0;
    my $mnt     = "/";
    my (@DISK)  = split( /\n/, $disk );
    my $addline = '';
    foreach my $line (@DISK) {
        if ( $line !~ /[\s|\t]+/ ) {
            $addline = $line;
            $addline =~ s/\n//g;
            next;
        }
        if ( $line =~ /^\/dev/ || $addline ne "" ) {
            $line =~ s/\n//g;

            $line =~ /\s(\d*)\s*\d*\%\s*(\S+)$/;
            my $free  = $1;
            my $mount = $2;

            my $assess = 1;
            if ( ( $mount eq "/" ) && ( $homedir eq 0 ) ) {
                $assess = 0;
            }
            $free = int($free);
            $max  = int($max);

            if ( ( $max < $free ) && ( $assess eq 1 ) && ( $mount =~ /$homematch/ || $mount eq "/" ) ) {
                $max = $free;
                if ( $mount eq "/" ) {
                    $mount = $homedir;
                }
                $mnt = $mount;
            }
        }
    }

    if ( $mnt eq "" || $mnt eq "/" ) { $mnt = '/home'; }

    return ($mnt);
}

sub enXim {
    my ($enxim_user) = @_;

    return $enxim_user if $enxim_user =~ /site\d+/;

    my $found = 0;
    opendir( VH, "/home/virtual" );
    my @FILES = grep( /^site/, readdir(VH) );
    closedir(VH);
    foreach my $xsite (@FILES) {
        my $ul;
        my $sitedir = '/home/virtual/' . $xsite . "/fst";
        open( DNS, "$sitedir/etc/passwd" );
        chomp( $ul = <DNS> );
        my $muser = ( split /:/, $ul )[0];
        close(DNS);

        if ( $muser eq $enxim_user ) { $found = 1; last }
    }
    return $found;
}

sub _is_sane_username {
    my ($name) = @_;

    return 0 if $name =~ tr</><>;
    return 0 if $name eq '.' || $name eq '..';

    return 1;
}

1;
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg