BUG10940: remove leading zeros in ip address
Message ID | 1447069367-7823-1-git-send-email-alexander.marx@ipfire.org |
---|---|
State | Accepted |
Commit | f770b72899bcd7977a83e0237c9840804f6a46ca |
Headers |
Return-Path: <development-bounces@lists.ipfire.org> Received: from mail01.ipfire.org (mail01.tremer.info [172.28.1.200]) by septima.ipfire.org (Postfix) with ESMTP id BCF8960C95 for <patchwork@ipfire.org>; Mon, 9 Nov 2015 12:42:59 +0100 (CET) Received: from hedwig.ipfire.org (localhost [IPv6:::1]) by mail01.ipfire.org (Postfix) with ESMTP id 89B4DD9A; Mon, 9 Nov 2015 12:42:59 +0100 (CET) Received: from nbk-edv.kappeln2011.lan (ip1f11b49c.dynamic.kabel-deutschland.de [31.17.180.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) by mail01.ipfire.org (Postfix) with ESMTPSA id 4D96FB89; Mon, 9 Nov 2015 12:42:57 +0100 (CET) From: Alexander Marx <alexander.marx@ipfire.org> To: development@lists.ipfire.org Subject: [PATCH] BUG10940: remove leading zeros in ip address Date: Mon, 9 Nov 2015 12:42:47 +0100 Message-Id: <1447069367-7823-1-git-send-email-alexander.marx@ipfire.org> X-Mailer: git-send-email 1.9.1 X-BeenThere: development@lists.ipfire.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: IPFire development talk <development.lists.ipfire.org> List-Unsubscribe: <http://lists.ipfire.org/mailman/options/development>, <mailto:development-request@lists.ipfire.org?subject=unsubscribe> List-Archive: <http://lists.ipfire.org/pipermail/development/> List-Post: <mailto:development@lists.ipfire.org> List-Help: <mailto:development-request@lists.ipfire.org?subject=help> List-Subscribe: <http://lists.ipfire.org/mailman/listinfo/development>, <mailto:development-request@lists.ipfire.org?subject=subscribe> Errors-To: development-bounces@lists.ipfire.org Sender: "Development" <development-bounces@lists.ipfire.org> |
Message
Alexander Marx
Nov. 9, 2015, 10:42 p.m. UTC
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.
Signed-off-by: Alexander Marx <alexander.marx@ipfire.org>
---
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(-)
Comments
Hi, 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. Best, -Michael On Mon, 2015-11-09 at 12:42 +0100, Alexander Marx wrote: > 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. > > Signed-off-by: Alexander Marx <alexander.marx@ipfire.org> > --- > 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'){ > + #remove leading zero > + $ip = &Network::ip_remove_zero($ip); > + > ##check if ip is valid > if (! &General::validip($ip)){ > $errormessage.=$Lang::tr{'fwdfw 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'; > } > + #remove leading zero > + $ip = &Network::ip_remove_zero($ip); > + > #check if ip is valid > if (! &General::validip($ip)){ > $errormessage.=$Lang::tr{'fwdfw err > 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{ > + #convert ip if leading '0' exists > + $fwhostsettings{'IP'} = > &Network::ip_remove_zero($fwhostsettings{'IP'}); > + > #check valid ip > if > (!&General::validipandmask($fwhostsettings{'IP'}."/".$fwhostsettings{ > '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'}; > - #convert ip when leading '0' in byte > - $fwhostsettings{'IP'} =&Gener > al::ip2dec($fwhostsettings{'IP'}); > - $fwhostsettings{'IP'} =&Gener > al::dec2ip($fwhostsettings{'IP'}); > $customnetwork{$key}[1] = > &General::getnetworkip($fwhostsettings{'IP'},$fwhostsettings{'SUBNET' > }) ; > $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'){ > + #convert ip if leading '0' exists > + $fwhostsettings{'IP'} = > &Network::ip_remove_zero($fwhostsettings{'IP'}); > + > #check for subnet > if (rindex($fwhostsettings{'IP'},'/') eq ' > -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'){ > - #convert ip when leading '0' in byte > - $fwhostsettings{'IP'}=&General::ip2d > ec($fwhostsettings{'IP'}); > - $fwhostsettings{'IP'}=&General::dec2 > ip($fwhostsettings{'IP'}); > $customhost{$key}[2] = > $fwhostsettings{'IP'}."/".&General::iporsubtodec($fwhostsettings{'SUB > NET'}); > }else{ > $customhost{$key}[2] = > $fwhostsettings{'IP'};
On Mon, 2015-11-09 at 20:14 +0100, Alexander Marx wrote: > > FULL ACK, Michael. > > But unfortunately it seems not to be possible to catch that issue > with modification of central functions like check_ip_address, becaus > ethat functions only return true or false not the "normalized ip" > without zero's. > > I am open for better solutions.... anyone ideas?! It is too late for that now. I think the best option would simply to consider those inputs as invalid and maybe fix this at some places where we can and where we find this makes sense. -Michael P.S. Please make sure to reply to the list. Especially if you are asking a question to the group :) > > cheers, > > Alex > > Am 09.11.2015 um 19:33 schrieb Michael Tremer: > > Hi, > > > > 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. > > > > Best, > > -Michael > > > > On Mon, 2015-11-09 at 12:42 +0100, Alexander Marx wrote: > > > 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. > > > > > > Signed-off-by: Alexander Marx <alexander.marx@ipfire.org> > > > --- > > > 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'){ > > > + #remove leading zero > > > + $ip = &Network::ip_remove_zero($ip); > > > + > > > ##check if ip is valid > > > if (! &General::validip($ip)){ > > > $errormessage.=$Lang::tr{'fwdfw > > > 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'; > > > } > > > + #remove leading zero > > > + $ip = &Network::ip_remove_zero($ip); > > > + > > > #check if ip is valid > > > if (! &General::validip($ip)){ > > > $errormessage.=$Lang::tr{'fwdfw err > > > 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{ > > > + #convert ip if leading '0' exists > > > + $fwhostsettings{'IP'} = > > > &Network::ip_remove_zero($fwhostsettings{'IP'}); > > > + > > > #check valid ip > > > if > > > (!&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'}; > > > - #convert ip when leading '0' in byte > > > - $fwhostsettings{'IP'} =&G > > > ener > > > al::ip2dec($fwhostsettings{'IP'}); > > > - $fwhostsettings{'IP'} =&G > > > 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'){ > > > + #convert ip if leading '0' exists > > > + $fwhostsettings{'IP'} = > > > &Network::ip_remove_zero($fwhostsettings{'IP'}); > > > + > > > #check for subnet > > > if (rindex($fwhostsettings{'IP'},'/') eq > > > ' > > > -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'){ > > > - #convert ip when leading '0' in > > > byte > > > - $fwhostsettings{'IP'}=&General:: > > > ip2d > > > ec($fwhostsettings{'IP'}); > > > - $fwhostsettings{'IP'}=&General:: > > > dec2 > > > ip($fwhostsettings{'IP'}); > > > $customhost{$key}[2] = > > > $fwhostsettings{'IP'}."/".&General::iporsubtodec($fwhostsettings{ > > > 'SUB > > > NET'}); > > > }else{ > > > $customhost{$key}[2] = > > > $fwhostsettings{'IP'};