JFIF$        dd7 

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

#!/usr/local/cpanel/3rdparty/bin/perl

# cpanel - scripts/userdirctl                      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

use strict;
use warnings;

use Cpanel::Config::LoadUserDomains ();
use Cpanel::Config::CpConfGuard     ();
use Cpanel::Config::LoadConfig      ();
use Cpanel::ConfigFiles::Apache 'apache_paths_facade';    # see POD for import specifics
use Cpanel::ConfigFiles::Apache::Config  ();
use Cpanel::SafeFile                     ();
use Cpanel::Logger                       ();
use Cpanel::WildcardDomain               ();
use Cpanel::HttpUtils::ApRestart::BgSafe ();

my $logger = Cpanel::Logger->new();

my $ctl = lc shift @ARGV;
if ( $ctl !~ /^o(n|ff)$/ ) {
    die "$0: usage: $0 <on|off>";
}

exit if ( !-e apache_paths_facade->bin_httpd() );

my $apache_conf = Cpanel::ConfigFiles::Apache::Config::get_config();

my $bad_mod;
if ( $apache_conf->{'supported'}{'mpm_itk'} || $apache_conf->{'supported'}{'itk'} ) {
    $bad_mod = 'Apache MPM-ITK';
}
elsif ( $apache_conf->{'supported'}{'mod_ruid2'} ) {
    $bad_mod = 'mod_ruid2';
}
elsif ( $apache_conf->{'supported'}{'mod_passenger'} ) {
    $bad_mod = 'mod_passenger';
}

#Do not allow use of mod_userdir if running apache mpm-itk or ruid2 or mod_passenger due to security implications
if ( $ctl eq 'on' && $bad_mod ) {
    print "Detected $bad_mod in use.\n";
    print "Using both mod_userdir and $bad_mod is not a supported configuration.\n";
    print "Changes were not saved.\n";
    exit;
}

my $cpconf_guard = Cpanel::Config::CpConfGuard->new();
$cpconf_guard->{'data'}->{'userdirprotect'} = $ctl eq 'on' ? 1 : 0;
$cpconf_guard->save();

my $UDS = Cpanel::Config::LoadConfig::loadConfig( '/var/cpanel/moddirdomains', {}, '\s*[:]\s*', '^\s*[#]' );

my $userdomains = Cpanel::Config::LoadUserDomains::loaduserdomains( {}, 1 );

my $httplock = Cpanel::SafeFile::safeopen( \*HC, "+<", apache_paths_facade->file_conf() );
if ( !$httplock ) {
    $logger->die( 'Could not edit ' . apache_paths_facade->file_conf() );
}

my @CFILE;
while (<HC>) {
    push( @CFILE, $_ );
}
seek( HC, 0, 0 );

my ( $bh, $ivh, $iuserdir, $userdirl, $killuserdir );
foreach (@CFILE) {
    my $line = $_;
    if ( !( $line =~ /^#/ ) ) {
        if ( $line =~ /<virtualhost/i ) {
            $bh  = 1;
            $ivh = 1;
        }
        if ( $line =~ /<ifmodule\s*mod_userdir/i && $ivh ) {
            $iuserdir    = 1;
            $userdirl    = '';
            $killuserdir = 0;
        }
        if ( $line =~ /^\s*userdir\s+/i && !$ivh ) {
            print HC $line;
            next;
        }
        if ( $iuserdir && $line =~ /<\/ifmodule/i && $ivh ) {
            $iuserdir = 0;
            if ($killuserdir) {
                $userdirl = '';
                next;
            }
            else {
                print HC $userdirl;
                $userdirl = '';
            }
        }
        if ( $line =~ /<\/virtualhost/i ) {
            $ivh = 0;
        }
        if ( $ivh && $ctl eq "on" ) {
            if ( $line =~ /^\s*Userdir\s*disabled/i ) {
                $bh = 0;
            }
            if ( $line =~ /ServerName\s*(\S+)/i ) {
                my $sn = $1;
                $sn =~ s/^www\.//g;

                # decode servername to match against userdomains
                $sn = Cpanel::WildcardDomain::decode_wildcard_domain($sn);
                if ($bh) {
                    my $owner = $userdomains->{$sn} || '';
                    if ( $owner ne "" && $owner ne "root" && $owner ne "*" && getpwnam($owner) ) {
                        if ( $UDS->{$sn} ne "-1" ) {
                            print HC "    <IfModule mod_userdir.c>\n";
                            print HC "        UserDir disabled\n";
                            print HC "        UserDir enabled ${owner} $UDS->{$sn}\n";
                            print HC "    </IfModule>\n";
                        }
                    }
                    else {
                        if ( $UDS->{"DefaultHost"} ne "-1" ) {
                            print HC "    <IfModule mod_userdir.c>\n";
                            print HC "        UserDir disabled\n";
                            print HC "        UserDir enabled " . $UDS->{"DefaultHost"} . "\n" if ( $UDS->{'DefaultHost'} );
                            print HC "    </IfModule>\n";
                        }
                    }
                }
            }
        }
        if ( $ivh && $ctl eq "off" ) {
            $killuserdir = 1;
            if ( $line =~ /^\s*Userdir\s*disable/i ) {
                next;
            }
        }
    }
    if ($iuserdir) {
        $userdirl .= $line;
    }
    elsif ( $line =~ /^\s*userdir/i ) {
        next;
    }
    else {
        print HC $line;
    }
}

truncate( HC, tell(HC) );
Cpanel::SafeFile::safeclose( \*HC, $httplock );

Cpanel::HttpUtils::ApRestart::BgSafe::restart();

print "Your changes have been saved.\n";
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