#!/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 "; } 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 () { push( @CFILE, $_ ); } seek( HC, 0, 0 ); my ( $bh, $ivh, $iuserdir, $userdirl, $killuserdir ); foreach (@CFILE) { my $line = $_; if ( !( $line =~ /^#/ ) ) { if ( $line =~ /{$sn} || ''; if ( $owner ne "" && $owner ne "root" && $owner ne "*" && getpwnam($owner) ) { if ( $UDS->{$sn} ne "-1" ) { print HC " \n"; print HC " UserDir disabled\n"; print HC " UserDir enabled ${owner} $UDS->{$sn}\n"; print HC " \n"; } } else { if ( $UDS->{"DefaultHost"} ne "-1" ) { print HC " \n"; print HC " UserDir disabled\n"; print HC " UserDir enabled " . $UDS->{"DefaultHost"} . "\n" if ( $UDS->{'DefaultHost'} ); print HC " \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";