ctdb-scripts: Fix tunable setup code by making it shell-agnostic
authorMartin Schwenke <martin@meltin.net>
Mon, 16 Feb 2015 03:04:09 +0000 (14:04 +1100)
committerAmitay Isaacs <amitay@samba.org>
Wed, 18 Feb 2015 04:34:06 +0000 (05:34 +0100)
All tunables set in configuration are currently set to 0 on system
where /bin/sh is dash (and perhaps other non-bash shells).  dash puts
single quotes around all values in the output of the "set" builtin
command, whereas bash only puts them around values when something
needs to be quoted.  Tunables always have a simple integer value so
dash will quote them and bash won't.  The setup code currently passes
the raw value, including any quotes to "ctdb setvar ...".  This
command does no error checking on the input, so "'1'" is converted to
0.

Change the code so that the value is determined from the shell
variable and is independent of the "set" output.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/config/events.d/00.ctdb

index a0f4102ed9b15fe3fd8b968659351edaea80198b..c3754ae4a9acfc829f39f84e318adf45a7fb4459 100755 (executable)
@@ -121,10 +121,10 @@ update_config_from_tdb() {
 
 set_ctdb_variables () {
     # set any tunables from the config file
-    set | grep ^CTDB_SET_ | cut -d_ -f3- | 
+    set | sed -n '/^CTDB_SET_/s/=.*//p' |
     while read v; do
-       varname=`echo $v | cut -d= -f1`
-       value=`echo $v | cut -d= -f2`
+       varname="${v#CTDB_SET_}"
+       value=$(eval echo "\$$v")
        ctdb setvar $varname $value || return 1
        echo "Set $varname to $value"
     done