asda?‰PNG IHDR ? f ??C1 sRGB ??é gAMA ±?üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T ############################################################################### # Copyright 2006-2023, Way to the Web Limited # URL: http://www.configserver.com # Email: sales@waytotheweb.com ############################################################################### ## no critic (RequireUseWarnings, ProhibitExplicitReturnUndef, ProhibitMixedBooleanOperators, RequireBriefOpen) package ConfigServer::DisplayUI; use strict; use lib '/usr/local/csf/lib'; use Fcntl qw(:DEFAULT :flock); use File::Basename; use File::Copy; use Net::CIDR::Lite; use IPC::Open3; use ConfigServer::Config; use ConfigServer::CheckIP qw(checkip); use ConfigServer::Ports; use ConfigServer::URLGet; use ConfigServer::Sanity qw(sanity);; use ConfigServer::ServerCheck; use ConfigServer::ServerStats; use ConfigServer::Service; use ConfigServer::RBLCheck; use ConfigServer::GetEthDev; use ConfigServer::Slurp qw(slurp); use Exporter qw(import); our $VERSION = 1.01; our @ISA = qw(Exporter); our @EXPORT_OK = qw(); umask(0177); our ($chart, $ipscidr6, $ipv6reg, $ipv4reg, %config, %ips, $mobile, $urlget, %FORM, $script, $script_da, $images, $myv); my $slurpreg = ConfigServer::Slurp->slurpreg; my $cleanreg = ConfigServer::Slurp->cleanreg; # ############################################################################### # start main sub main { my $form_ref = shift; %FORM = %{$form_ref}; $script = shift; $script_da = shift; $images = shift; $myv = shift; $config{THIS_UI} = shift; $| = 1; $ipscidr6 = Net::CIDR::Lite->new; my $thisui = $config{THIS_UI}; my $config = ConfigServer::Config->loadconfig(); %config = $config->config; $config{THIS_UI} = $thisui; $ipv4reg = $config->ipv4reg; $ipv6reg = $config->ipv6reg; if ($config{CF_ENABLE}) { require ConfigServer::CloudFlare; import ConfigServer::CloudFlare; } $mobile = 0; if ($FORM{mobi}) {$mobile = 1} $chart = 1; if ($config{ST_ENABLE}) { if (!defined ConfigServer::ServerStats::init()) {$chart = 0} } $urlget = ConfigServer::URLGet->new($config{URLGET}, "csf/$myv", $config{URLPROXY}); unless (defined $urlget) { $config{URLGET} = 1; $urlget = ConfigServer::URLGet->new($config{URLGET}, "csf/$myv", $config{URLPROXY}); print "
*WARNING* URLGET set to use LWP but perl module is not installed, reverting to HTTP::Tiny
\n"; } if ($config{RESTRICT_UI} == 2) { print "
| csf UI Disabled via the RESTRICT_UI option in /etc/csf/csf.conf |
Checking version...
\n\n"; my ($upgrade, $actv) = &manualversion($myv); if ($upgrade) { print "\n"; } else { if ($actv ne "") { print "Show lfd status...
\n\n"; ConfigServer::Service::statuslfd(); print "\n
...Done.
Starting lfd...
\n\n"; ConfigServer::Service::startlfd(); print "\n
...Done.
Signal lfd to restart...
\n\n";
sysopen (my $OUT, "/var/lib/csf/lfd.restart",, O_WRONLY | O_CREAT) or die "Unable to open file: $!";
close ($OUT);
} else {
print "Restarting lfd...
\n\n";
ConfigServer::Service::restartlfd();
}
print "
\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "lfdstop") {
print "Stopping lfd...
\n\n";
ConfigServer::Service::stoplfd();
print "
\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "status") {
&resize("top");
print "\n";
&printcmd("/usr/sbin/csf","-l");
if ($config{IPV6}) {
print "\n\nip6tables:\n\n";
&printcmd("/usr/sbin/csf","-l6");
}
print "\n";
&resize("bot",1);
&printreturn;
}
elsif ($FORM{action} eq "start") {
print "Starting csf...
\n";
&resize("top");
print "\n";
&printcmd("/usr/sbin/csf","-sf");
print "\n...Done.
\n";
&resize("bot",1);
&printreturn;
}
elsif ($FORM{action} eq "restart") {
print "Restarting csf...
\n";
&resize("top");
print "\n";
&printcmd("/usr/sbin/csf","-sf");
print "\n...Done.
\n";
&resize("bot",1);
&printreturn;
}
elsif ($FORM{action} eq "restartq") {
print "Restarting csf via lfd...
\n\n";
&printcmd("/usr/sbin/csf","-q");
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "temp") {
print "Removing all temporary entries:
\n\n";
if ($FORM{ip} eq "all") {
&printcmd("/usr/sbin/csf","-tf");
}
print "\n...Done.
Removing temporary deny entry for $FORM{ip}:
\n\n";
&printcmd("/usr/sbin/csf","-trd",$FORM{ip});
print "\n...Done.
Removing temporary allow entry for $FORM{ip}:
\n\n";
&printcmd("/usr/sbin/csf","-tra",$FORM{ip});
print "\n...Done.
Permanent ban for $FORM{ip}:
\n\n";
&printcmd("/usr/sbin/csf","-tr",$FORM{ip});
&printcmd("/usr/sbin/csf","-d",$FORM{ip});
print "\n...Done.
Temporarily $FORM{do}ing $FORM{ip} for $FORM{timeout} seconds:
\n\n";
if ($FORM{do} eq "block") {
&printcmd("/usr/sbin/csf","-td",$FORM{ip},$FORM{timeout},"-p",$FORM{ports},$FORM{comment});
} else {
&printcmd("/usr/sbin/csf","-ta",$FORM{ip},$FORM{timeout},"-p",$FORM{ports},$FORM{comment});
}
print "\n...Done.
Stopping csf...
\n"; &resize("top"); print "\n";
&printcmd("/usr/sbin/csf","-f");
print "\n...Done.
Disabling csf...
\n"; &resize("top"); print "\n";
&printcmd("/usr/sbin/csf","-x");
print "\n...Done.
You must login to the root shell to enable csf using:\n
csf -e
\n"; } else { print "Enabling csf...
\n"; &resize("top"); print "\n";
&printcmd("/usr/sbin/csf","-e");
print "";
&resize("bot",1);
}
print "...Done.
EOF if ($config{DIRECTADMIN}) {$script = $script_safe} &printreturn; } elsif ($FORM{action} eq "logtailcmd") { $FORM{lines} =~ s/\D//g; if ($FORM{lines} eq "" or $FORM{lines} == 0) {$FORM{lines} = 30} my @data = slurp("/etc/csf/csf.syslogs"); foreach my $line (@data) { if ($line =~ /^Include\s*(.*)$/) { my @incfile = slurp($1); push @data,@incfile; } } @data = sort @data; my $cnt = 0; my $logfile = "/var/log/lfd.log"; my $hit = 0; foreach my $file (@data) { $file =~ s/$cleanreg//g; if ($file eq "") {next} if ($file =~ /^\s*\#|Include/) {next} my @globfiles; if ($file =~ /\*|\?|\[/) { foreach my $log (glob $file) {push @globfiles, $log} } else {push @globfiles, $file} foreach my $globfile (@globfiles) { if (-f $globfile) { if ($FORM{lognum} == $cnt) { $logfile = $globfile; $hit = 1; last; } $cnt++; } } if ($hit) {last} } if (-z $logfile) { print "<---- $logfile is currently empty ---->"; } else { if (-x $config{TAIL}) { my $timeout = 30; eval { local $SIG{__DIE__} = undef; local $SIG{'ALRM'} = sub {die}; alarm($timeout); my ($childin, $childout); my $pid = open3($childin, $childout, $childout,$config{TAIL},"-$FORM{lines}",$logfile); while (<$childout>) { my $line = $_; $line =~ s/&/&/g; $line =~ s/</g; $line =~ s/>/>/g; print $line; } waitpid ($pid, 0); alarm(0); }; alarm(0); if ($@) {print "TIMEOUT: tail command took too long. Timed out after $timeout seconds\n"} } else { print "Executable [$config{TAIL}] invalid"; } } } elsif ($FORM{action} eq "loggrep") { $FORM{lines} =~ s/\D//g; if ($FORM{lines} eq "" or $FORM{lines} == 0) {$FORM{lines} = 30} my $script_safe = $script; my $CSFfrombot = 120; my $CSFfromright = 10; if ($config{DIRECTADMIN}) { $script = $script_da; $CSFfrombot = 400; $CSFfromright = 150; } my @data = slurp("/etc/csf/csf.syslogs"); foreach my $line (@data) { if ($line =~ /^Include\s*(.*)$/) { my @incfile = slurp($1); push @data,@incfile; } } @data = sort @data; my $options = "
Please Note:
1. Searches use $config{GREP}/$config{ZGREP} if wildcard is used), so the search text/regex must be syntactically correct
2. Use the "-i" option to ignore case
3. Use the "-E" option to perform an extended regular expression search
4. Searching large log files can take a long time. This feature has a 30 second timeout
5. The searched for text will usually be highlighted but may not always be successful
6. Only log files listed in /etc/csf/csf.syslogs can be searched. You can add to this file
7. The wildcard option will use $config{ZGREP} and search logs with a wildcard suffix, e.g. /var/log/lfd.log*
EOF
if ($config{DIRECTADMIN}) {$script = $script_safe}
&printreturn;
}
elsif ($FORM{action} eq "loggrepcmd") {
my @data = slurp("/etc/csf/csf.syslogs");
foreach my $line (@data) {
if ($line =~ /^Include\s*(.*)$/) {
my @incfile = slurp($1);
push @data,@incfile;
}
}
@data = sort @data;
my $cnt = 0;
my $logfile = "/var/log/lfd.log";
my $hit = 0;
foreach my $file (@data) {
$file =~ s/$cleanreg//g;
if ($file eq "") {next}
if ($file =~ /^\s*\#|Include/) {next}
my @globfiles;
if ($file =~ /\*|\?|\[/) {
foreach my $log (glob $file) {push @globfiles, $log}
} else {push @globfiles, $file}
foreach my $globfile (@globfiles) {
if (-f $globfile) {
if ($FORM{lognum} == $cnt) {
$logfile = $globfile;
$hit = 1;
last;
}
$cnt++;
}
}
if ($hit) {last}
}
my @cmd;
my $grepbin = $config{GREP};
if ($FORM{grepZ}) {$grepbin = $config{ZGREP}}
if ($FORM{grepi}) {push @cmd, "-i"}
if ($FORM{grepE}) {push @cmd, "-E"}
push @cmd, $FORM{grep};
if (-z $logfile) {
print "<---- $logfile is currently empty ---->";
} else {
if (-x $grepbin) {
my $timeout = 30;
eval {
local $SIG{__DIE__} = undef;
local $SIG{'ALRM'} = sub {die};
my $total;
if ($FORM{grepZ}) {
foreach my $file (glob $logfile."\*") {
print "\nSearching $file:\n";
alarm($timeout);
my ($childin, $childout);
my $pid = open3($childin, $childout, $childout,$grepbin,@cmd,$file);
while (<$childout>) {
my $line = $_;
$line =~ s/&/&/g;
$line =~ s/</g;
$line =~ s/>/>/g;
if ($FORM{grep} ne "") {
eval {
local $SIG{__DIE__} = undef;
if ($FORM{grepi}) {
$line =~ s/$FORM{grep}/$&<\/mark>/ig;
} else {
$line =~ s/$FORM{grep}/$&<\/mark>/g;
}
};
}
print $line;
$total += length $line;
}
waitpid ($pid, 0);
unless ($total) {print "<---- No matches found for \"$FORM{grep}\" in $file ---->\n"}
alarm(0);
}
} else {
alarm($timeout);
my ($childin, $childout);
my $pid = open3($childin, $childout, $childout,$grepbin,@cmd,$logfile);
while (<$childout>) {
my $line = $_;
$line =~ s/&/&/g;
$line =~ s/</g;
$line =~ s/>/>/g;
if ($FORM{grep} ne "") {
eval {
local $SIG{__DIE__} = undef;
if ($FORM{grepi}) {
$line =~ s/$FORM{grep}/$&<\/mark>/ig;
} else {
$line =~ s/$FORM{grep}/$&<\/mark>/g;
}
};
}
print $line;
$total += length $line;
}
waitpid ($pid, 0);
unless ($total) {print "<---- No matches found for \"$FORM{grep}\" in $logfile ---->\n"}
alarm(0);
}
};
alarm(0);
if ($@) {print "TIMEOUT: grep command took too long. Timed out after $timeout seconds\n"}
} else {
print "Executable [$grepbin] invalid";
}
}
}
elsif ($FORM{action} eq "readme") {
&resize("top");
print "\n";
open (my $IN, "<", "/etc/csf/readme.txt") or die $!;
flock ($IN, LOCK_SH);
my @readme = <$IN>;
close ($IN);
chomp @readme;
foreach my $line (@readme) {
$line =~ s/\\<\;/g;
$line =~ s/\>/\>\;/g;
print $line."\n";
}
print "\n";
&resize("bot",0);
&printreturn;
}
elsif ($FORM{action} eq "servercheck") {
print ConfigServer::ServerCheck::report($FORM{verbose});
open (my $IN, "<", "/etc/cron.d/csf-cron");
flock ($IN, LOCK_SH);
my @data = <$IN>;
close ($IN);
chomp @data;
my $optionselected = "never";
my $email;
if (my @ls = grep {$_ =~ /csf \-m/} @data) {
if ($ls[0] =~ /\@(\w+)\s+root\s+\/usr\/sbin\/csf \-m (.*)/) {$optionselected = $1; $email = $2}
}
print "Restarting csf...
\n"; &resize("top"); print "\n";
&printcmd("/usr/sbin/csf","-sf");
print "\n...Done.
Signal lfd to restart...
\n\n";
sysopen (my $OUT, "/var/lib/csf/lfd.restart",, O_WRONLY | O_CREAT) or die "Unable to open file: $!";
close ($OUT);
} else {
print "Restarting lfd...
\n\n";
ConfigServer::Service::restartlfd();
}
print "
\n...Done.
\n";
&resize("bot",1);
&printreturn;
}
elsif ($FORM{action} eq "remapf") {
print "Removing APF/BFD...
\n\n";
&printcmd("sh","/usr/local/csf/bin/remove_apf_bfd.sh");
print "\n...Done.
\n";
print "Note: You should check the root cron and /etc/crontab to ensure that there are no apf or bfd related cron jobs remaining
\n";
&printreturn;
}
elsif ($FORM{action} eq "qallow") {
print "Allowing $FORM{ip}...
\n\n";
&printcmd("/usr/sbin/csf","-a",$FORM{ip},$FORM{comment});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "qdeny") {
print "Blocking $FORM{ip}...
\n\n";
&printcmd("/usr/sbin/csf","-d",$FORM{ip},$FORM{comment});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "qignore") {
print "Ignoring $FORM{ip}...\n";
open (my $OUT, ">>", "/etc/csf/csf.ignore");
flock ($OUT, LOCK_EX);
print $OUT "$FORM{ip}\n";
close ($OUT);
print "Done.
\n";
if ($config{THIS_UI}) {
print "Signal lfd to restart...
\n\n";
sysopen (my $OUT, "/var/lib/csf/lfd.restart",, O_WRONLY | O_CREAT) or die "Unable to open file: $!";
close ($OUT);
} else {
print "Restarting lfd...
\n\n";
ConfigServer::Service::restartlfd();
}
print "
\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "kill") {
print "Unblock $FORM{ip}, trying permanent blocks...
\n\n";
&printcmd("/usr/sbin/csf","-dr",$FORM{ip});
print "\n...Done.
\n";
print "Unblock $FORM{ip}, trying temporary blocks...
\n\n";
&printcmd("/usr/sbin/csf","-trd",$FORM{ip});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "killallow") {
print "Unblock $FORM{ip}, trying permanent blocks...
\n\n";
&printcmd("/usr/sbin/csf","-ar",$FORM{ip});
print "\n...Done.
\n";
print "Unblock $FORM{ip}, trying temporary blocks...
\n\n";
&printcmd("/usr/sbin/csf","-tra",$FORM{ip});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "grep") {
print "Searching for $FORM{ip}...
\n";
&resize("top");
print "\n";
my ($childin, $childout);
my $pid = open3($childin, $childout, $childout, "/usr/sbin/csf","-g",$FORM{ip});
my $unblock;
my $unallow;
while (<$childout>) {
my $line = $_;
if ($line =~ /^csf.deny:\s(\S+)\s*/) {$unblock = 1}
if ($line =~ /^Temporary Blocks: IP:(\S+)\s*/) {$unblock = 1}
if ($line =~ /^csf.allow:\s(\S+)\s*/) {$unallow = 1}
if ($line =~ /^Temporary Allows: IP:(\S+)\s*/) {$unallow = 1}
print $_;
}
waitpid ($pid, 0);
print "\n...Done.
\n";
&resize("bot",1);
if ($unblock) {print "\n"}
if ($unallow) {print "\n"}
&printreturn;
}
elsif ($FORM{action} eq "callow") {
print "Cluster Allow $FORM{ip}...
\n\n";
&printcmd("/usr/sbin/csf","-ca",$FORM{ip},$FORM{comment});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "cignore") {
print "Cluster Ignore $FORM{ip}...
\n\n";
&printcmd("/usr/sbin/csf","-ci",$FORM{ip},$FORM{comment});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "cirm") {
print "Cluster Remove ignore $FORM{ip}...
\n\n";
&printcmd("/usr/sbin/csf","-cir",$FORM{ip});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "cloudflare") {
&cloudflare;
}
elsif ($FORM{action} eq "cflist") {
print "CloudFlare list $FORM{type} rules for user(s) $FORM{domains}:\n";
print "";
&printcmd("/usr/sbin/csf","--cloudflare","list",$FORM{type},$FORM{domains});
print "\n\n";
}
elsif ($FORM{action} eq "cftempdeny") {
print "CloudFlare $FORM{do} $FORM{target} for user(s) $FORM{domains}:\n";
print "\n";
&printcmd("/usr/sbin/csf","--cloudflare","tempadd",$FORM{do},$FORM{target},$FORM{domains});
print "\n\n";
}
elsif ($FORM{action} eq "cfadd") {
print "CloudFlare Add $FORM{type} $FORM{target} for user(s) $FORM{domains}:\n";
print "";
&printcmd("/usr/sbin/csf","--cloudflare","add",$FORM{type},$FORM{target},$FORM{domains});
print "\n\n";
}
elsif ($FORM{action} eq "cfremove") {
print "CloudFlare Delete $FORM{type} $FORM{target} for user(s) $FORM{domains}:\n";
print "";
&printcmd("/usr/sbin/csf","--cloudflare","del", $FORM{target},$FORM{domains});
print "\n\n";
}
elsif ($FORM{action} eq "cdeny") {
print "Cluster Deny $FORM{ip}...
\n\n";
&printcmd("/usr/sbin/csf","-cd",$FORM{ip},$FORM{comment});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "ctempdeny") {
$FORM{timeout} =~ s/\D//g;
if ($FORM{dur} eq "minutes") {$FORM{timeout} = $FORM{timeout} * 60}
if ($FORM{dur} eq "hours") {$FORM{timeout} = $FORM{timeout} * 60 * 60}
if ($FORM{dur} eq "days") {$FORM{timeout} = $FORM{timeout} * 60 * 60 * 24}
if ($FORM{ports} eq "") {$FORM{ports} = "*"}
print "cluster Temporarily $FORM{do}ing $FORM{ip} for $FORM{timeout} seconds:
\n\n";
if ($FORM{do} eq "block") {
&printcmd("/usr/sbin/csf","-ctd",$FORM{ip},$FORM{timeout},"-p",$FORM{ports},$FORM{comment});
} else {
&printcmd("/usr/sbin/csf","-cta",$FORM{ip},$FORM{timeout},"-p",$FORM{ports},$FORM{comment});
}
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "crm") {
print "Cluster Remove Deny $FORM{ip}...
\n\n";
&printcmd("/usr/sbin/csf","-cr",$FORM{ip});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "carm") {
print "Cluster Remove Allow $FORM{ip}...
\n\n";
&printcmd("/usr/sbin/csf","-car",$FORM{ip});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "cping") {
print "Cluster PING...
\n\n";
&printcmd("/usr/sbin/csf","-cp");
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "cgrep") {
print "Cluster GREP for $FORM{ip}...
\n";
print "\n";
my ($childin, $childout);
my $pid = open3($childin, $childout, $childout, "/usr/sbin/csf","-cg",$FORM{ip});
my $unblock;
my $start = 0;
while (<$childout>) {
my $line = $_;
if ($line =~ /^====/) {
if ($start) {
print "$line";
$start = 0;
} else {
print "$line";
$start = 1;
}
} else {
print $line;
}
}
waitpid ($pid, 0);
print "...Done\n\n";
&printreturn;
}
elsif ($FORM{action} eq "cconfig") {
$FORM{option} =~ s/\s*//g;
my %restricted;
if ($config{RESTRICT_UI}) {
sysopen (my $IN, "/usr/local/csf/lib/restricted.txt", O_RDWR | O_CREAT) or die "Unable to open file: $!";
flock ($IN, LOCK_SH);
while (my $entry = <$IN>) {
chomp $entry;
$restricted{$entry} = 1;
}
close ($IN);
}
if ($restricted{$FORM{option}}) {
print "Option $FORM{option} cannot be set with RESTRICT_UI enabled\n";
exit;
}
print "Cluster configuration option...
\n\n";
&printcmd("/usr/sbin/csf","-cc",$FORM{option},$FORM{value});
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "crestart") {
print "Cluster restart csf and lfd...
\n\n";
&printcmd("/usr/sbin/csf --crestart");
print "\n...Done.
\n";
&printreturn;
}
elsif ($FORM{action} eq "allow") {
&editfile("/etc/csf/csf.allow","saveallow");
&printreturn;
}
elsif ($FORM{action} eq "saveallow") {
&savefile("/etc/csf/csf.allow","both");
&printreturn;
}
elsif ($FORM{action} eq "redirect") {
&editfile("/etc/csf/csf.redirect","saveredirect");
&printreturn;
}
elsif ($FORM{action} eq "saveredirect") {
&savefile("/etc/csf/csf.redirect","both");
&printreturn;
}
elsif ($FORM{action} eq "smtpauth") {
&editfile("/etc/csf/csf.smtpauth","savesmtpauth");
&printreturn;
}
elsif ($FORM{action} eq "savesmtpauth") {
&savefile("/etc/csf/csf.smtpauth","both");
&printreturn;
}
elsif ($FORM{action} eq "reseller") {
&editfile("/etc/csf/csf.resellers","savereseller");
&printreturn;
}
elsif ($FORM{action} eq "savereseller") {
&savefile("/etc/csf/csf.resellers","");
&printreturn;
}
elsif ($FORM{action} eq "dirwatch") {
&editfile("/etc/csf/csf.dirwatch","savedirwatch");
&printreturn;
}
elsif ($FORM{action} eq "savedirwatch") {
&savefile("/etc/csf/csf.dirwatch","lfd");
&printreturn;
}
elsif ($FORM{action} eq "dyndns") {
&editfile("/etc/csf/csf.dyndns","savedyndns");
&printreturn;
}
elsif ($FORM{action} eq "savedyndns") {
&savefile("/etc/csf/csf.dyndns","lfd");
&printreturn;
}
elsif ($FORM{action} eq "blocklists") {
&editfile("/etc/csf/csf.blocklists","saveblocklists");
&printreturn;
}
elsif ($FORM{action} eq "saveblocklists") {
&savefile("/etc/csf/csf.blocklists","both");
&printreturn;
}
elsif ($FORM{action} eq "syslogusers") {
&editfile("/etc/csf/csf.syslogusers","savesyslogusers");
&printreturn;
}
elsif ($FORM{action} eq "savesyslogusers") {
&savefile("/etc/csf/csf.syslogusers","lfd");
&printreturn;
}
elsif ($FORM{action} eq "logfiles") {
&editfile("/etc/csf/csf.logfiles","savelogfiles");
&printreturn;
}
elsif ($FORM{action} eq "savelogfiles") {
&savefile("/etc/csf/csf.logfiles","lfd");
&printreturn;
}
elsif ($FORM{action} eq "deny") {
&editfile("/etc/csf/csf.deny","savedeny");
&printreturn;
}
elsif ($FORM{action} eq "savedeny") {
&savefile("/etc/csf/csf.deny","both");
&printreturn;
}
elsif ($FORM{action} eq "templates") {
&editfile("/usr/local/csf/tpl/$FORM{template}","savetemplates","template");
&printreturn;
}
elsif ($FORM{action} eq "savetemplates") {
&savefile("/usr/local/csf/tpl/$FORM{template}","",1);
&printreturn;
}
elsif ($FORM{action} eq "ignorefiles") {
&editfile("/etc/csf/$FORM{ignorefile}","saveignorefiles","ignorefile");
&printreturn;
}
elsif ($FORM{action} eq "saveignorefiles") {
&savefile("/etc/csf/$FORM{ignorefile}","lfd");
&printreturn;
}
elsif ($FORM{action} eq "conf") {
sysopen (my $IN, "/etc/csf/csf.conf", O_RDWR | O_CREAT) or die "Unable to open file: $!";
flock ($IN, LOCK_SH);
my @confdata = <$IN>;
close ($IN);
chomp @confdata;
my %restricted;
if ($config{RESTRICT_UI}) {
sysopen (my $IN, "/usr/local/csf/lib/restricted.txt", O_RDWR | O_CREAT) or die "Unable to open file: $!";
flock ($IN, LOCK_SH);
while (my $entry = <$IN>) {
chomp $entry;
$restricted{$entry} = 1;
}
close ($IN);
}
print <
function CSFexpand(obj){
if (!obj.savesize) {obj.savesize=obj.size;}
var newsize = Math.max(obj.savesize,obj.value.length);
if (newsize > 120) {newsize = 120;}
obj.size = newsize;
}
EOF
print "\n";
open (my $DIV, "<", "/usr/local/csf/lib/csf.div");
flock ($DIV, LOCK_SH);
my @divdata = <$DIV>;
close ($DIV);
print @divdata;
print "\n";
print " \n"}
$comment = 0;
my ($start,$end) = split (/=/,$line,2);
my $name = $start;
my $cleanname = $start;
$cleanname =~ s/\s//g;
$name =~ s/\s/\_/g;
if ($end =~ /\"(.*)\"/) {$end = $1}
my $size = length($end) + 4;
my $class = "value-default";
my ($status,$range,$default) = sanity($start,$end);
my $showrange = "";
my $showfrom;
my $showto;
if ($range =~ /^(\d+)-(\d+)$/) {
$showfrom = $1;
$showto = $2;
}
if ($default ne "") {
$showrange = " Default: $default [$range]";
if ($end ne $default) {$class = "value-other"}
}
if ($status) {$class = "value-warning"; $showrange = " Recommended range: $range (Default: $default)"}
if ($config{RESTRICT_UI} and ($cleanname eq "CLUSTER_KEY" or $cleanname eq "UI_PASS" or $cleanname eq "UI_USER")) {
print "$start = (hidden restricted UI item)\n";
}
elsif ($restricted{$cleanname}) {
print "$start = (restricted UI item)\n";
} else {
if ($range eq "0-1") {
my $switch_checked_0 = "";
my $switch_checked_1 = "";
my $switch_active_0 = "";
my $switch_active_1 = "";
if ($end == 0) {$switch_checked_0 = "checked"; $switch_active_0 = "active"}
if ($end == 1) {$switch_checked_1 = "checked"; $switch_active_1 = "active"}
print "$start = ";
print "\n";
print "\n";
print "\n";
print "\n";
}
elsif ($range =~ /^(\d+)-(\d+)$/ and !(-e "/etc/csuibuttondisable") and ($showto - $showfrom <= 20) and $end >= $showfrom and $end <= $showto) {
my $selected = "";
print "$start = \n";
} else {
print "$start = $showrange\n";
}
}
} else {
if ($line =~ /^\# SECTION:(.*)/) {
push @divnames, $1;
unless ($first) {print "
\n/g; print "$line
\n"; } } print "