]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - html/cgi-bin/routing.cgi
BUG11466: fix routing.cgi the function call in routing.cgi was fixed to call the...
[ipfire-2.x.git] / html / cgi-bin / routing.cgi
index 86e04293a406ada5098ee950a8e72818b02944fb..f2014e2e12f917ecc31c56c7490534a52a420874 100644 (file)
@@ -118,13 +118,18 @@ if ($settings{'ACTION'} eq $Lang::tr{'toggle enable disable'}) {
 }
 
 if ($settings{'ACTION'} eq $Lang::tr{'add'}) {
-
-# 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/){
+       if ($settings{'IP'} =~ /^0\.0\.0\.0/){
        $errormessage = $Lang::tr{'invalid ip'}." - 0.0.0.0";
        }
 
@@ -132,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");
@@ -242,10 +268,10 @@ print <<END
     <td><input type='text' name='REMARK' value='$settings{'REMARK'}' size='25'/></td>
 </tr>
 </table>
-<hr />
+<br>
 <table width='100%'>
 <tr>
-    <td width='50%' align='center'><input type='hidden' name='ACTION' value='$Lang::tr{'add'}' /><input type='submit' name='SUBMIT' value='$buttontext' /></td>
+    <td width='50%' align='right'><input type='hidden' name='ACTION' value='$Lang::tr{'add'}' /><input type='submit' name='SUBMIT' value='$buttontext' /></td>
 </tr>
 </table>
 </form>
@@ -255,13 +281,13 @@ END
 
 &Header::openbox('100%', 'left', $Lang::tr{'routing table'});
 print <<END
-<hr />
-<table width='100%'>
+
+<table width='100%' class='tbl'>
 <tr>
-    <td width='30%' align='center'><a href='$ENV{'SCRIPT_NAME'}?IP'><b>$Lang::tr{'host ip'} / $Lang::tr{'network'}</b></a></td>
-    <td width='30%' align='center'><a href='$ENV{'SCRIPT_NAME'}?GATEWAY'><b>$Lang::tr{'gateway'}</b></a></td>
-    <td width='30%' align='center'><a href='$ENV{'SCRIPT_NAME'}?REMARK'><b>$Lang::tr{'remark'}</b></a></td>
-    <td width='10%' colspan='3' class='boldbase' align='center'><b>$Lang::tr{'action'}</b></td>
+    <th width='30%' align='center'><a href='$ENV{'SCRIPT_NAME'}?IP'><b>$Lang::tr{'host ip'} / $Lang::tr{'network'}</b></a></th>
+    <th width='30%' align='center'><a href='$ENV{'SCRIPT_NAME'}?GATEWAY'><b>$Lang::tr{'gateway'}</b></a></th>
+    <th width='30%' align='center'><a href='$ENV{'SCRIPT_NAME'}?REMARK'><b>$Lang::tr{'remark'}</b></a></th>
+    <th width='10%' colspan='3' class='boldbase' align='center'><b>$Lang::tr{'action'}</b></th>
 </tr>
 END
 ;
@@ -271,6 +297,7 @@ END
 #
 
 my $key = 0;
+my $col="";
 foreach my $line (@current) {
     chomp($line);                              # remove newline
     my @temp=split(/\,/,$line);
@@ -292,15 +319,17 @@ foreach my $line (@current) {
     if ($settings{'KEY1'} eq $key) {
        print "<tr bgcolor='${Header::colouryellow}'>";
     } elsif ($key % 2) {
-       print "<tr bgcolor='$color{'color22'}'>";
+       print "<tr>";
+       $col="bgcolor='$color{'color20'}'";
     } else {
-       print "<tr bgcolor='$color{'color20'}'>"; 
+       print "<tr>";
+       $col="bgcolor='$color{'color22'}'";
     }
     print <<END
-<td align='center'>$temp[1]</td>
-<td align='center'>$temp[2]</td>
-<td align='center'>$temp[3]</td>
-<td align='center'>
+<td align='center' $col>$temp[1]</td>
+<td align='center' $col>$temp[2]</td>
+<td align='center' $col>$temp[3]</td>
+<td align='center' $col>
 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
 <input type='hidden' name='ACTION' value='$Lang::tr{'toggle enable disable'}' />
 <input type='image' name='$Lang::tr{'toggle enable disable'}' src='/images/$gif' alt='$gdesc' title='$gdesc' />
@@ -308,7 +337,7 @@ foreach my $line (@current) {
 </form>
 </td>
 
-<td align='center'>
+<td align='center' $col>
 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
 <input type='hidden' name='ACTION' value='$Lang::tr{'edit'}' />
 <input type='image' name='$Lang::tr{'edit'}' src='/images/edit.gif' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
@@ -316,7 +345,7 @@ foreach my $line (@current) {
 </form>
 </td>
 
-<td align='center'>
+<td align='center' $col>
 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
 <input type='hidden' name='ACTION' value='$Lang::tr{'remove'}' />
 <input type='image' name='$Lang::tr{'remove'}' src='/images/delete.gif' alt='$Lang::tr{'remove'}' title='$Lang::tr{'remove'}' />
@@ -443,4 +472,4 @@ sub SortDataFile
 #
 sub BuildConfiguration {
     system '/usr/local/bin/rebuildroutes';
-}
\ No newline at end of file
+}