diff options
author | Leon M. George <leon@georgemail.eu> | 2022-05-06 00:02:52 +0200 |
---|---|---|
committer | Christian Marangi <ansuelsmth@gmail.com> | 2023-02-07 21:05:56 +0100 |
commit | a40a96e54b0d047d14d99bb715ee2dd94458acb6 (patch) | |
tree | a907a71bb18f40b6e485f21f3af9a38849220288 /package/base-files | |
parent | 4fe106afd1870cfeb6a45d40f1dbb69e890f1756 (diff) | |
download | upstream-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>
Diffstat (limited to 'package/base-files')
-rwxr-xr-x | package/base-files/files/bin/ipcalc.sh | 8 |
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) |