initscript: handle spaces in option values inserted into $CTDB_OPTIONS.
authorMartin Schwenke <martin@meltin.net>
Fri, 22 Jan 2010 02:19:00 +0000 (13:19 +1100)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Fri, 22 Jan 2010 04:34:21 +0000 (15:34 +1100)
This puts single quotes around everything and uses eval on the
command-lines that actually start ctdbd.  The eval causes the single
quotes to be interpreted.

The "redhat" init style no longer uses the Red Hat daemon function.
It loses the quoting and re-splits on spaces.  Instead we add an extra
line that uses the success/failure functions to keep things pretty.
Note that this means that we don't respect daemon's
$DAEMON_COREFILE_LIMIT variable but we do our own core file handling
with $CTDB_SUPPRESS_COREFILE anyway.  daemon's core file handling was
probably overriding what we were doing anyway, so this can be regarded
as a bug fix.

Signed-off-by: Martin Schwenke <martin@meltin.net>
config/ctdb.init

index 96ffb1ece651069a2df0dc4da191be97614db2ff..b4df177e0ba1efd183b770ea93e9c5439e8c19ef 100755 (executable)
@@ -65,7 +65,7 @@ build_ctdb_options () {
        # then return
        [ -z "$2" -o \( -n "$3" -a "$3" != "$2" \) ] && return
 
-       val="$2"
+       val="'$2'"
        case "$1" in
            --*) sep="=" ;;
            -*)  sep=" " ;;
@@ -186,25 +186,26 @@ start() {
 
     case $init_style in
        valgrind)
-           valgrind -q --log-file=/var/log/ctdb_valgrind \
-               $ctdbd --valgrinding $CTDB_OPTIONS
+           eval valgrind -q --log-file=/var/log/ctdb_valgrind \
+               $ctdbd --valgrinding "$CTDB_OPTIONS"
            RETVAL=$?
            echo
            ;;
        suse)
-           startproc $ctdbd $CTDB_OPTIONS
+           eval startproc $ctdbd "$CTDB_OPTIONS"
            rc_status -v
            RETVAL=$?
            ;;
        redhat)
-           daemon $ctdbd $CTDB_OPTIONS
+           eval $ctdbd "$CTDB_OPTIONS"
            RETVAL=$?
+           [ $RETVAL -eq 0 ] && success || failure
            echo
            [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ctdb || RETVAL=1
            ;;
        debian)
-           start-stop-daemon --start --quiet --background \
-               --exec $ctdbd -- $CTDB_OPTIONS
+           eval start-stop-daemon --start --quiet --background \
+               --exec $ctdbd -- "$CTDB_OPTIONS"
            RETVAL=$?
            ;;
     esac