]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
dhcp.cgi: Fix bug#10629 - Highlight fixed IP's in dynamic range in red
authorAdolf Belka <adolf.belka@ipfire.org>
Thu, 2 Mar 2023 14:11:23 +0000 (15:11 +0100)
committerPeter Müller <peter.mueller@ipfire.org>
Sat, 4 Mar 2023 13:41:21 +0000 (13:41 +0000)
- This v2 patch has moved the extraHead variable into header.pl
- This patch marks all IP's that are in the Fixed list but are also in the dynamic range
   that has been defined, in red.
- Additional function created to check if an ip address is in a defined range.
- Added an additional key item under the Fixed Leases table for Fixed IP in dynamic range
- Added line to English Language file for this key item.
- ./make lang run before commit.
- Tested in vm testbed and confirmed that any ip address in the Fixed Leases table that
   is in the defined dynamic range is highlighted in red
- This uses the css background-color appoach from the first patch in this set.
- This patch only highlights those IP's that overlap in red but does nothing more. So a
   user can still create new ones if they want but they will all show up in red.
- This patch flags up if people are doing things that they shouldn't be doing but allows
   them to continue doing so without changing anything if they don't want to and so will
   not break existing setups.

Fixes: Bug#10629
Tested-by: Adolf Belka <adolf.belka@ipfire.org>
Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
14 files changed:
config/cfgroot/header.pl
config/cfgroot/network-functions.pl
doc/language_issues.de
doc/language_issues.en
doc/language_issues.es
doc/language_issues.fr
doc/language_issues.it
doc/language_issues.nl
doc/language_issues.pl
doc/language_issues.ru
doc/language_issues.tr
doc/language_missings
html/cgi-bin/dhcp.cgi
langs/en/cgi-bin/en.pl

index b25f83e26219c17e6eaed0a68fefc62fa549e6d3..cd56e574f35f871907046de40296e01231c2bdfa 100644 (file)
@@ -54,6 +54,9 @@ $Header::extraHead = <<END
        }
        .cell-orange {
                background-color: orange;
+       }       
+       .cell-red {
+               background-color: red;
        }                       
 </style>
 END
index 4ac6d86708c6f32672430d766acbad47d4dfaa0c..7b38cfac7f9645d5ab1a29c6d4793429ee62500a 100644 (file)
@@ -307,6 +307,24 @@ sub ip_address_in_network($$) {
        return (($address_bin >= $network_bin) && ($address_bin <= $broadcast_bin));
 }
 
