From 27724e4df026baa6def7d44ed08f4b8a7c1fdec7 Mon Sep 17 00:00:00 2001 From: "David Kaspar [Dee'Kej]" Date: Mon, 30 Jul 2018 14:15:24 +0200 Subject: ifup-eth: use 'bc' instead of 'expr' when computing $forward_delay Because the return value of 'convert2sec()' function can sometimes be decimal, the follow up 'expr' call can fail, since 'expr' does not support floating point calculations. This can sometimes lead to error: """ expr: non-integer argument /etc/sysconfig/network-scripts/ifup-eth: line 91: [: 0: unary operator expected """ To solve this bug, we switch to 'bc' utility, which supports floating point computations. We also have to change the comparison condition of $LINKDELAY and $forward_delay to use 'bc' as well. --- initscripts.spec | 1 + network-scripts/ifup-eth | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/initscripts.spec b/initscripts.spec index 248807cb..1679d342 100644 --- a/initscripts.spec +++ b/initscripts.spec @@ -94,6 +94,7 @@ Requires: %{name}%{?_isa} = %{version}-%{release} %shared_requirements +Requires: bc Requires: dbus Requires: gawk Requires: grep diff --git a/network-scripts/ifup-eth b/network-scripts/ifup-eth index b55db79e..73a6c834 100755 --- a/network-scripts/ifup-eth +++ b/network-scripts/ifup-eth @@ -89,9 +89,11 @@ if [ "${TYPE}" = "Bridge" ]; then forward_delay="$(convert2sec ${forward_delay} centi)" fi - forward_delay=$(expr ${forward_delay} \* 2 + 7) + forward_delay=$(bc -q <<< "${forward_delay} * 2 + 7") - [ 0$LINKDELAY -lt $forward_delay ] && LINKDELAY=$forward_delay + # It's possible we are comparing floating point numbers here, therefore + # we are using 'bc' for comparison. The [ ] and [[ ]] do not work. + (( $(bc -l <<< "${LINKDELAY:-0} < ${forward_delay}") )) && LINKDELAY=${forward_delay} unset forward_delay fi -- cgit v1.2.1