X-Git-Url: http://git.ipfire.org/?p=ipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Frouting.cgi;h=f2014e2e12f917ecc31c56c7490534a52a420874;hp=2a5176026a327e42faa8ffcdd55a1e40c89ababa;hb=51141b150d5fd2a51ae75f32fe23ce2eb79558e6;hpb=4ed7ef4620637d6047edc4fd713e753d3a7f254e diff --git a/html/cgi-bin/routing.cgi b/html/cgi-bin/routing.cgi index 2a5176026a..f2014e2e12 100644 --- a/html/cgi-bin/routing.cgi +++ b/html/cgi-bin/routing.cgi @@ -118,12 +118,15 @@ if ($settings{'ACTION'} eq $Lang::tr{'toggle enable disable'}) { } if ($settings{'ACTION'} eq $Lang::tr{'add'}) { - # Convert subnet masks to CIDR notation. - $settings{'IP'} = &General::iporsubtocidr($settings{'IP'}); - -# Validate inputs - if (( !&General::validip($settings{'IP'})) and ( !&General::validipandmask($settings{'IP'}))){ - $errormessage = $Lang::tr{'invalid ip'}." / ".$Lang::tr{'invalid netmask'}; + # Validate inputs + if (!&General::validipandmask($settings{'IP'})){ + $errormessage = $Lang::tr{'invalid ip'}." / ".$Lang::tr{'invalid netmask'}; + }else{ + #set networkip if not already correctly defined + my($ip,$cidr) = split(/\//,$settings{'IP'}); + $cidr = &General::iporsubtocidr($cidr); + my $netip=&General::getnetworkip($ip,$cidr); + $settings{'IP'} = "$netip/$cidr"; } if ($settings{'IP'} =~ /^0\.0\.0\.0/){ @@ -134,6 +137,27 @@ if ($settings{'ACTION'} eq $Lang::tr{'add'}) { $errormessage = $Lang::tr{'invalid ip'}. " - ".$Lang::tr{'gateway ip'}; } + #set networkip if not already correctly defined + my($ip,$cidr) = split(/\//,$settings{'IP'}); + my $netip=&General::getnetworkip($ip,$cidr); + $settings{'IP'} = "$netip/$cidr"; + + #Check for already existing routing entry + foreach my $line (@current) { + chomp($line); # remove newline + my @temp=split(/\,/,$line); + $temp[2] ='' unless defined $temp[2]; # not always populated + $temp[3] ='' unless defined $temp[2]; # not always populated + #Same ip already used? + if($temp[1] eq $settings{'IP'} && $settings{'KEY1'} eq ''){ + $errormessage = $Lang::tr{'ccd err irouteexist'}; + last; + } + #Is the network part of an internal network? + $errormessage .= &General::check_net_internal_exact($settings{'IP'}); + last; + } + unless ($errormessage) { if ($settings{'KEY1'} eq '') { #add or edit ? unshift (@current, "$settings{'EN'},$settings{'IP'},$settings{'GATEWAY'},$settings{'REMARK'}\n"); @@ -244,10 +268,10 @@ print < -
+
- +