+# Returns True if $ipaddress is within $ipstart and $ipend range.
+sub ip_address_in_range($$) {
+       my $ipaddress = shift;
+       my $ipstart = shift;
+       my $ipend = shift;
+
+       my $ipaddress_bin = &ip2bin($ipaddress);
+       return undef unless (defined $ipaddress_bin);
+
+       my $ipstart_bin = &ip2bin($ipstart);
+       return undef unless (defined $ipstart_bin);
+
+       my $ipend_bin = &ip2bin($ipend);
+       return undef unless (defined $ipend_bin);
+
+       return (($ipaddress_bin >= $ipstart_bin) && ($ipaddress_bin <= $ipend_bin));
+}
+
 sub setup_upstream_proxy() {
        my %proxysettings = ();
        &General::readhash("${General::swroot}/proxy/settings", \%proxysettings);
@@ -666,6 +684,12 @@ sub testsuite() {
        $result = &ip_address_in_network("192.168.30.11", "0.0.0.0/8");
        assert('ip_address_in_network("192.168.30.11", "0.0.0.0/8")', !$result);
 
+       $result = &ip_address_in_range("192.168.30.11", "192.168.30.10", "192.168.30.20");
+       assert('ip_address_in_range("192.168.30.11", "192.168.30.10", "192.168.30.20")', $result);
+
+       $result = &ip_address_in_range("192.168.30.21", "192.168.30.10", "192.168.30.20");
+       assert('ip_address_in_range("192.168.30.21", "192.168.30.10", "192.168.30.20")', !$result);
+
        print "Testsuite completed successfully!\n";
 
        return 0;
index 88c7879befa3eb9682212169a9bf49a9d01145bb..39241619271705403c3919555c4640e189731e2f 100644 (file)
@@ -883,7 +883,7 @@ WARNING: untranslated string: cake profile pppoe-ptm 27 = PPPoE PTM (27 bytes)
 WARNING: untranslated string: cake profile pppoe-vcmux 32 = PPPoE VC-MUX (32 bytes)
 WARNING: untranslated string: cake profile raw 0 = Raw (no overhead compensation)
 WARNING: untranslated string: desired = Desired
-WARNING: untranslated string: dh parameter = unknown string
+WARNING: untranslated string: dhcp fixed ip address in dynamic range = Fixed IP Address in dynamic range
 WARNING: untranslated string: disable = Disable
 WARNING: untranslated string: download apple profile = Download Apple Configuration Profile
 WARNING: untranslated string: enable = Enable
index c29e3bed6b3a3e5121ffe90f7fc25a74e12ae04b..08fda35b7c33fbd893a2c19beb5ec3ff192a84c3 100644 (file)
@@ -574,7 +574,6 @@ WARNING: untranslated string: details = Details
 WARNING: untranslated string: device = Device
 WARNING: untranslated string: devices on blue = Devices on BLUE
 WARNING: untranslated string: dh = Diffie-Hellman-Parameter
-WARNING: untranslated string: dh parameter = unknown string
 WARNING: untranslated string: dhcp advopt add = Add a DHCP option
 WARNING: untranslated string: dhcp advopt added = DHCP option added
 WARNING: untranslated string: dhcp advopt blank value = DHCP Option value cannot be empty.
@@ -601,6 +600,7 @@ WARNING: untranslated string: dhcp dns key name = Key Name
 WARNING: untranslated string: dhcp dns update = DNS Update
 WARNING: untranslated string: dhcp dns update algo = Algorithm
 WARNING: untranslated string: dhcp dns update secret = Secret
+WARNING: untranslated string: dhcp fixed ip address in dynamic range = Fixed IP Address in dynamic range
 WARNING: untranslated string: dhcp make fixed lease = Add to fix leases
 WARNING: untranslated string: dhcp server = DHCP Server
 WARNING: untranslated string: dhcp server disabled = DHCP server disabled.  Stopped.
index 0bd390d5d74f03a203ffaffed8ffc9b7ae51d75e..ffe423bd1d6a118d89aa9c2520829be62d4f7b15 100644 (file)
@@ -228,6 +228,7 @@ WARNING: translation string unused: dh key move failed
 WARNING: translation string unused: dh key warn
 WARNING: translation string unused: dh key warn1
 WARNING: translation string unused: dh name is invalid
+WARNING: translation string unused: dh parameter
 WARNING: translation string unused: dhcp base ip fixed lease
 WARNING: translation string unused: dhcp create fixed leases
 WARNING: translation string unused: dhcp fixed lease err1
@@ -943,6 +944,7 @@ WARNING: untranslated string: access point name is invalid = Access Point Name i
 WARNING: untranslated string: access point name is required = Access Point Name is required
 WARNING: untranslated string: bytes = unknown string
 WARNING: untranslated string: cpu frequency = CPU frequency
+WARNING: untranslated string: dhcp fixed ip address in dynamic range = Fixed IP Address in dynamic range
 WARNING: untranslated string: dns servers = DNS Servers
 WARNING: untranslated string: error message = unknown string
 WARNING: untranslated string: fwhost cust locationgrp = unknown string
index 56d69d86e6547945a63e3c8a7c7182ea98825939..cb06f0ab3908f75fb84e6ef0f0cc6955c82a7dfe 100644 (file)
@@ -392,7 +392,6 @@ WARNING: translation string unused: generatepolicy
 WARNING: translation string unused: generatereport
 WARNING: translation string unused: genkey
 WARNING: translation string unused: green interface
-WARNING: translation string unused: guaranteed bandwith
 WARNING: translation string unused: guest ok
 WARNING: translation string unused: gz with key
 WARNING: translation string unused: harddisk temperature graphs
@@ -404,6 +403,7 @@ WARNING: translation string unused: host deny
 WARNING: translation string unused: hostname and domain already in use
 WARNING: translation string unused: hour-graph
 WARNING: translation string unused: hours2
+WARNING: translation string unused: ibod for dual isdn only
 WARNING: translation string unused: icmp selected but no type
 WARNING: translation string unused: icmp type
 WARNING: translation string unused: id
@@ -453,6 +453,10 @@ WARNING: translation string unused: ipblocklist category scanner
 WARNING: translation string unused: ipfire side
 WARNING: translation string unused: ipsec no connections
 WARNING: translation string unused: iptable rules
+WARNING: translation string unused: isdn
+WARNING: translation string unused: isdn settings
+WARNING: translation string unused: isdn1
+WARNING: translation string unused: isdn2
 WARNING: translation string unused: javascript menu error1
 WARNING: translation string unused: javascript menu error2
 WARNING: translation string unused: kernel version
@@ -908,15 +912,11 @@ WARNING: translation string unused: zoneconf val zoneslave amount error
 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
-WARNING: untranslated string: advproxy errmsg invalid url = Invalid URL
 WARNING: untranslated string: core notice 3 = available.
-WARNING: untranslated string: dh = Diffie-Hellman-Parameter
-WARNING: untranslated string: dh parameter = unknown string
-WARNING: untranslated string: email recipient invalid = Invalid email recipient
+WARNING: untranslated string: dhcp fixed ip address in dynamic range = Fixed IP Address in dynamic range
 WARNING: untranslated string: error message = unknown string
 WARNING: untranslated string: fwhost cust locationgrp = unknown string
 WARNING: untranslated string: fwhost err hostip = unknown string
-WARNING: untranslated string: guaranteed bandwidth = Guaranteed bandwidth
 WARNING: untranslated string: guardian block a host = unknown string
 WARNING: untranslated string: guardian block httpd brute-force = unknown string
 WARNING: untranslated string: guardian block ssh brute-force = unknown string
@@ -947,9 +947,6 @@ WARNING: untranslated string: guardian logtarget_syslog = unknown string
 WARNING: untranslated string: guardian no entries = unknown string
 WARNING: untranslated string: guardian service = unknown string
 WARNING: untranslated string: pakfire ago = ago.
-WARNING: untranslated string: retbleed = Retbleed
 WARNING: untranslated string: route config changed = unknown string
 WARNING: untranslated string: routing config added = unknown string
 WARNING: untranslated string: routing config changed = unknown string
-WARNING: untranslated string: service boot setting unavailable = No valid runlevel symlink was found for the initscript of this service.
-WARNING: untranslated string: show dh = Show Diffie-Hellman parameters
index 9999f947c0342038df14f40999d42a8c3dcba316..dd794f57aa5c8784e5dda4ff21c1416680b173df 100644 (file)
@@ -940,13 +940,13 @@ WARNING: untranslated string: dangerous = Dangerous
 WARNING: untranslated string: default IP address = Default IP Address
 WARNING: untranslated string: desired = Desired
 WARNING: untranslated string: dh = Diffie-Hellman-Parameter
-WARNING: untranslated string: dh parameter = unknown string
 WARNING: untranslated string: dhcp deny known clients: = Deny known clients:
 WARNING: untranslated string: dhcp dns enable update = Enable DNS Update (RFC2136):
 WARNING: untranslated string: dhcp dns key name = Key Name
 WARNING: untranslated string: dhcp dns update = DNS Update
 WARNING: untranslated string: dhcp dns update algo = Algorithm
 WARNING: untranslated string: dhcp dns update secret = Secret
+WARNING: untranslated string: dhcp fixed ip address in dynamic range = Fixed IP Address in dynamic range
 WARNING: untranslated string: dhcp make fixed lease = Add to fix leases
 WARNING: untranslated string: dhcp valid range required when deny known clients checked = Valid range required when "Deny known clients:" is checked
 WARNING: untranslated string: disable = Disable
index 14a7b420efbe7ab47a21b2fd8b5623272c043ed6..4f100abd2578da7608cbd3f34e8531febaab5c79 100644 (file)
@@ -943,12 +943,12 @@ WARNING: untranslated string: default = Default
 WARNING: untranslated string: default IP address = Default IP Address
 WARNING: untranslated string: desired = Desired
 WARNING: untranslated string: dh = Diffie-Hellman-Parameter
-WARNING: untranslated string: dh parameter = unknown string
 WARNING: untranslated string: dhcp dns enable update = Enable DNS Update (RFC2136):
 WARNING: untranslated string: dhcp dns key name = Key Name
 WARNING: untranslated string: dhcp dns update = DNS Update
 WARNING: untranslated string: dhcp dns update algo = Algorithm
 WARNING: untranslated string: dhcp dns update secret = Secret
+WARNING: untranslated string: dhcp fixed ip address in dynamic range = Fixed IP Address in dynamic range
 WARNING: untranslated string: dhcp make fixed lease = Add to fix leases
 WARNING: untranslated string: disable = Disable
 WARNING: untranslated string: disconnected = Disconnected
index a53a208d9056d2872168277d313ac13112b7bc27..e91e62c5b34b951d270bf61d8540dfff27b3e298 100644 (file)
@@ -915,13 +915,13 @@ WARNING: untranslated string: default IP address = Default IP Address
 WARNING: untranslated string: desired = Desired
 WARNING: untranslated string: details = Details
 WARNING: untranslated string: dh = Diffie-Hellman-Parameter
-WARNING: untranslated string: dh parameter = unknown string
 WARNING: untranslated string: dhcp deny known clients: = Deny known clients:
 WARNING: untranslated string: dhcp dns enable update = Enable DNS Update (RFC2136):
 WARNING: untranslated string: dhcp dns key name = Key Name
 WARNING: untranslated string: dhcp dns update = DNS Update
 WARNING: untranslated string: dhcp dns update algo = Algorithm
 WARNING: untranslated string: dhcp dns update secret = Secret
+WARNING: untranslated string: dhcp fixed ip address in dynamic range = Fixed IP Address in dynamic range
 WARNING: untranslated string: dhcp make fixed lease = Add to fix leases
 WARNING: untranslated string: dhcp valid range required when deny known clients checked = Valid range required when "Deny known clients:" is checked
 WARNING: untranslated string: disable = Disable
index c5dc1aa61b5852c4a65fda8e1a59303d29239122..7dd1a63d7b4302bffd3f334739320529ca6de41a 100644 (file)
@@ -911,13 +911,13 @@ WARNING: untranslated string: default IP address = Default IP Address
 WARNING: untranslated string: desired = Desired
 WARNING: untranslated string: details = Details
 WARNING: untranslated string: dh = Diffie-Hellman-Parameter
-WARNING: untranslated string: dh parameter = unknown string
 WARNING: untranslated string: dhcp deny known clients: = Deny known clients:
 WARNING: untranslated string: dhcp dns enable update = Enable DNS Update (RFC2136):
 WARNING: untranslated string: dhcp dns key name = Key Name
 WARNING: untranslated string: dhcp dns update = DNS Update
 WARNING: untranslated string: dhcp dns update algo = Algorithm
 WARNING: untranslated string: dhcp dns update secret = Secret
+WARNING: untranslated string: dhcp fixed ip address in dynamic range = Fixed IP Address in dynamic range
 WARNING: untranslated string: dhcp make fixed lease = Add to fix leases
 WARNING: untranslated string: dhcp valid range required when deny known clients checked = Valid range required when "Deny known clients:" is checked
 WARNING: untranslated string: disable = Disable
index 552082a9610e2e3b2284273e587058e847b9138d..3443b1f1a0adae3ba9e1703f38d49a6f8d49cdd3 100644 (file)
@@ -926,8 +926,8 @@ WARNING: untranslated string: dangerous = Dangerous
 WARNING: untranslated string: default IP address = Default IP Address
 WARNING: untranslated string: desired = Desired
 WARNING: untranslated string: dh = Diffie-Hellman-Parameter
-WARNING: untranslated string: dh parameter = unknown string
 WARNING: untranslated string: dhcp deny known clients: = Deny known clients:
+WARNING: untranslated string: dhcp fixed ip address in dynamic range = Fixed IP Address in dynamic range
 WARNING: untranslated string: dhcp make fixed lease = Add to fix leases
 WARNING: untranslated string: dhcp valid range required when deny known clients checked = Valid range required when "Deny known clients:" is checked
 WARNING: untranslated string: disable = Disable
index 65d38b4223f97b1c278d26a074e5f8290aaf75a4..78b9e8a2d5ed626a3899b46e9da6769ab7ffd8d0 100644 (file)
@@ -47,6 +47,7 @@
 < could not connect to www ipfire org
 < cryptographic settings
 < desired
+< dhcp fixed ip address in dynamic range
 < dhcp server disabled on blue interface
 < dhcp server enabled on blue interface
 < disable
 < access point name is required
 < addon
 < cpu frequency
+< dhcp fixed ip address in dynamic range
 < dns servers
 < hardware vulnerabilities
 < invalid ip or hostname
 < access point name
 < access point name is invalid
 < access point name is required
-< advproxy errmsg invalid url
 < ansi t1.483
 < bewan adsl pci st
 < bewan adsl usb
-< dh
-< email recipient invalid
+< dhcp fixed ip address in dynamic range
 < g.dtm
 < g.lite
-< guaranteed bandwidth
-< retbleed
-< service boot setting unavailable
-< show dh
 < upload fcdsl.o
 ############################################################################
 # Checking cgi-bin translations for language: it                           #
 < dhcp dns update
 < dhcp dns update algo
 < dhcp dns update secret
+< dhcp fixed ip address in dynamic range
 < dhcp make fixed lease
 < dhcp valid range required when deny known clients checked
 < disable
 < dhcp dns update
 < dhcp dns update algo
 < dhcp dns update secret
+< dhcp fixed ip address in dynamic range
 < dhcp make fixed lease
 < disable
 < Disabled
 < dhcp dns update
 < dhcp dns update algo
 < dhcp dns update secret
+< dhcp fixed ip address in dynamic range
 < dhcp make fixed lease
 < dhcp valid range required when deny known clients checked
 < disable
 < dhcp dns update
 < dhcp dns update algo
 < dhcp dns update secret
+< dhcp fixed ip address in dynamic range
 < dhcp make fixed lease
 < dhcp valid range required when deny known clients checked
 < disable
 < desired
 < dh
 < dhcp deny known clients:
+< dhcp fixed ip address in dynamic range
 < dhcp make fixed lease
 < dhcp valid range required when deny known clients checked
 < disable
index 4d4c21a7fbec536adb8a93cb4a729a0a49380f1c..28b00215c442e37441ea2b71cbdd95130c03690f 100644 (file)
@@ -1021,8 +1021,9 @@ my $ipdup = 0;
 my %ipinuse = ();
 my %macdupl = (); # Duplicate MACs have to be on different subnets
 my %ipoutside = ();
+my %ipinrange = ();
 
-# mark duplicate ip or duplicate MAC
+# mark duplicate IP, duplicate MAC or IP in dynamic range
 foreach my $line (@current2) {
     my @temp = split(/\,/,$line);
     $macdupl{$temp[0]} += 1;
@@ -1033,14 +1034,21 @@ foreach my $line (@current2) {
     if ($ipinuse{$temp[1]} > 1) {
        $ipdup = 1;     # Flag up duplicates for use later
     }
-    # Mark IP addresses outwith known subnets
     $ipoutside{$temp[1]} = 1;
+    $ipinrange{$temp[1]} = 0;
     foreach my $itf (@ITFs) {
-        if ( &General::IpInSubnet($temp[1],
-                $netsettings{"${itf}_NETADDRESS"},
-                $netsettings{"${itf}_NETMASK"})) {
-            $ipoutside{$temp[1]} = 0;
-        }
+    # Mark IP addresses outwith known subnets
+               if ( &General::IpInSubnet($temp[1],
+                       $netsettings{"${itf}_NETADDRESS"},
+                       $netsettings{"${itf}_NETMASK"})) {
+                  $ipoutside{$temp[1]} = 0;
+               }
+    # Mark IP addresses that overlap with dynamic range
+               if (&Network::ip_address_in_range($temp[1],
+                       $dhcpsettings{"START_ADDR_${itf}"},
+                       $dhcpsettings{"END_ADDR_${itf}"})) {
+                  $ipinrange{$temp[1]} = 1;
+               }        
     }
 }
 
@@ -1094,6 +1102,9 @@ foreach my $line (@current2) {
     if ($ipoutside{$temp[1]} > 0) {
        $TAG4 = "class='cell-orange'" if ($dhcpsettings{'KEY2'} ne $key);
     }
+    if ($ipinrange{$temp[1]} > 0) { 
+       $TAG4 = "class='cell-red'" if ($dhcpsettings{'KEY2'} ne $key);
+    }
 
     print <<END
 <td align='center' $col>$TAG2$temp[0]$TAG3</td>
@@ -1156,6 +1167,8 @@ print <<END
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td class='base cell-orange'>$Lang::tr{'ip address outside subnets'}</td>
+        <td>&nbsp;&nbsp</td>
+        <td class='base cell-red'>$Lang::tr{'dhcp fixed ip address in dynamic range'}</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        $dup
index 80753b8419b22cba9a4c5a421f38f594f4f86ea1..5a72f53b8c8b37fa6f36d53160dcf5f8af4c9dcd 100644 (file)
 'dhcp dns update' => 'DNS Update',
 'dhcp dns update algo' => 'Algorithm',
 'dhcp dns update secret' => 'Secret',
+'dhcp fixed ip address in dynamic range' => 'Fixed IP Address in dynamic range',
 'dhcp fixed lease err1' => 'For a fix lease you have to enter the MAC address or the hostname, or you enter both.',
 'dhcp fixed lease help1' => 'IP Addresses might be entered as FQDN',
 'dhcp make fixed lease' => 'Add to fix leases',