[1/5] fwhosts.cgi: Show in which firewall rule objects are being used
Commit Message
From: Peer Dietzmann <dietzmann@brecht-schule.hamburg>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
doc/language_issues.en | 1 +
doc/language_issues.es | 1 +
doc/language_issues.fr | 1 +
doc/language_issues.it | 1 +
doc/language_issues.nl | 1 +
doc/language_issues.pl | 1 +
doc/language_issues.ru | 1 +
doc/language_issues.tr | 1 +
doc/language_missings | 7 +
html/cgi-bin/fwhosts.cgi | 368 +++++++++++++++++++++++++++++++++++++--
langs/de/cgi-bin/de.pl | 1 +
langs/en/cgi-bin/en.pl | 1 +
12 files changed, 375 insertions(+), 10 deletions(-)
Comments
Tested-by: Adolf Belka <adolf.belka@ipfire.org>
I initially tested the whole of the patch set but then I could not figure out where the firewall rule info was to be found.
Then I tested out only this first patch on its own and saw the i in a blue circle icon and then when I held my mouse over that for a second or so it showed the info.
I like the additional info that has been provided with this. That will be useful to have.
I will do a separate feedback to patch 4/5.
On 23/06/2025 19:16, Michael Tremer wrote:
> From: Peer Dietzmann <dietzmann@brecht-schule.hamburg>
>
> Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
> ---
> doc/language_issues.en | 1 +
> doc/language_issues.es | 1 +
> doc/language_issues.fr | 1 +
> doc/language_issues.it | 1 +
> doc/language_issues.nl | 1 +
> doc/language_issues.pl | 1 +
> doc/language_issues.ru | 1 +
> doc/language_issues.tr | 1 +
> doc/language_missings | 7 +
> html/cgi-bin/fwhosts.cgi | 368 +++++++++++++++++++++++++++++++++++++--
> langs/de/cgi-bin/de.pl | 1 +
> langs/en/cgi-bin/en.pl | 1 +
> 12 files changed, 375 insertions(+), 10 deletions(-)
>
> diff --git a/doc/language_issues.en b/doc/language_issues.en
> index 996572456..7d72fa99b 100644
> --- a/doc/language_issues.en
> +++ b/doc/language_issues.en
> @@ -78,6 +78,7 @@ WARNING: untranslated string: TOS rule = TOS rule
> WARNING: untranslated string: The class number does not match the specified interface. = The class number does not match the specified interface.
> WARNING: untranslated string: The destination IP address is invalid. = The destination IP address is invalid.
> WARNING: untranslated string: The source IP address is invalid. = The source IP address is invalid.
> +WARNING: untranslated string: Unused = Unused
> WARNING: untranslated string: WakeOnLan = Wake On Lan
> WARNING: untranslated string: a ca certificate with this name already exists = A CA certificate with this name already exists.
> WARNING: untranslated string: a connection with this common name already exists = A connection with this common name already exists.
> diff --git a/doc/language_issues.es b/doc/language_issues.es
> index 68836302a..e90acf9d9 100644
> --- a/doc/language_issues.es
> +++ b/doc/language_issues.es
> @@ -980,6 +980,7 @@ WARNING: translation string unused: zoneconf val vlan tag range error
> WARNING: translation string unused: zoneconf val zoneslave amount error
> WARNING: untranslated string: Captive ACTIVATE = unknown string
> WARNING: untranslated string: Captive clients = unknown string
> +WARNING: untranslated string: Unused = Unused
> WARNING: untranslated string: ca name must only contain characters and spaces = unknown string
> WARNING: untranslated string: dns servers = DNS Servers
> WARNING: untranslated string: enable disable client = unknown string
> diff --git a/doc/language_issues.fr b/doc/language_issues.fr
> index 80341a1c3..db91be7fe 100644
> --- a/doc/language_issues.fr
> +++ b/doc/language_issues.fr
> @@ -959,6 +959,7 @@ WARNING: translation string unused: zoneconf val vlan amount assignment error
> WARNING: translation string unused: zoneconf val vlan tag assignment error
> WARNING: translation string unused: zoneconf val vlan tag range error
> WARNING: translation string unused: zoneconf val zoneslave amount error
> +WARNING: untranslated string: Unused = Unused
> WARNING: untranslated string: allowed subnets = Allowed Subnets
> WARNING: untranslated string: bypassed = Bypassed
> WARNING: untranslated string: ca name must only contain characters and spaces = unknown string
> diff --git a/doc/language_issues.it b/doc/language_issues.it
> index 4ec3545ba..facb0c256 100644
> --- a/doc/language_issues.it
> +++ b/doc/language_issues.it
> @@ -932,6 +932,7 @@ WARNING: untranslated string: Captive vouchervalid = Allowed time for this coupo
> WARNING: untranslated string: Captive wrong type = Uploaded file has wrong filetype
> WARNING: untranslated string: MTU settings = MTU settings:
> WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
> +WARNING: untranslated string: Unused = Unused
> WARNING: untranslated string: access point name = Access Point Name
> WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
> WARNING: untranslated string: access point name is required = Access Point Name is required
> diff --git a/doc/language_issues.nl b/doc/language_issues.nl
> index 56c6dadf6..40710c698 100644
> --- a/doc/language_issues.nl
> +++ b/doc/language_issues.nl
> @@ -932,6 +932,7 @@ WARNING: untranslated string: Captive vouchervalid = Allowed time for this coupo
> WARNING: untranslated string: Captive wrong type = Uploaded file has wrong filetype
> WARNING: untranslated string: MTU settings = MTU settings:
> WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
> +WARNING: untranslated string: Unused = Unused
> WARNING: untranslated string: access point name = Access Point Name
> WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
> WARNING: untranslated string: access point name is required = Access Point Name is required
> diff --git a/doc/language_issues.pl b/doc/language_issues.pl
> index 6ccb0a497..ef464100c 100644
> --- a/doc/language_issues.pl
> +++ b/doc/language_issues.pl
> @@ -848,6 +848,7 @@ WARNING: untranslated string: MB read = MB read
> WARNING: untranslated string: MB written = MB written
> WARNING: untranslated string: MTU settings = MTU settings:
> WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
> +WARNING: untranslated string: Unused = Unused
> WARNING: untranslated string: access point name = Access Point Name
> WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
> WARNING: untranslated string: access point name is required = Access Point Name is required
> diff --git a/doc/language_issues.ru b/doc/language_issues.ru
> index 8a689daa7..d4f669b1b 100644
> --- a/doc/language_issues.ru
> +++ b/doc/language_issues.ru
> @@ -843,6 +843,7 @@ WARNING: untranslated string: MB read = MB read
> WARNING: untranslated string: MB written = MB written
> WARNING: untranslated string: MTU settings = MTU settings:
> WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
> +WARNING: untranslated string: Unused = Unused
> WARNING: untranslated string: access point name = Access Point Name
> WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
> WARNING: untranslated string: access point name is required = Access Point Name is required
> diff --git a/doc/language_issues.tr b/doc/language_issues.tr
> index e79fe1388..f557f9a04 100644
> --- a/doc/language_issues.tr
> +++ b/doc/language_issues.tr
> @@ -925,6 +925,7 @@ WARNING: translation string unused: year-graph
> WARNING: translation string unused: yearly firewallhits
> WARNING: untranslated string: Captive clients = unknown string
> WARNING: untranslated string: Captive delete logo = Delete Logo
> +WARNING: untranslated string: Unused = Unused
> WARNING: untranslated string: access point name = Access Point Name
> WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
> WARNING: untranslated string: access point name is required = Access Point Name is required
> diff --git a/doc/language_missings b/doc/language_missings
> index cd005f45a..8487c8a26 100644
> --- a/doc/language_missings
> +++ b/doc/language_missings
> @@ -128,6 +128,7 @@
> < dns servers
> < ids provider eol
> < online
> +< Unused
> ############################################################################
> # Checking cgi-bin translations for language: fr #
> ############################################################################
> @@ -181,6 +182,7 @@
> < system time
> < timeformat
> < total
> +< Unused
> < upload fcdsl.o
> < warning
> < wg
> @@ -720,6 +722,7 @@
> < unblock all
> < uncheck all
> < unlimited
> +< Unused
> < update ruleset
> < updxlrtr passive mode
> < uplink bit rate
> @@ -1356,6 +1359,7 @@
> < unblock all
> < uncheck all
> < unlimited
> +< Unused
> < update ruleset
> < updxlrtr passive mode
> < uplink bit rate
> @@ -2398,6 +2402,7 @@
> < unblock all
> < uncheck all
> < unlimited
> +< Unused
> < update ruleset
> < updxlrtr passive mode
> < updxlrtr sources
> @@ -3486,6 +3491,7 @@
> < unblock all
> < uncheck all
> < unlimited
> +< Unused
> < update ruleset
> < updxlrtr passive mode
> < updxlrtr sources
> @@ -3975,6 +3981,7 @@
> < traffic stat title
> < transfers
> < transport mode does not support vti
> +< Unused
> < update ruleset
> < updxlrtr passive mode
> < user management
> diff --git a/html/cgi-bin/fwhosts.cgi b/html/cgi-bin/fwhosts.cgi
> index e92ef6853..6b4e22159 100644
> --- a/html/cgi-bin/fwhosts.cgi
> +++ b/html/cgi-bin/fwhosts.cgi
> @@ -1932,7 +1932,7 @@ sub viewtablenet
> }else{
> print<<END;
> <table width='100%' cellspacing='0' class='tbl'>
> - <tr><th align='center'><b>$Lang::tr{'name'}</b></th><th align='center'><b>$Lang::tr{'fwhost netaddress'}</b></th><th align='center'><b>$Lang::tr{'remark'}</b></th><th align='center'><b>$Lang::tr{'used'}</b></th><th></th><th width='3%'></th></tr>
> + <tr><th align='center'><b>$Lang::tr{'name'}</b></th><th align='center'><b>$Lang::tr{'fwhost netaddress'}</b></th><th align='center'><b>$Lang::tr{'remark'}</b></th><th align='center'><b>$Lang::tr{'used'}</b></th><th></th><th></th><th width='3%'></th></tr>
> END
> }
> my $count=0;
> @@ -1952,7 +1952,14 @@ END
> }
> my $colnet="$customnetwork{$key}[1]/".&General::subtocidr($customnetwork{$key}[2]);
> my $netcount=&getnetcount($customnetwork{$key}[0]);
> - print"<td width='20%' $col><form method='post'>$customnetwork{$key}[0]</td><td width='15%' align='center' $col>".&getcolor($colnet)."</td><td width='40%' $col>$customnetwork{$key}[3]</td><td align='center' $col>$netcount x</td>";
> + my $netusedin=&getusedin($customnetwork{$key}[0]);
> + my $htmlparttouse="";
> + if ($netusedin) {
> + $htmlparttouse = "<input type='image' align='top' src='/images/info.gif' alt='$netusedin' title='$netusedin'>";
> + } else {
> + $htmlparttouse = "<input type='image' align='top' src='/images/info.gif' alt='Unused' title='Unused'>";
> + }
> + print"<td width='20%' $col><form method='post'>$customnetwork{$key}[0]</td><td width='15%' align='center' $col>".&getcolor($colnet)."</td><td width='40%' $col>$customnetwork{$key}[3]</td><td align='center' $col>$netcount x</td><td>$htmlparttouse</td>";
> print<<END;
> <td width='1%' $col><input type='image' src='/images/edit.gif' align='middle' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
> <input type='hidden' name='ACTION' value='editnet'>
> @@ -2086,7 +2093,7 @@ sub viewtablehost
> }else{
> print<<END;
> <table width='100%' cellspacing='0' class='tbl'>
> - <tr><th align='center'><b>$Lang::tr{'name'}</b></th><th align='center'><b>$Lang::tr{'fwhost ip_mac'}</b></th><th align='center'><b>$Lang::tr{'remark'}</b></th><th align='center'><b>$Lang::tr{'used'}</b></th><th></th><th width='3%'></th></tr>
> + <tr><th align='center'><b>$Lang::tr{'name'}</b></th><th align='center'><b>$Lang::tr{'fwhost ip_mac'}</b></th><th align='center'><b>$Lang::tr{'remark'}</b></th><th align='center'><b>$Lang::tr{'used'}</b></th><th></th><th></th><th width='3%'></th></tr>
> END
> }
> my $count=0;
> @@ -2106,7 +2113,14 @@ END
> $customhost{$key}[4]=~s/\s+//g;
> my $hostcount=0;
> $hostcount=&gethostcount($customhost{$key}[0]);
> - print"<td width='20%' $col>$customhost{$key}[0]</td><td width='20%' align='center' $col >".&getcolor($ip)."</td><td width='50%' align='left' $col>$customhost{$key}[3]</td><td align='center' $col>$hostcount x</td>";
> + my $hostusedin=&getusedin($customhost{$key}[0]);
> + my $htmlparttouse="";
> + if ($hostusedin) {
> + $htmlparttouse = "<input type='image' align='top' src='/images/info.gif' alt='$hostusedin' title='$hostusedin'>";
> + } else {
> + $htmlparttouse = "<input type='image' align='top' src='/images/info.gif' alt='Unused' title='Unused'>";
> + }
> + print"<td width='20%' $col>$customhost{$key}[0]</td><td width='20%' align='center' $col >".&getcolor($ip)."</td><td width='50%' align='left' $col>$customhost{$key}[3]</td><td align='center' $col>$hostcount x</td><td>$htmlparttouse</td>";
> print<<END;
> <td width='1%' $col><form method='post'><input type='image' src='/images/edit.gif' align='middle' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
> <input type='hidden' name='ACTION' value='edithost' />
> @@ -2182,7 +2196,13 @@ sub viewtablegrp
> print "<br><b><u>$grpname</u></b> ";
> print " <b>$Lang::tr{'remark'}:</b>  $remark   " if ($remark ne '');
> my $netgrpcount=&getnetcount($grpname);
> - print "<b>$Lang::tr{'used'}:</b> $netgrpcount x";
> + print "<b>$Lang::tr{'used'}:</b> $netgrpcount x ";
> + my $groupusedin=&getusedin($grpname);
> + if ($groupusedin) {
> + print "<input type='image' align='top' src='/images/info.gif' alt='$groupusedin' title='$groupusedin'>";
> + } else {
> + print "<input type='image' align='top' src='/images/info.gif' alt='$Lang::tr{'Unused'}' title='$Lang::tr{'Unused'}'>";
> + }
> if($netgrpcount == '0')
> {
> print"<form method='post' style='display:inline'><input type='image' src='/images/delete.gif' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' align='right' /><input type='hidden' name='grp_name' value='$grpname' ><input type='hidden' name='ACTION' value='delgrp'></form>";
> @@ -2320,8 +2340,13 @@ sub viewtablelocationgrp
>
> # Get group count.
> my $locationgrpcount=&getlocationcount($grpname);
> - print "<b>$Lang::tr{'used'}:</b> $locationgrpcount x";
> -
> + my $locationusedin=&getlocusedin($grpname);
> + print "<b>$Lang::tr{'used'}:</b> $locationgrpcount x ";
> + if ($locationusedin) {
> + print "<input type='image' align='top' src='/images/info.gif' alt='$locationusedin' title='$locationusedin'>";
> + } else {
> + print "<input type='image' align='top' src='/images/info.gif' alt='$Lang::tr{'Unused'}' title='$Lang::tr{'Unused'}'>";
> + }
> # Only display delete icon, if the group is not used by a firewall rule.
> if($locationgrpcount == '0') {
> print"<form method='post' style='display:inline'>\n";
> @@ -2442,7 +2467,7 @@ sub viewtableservice
> &General::readhasharray("$fwconfigout", \%fwout);
> print<<END;
> <table width='100%' cellspacing='0' class='tbl'>
> - <tr><th align='center'><b>$Lang::tr{'fwhost srv_name'}</b></th><th align='center'><b>$Lang::tr{'fwhost prot'}</b></th><th align='center'><b>$Lang::tr{'fwhost port'}</b></th><th align='center'><b>ICMP</b></th><th align='center'><b>$Lang::tr{'fwhost used'}</b></th><th></th><th width='3%'></th></tr>
> + <tr><th align='center'><b>$Lang::tr{'fwhost srv_name'}</b></th><th align='center'><b>$Lang::tr{'fwhost prot'}</b></th><th align='center'><b>$Lang::tr{'fwhost port'}</b></th><th align='center'><b>ICMP</b></th><th align='center'><b>$Lang::tr{'fwhost used'}</b></th><th></th><th></th><th width='3%'></th></tr>
> END
> my $col='';
> foreach my $key (sort { ncmp($customservice{$a}[0],$customservice{$b}[0])} keys %customservice)
> @@ -2463,10 +2488,17 @@ END
> END
> #Neuer count
> $srvcount=&getsrvcount($customservice{$key}[0]);
> + my $serviceusedin=&getsrvusedin($customservice{$key}[0]);
> + my $htmlparttouse="";
> + if ($serviceusedin) {
> + $htmlparttouse="<input type='image' align='top' src='/images/info.gif' alt='$serviceusedin' title='$serviceusedin'>";
> + } else {
> + $htmlparttouse="<input type='image' align='top' src='/images/info.gif' alt='$Lang::tr{'Unused'}' title='$Lang::tr{'Unused'}'>";
> + }
> if($customservice{$key}[3] eq 'All ICMP-Types'){print $Lang::tr{'fwdfw all icmp'};}
> elsif($customservice{$key}[3] ne 'BLANK'){print $customservice{$key}[3];}
> print<<END;
> - </td><td align='center' $col>$srvcount x</td>
> + </td><td align='center' $col>$srvcount x</td><td>$htmlparttouse</td>
> <td width='1%' $col><form method='post'><input type='image' src='/images/edit.gif' align='middle' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' /><input type='hidden' name='ACTION' value='editservice' />
> <input type='hidden' name='SRV_NAME' value='$customservice{$key}[0]' />
> <input type='hidden' name='SRV_PORT' value='$customservice{$key}[1]' />
> @@ -2538,7 +2570,13 @@ sub viewtableservicegrp
> if($count >0){print"</table>";$count=1;}
> print "<br><b><u>$grpname</u></b> ";
> print "<b>$Lang::tr{'remark'}:</b> $remark " if ($remark ne '');
> - print " <b>$Lang::tr{'used'}:</b> $grpcount x";
> + print " <b>$Lang::tr{'used'}:</b> $grpcount x ";
> + my $srvgrpusedin=&getsrvusedin($customservicegrp{$key}[0]);
> + if ($srvgrpusedin) {
> + print "<input type='image' align='top' src='/images/info.gif' alt='$srvgrpusedin' title='$srvgrpusedin'>";
> + } else {
> + print "<input type='image' align='top' src='/images/info.gif' alt='$Lang::tr{'Unused'}' title='$Lang::tr{'Unused'}'>";
> + }
> if($grpcount == '0')
> {
> print"<form method='post' style='display:inline'><input type='image' src='/images/delete.gif' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' align='right' /><input type='hidden' name='SRVGRP_NAME' value='$grpname' ><input type='hidden' name='ACTION' value='delservicegrp'></form>";
> @@ -2811,6 +2849,106 @@ sub getlocationcount
> }
> return $counter;
> }
> +sub getlocusedin
> +{
> + my $groupname=shift;
> + my $titletext="";
> +
> + # Location groups are stored as "group:groupname" in the
> + # firewall settings files.
> + my $searchstring = join(':', "group",$groupname);
> +
> + #Count services used in firewall - config
> + my $fwfwtext="";
> + # first set title if found
> + foreach my $key1 (keys %fwfwd) {
> + if($fwfwd{$key1}[4] eq $searchstring){
> + $fwfwtext = "$Lang::tr{'firewall rules'}:";
> + }
> + if($fwfwd{$key1}[6] eq $searchstring){
> + $fwfwtext = "$Lang::tr{'firewall rules'}:";
> + }
> + }
> + # then add rule numbers
> + my @fwfwrules = ();
> + foreach my $key1 (keys %fwfwd) {
> + if($fwfwd{$key1}[4] eq $searchstring){
> + push(@fwfwrules, $key1);
> + }
> + if($fwfwd{$key1}[6] eq $searchstring){
> + push(@fwfwrules, $key1);
> + }
> + }
> + my @fwfwarraysorted = sort { $a <=> $b } @fwfwrules;
> + foreach my $rule (@fwfwarraysorted)
> + {
> + $fwfwtext .= "
- $rule";
> + }
> + #Count services used in firewall - input
> + my $fwintext="";
> + foreach my $key2 (keys %fwinp) {
> + if($fwinp{$key2}[4] eq $searchstring){
> + $fwintext = "$Lang::tr{'incoming firewall access'}:";
> + }
> + if($fwinp{$key2}[6] eq $searchstring){
> + $fwintext = "$Lang::tr{'incoming firewall access'}:";
> + }
> + }
> + my @fwinrules = ();
> + foreach my $key2 (keys %fwinp) {
> + if($fwinp{$key2}[4] eq $searchstring){
> + push(@fwinrules, $key2);
> + }
> + if($fwinp{$key2}[6] eq $searchstring){
> + push(@fwinrules, $key2);
> + }
> + }
> + my @fwinarraysorted = sort { $a <=> $b } @fwinrules;
> + foreach my $rule (@fwinarraysorted)
> + {
> + $fwintext .= "
- $rule";
> + }
> + #Count services used in firewall - outgoing
> + my $fwouttext="";
> + foreach my $key3 (keys %fwout) {
> + if($fwout{$key3}[4] eq $searchstring){
> + $fwouttext = "$Lang::tr{'outgoing firewall access'}:";
> + }
> + if($fwout{$key3}[6] eq $searchstring){
> + $fwouttext = "$Lang::tr{'outgoing firewall access'}:";
> + }
> + }
> + my @fwoutrules = ();
> + foreach my $key3 (keys %fwout) {
> + if($fwout{$key3}[4] eq $searchstring){
> + push(@fwoutrules, $key3);
> + }
> + if($fwout{$key3}[6] eq $searchstring){
> + push(@fwoutrules, $key3);
> + }
> + }
> + my @fwoutarraysorted = sort { $a <=> $b } @fwoutrules;
> + foreach my $rule (@fwoutarraysorted)
> + {
> + $fwouttext .= "
- $rule";
> + }
> + if ($fwfwtext) {
> + $titletext .= "$fwfwtext"
> + }
> + if ($fwintext) {
> + if ($titletext) {
> + $titletext .= "
 "
> + }
> + $titletext .= "$fwintext"
> + }
> + if ($fwouttext) {
> + if ($titletext) {
> + $titletext .= "
 "
> + }
> + $titletext .= "$fwouttext"
> + }
> + return $titletext;
> +}
> sub getnetcount
> {
> my $searchstring=shift;
> @@ -2850,6 +2988,122 @@ sub getnetcount
> }
> return $srvcounter;
> }
> +sub getusedin
> +{
> + my $searchstring=shift;
> + my $titletext="";
> + my $groups=();
> + my $rules=();
> +
> + #Count services used in Network/Host group
> + my $servicegrouptext="";
> + foreach my $key (keys %customgrp) {
> + if($customgrp{$key}[2] eq $searchstring){
> + $servicegrouptext = "$Lang::tr{'fwhost cust grp'}:";
> + }
> + }
> + foreach my $key (keys %customgrp) {
> + if($customgrp{$key}[2] eq $searchstring){
> + $servicegrouptext .= "
- $customgrp{$key}[0]";
> + }
> + }
> + #Count services used in firewall - config
> + my $fwfwtext="";
> + # first set title if found
> + foreach my $key1 (keys %fwfwd) {
> + if($fwfwd{$key1}[4] eq $searchstring){
> + $fwfwtext = "$Lang::tr{'firewall rules'}:";
> + }
> + if($fwfwd{$key1}[6] eq $searchstring){
> + $fwfwtext = "$Lang::tr{'firewall rules'}:";
> + }
> + }
> + # then add rule numbers
> + my @fwfwrules = ();
> + foreach my $key1 (keys %fwfwd) {
> + if($fwfwd{$key1}[4] eq $searchstring){
> + push(@fwfwrules, $key1);
> + }
> + if($fwfwd{$key1}[6] eq $searchstring){
> + push(@fwfwrules, $key1);
> + }
> + }
> + my @fwfwarraysorted = sort { $a <=> $b } @fwfwrules;
> + foreach my $rule (@fwfwarraysorted)
> + {
> + $fwfwtext .= "
- $rule";
> + }
> + #Count services used in firewall - input
> + my $fwintext="";
> + foreach my $key2 (keys %fwinp) {
> + if($fwinp{$key2}[4] eq $searchstring){
> + $fwintext = "$Lang::tr{'incoming firewall access'}:";
> + }
> + if($fwinp{$key2}[6] eq $searchstring){
> + $fwintext = "$Lang::tr{'incoming firewall access'}:";
> + }
> + }
> + my @fwinrules = ();
> + foreach my $key2 (keys %fwinp) {
> + if($fwinp{$key2}[4] eq $searchstring){
> + push(@fwinrules, $key2);
> + }
> + if($fwinp{$key2}[6] eq $searchstring){
> + push(@fwinrules, $key2);
> + }
> + }
> + my @fwinarraysorted = sort { $a <=> $b } @fwinrules;
> + foreach my $rule (@fwinarraysorted)
> + {
> + $fwintext .= "
- $rule";
> + }
> + #Count services used in firewall - outgoing
> + my $fwouttext="";
> + foreach my $key3 (keys %fwout) {
> + if($fwout{$key3}[4] eq $searchstring){
> + $fwouttext = "$Lang::tr{'outgoing firewall access'}:";
> + }
> + if($fwout{$key3}[6] eq $searchstring){
> + $fwouttext = "$Lang::tr{'outgoing firewall access'}:";
> + }
> + }
> + my @fwoutrules = ();
> + foreach my $key3 (keys %fwout) {
> + if($fwout{$key3}[4] eq $searchstring){
> + push(@fwoutrules, $key3);
> + }
> + if($fwout{$key3}[6] eq $searchstring){
> + push(@fwoutrules, $key3);
> + }
> + }
> + my @fwoutarraysorted = sort { $a <=> $b } @fwoutrules;
> + foreach my $rule (@fwoutarraysorted)
> + {
> + $fwouttext .= "
- $rule";
> + }
> + if ($servicegrouptext) {
> + $titletext .= "$servicegrouptext"
> + }
> + if ($fwfwtext) {
> + if ($titletext) {
> + $titletext .= "
 "
> + }
> + $titletext .= "$fwfwtext"
> + }
> + if ($fwintext) {
> + if ($titletext) {
> + $titletext .= "
 "
> + }
> + $titletext .= "$fwintext"
> + }
> + if ($fwouttext) {
> + if ($titletext) {
> + $titletext .= "
 "
> + }
> + $titletext .= "$fwouttext"
> + }
> + return $titletext
> +}
> sub getsrvcount
> {
> my $searchstring=shift;
> @@ -2880,6 +3134,100 @@ sub getsrvcount
> }
> return $srvcounter;
> }
> +sub getsrvusedin
> +{
> + my $searchstring=shift;
> + my $titletext="";
> + #Count services used in servicegroups
> + my $servicegrouptext="";
> + foreach my $key (keys %customservicegrp) {
> + if($customservicegrp{$key}[2] eq $searchstring){
> + $servicegrouptext = "$Lang::tr{'outgoing firewall access'}:";
> + }
> + }
> + foreach my $key (keys %customservicegrp) {
> + if($customservicegrp{$key}[2] eq $searchstring){
> + $servicegrouptext .= "
- $customservicegrp{$key}[0]";
> + }
> + }
> + my $fwfwtext="";
> + # first set title if found
> + foreach my $key1 (keys %fwfwd) {
> + if($fwfwd{$key1}[15] eq $searchstring){
> + $fwfwtext = "$Lang::tr{'firewall rules'}:";
> + }
> + }
> + # then add rule numbers
> + my @fwfwrules = ();
> + foreach my $key1 (keys %fwfwd) {
> + if($fwfwd{$key1}[15] eq $searchstring){
> + push(@fwfwrules, $key1);
> + }
> + }
> + my @fwfwarraysorted = sort { $a <=> $b } @fwfwrules;
> + foreach my $rule (@fwfwarraysorted)
> + {
> + $fwfwtext .= "
- $rule";
> + }
> + #Count services used in firewall - input
> + my $fwintext="";
> + foreach my $key2 (keys %fwinp) {
> + if($fwinp{$key2}[15] eq $searchstring){
> + $fwintext = "$Lang::tr{'incoming firewall access'}:";
> + }
> + }
> + my @fwinrules = ();
> + foreach my $key2 (keys %fwinp) {
> + if($fwinp{$key2}[15] eq $searchstring){
> + push(@fwinrules, $key2);
> + }
> + }
> + my @fwinarraysorted = sort { $a <=> $b } @fwinrules;
> + foreach my $rule (@fwinarraysorted)
> + {
> + $fwintext .= "
- $rule";
> + }
> + #Count services used in firewall - outgoing
> + my $fwouttext="";
> + foreach my $key3 (keys %fwout) {
> + if($fwout{$key3}[15] eq $searchstring){
> + $fwouttext = "$Lang::tr{'outgoing firewall access'}:";
> + }
> + }
> + my @fwoutrules = ();
> + foreach my $key3 (keys %fwout) {
> + if($fwout{$key3}[15] eq $searchstring){
> + push(@fwoutrules, $key3);
> + }
> + }
> + my @fwoutarraysorted = sort { $a <=> $b } @fwoutrules;
> + foreach my $rule (@fwoutarraysorted)
> + {
> + $fwouttext .= "
- $rule";
> + }
> + if ($servicegrouptext ne '') {
> + $titletext .= "$servicegrouptext";
> + }
> + if ($fwfwtext ne '') {
> + if ($titletext) {
> + $titletext .= "
 ";
> + }
> + $titletext .= "$fwfwtext";
> + }
> + if ($fwintext ne '') {
> + if ($titletext) {
> + $titletext .= "
 ";
> + }
> + $titletext .= "$fwintext";
> + }
> + if ($fwouttext) {
> + if ($titletext ne '') {
> + $titletext .= "
 ";
> + }
> + $titletext .= "$fwouttext";
> + }
> + return $titletext
> +}
> sub deletefromgrp
> {
> my $target=shift;
> diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl
> index 53d6903ae..130227910 100644
> --- a/langs/de/cgi-bin/de.pl
> +++ b/langs/de/cgi-bin/de.pl
> @@ -122,6 +122,7 @@
> 'The class number does not match the specified interface.' => 'Die Klassennummer passt nicht zum angegebenen Interface.',
> 'The destination IP address is invalid.' => 'Die Ziel-IP-Adresse ist ungültig.',
> 'The source IP address is invalid.' => 'Die Quell-IP-Adresse ist ungültig.',
> +'Unused' => 'Unbenutzt',
> 'Utilization on' => 'Auslastung auf',
> 'Verbose' => 'Verbose',
> 'WakeOnLan' => 'Wake On LAN',
> diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
> index ef7d75ce7..e76ca878c 100644
> --- a/langs/en/cgi-bin/en.pl
> +++ b/langs/en/cgi-bin/en.pl
> @@ -120,6 +120,7 @@
> 'The class number does not match the specified interface.' => 'The class number does not match the specified interface.',
> 'The destination IP address is invalid.' => 'The destination IP address is invalid.',
> 'The source IP address is invalid.' => 'The source IP address is invalid.',
> +'Unused' => 'Unused',
> 'Utilization on' => 'Utilization on',
> 'Verbose' => 'Verbose:',
> 'WakeOnLan' => 'Wake On Lan',
@@ -78,6 +78,7 @@ WARNING: untranslated string: TOS rule = TOS rule
WARNING: untranslated string: The class number does not match the specified interface. = The class number does not match the specified interface.
WARNING: untranslated string: The destination IP address is invalid. = The destination IP address is invalid.
WARNING: untranslated string: The source IP address is invalid. = The source IP address is invalid.
+WARNING: untranslated string: Unused = Unused
WARNING: untranslated string: WakeOnLan = Wake On Lan
WARNING: untranslated string: a ca certificate with this name already exists = A CA certificate with this name already exists.
WARNING: untranslated string: a connection with this common name already exists = A connection with this common name already exists.
@@ -980,6 +980,7 @@ WARNING: translation string unused: zoneconf val vlan tag range error
WARNING: translation string unused: zoneconf val zoneslave amount error
WARNING: untranslated string: Captive ACTIVATE = unknown string
WARNING: untranslated string: Captive clients = unknown string
+WARNING: untranslated string: Unused = Unused
WARNING: untranslated string: ca name must only contain characters and spaces = unknown string
WARNING: untranslated string: dns servers = DNS Servers
WARNING: untranslated string: enable disable client = unknown string
@@ -959,6 +959,7 @@ WARNING: translation string unused: zoneconf val vlan amount assignment error
WARNING: translation string unused: zoneconf val vlan tag assignment error
WARNING: translation string unused: zoneconf val vlan tag range error
WARNING: translation string unused: zoneconf val zoneslave amount error
+WARNING: untranslated string: Unused = Unused
WARNING: untranslated string: allowed subnets = Allowed Subnets
WARNING: untranslated string: bypassed = Bypassed
WARNING: untranslated string: ca name must only contain characters and spaces = unknown string
@@ -932,6 +932,7 @@ WARNING: untranslated string: Captive vouchervalid = Allowed time for this coupo
WARNING: untranslated string: Captive wrong type = Uploaded file has wrong filetype
WARNING: untranslated string: MTU settings = MTU settings:
WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
+WARNING: untranslated string: Unused = Unused
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
@@ -932,6 +932,7 @@ WARNING: untranslated string: Captive vouchervalid = Allowed time for this coupo
WARNING: untranslated string: Captive wrong type = Uploaded file has wrong filetype
WARNING: untranslated string: MTU settings = MTU settings:
WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
+WARNING: untranslated string: Unused = Unused
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
@@ -848,6 +848,7 @@ WARNING: untranslated string: MB read = MB read
WARNING: untranslated string: MB written = MB written
WARNING: untranslated string: MTU settings = MTU settings:
WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
+WARNING: untranslated string: Unused = Unused
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
@@ -843,6 +843,7 @@ WARNING: untranslated string: MB read = MB read
WARNING: untranslated string: MB written = MB written
WARNING: untranslated string: MTU settings = MTU settings:
WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
+WARNING: untranslated string: Unused = Unused
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
@@ -925,6 +925,7 @@ WARNING: translation string unused: year-graph
WARNING: translation string unused: yearly firewallhits
WARNING: untranslated string: Captive clients = unknown string
WARNING: untranslated string: Captive delete logo = Delete Logo
+WARNING: untranslated string: Unused = Unused
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
@@ -128,6 +128,7 @@
< dns servers
< ids provider eol
< online
+< Unused
############################################################################
# Checking cgi-bin translations for language: fr #
############################################################################
@@ -181,6 +182,7 @@
< system time
< timeformat
< total
+< Unused
< upload fcdsl.o
< warning
< wg
@@ -720,6 +722,7 @@
< unblock all
< uncheck all
< unlimited
+< Unused
< update ruleset
< updxlrtr passive mode
< uplink bit rate
@@ -1356,6 +1359,7 @@
< unblock all
< uncheck all
< unlimited
+< Unused
< update ruleset
< updxlrtr passive mode
< uplink bit rate
@@ -2398,6 +2402,7 @@
< unblock all
< uncheck all
< unlimited
+< Unused
< update ruleset
< updxlrtr passive mode
< updxlrtr sources
@@ -3486,6 +3491,7 @@
< unblock all
< uncheck all
< unlimited
+< Unused
< update ruleset
< updxlrtr passive mode
< updxlrtr sources
@@ -3975,6 +3981,7 @@
< traffic stat title
< transfers
< transport mode does not support vti
+< Unused
< update ruleset
< updxlrtr passive mode
< user management
@@ -1932,7 +1932,7 @@ sub viewtablenet
}else{
print<<END;
<table width='100%' cellspacing='0' class='tbl'>
- <tr><th align='center'><b>$Lang::tr{'name'}</b></th><th align='center'><b>$Lang::tr{'fwhost netaddress'}</b></th><th align='center'><b>$Lang::tr{'remark'}</b></th><th align='center'><b>$Lang::tr{'used'}</b></th><th></th><th width='3%'></th></tr>
+ <tr><th align='center'><b>$Lang::tr{'name'}</b></th><th align='center'><b>$Lang::tr{'fwhost netaddress'}</b></th><th align='center'><b>$Lang::tr{'remark'}</b></th><th align='center'><b>$Lang::tr{'used'}</b></th><th></th><th></th><th width='3%'></th></tr>
END
}
my $count=0;
@@ -1952,7 +1952,14 @@ END
}
my $colnet="$customnetwork{$key}[1]/".&General::subtocidr($customnetwork{$key}[2]);
my $netcount=&getnetcount($customnetwork{$key}[0]);
- print"<td width='20%' $col><form method='post'>$customnetwork{$key}[0]</td><td width='15%' align='center' $col>".&getcolor($colnet)."</td><td width='40%' $col>$customnetwork{$key}[3]</td><td align='center' $col>$netcount x</td>";
+ my $netusedin=&getusedin($customnetwork{$key}[0]);
+ my $htmlparttouse="";
+ if ($netusedin) {
+ $htmlparttouse = "<input type='image' align='top' src='/images/info.gif' alt='$netusedin' title='$netusedin'>";
+ } else {
+ $htmlparttouse = "<input type='image' align='top' src='/images/info.gif' alt='Unused' title='Unused'>";
+ }
+ print"<td width='20%' $col><form method='post'>$customnetwork{$key}[0]</td><td width='15%' align='center' $col>".&getcolor($colnet)."</td><td width='40%' $col>$customnetwork{$key}[3]</td><td align='center' $col>$netcount x</td><td>$htmlparttouse</td>";
print<<END;
<td width='1%' $col><input type='image' src='/images/edit.gif' align='middle' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
<input type='hidden' name='ACTION' value='editnet'>
@@ -2086,7 +2093,7 @@ sub viewtablehost
}else{
print<<END;
<table width='100%' cellspacing='0' class='tbl'>
- <tr><th align='center'><b>$Lang::tr{'name'}</b></th><th align='center'><b>$Lang::tr{'fwhost ip_mac'}</b></th><th align='center'><b>$Lang::tr{'remark'}</b></th><th align='center'><b>$Lang::tr{'used'}</b></th><th></th><th width='3%'></th></tr>
+ <tr><th align='center'><b>$Lang::tr{'name'}</b></th><th align='center'><b>$Lang::tr{'fwhost ip_mac'}</b></th><th align='center'><b>$Lang::tr{'remark'}</b></th><th align='center'><b>$Lang::tr{'used'}</b></th><th></th><th></th><th width='3%'></th></tr>
END
}
my $count=0;
@@ -2106,7 +2113,14 @@ END
$customhost{$key}[4]=~s/\s+//g;
my $hostcount=0;
$hostcount=&gethostcount($customhost{$key}[0]);
- print"<td width='20%' $col>$customhost{$key}[0]</td><td width='20%' align='center' $col >".&getcolor($ip)."</td><td width='50%' align='left' $col>$customhost{$key}[3]</td><td align='center' $col>$hostcount x</td>";
+ my $hostusedin=&getusedin($customhost{$key}[0]);
+ my $htmlparttouse="";
+ if ($hostusedin) {
+ $htmlparttouse = "<input type='image' align='top' src='/images/info.gif' alt='$hostusedin' title='$hostusedin'>";
+ } else {
+ $htmlparttouse = "<input type='image' align='top' src='/images/info.gif' alt='Unused' title='Unused'>";
+ }
+ print"<td width='20%' $col>$customhost{$key}[0]</td><td width='20%' align='center' $col >".&getcolor($ip)."</td><td width='50%' align='left' $col>$customhost{$key}[3]</td><td align='center' $col>$hostcount x</td><td>$htmlparttouse</td>";
print<<END;
<td width='1%' $col><form method='post'><input type='image' src='/images/edit.gif' align='middle' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
<input type='hidden' name='ACTION' value='edithost' />
@@ -2182,7 +2196,13 @@ sub viewtablegrp
print "<br><b><u>$grpname</u></b> ";
print " <b>$Lang::tr{'remark'}:</b>  $remark   " if ($remark ne '');
my $netgrpcount=&getnetcount($grpname);
- print "<b>$Lang::tr{'used'}:</b> $netgrpcount x";
+ print "<b>$Lang::tr{'used'}:</b> $netgrpcount x ";
+ my $groupusedin=&getusedin($grpname);
+ if ($groupusedin) {
+ print "<input type='image' align='top' src='/images/info.gif' alt='$groupusedin' title='$groupusedin'>";
+ } else {
+ print "<input type='image' align='top' src='/images/info.gif' alt='$Lang::tr{'Unused'}' title='$Lang::tr{'Unused'}'>";
+ }
if($netgrpcount == '0')
{
print"<form method='post' style='display:inline'><input type='image' src='/images/delete.gif' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' align='right' /><input type='hidden' name='grp_name' value='$grpname' ><input type='hidden' name='ACTION' value='delgrp'></form>";
@@ -2320,8 +2340,13 @@ sub viewtablelocationgrp
# Get group count.
my $locationgrpcount=&getlocationcount($grpname);
- print "<b>$Lang::tr{'used'}:</b> $locationgrpcount x";
-
+ my $locationusedin=&getlocusedin($grpname);
+ print "<b>$Lang::tr{'used'}:</b> $locationgrpcount x ";
+ if ($locationusedin) {
+ print "<input type='image' align='top' src='/images/info.gif' alt='$locationusedin' title='$locationusedin'>";
+ } else {
+ print "<input type='image' align='top' src='/images/info.gif' alt='$Lang::tr{'Unused'}' title='$Lang::tr{'Unused'}'>";
+ }
# Only display delete icon, if the group is not used by a firewall rule.
if($locationgrpcount == '0') {
print"<form method='post' style='display:inline'>\n";
@@ -2442,7 +2467,7 @@ sub viewtableservice
&General::readhasharray("$fwconfigout", \%fwout);
print<<END;
<table width='100%' cellspacing='0' class='tbl'>
- <tr><th align='center'><b>$Lang::tr{'fwhost srv_name'}</b></th><th align='center'><b>$Lang::tr{'fwhost prot'}</b></th><th align='center'><b>$Lang::tr{'fwhost port'}</b></th><th align='center'><b>ICMP</b></th><th align='center'><b>$Lang::tr{'fwhost used'}</b></th><th></th><th width='3%'></th></tr>
+ <tr><th align='center'><b>$Lang::tr{'fwhost srv_name'}</b></th><th align='center'><b>$Lang::tr{'fwhost prot'}</b></th><th align='center'><b>$Lang::tr{'fwhost port'}</b></th><th align='center'><b>ICMP</b></th><th align='center'><b>$Lang::tr{'fwhost used'}</b></th><th></th><th></th><th width='3%'></th></tr>
END
my $col='';
foreach my $key (sort { ncmp($customservice{$a}[0],$customservice{$b}[0])} keys %customservice)
@@ -2463,10 +2488,17 @@ END
END
#Neuer count
$srvcount=&getsrvcount($customservice{$key}[0]);
+ my $serviceusedin=&getsrvusedin($customservice{$key}[0]);
+ my $htmlparttouse="";
+ if ($serviceusedin) {
+ $htmlparttouse="<input type='image' align='top' src='/images/info.gif' alt='$serviceusedin' title='$serviceusedin'>";
+ } else {
+ $htmlparttouse="<input type='image' align='top' src='/images/info.gif' alt='$Lang::tr{'Unused'}' title='$Lang::tr{'Unused'}'>";
+ }
if($customservice{$key}[3] eq 'All ICMP-Types'){print $Lang::tr{'fwdfw all icmp'};}
elsif($customservice{$key}[3] ne 'BLANK'){print $customservice{$key}[3];}
print<<END;
- </td><td align='center' $col>$srvcount x</td>
+ </td><td align='center' $col>$srvcount x</td><td>$htmlparttouse</td>
<td width='1%' $col><form method='post'><input type='image' src='/images/edit.gif' align='middle' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' /><input type='hidden' name='ACTION' value='editservice' />
<input type='hidden' name='SRV_NAME' value='$customservice{$key}[0]' />
<input type='hidden' name='SRV_PORT' value='$customservice{$key}[1]' />
@@ -2538,7 +2570,13 @@ sub viewtableservicegrp
if($count >0){print"</table>";$count=1;}
print "<br><b><u>$grpname</u></b> ";
print "<b>$Lang::tr{'remark'}:</b> $remark " if ($remark ne '');
- print " <b>$Lang::tr{'used'}:</b> $grpcount x";
+ print " <b>$Lang::tr{'used'}:</b> $grpcount x ";
+ my $srvgrpusedin=&getsrvusedin($customservicegrp{$key}[0]);
+ if ($srvgrpusedin) {
+ print "<input type='image' align='top' src='/images/info.gif' alt='$srvgrpusedin' title='$srvgrpusedin'>";
+ } else {
+ print "<input type='image' align='top' src='/images/info.gif' alt='$Lang::tr{'Unused'}' title='$Lang::tr{'Unused'}'>";
+ }
if($grpcount == '0')
{
print"<form method='post' style='display:inline'><input type='image' src='/images/delete.gif' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' align='right' /><input type='hidden' name='SRVGRP_NAME' value='$grpname' ><input type='hidden' name='ACTION' value='delservicegrp'></form>";
@@ -2811,6 +2849,106 @@ sub getlocationcount
}
return $counter;
}
+sub getlocusedin
+{
+ my $groupname=shift;
+ my $titletext="";
+
+ # Location groups are stored as "group:groupname" in the
+ # firewall settings files.
+ my $searchstring = join(':', "group",$groupname);
+
+ #Count services used in firewall - config
+ my $fwfwtext="";
+ # first set title if found
+ foreach my $key1 (keys %fwfwd) {
+ if($fwfwd{$key1}[4] eq $searchstring){
+ $fwfwtext = "$Lang::tr{'firewall rules'}:";
+ }
+ if($fwfwd{$key1}[6] eq $searchstring){
+ $fwfwtext = "$Lang::tr{'firewall rules'}:";
+ }
+ }
+ # then add rule numbers
+ my @fwfwrules = ();
+ foreach my $key1 (keys %fwfwd) {
+ if($fwfwd{$key1}[4] eq $searchstring){
+ push(@fwfwrules, $key1);
+ }
+ if($fwfwd{$key1}[6] eq $searchstring){
+ push(@fwfwrules, $key1);
+ }
+ }
+ my @fwfwarraysorted = sort { $a <=> $b } @fwfwrules;
+ foreach my $rule (@fwfwarraysorted)
+ {
+ $fwfwtext .= "
- $rule";
+ }
+ #Count services used in firewall - input
+ my $fwintext="";
+ foreach my $key2 (keys %fwinp) {
+ if($fwinp{$key2}[4] eq $searchstring){
+ $fwintext = "$Lang::tr{'incoming firewall access'}:";
+ }
+ if($fwinp{$key2}[6] eq $searchstring){
+ $fwintext = "$Lang::tr{'incoming firewall access'}:";
+ }
+ }
+ my @fwinrules = ();
+ foreach my $key2 (keys %fwinp) {
+ if($fwinp{$key2}[4] eq $searchstring){
+ push(@fwinrules, $key2);
+ }
+ if($fwinp{$key2}[6] eq $searchstring){
+ push(@fwinrules, $key2);
+ }
+ }
+ my @fwinarraysorted = sort { $a <=> $b } @fwinrules;
+ foreach my $rule (@fwinarraysorted)
+ {
+ $fwintext .= "
- $rule";
+ }
+ #Count services used in firewall - outgoing
+ my $fwouttext="";
+ foreach my $key3 (keys %fwout) {
+ if($fwout{$key3}[4] eq $searchstring){
+ $fwouttext = "$Lang::tr{'outgoing firewall access'}:";
+ }
+ if($fwout{$key3}[6] eq $searchstring){
+ $fwouttext = "$Lang::tr{'outgoing firewall access'}:";
+ }
+ }
+ my @fwoutrules = ();
+ foreach my $key3 (keys %fwout) {
+ if($fwout{$key3}[4] eq $searchstring){
+ push(@fwoutrules, $key3);
+ }
+ if($fwout{$key3}[6] eq $searchstring){
+ push(@fwoutrules, $key3);
+ }
+ }
+ my @fwoutarraysorted = sort { $a <=> $b } @fwoutrules;
+ foreach my $rule (@fwoutarraysorted)
+ {
+ $fwouttext .= "
- $rule";
+ }
+ if ($fwfwtext) {
+ $titletext .= "$fwfwtext"
+ }
+ if ($fwintext) {
+ if ($titletext) {
+ $titletext .= "
 "
+ }
+ $titletext .= "$fwintext"
+ }
+ if ($fwouttext) {
+ if ($titletext) {
+ $titletext .= "
 "
+ }
+ $titletext .= "$fwouttext"
+ }
+ return $titletext;
+}
sub getnetcount
{
my $searchstring=shift;
@@ -2850,6 +2988,122 @@ sub getnetcount
}
return $srvcounter;
}
+sub getusedin
+{
+ my $searchstring=shift;
+ my $titletext="";
+ my $groups=();
+ my $rules=();
+
+ #Count services used in Network/Host group
+ my $servicegrouptext="";
+ foreach my $key (keys %customgrp) {
+ if($customgrp{$key}[2] eq $searchstring){
+ $servicegrouptext = "$Lang::tr{'fwhost cust grp'}:";
+ }
+ }
+ foreach my $key (keys %customgrp) {
+ if($customgrp{$key}[2] eq $searchstring){
+ $servicegrouptext .= "
- $customgrp{$key}[0]";
+ }
+ }
+ #Count services used in firewall - config
+ my $fwfwtext="";
+ # first set title if found
+ foreach my $key1 (keys %fwfwd) {
+ if($fwfwd{$key1}[4] eq $searchstring){
+ $fwfwtext = "$Lang::tr{'firewall rules'}:";
+ }
+ if($fwfwd{$key1}[6] eq $searchstring){
+ $fwfwtext = "$Lang::tr{'firewall rules'}:";
+ }
+ }
+ # then add rule numbers
+ my @fwfwrules = ();
+ foreach my $key1 (keys %fwfwd) {
+ if($fwfwd{$key1}[4] eq $searchstring){
+ push(@fwfwrules, $key1);
+ }
+ if($fwfwd{$key1}[6] eq $searchstring){
+ push(@fwfwrules, $key1);
+ }
+ }
+ my @fwfwarraysorted = sort { $a <=> $b } @fwfwrules;
+ foreach my $rule (@fwfwarraysorted)
+ {
+ $fwfwtext .= "
- $rule";
+ }
+ #Count services used in firewall - input
+ my $fwintext="";
+ foreach my $key2 (keys %fwinp) {
+ if($fwinp{$key2}[4] eq $searchstring){
+ $fwintext = "$Lang::tr{'incoming firewall access'}:";
+ }
+ if($fwinp{$key2}[6] eq $searchstring){
+ $fwintext = "$Lang::tr{'incoming firewall access'}:";
+ }
+ }
+ my @fwinrules = ();
+ foreach my $key2 (keys %fwinp) {
+ if($fwinp{$key2}[4] eq $searchstring){
+ push(@fwinrules, $key2);
+ }
+ if($fwinp{$key2}[6] eq $searchstring){
+ push(@fwinrules, $key2);
+ }
+ }
+ my @fwinarraysorted = sort { $a <=> $b } @fwinrules;
+ foreach my $rule (@fwinarraysorted)
+ {
+ $fwintext .= "
- $rule";
+ }
+ #Count services used in firewall - outgoing
+ my $fwouttext="";
+ foreach my $key3 (keys %fwout) {
+ if($fwout{$key3}[4] eq $searchstring){
+ $fwouttext = "$Lang::tr{'outgoing firewall access'}:";
+ }
+ if($fwout{$key3}[6] eq $searchstring){
+ $fwouttext = "$Lang::tr{'outgoing firewall access'}:";
+ }
+ }
+ my @fwoutrules = ();
+ foreach my $key3 (keys %fwout) {
+ if($fwout{$key3}[4] eq $searchstring){
+ push(@fwoutrules, $key3);
+ }
+ if($fwout{$key3}[6] eq $searchstring){
+ push(@fwoutrules, $key3);
+ }
+ }
+ my @fwoutarraysorted = sort { $a <=> $b } @fwoutrules;
+ foreach my $rule (@fwoutarraysorted)
+ {
+ $fwouttext .= "
- $rule";
+ }
+ if ($servicegrouptext) {
+ $titletext .= "$servicegrouptext"
+ }
+ if ($fwfwtext) {
+ if ($titletext) {
+ $titletext .= "
 "
+ }
+ $titletext .= "$fwfwtext"
+ }
+ if ($fwintext) {
+ if ($titletext) {
+ $titletext .= "
 "
+ }
+ $titletext .= "$fwintext"
+ }
+ if ($fwouttext) {
+ if ($titletext) {
+ $titletext .= "
 "
+ }
+ $titletext .= "$fwouttext"
+ }
+ return $titletext
+}
sub getsrvcount
{
my $searchstring=shift;
@@ -2880,6 +3134,100 @@ sub getsrvcount
}
return $srvcounter;
}
+sub getsrvusedin
+{
+ my $searchstring=shift;
+ my $titletext="";
+ #Count services used in servicegroups
+ my $servicegrouptext="";
+ foreach my $key (keys %customservicegrp) {
+ if($customservicegrp{$key}[2] eq $searchstring){
+ $servicegrouptext = "$Lang::tr{'outgoing firewall access'}:";
+ }
+ }
+ foreach my $key (keys %customservicegrp) {
+ if($customservicegrp{$key}[2] eq $searchstring){
+ $servicegrouptext .= "
- $customservicegrp{$key}[0]";
+ }
+ }
+ my $fwfwtext="";
+ # first set title if found
+ foreach my $key1 (keys %fwfwd) {
+ if($fwfwd{$key1}[15] eq $searchstring){
+ $fwfwtext = "$Lang::tr{'firewall rules'}:";
+ }
+ }
+ # then add rule numbers
+ my @fwfwrules = ();
+ foreach my $key1 (keys %fwfwd) {
+ if($fwfwd{$key1}[15] eq $searchstring){
+ push(@fwfwrules, $key1);
+ }
+ }
+ my @fwfwarraysorted = sort { $a <=> $b } @fwfwrules;
+ foreach my $rule (@fwfwarraysorted)
+ {
+ $fwfwtext .= "
- $rule";
+ }
+ #Count services used in firewall - input
+ my $fwintext="";
+ foreach my $key2 (keys %fwinp) {
+ if($fwinp{$key2}[15] eq $searchstring){
+ $fwintext = "$Lang::tr{'incoming firewall access'}:";
+ }
+ }
+ my @fwinrules = ();
+ foreach my $key2 (keys %fwinp) {
+ if($fwinp{$key2}[15] eq $searchstring){
+ push(@fwinrules, $key2);
+ }
+ }
+ my @fwinarraysorted = sort { $a <=> $b } @fwinrules;
+ foreach my $rule (@fwinarraysorted)
+ {
+ $fwintext .= "
- $rule";
+ }
+ #Count services used in firewall - outgoing
+ my $fwouttext="";
+ foreach my $key3 (keys %fwout) {
+ if($fwout{$key3}[15] eq $searchstring){
+ $fwouttext = "$Lang::tr{'outgoing firewall access'}:";
+ }
+ }
+ my @fwoutrules = ();
+ foreach my $key3 (keys %fwout) {
+ if($fwout{$key3}[15] eq $searchstring){
+ push(@fwoutrules, $key3);
+ }
+ }
+ my @fwoutarraysorted = sort { $a <=> $b } @fwoutrules;
+ foreach my $rule (@fwoutarraysorted)
+ {
+ $fwouttext .= "
- $rule";
+ }
+ if ($servicegrouptext ne '') {
+ $titletext .= "$servicegrouptext";
+ }
+ if ($fwfwtext ne '') {
+ if ($titletext) {
+ $titletext .= "
 ";
+ }
+ $titletext .= "$fwfwtext";
+ }
+ if ($fwintext ne '') {
+ if ($titletext) {
+ $titletext .= "
 ";
+ }
+ $titletext .= "$fwintext";
+ }
+ if ($fwouttext) {
+ if ($titletext ne '') {
+ $titletext .= "
 ";
+ }
+ $titletext .= "$fwouttext";
+ }
+ return $titletext
+}
sub deletefromgrp
{
my $target=shift;
@@ -122,6 +122,7 @@
'The class number does not match the specified interface.' => 'Die Klassennummer passt nicht zum angegebenen Interface.',
'The destination IP address is invalid.' => 'Die Ziel-IP-Adresse ist ungültig.',
'The source IP address is invalid.' => 'Die Quell-IP-Adresse ist ungültig.',
+'Unused' => 'Unbenutzt',
'Utilization on' => 'Auslastung auf',
'Verbose' => 'Verbose',
'WakeOnLan' => 'Wake On LAN',
@@ -120,6 +120,7 @@
'The class number does not match the specified interface.' => 'The class number does not match the specified interface.',
'The destination IP address is invalid.' => 'The destination IP address is invalid.',
'The source IP address is invalid.' => 'The source IP address is invalid.',
+'Unused' => 'Unused',
'Utilization on' => 'Utilization on',
'Verbose' => 'Verbose:',
'WakeOnLan' => 'Wake On Lan',