From 6f01247aee68b5f90325a1ce17c94774fa979207 Mon Sep 17 00:00:00 2001 From: "Casper Ti. Vector" Date: Fri, 9 Nov 2012 21:14:15 +0800 Subject: [PATCH] Improve quoting for `serverargs' and `launchflags'. --- src/cdm | 18 +++++++++--------- src/cdmrc | 9 +++++---- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/cdm b/src/cdm index 239ca4b..39ac56b 100755 --- a/src/cdm +++ b/src/cdm @@ -70,9 +70,6 @@ fi # Default options. -[[ -z "${binlist[*]}" ]] && binlist=() -[[ -z "${namelist[*]}" ]] && namelist=() -[[ -z "${flaglist[*]}" ]] && flaglist=() dialogrc=${dialogrc:-} countfrom=${countfrom:-0} display=${display:-0} @@ -80,7 +77,10 @@ xtty=${xtty:-7} locktty=${locktty:-no} consolekit=${consolekit:-yes} cktimeout=${cktimeout:-30} -serverargs=${serverargs:-'-nolisten tcp'} +[[ -z "${binlist[*]}" ]] && binlist=() +[[ -z "${namelist[*]}" ]] && namelist=() +[[ -z "${flaglist[*]}" ]] && flaglist=() +[[ -z "${serverargs[*]}" ]] && serverargs=(-nolisten tcp) # Offer all available sessions in /etc/X11/Sessions, # if $binlist if not explicitly set in cdmrc. @@ -172,14 +172,14 @@ case ${flaglist[$binindex]} in vt="$((xtty+display))" fi - serverargs=":${display} $serverargs vt$vt" + serverargs=(":${display}" "${serverargs[@]}" "vt$vt") - $(yesno consolekit) && launchflags="-c -t $cktimeout" - if ! eval cdm-xlaunch $launchflags -- $bin -- $serverargs; then + $(yesno consolekit) && launchflags=(-c -t "$cktimeout") + if cdm-xlaunch "${launchflags[@]}" -- "$bin" -- "${serverargs[@]}"; then + exitnormal + else warn "\`cdm-xlaunch' exited unsuccessfully." exiterror - else - exitnormal fi ;; diff --git a/src/cdmrc b/src/cdmrc index daf4449..07ef72f 100644 --- a/src/cdmrc +++ b/src/cdmrc @@ -45,13 +45,14 @@ xtty=7 # Should cdm(1) stick to the specified display? locktty=no -# Additional arguments to pass to X server, which is usually called as: -# /usr/bin/X :$display $serverargs vt$((xtty+display)) -serverargs='-nolisten tcp' - # Use ConsoleKit for X session? consolekit=yes # Timeout for waiting for X session to register with ConsoleKit. cktimeout=30 +# Additional arguments to pass to X server, which is usually called as: +# /usr/bin/X :$display "${serverargs[@]}" vt$((xtty+display)) +# Arguments with whitespaces should be quoted or escaped. +serverargs=(-nolisten tcp) +