#!/usr/local/cpanel/3rdparty/bin/perl
# cpanel - update_apache_directive Copyright 2019 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::SafeFile ();
use Cpanel::Logger ();
use Cpanel::ConfigFiles::Apache ();
use Cpanel::HttpUtils::ApRestart::BgSafe ();
use Cpanel::Config::Httpd::EA4 ();
if ( !Cpanel::Config::Httpd::EA4::is_ea4() ) {
print "Not applicable on non-webserver servers\n";
exit;
}
my $apacheconf = Cpanel::ConfigFiles::Apache->new();
my $logger = Cpanel::Logger->new();
my $httpdconf = $apacheconf->file_conf();
my $restart = @ARGV && grep( /^--no-restart$/, @ARGV ) ? 0 : 1;
my $verbose = @ARGV && grep( /^--verbose$/, @ARGV ) ? 1 : 0;
my $replaced_directives;
my %matching;
foreach my $setting (@ARGV) {
next if $setting =~ m/^--/;
next if $setting !~ m/==/;
my ( $directive, $replacement ) = split /==/, $setting, 2;
my @parts = split /\s+/, $directive;
my $match;
if ( scalar @parts > 1 ) {
$match = join '\s+', @parts[ 1 .. $#parts ];
}
else {
$match = $directive;
}
$matching{ $parts[0] }{$match} = $replacement;
$replaced_directives .= ' ' . $directive;
}
if ( !scalar keys %matching ) {
print "No directives specified\n";
exit;
}
my @directives = keys %matching;
my $start_match = join '|', @directives;
my $needs_rewrite;
my @httpdconf;
my $hlock = Cpanel::SafeFile::safeopen( \*HTTPC, '+<', $httpdconf );
if ( !$hlock ) {
$logger->die("Could not edit $httpdconf");
}
LINE:
while ( my $line = <HTTPC> ) {
if ( $line =~ m/^(\s*)($start_match)\s*/ ) {
my $spacing = $1;
my $directive = $2;
foreach my $match ( keys %{ $matching{$directive} } ) {
if ( $line =~ m/\s*\Q$match\E/ ) {
print "Replacing $line with $matching{$directive}{$match}\n" if $verbose;
push @httpdconf, $spacing . $matching{$directive}{$match} . "\n";
$needs_rewrite = 1;
next LINE;
}
}
}
push @httpdconf, $line;
}
if ( !$needs_rewrite ) {
Cpanel::SafeFile::safeclose( \*HTTPC, $hlock );
exit;
}
print "Updating Apache configuration\n";
seek( HTTPC, 0, 0 );
print HTTPC join( '', @httpdconf );
truncate( HTTPC, tell(HTTPC) );
Cpanel::SafeFile::safeclose( \*HTTPC, $hlock );
if ($restart) {
Cpanel::HttpUtils::ApRestart::BgSafe::restart();
}
exit;
Copyright 2K16 - 2K18 Indonesian Hacker Rulez