#!/usr/bin/perl #WHMADDON:csf:ConfigServer Security & Firewall ############################################################################### # Copyright 2006-2023, Way to the Web Limited # URL: http://www.configserver.com # Email: sales@waytotheweb.com ############################################################################### ## no critic (RequireUseWarnings, ProhibitExplicitReturnUndef, ProhibitMixedBooleanOperators, RequireBriefOpen) use strict; use File::Find; use Fcntl qw(:DEFAULT :flock); use Sys::Hostname qw(hostname); use IPC::Open3; use lib '/usr/local/csf/lib'; use ConfigServer::DisplayUI; use ConfigServer::DisplayResellerUI; use ConfigServer::Config; use ConfigServer::Slurp qw(slurp); use lib '/usr/local/cpanel'; require Cpanel::Form; require Cpanel::Config; require Whostmgr::ACLS; require Cpanel::Rlimit; require Cpanel::Template; require Cpanel::Version::Tiny; ############################################################################### # start main our ($reseller, $script, $images, %rprivs, $myv, %FORM); Whostmgr::ACLS::init_acls(); %FORM = Cpanel::Form::parseform(); my $config = ConfigServer::Config->loadconfig(); my %config = $config->config; my $slurpreg = ConfigServer::Slurp->slurpreg; my $cleanreg = ConfigServer::Slurp->cleanreg; Cpanel::Rlimit::set_rlimit_to_infinity(); if (-e "/usr/local/cpanel/bin/register_appconfig") { $script = "csf.cgi"; $images = "csf"; } else { $script = "addon_csf.cgi"; $images = "csf"; } foreach my $line (slurp("/etc/csf/csf.resellers")) { $line =~ s/$cleanreg//g; my ($user,$alert,$privs) = split(/\:/,$line); $privs =~ s/\s//g; foreach my $priv (split(/\,/,$privs)) { $rprivs{$user}{$priv} = 1; } $rprivs{$user}{ALERT} = $alert; } $reseller = 0; if (!Whostmgr::ACLS::hasroot()) { if ($rprivs{$ENV{REMOTE_USER}}{USE}) { $reseller = 1; } else { print "Content-type: text/html\r\n\r\n"; print "You do not have access to this feature\n"; exit(); } } open (my $IN, "<", "/etc/csf/version.txt") or die $!; $myv = <$IN>; close ($IN); chomp $myv; my $bootstrapcss = ""; my $jqueryjs = ""; my $bootstrapjs = ""; my @header; my @footer; my $htmltag = "data-post='$FORM{action}'"; if (-e "/etc/csf/csf.header") { open (my $HEADER, "<", "/etc/csf/csf.header"); flock ($HEADER, LOCK_SH); @header = <$HEADER>; close ($HEADER); } if (-e "/etc/csf/csf.footer") { open (my $FOOTER, "<", "/etc/csf/csf.footer"); flock ($FOOTER, LOCK_SH); @footer = <$FOOTER>; close ($FOOTER); } unless ($config{STYLE_CUSTOM}) { undef @header; undef @footer; $htmltag = ""; } my $thisapp = "csf"; my $reregister; my $modalstyle; if ($Cpanel::Version::Tiny::major_version >= 65) { if (-e "/usr/local/cpanel/whostmgr/docroot/cgi/configserver/${thisapp}/${thisapp}.conf") { sysopen (my $CONF, "/usr/local/cpanel/whostmgr/docroot/cgi/configserver/${thisapp}/${thisapp}.conf", O_RDWR | O_CREAT); flock ($CONF, LOCK_EX); my @confdata = <$CONF>; chomp @confdata; for (0..scalar(@confdata)) { if ($confdata[$_] =~ /^target=mainFrame/) { $confdata[$_] = "target=_self"; $reregister = 1; } } if ($reregister) { seek ($CONF, 0, 0); truncate ($CONF, 0); foreach (@confdata) { print $CONF "$_\n"; } &printcmd("/usr/local/cpanel/bin/register_appconfig","/usr/local/cpanel/whostmgr/docroot/cgi/configserver/${thisapp}/${thisapp}.conf"); $reregister = "

Updated application. The next time you login to WHM this will open within the native WHM main window instead of launching a separate window

\n"; } close ($CONF); } } print "Content-type: text/html\r\n\r\n"; #if ($Cpanel::Version::Tiny::major_version < 65) {$modalstyle = "style='top:120px'"} my $templatehtml; my $SCRIPTOUT; unless ($FORM{action} eq "tailcmd" or $FORM{action} =~ /^cf/ or $FORM{action} eq "logtailcmd" or $FORM{action} eq "loggrepcmd") { # open(STDERR, ">&STDOUT"); open ($SCRIPTOUT, '>', \$templatehtml); select $SCRIPTOUT; print < $jqueryjs $bootstrapjs \n"; print @header; } unless ($FORM{action} eq "tailcmd" or $FORM{action} =~ /^cf/ or $FORM{action} eq "logtailcmd" or $FORM{action} eq "loggrepcmd") { print <

ConfigServer Security & Firewall - csf v$myv

EOF if ($reregister ne "") {print $reregister} } #eval { if ($reseller) { ConfigServer::DisplayResellerUI::main(\%FORM, $script, 0, $images, $myv); } else { ConfigServer::DisplayUI::main(\%FORM, $script, 0, $images, $myv); } #}; #if ($@) { # print "Error during UI output generation: [$@]\n"; # warn "Error during UI output generation: [$@]\n"; #} unless ($FORM{action} eq "tailcmd" or $FORM{action} =~ /^cf/ or $FORM{action} eq "logtailcmd" or $FORM{action} eq "loggrepcmd") { print < function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for(var i = 0; i 500) { \$('#botlink').fadeIn(); } else { \$('#botlink').fadeOut(); } if (\$(this).scrollBottom() > 500) { \$('#toplink').fadeIn(); } else { \$('#toplink').fadeOut(); } }); EOF if ($config{STYLE_MOBILE} or $reseller) { print <\n"; print @footer; } unless ($FORM{action} eq "tailcmd" or $FORM{action} =~ /^cf/ or $FORM{action} eq "logtailcmd" or $FORM{action} eq "loggrepcmd") { close ($SCRIPTOUT); select STDOUT; Cpanel::Template::process_template( 'whostmgr', { "template_file" => "${thisapp}.tmpl", "${thisapp}_output" => $templatehtml, "print" => 1, } ); } # end main ############################################################################### ## start printcmd sub printcmd { my @command = @_; my ($childin, $childout); my $pid = open3($childin, $childout, $childout, @command); while (<$childout>) {print $_} waitpid ($pid, 0); return; } ## end printcmd ############################################################################### 1;