this does not look like the cleanest solution to be honest, but I
guess
this is acceptable. It solves the issue at hand, but generally I
would
like to have this solved one time so that one does not have to keep
this problem in mind when writing new code.
Merged.
in firewallgroups (hosts) an error was created when using ip
adresses
like 192.168.000.008. Now all leading zeros are deleted in
firewallgroups and in the firewall itself when using single ip
addresses
as source or target.
config/cfgroot/network-functions.pl | 13 +++++++++++++
html/cgi-bin/firewall.cgi | 8 ++++++++
html/cgi-bin/fwhosts.cgi | 13 +++++++------
3 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/config/cfgroot/network-functions.pl
b/config/cfgroot/network-functions.pl
index cb4ca3d..70fa5ed 100644
--- a/config/cfgroot/network-functions.pl
+++ b/config/cfgroot/network-functions.pl
@@ -122,6 +122,19 @@ sub network2bin($) {
return ($network_start, $netmask_bin);
}
+# Deletes leading zeros in ip address
+sub ip_remove_zero{
- my $address = shift;
- my @ip = split (/./, $address);
- foreach my $octet (@ip) {
$octet = int($octet);
- }
- $address = join (".", @ip);
- return $address;
+}
# Returns True for all valid IP addresses
sub check_ip_address($) {
my $address = shift;
diff --git a/html/cgi-bin/firewall.cgi b/html/cgi
-bin/firewall.cgi
index 682c285..8007182 100644
--- a/html/cgi-bin/firewall.cgi
+++ b/html/cgi-bin/firewall.cgi
@@ -31,6 +31,7 @@ no warnings 'uninitialized';
#use CGI::Carp 'fatalsToBrowser';
require '/var/ipfire/general-functions.pl';
+require '/var/ipfire/network-functions.pl';
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
require "${General::swroot}/geoip-functions.pl";
@@ -465,6 +466,9 @@ sub checksource
}
}
if ($fwdfwsettings{'isip'} eq 'on'){
err
src_addr'}."<br>";
@@ -569,11 +573,15 @@ sub checktarget
($ip,$subnet)=split
(///,$fwdfwsettings{'tgt_addr'});
$subnet =
&General::iporsubtocidr($subnet);
}
- #check if only ip
if($fwdfwsettings{'tgt_addr'}=~/^(\d{1,3}).(\d{
1,3}
).(\d{1,3}).(\d{1,3})$/){
$ip=$fwdfwsettings{'tgt_addr'};
$subnet='32';
}
tgt_addr'}."<br>";
diff --git a/html/cgi-bin/fwhosts.cgi b/html/cgi-bin/fwhosts.cgi
index 994a50a..35afad3 100644
--- a/html/cgi-bin/fwhosts.cgi
+++ b/html/cgi-bin/fwhosts.cgi
@@ -27,6 +27,7 @@ use Sort::Naturally;
use CGI::Carp 'fatalsToBrowser';
no warnings 'uninitialized';
require '/var/ipfire/general-functions.pl';
+require '/var/ipfire/network-functions.pl';
require "/var/ipfire/geoip-functions.pl";
require "/usr/lib/firewall/firewall-lib.pl";
require "${General::swroot}/lang.pl";
@@ -277,6 +278,9 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' )
&addnet;
&viewtablenet;
}else{
&Network::ip_remove_zero($fwhostsettings{'IP'});
(!&General::validipandmask($fwhostsettings{'IP'}."/".$fwhostsetti
ngs{
'SUBNET'}))
{
@@ -372,9 +376,6 @@ if ($fwhostsettings{'ACTION'} eq 'savenet' )
foreach my $i (0 .. 3) {
$customnetwork{$key}[$i] = "";}
$fwhostsettings{'SUBNET'} =
&General::iporsubtocidr($fwhostsettings{'SUBNET'});
$customnetwork{$key}[0] =
$fwhostsettings{'HOSTNAME'};
ener
al::ip2dec($fwhostsettings{'IP'});
ener
al::dec2ip($fwhostsettings{'IP'});
$customnetwork{$key}[1] =
&General::getnetworkip($fwhostsettings{'IP'},$fwhostsettings{'SUB
NET'
}) ;
$customnetwork{$key}[2] =
&General::iporsubtodec($fwhostsettings{'SUBNET'}) ;
$customnetwork{$key}[3] =
$fwhostsettings{'NETREMARK'};
@@ -423,6 +424,9 @@ if ($fwhostsettings{'ACTION'} eq 'savehost')
}
#CHECK IP-PART
if ($fwhostsettings{'type'} eq 'ip'){
&Network::ip_remove_zero($fwhostsettings{'IP'});
'
-1' ){
if($fwhostsettings{'type'} eq
'ip'
&& !&General::validipandmask($fwhostsettings{'IP'}."/32"))
@@ -503,9 +507,6 @@ if ($fwhostsettings{'ACTION'} eq 'savehost')
$customhost{$key}[0] =
$fwhostsettings{'HOSTNAME'} ;
$customhost{$key}[1] =
$fwhostsettings{'type'} ;
if ($fwhostsettings{'type'} eq 'ip'){
byte
ip2d
ec($fwhostsettings{'IP'});
dec2
ip($fwhostsettings{'IP'});
$customhost{$key}[2] =
$fwhostsettings{'IP'}."/".&General::iporsubtodec($fwhostsettings{
'SUB
NET'});
}else{
$customhost{$key}[2] =
$fwhostsettings{'IP'};