File: //proc/self/root/proc/self/root/scripts.20110531.215904.25158/phpopenbasectl
#!/usr/bin/perl
# cpanel - phpopenbasectl Copyright(c) 2010 cPanel, Inc.
# All rights Reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
BEGIN { unshift @INC, '/usr/local/cpanel'; }
use Cpanel::RcsRecord ();
use Cpanel::Config ();
use Cpanel::Config::LoadCpConf ();
use Cpanel::HttpUtils::ApRestart ();
use Cpanel::PwCache ();
use Cpanel::SafeFile ();
use Cpanel::SafeRun::Simple ();
use Cpanel::Logger ();
my $logger = Cpanel::Logger->new();
my $ctl = lc shift @ARGV;
if ( $ctl !~ /^o(n|ff)$/ ) {
die "$0: usage: $0 <on|off>";
}
exit if ( !-e "/usr/local/apache/conf/httpd.conf" );
my $cpconf = Cpanel::Config::LoadCpConf::loadcpconf();
$cpconf->{'phpopenbasedirhome'} = $ctl eq 'on' ? 1 : 0;
Cpanel::Config::savecpconf($cpconf);
Cpanel::PwCache::init_passwdless_pwcache();
my $PDS = Cpanel::Config::loadConfig( '/var/cpanel/phpopendomains', {}, '\s*[:]\s*', '^\s*[#]' );
my $userdomains = Cpanel::Config::loaduserdomains( {}, 1 );
# would put warning here, but if it doesn't exist then creating an empty one won't help
$httplock = Cpanel::SafeFile::safeopen( \*HC, "+<", "/usr/local/apache/conf/httpd.conf" );
if ( !$httplock ) {
$logger->die("Could not edit /usr/local/apache/conf/httpd.conf");
}
while (<HC>) {
push( @CFILE, $_ );
}
seek( HC, 0, 0 );
my $ivh = 0;
my $iphp = 0;
my $killphp = 0;
foreach (@CFILE) {
$line = $_;
if ( !( $line =~ /^\s*#/ ) ) {
if ( $line =~ /^\s*<virtualhost/i ) {
$bh = 1;
$ivh = 1;
}
if ( $line =~ /^\s*<ifmodule\s*mod_php\d+/i || $line =~ m/^\s*<ifmodule\s*sapi_apache2\.c/i || $line =~ /^\s*<ifmodule\s*!?concurrent_php/i ) {
if ( !$iphp ) {
$phpl = '';
$killphp = 0;
}
$iphp++;
}
if ( $iphp && $line =~ /^\s*<\/ifmodule/i ) {
$iphp--;
if ( !$iphp && $killphp ) {
$phpl = '';
next;
}
elsif ( !$iphp ) {
print HC $phpl;
$phpl = '';
}
}
if ( $line =~ /^\s*<\/virtualhost/i ) {
$ivh = 0;
}
if ( $ivh && $ctl eq "on" ) {
if ( $line =~ /^\s*php\d?_admin_value\s*open_basedir /i ) {
$bh = 0;
}
if ( $line =~ /^\s*ServerName\s*(\S+)/i ) {
$sn = $1;
$sn =~ s/^www\.//g;
if ($bh) {
$owner = $userdomains->{$sn} || '';
if ( $owner ne "" && $owner ne "root" && $owner ne "*" && getpwnam($owner) ) {
my $homedir = ( Cpanel::PwCache::getpwnam($owner) )[7];
if ( $PDS->{$sn} ne "-1" ) {
print HC " <IfModule concurrent_php.c>\n";
print HC " php4_admin_value open_basedir \"${homedir}/:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/php:/tmp\"\n";
print HC " php5_admin_value open_basedir \"${homedir}/:/usr/lib/php:/usr/local/lib/php:/tmp\"\n";
print HC " </IfModule>\n";
print HC " <IfModule !concurrent_php.c>\n";
print HC " <IfModule mod_php4.c>\n";
print HC " php_admin_value open_basedir \"${homedir}/:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/php:/tmp\"\n";
print HC " </IfModule>\n";
print HC " <IfModule mod_php5.c>\n";
print HC " php_admin_value open_basedir \"${homedir}/:/usr/lib/php:/usr/local/lib/php:/tmp\"\n";
print HC " </IfModule>\n";
print HC " <IfModule sapi_apache2.c>\n";
print HC " php_admin_value open_basedir \"${homedir}/:/usr/lib/php:/usr/php4/lib/php:/usr/local/lib/php:/usr/local/php4/lib/php:/tmp\"\n";
print HC " </IfModule>\n";
print HC " </IfModule>\n";
}
}
}
}
}
if ( $ivh && $ctl eq "off" && $iphp ) {
if ( $line =~ /^\s*php\d?_admin_value\s*open_basedir /i ) {
$killphp = 1;
next;
}
}
}
if ($iphp) {
$phpl .= $line;
}
else {
print HC $line;
}
}
truncate( HC, tell(HC) );
Cpanel::SafeFile::safeclose( \*HC, $httplock );
Cpanel::RcsRecord::rcsrecord("/usr/local/apache/conf/httpd.conf");
Cpanel::HttpUtils::ApRestart::safeaprestart();