aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeon M. George <leon@georgemail.eu>2022-05-06 00:02:52 +0200
committerChristian Marangi <ansuelsmth@gmail.com>2023-02-07 21:05:56 +0100
commita40a96e54b0d047d14d99bb715ee2dd94458acb6 (patch)
treea907a71bb18f40b6e485f21f3af9a38849220288
parent4fe106afd1870cfeb6a45d40f1dbb69e890f1756 (diff)
downloadupstream-a40a96e54b0d047d14d99bb715ee2dd94458acb6.tar.gz
upstream-a40a96e54b0d047d14d99bb715ee2dd94458acb6.tar.bz2
upstream-a40a96e54b0d047d14d99bb715ee2dd94458acb6.zip
base-files: ipcalc.sh: fail when network is too small
It's possible to move range boundaries in a way that the start address lies behind the end address. Detect this condition and exit with an error message. Signed-off-by: Leon M. George <leon@georgemail.eu>
-rwxr-xr-xpackage/base-files/files/bin/ipcalc.sh8
1 files changed, 7 insertions, 1 deletions
diff --git a/package/base-files/files/bin/ipcalc.sh b/package/base-files/files/bin/ipcalc.sh
index 66d37952de..b21b6e28dc 100755
--- a/package/base-files/files/bin/ipcalc.sh
+++ b/package/base-files/files/bin/ipcalc.sh
@@ -44,13 +44,14 @@ BEGIN {
}
network=and(ipaddr,netmask)
+ prefix=32-bitcount(compl32(netmask))
broadcast=or(network,compl32(netmask))
print "IP="int2ip(ipaddr)
print "NETMASK="int2ip(netmask)
print "BROADCAST="int2ip(broadcast)
print "NETWORK="int2ip(network)
- print "PREFIX="32-bitcount(compl32(netmask))
+ print "PREFIX="prefix
# range calculations:
# ipcalc <ip> <netmask> <start> <num>
@@ -68,6 +69,11 @@ BEGIN {
if (end>limit) end=limit
if (end==ipaddr) end=ipaddr-1
+ if (start>end) {
+ print "network ("int2ip(network)"/"prefix") too small" > "/dev/stderr"
+ exit(1)
+ }
+
if (ipaddr > start && ipaddr < end) {
print "ipaddr inside range" > "/dev/stderr"
exit(1)