#!/usr/local/bin/perl
# Show a status of all active jails
use strict;
use warnings;
no warnings 'redefine';
no warnings 'uninitialized';
require './fail2ban-lib.pl';
our (%in, %text, %config);
&ui_print_header(undef, $text{'status_title'}, "");
my $out = &backquote_logged("$config{'client_cmd'} status 2>&1 &1 ';
my $nbsp = ' ';
my $ipslimit = sub {
my ($ips, $limit) = @_;
$limit ||= 10;
# Limit sanity check
$limit = 1 if ($limit < 1);
my $ipscount = () = $ips =~ /$br/g;
if ($ipscount > $limit) {
my @ips = split($br, $ips);
@ips = @ips[0 .. $limit];
$ips = join($br, @ips);
$ips .= "$br".
(&ui_link("jail_blocks.cgi?jail=".urlize($jail),
" ".&text('status_rules_plus_more', $ipscount-$limit), undef))."";
}
return $ips;
};
my $jips;
&open_execute_command($fh, $jcmd, 1);
while(<$fh>) {
if (/-\s+(.*?):\s*(.*)/) {
my $col = $1;
my $val = $2;
$col = lc($col);
$col =~ s/\s/_/g;
if ($col !~ /journal_matches/ &&
$col !~ /file_list/) {
push(@head, "".$text{"status_head_$col"}."");
if ($col =~ /banned_ip_list/) {
$jips = $val;
my @ips = split(/\s+/, $val);
@ips = map { "" } @ips;
$val = "
" if ($val);
$val .= join('
', @ips);
$val = &$ipslimit($val);
$val .= "
" if ($val);
$val .= "–" if (!$val);
}
push(@body, $val);
}
}
}
close($fh);
if (!$head++) {
print &ui_form_start("unblock_jail.cgi", "post");
print &ui_links_row(\@links);
print &ui_columns_start(\@head);
}
print &ui_checked_columns_row(\@body, [ 'width=5', undef, $tdc, $tdc, $tdc, $tdc, $tdc ], "jail", $jail);
push(@jipsall, ["$jail" => $jips]);
}
if ($head) {
print &ui_columns_end();
print &ui_links_row(\@links);
print &ui_form_end([ [ 'unblock', $text{'status_jail_unblock'} ] ]);
}
}
else {
print $text{'status_jail_noactive'};
}
&ui_print_footer("", $text{'index_return'});