Brendan O'Dea wrote on Mon, Nov 21, 2005 at 21:56:15 +1100:
> On Sat, Nov 19, 2005 at 02:23:18AM +0100, Markus Kolb wrote:
> >As someone has already posted before $relmajor should become $release in
> >the $relmajor assignment.
[...]
> >As it should be, shouldn't it?
>
> Actually, I don't believe so. Given the way these variables are
> actually used, I suspect that the correct fix is:
>
> release=`uname -r`
> relmajor=`echo $release | sed 's/^\([0-9]*\).*/\1/'`
> relminor=`echo $release | sed 's/^[0-9]*\.\([0-9]*\).*/\1/'`
> release=`echo $release | sed 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/'`
>
> i.e. for your example, 2.4.27-2-686 should map to relmajor=2, relminor=4
> and release=27.
>
> Note that the script tests these variables like so:
>
> if [ $relmajor -lt 2 ] || ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] )
>
> which I would interpret as testing for 1.X.X or 2.0.X, rather than X.1.X
> or X.2.0 .
I interpreted it as a test for kernel version <= x.2.0 which would mean
<= 2.2.0.
Could make sense and I couldn't believe that someone writes
release=`echo $release | sed 's/\([0-9]*\)\..*/\1/'`
if he would intend to do something like
release=`echo $release | sed 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/'`
So I thought the vars are used like this
$release => VERSION
$relmajor => PATCHLEVEL
$relminor => SUBLEVEL
But I looked around and found that 1999 the code looked like this:
release=`uname -r`
release=`expr $release : '\(.*\)\..*'`
relmajor=`echo $release |sed -e 's/^\([^\.]*\)\..*$/\1/'`
relminor=`echo $release |sed -e 's/^.*\.\([^\.]*\)$/\1/'`
The tests didn't change.
And you could read a comment
"# added this code to fix this script for kernels greater than 2.0"
Is it modern to remove very useful code comments?
Have a look at the attached patch. Now it should do the right thing.
And please use comments like in my patch.
--- /etc/dhclient-script.orig 2005-11-15 23:39:23.000000000 +0100
+++ /etc/dhclient-script 2005-11-21 18:25:36.000000000 +0100
@@ -71,10 +71,10 @@
fi
fi
+# kernel version $relmajor.$relminor.x
release=`uname -r`
-relminor=`echo $release | sed 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/'`
-relmajor=`echo $relmajor | sed 's/^[0-9]*\.\([0-9]*\)\..*/\1/'`
-release=`echo $release | sed 's/\([0-9]*\)\..*/\1/'`
+relmajor=`echo $release | sed 's/^\([0-9]*\).*/\1/'`
+relminor=`echo $release | sed 's/^[0-9]*\.\([0-9]*\).*/\1/'`
if [ x$new_broadcast_address != x ]; then
new_broadcast_arg="broadcast $new_broadcast_address"
@@ -102,6 +102,7 @@
# Bring down alias interface. Its routes will disappear too.
ifconfig $interface:0- inet 0
fi
+ # test for kernels <= 2.0.x
if [ $relmajor -lt 2 ] || ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] )
then
ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \