JFIF$        dd7 

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

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

# cpanel - scripts/initsuexec                      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 Cpanel::PwCache::Build               ();
use Cpanel::PwCache                      ();
use Cpanel::SafeFile                     ();
use Cpanel::HttpUtils::ApRestart::BgSafe ();
use Cpanel::HttpUtils::Version           ();
use Cpanel::AcctUtils::DomainOwner::Tiny ();
use Cpanel::Config::Httpd::Perms         ();
use Cpanel::Logger                       ();
use Cpanel::ConfigFiles::Apache          ();

my $apacheconf = Cpanel::ConfigFiles::Apache->new();

Cpanel::PwCache::Build::init_passwdless_pwcache();
Cpanel::AcctUtils::DomainOwner::Tiny::build_domain_cache();

exit if !-e $apacheconf->file_conf();

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

my $restart_apache = ( grep( /^--no-restart/, @ARGV ) ) ? 0 : 1;

system '/usr/local/cpanel/scripts/updateuserdomains';

my $has_suexec                   = -x $apacheconf->bin_suexec()                               ? 1 : 0;
my $has_apache2_auth_passthrough = -e $apacheconf->dir_modules() . "/mod_auth_passthrough.so" ? 1 : 0;
my $has_scgiwrap                 = ( !$has_suexec && !Cpanel::Config::Httpd::Perms::webserver_runs_as_user() );

if ($has_scgiwrap) {
    warn "scgiwrap has been removed in cPanel & WHM 62. Please use Apache suEXEC instead.\n";
}

my @CFILE;
my $in_virtual_host = 0;
my $has_user_group  = 0;
my $owner           = '';
my $scgiwrap_alias  = 'ScriptAlias /scgi-bin /usr/local/cpanel/cgi-sys/scgiwrap';

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

while (<HC>) {
    push @CFILE, $_;
}
seek( HC, 0, 0 );
foreach my $line (@CFILE) {
    if ( $line !~ /^#/ ) {
        if ( $line =~ /<virtualhost/i ) {
            $in_virtual_host = 1;
            $owner           = '';
            $has_user_group  = 0;

        }
        if ( $line =~ /<\/virtualhost/i ) {
            if ( $owner && $owner ne 'root' && $owner ne 'nobody' && $owner ne '*' && Cpanel::PwCache::getpwnam($owner) && !$has_user_group && $has_suexec ) {
                my $new = "    <IfModule !mod_disable_suexec.c>\n";
                $new .=
                  $http_ver eq '1'
                  ? "        User $owner\n        Group $owner\n"
                  : "        SuexecUserGroup $owner $owner\n";
                $new .= "    </IfModule>\n";
                print HC $new;
            }
            $in_virtual_host = 0;
        }
        if ($in_virtual_host) {
            if ( $line =~ /^(\s*)user /i || $line =~ m{^\s*SuexecUserGroup} ) {
                $has_user_group = 1;
            }
            if ( $line =~ /ServerName (\S+)/i ) {
                my $server_name = $1;
                $server_name =~ s/^www\.//g;
                $owner = Cpanel::AcctUtils::DomainOwner::Tiny::getdomainowner($server_name);

                if ( $has_suexec || $has_apache2_auth_passthrough ) {
                    my ( $uid, $gid ) = ( Cpanel::PwCache::getpwnam($owner) )[ 2, 3 ];    # really don't use $uid ...

                    if ($gid) {
                        foreach my $file ( $apacheconf->dir_conf() . "/sites/${server_name}.conf", $apacheconf->dir_conf() . "/sites/www.${server_name}.conf" ) {
                            if ( -e $file ) {
                                chmod 0640, $file;
                                chown 0, $gid, $file;
                            }
                        }
                    }
                }
            }
        }
        next if $line =~ /\Q$scgiwrap_alias\E/;
    }
    print HC $line;
}

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

Cpanel::HttpUtils::ApRestart::BgSafe::restart() if ($restart_apache);
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