tmpfilesd: parse arguments with spaces

systemd allows the final arg in tmpfiles to contain spaces.  Using the read()
call to set the variables includes all trailing components in $arg so it
doesn't get cut off.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
This commit is contained in:
Andrew Gregory 2012-10-11 14:34:20 -04:00 committed by William Hubbs
parent 5647946e61
commit 525c731f0e

View File

@ -253,46 +253,34 @@ for FILE in $tmpfiles_d ; do
# XXX: Upstream says whitespace is NOT permitted in the Path argument.
# But IS allowed when globs are expanded for the x/r/R/z/Z types.
while read line; do
while read cmd path mode uid gid age arg; do
LINENUM=$(( LINENUM+1 ))
# This will skip over comments and empty lines
set -- $line
# Unless we have both command and path, skip this line.
if [ -z "$1" -o -z "$2" ]; then
if [ -z "$cmd" -o -z "$path" ]; then
continue
fi
# whine about invalid entries
case $1 in
case $cmd in
f|F|w|d|D|p|L|c|b|x|r|R|z|Z) ;;
\#) continue ;;
*) warninvalid ; continue ;;
esac
cmd=$1
path=$2
# fall back on defaults when parameters are passed as '-'
if [ "$3" = '-' -o "$3" = '' ]; then
case ${1} in
if [ "$mode" = '-' -o "$mode" = '' ]; then
case "$cmd" in
p|f|F) mode=0644 ;;
d|D) mode=0755 ;;
z|Z|x|r|R|L) ;;
esac
else
mode=$3
fi
uid=$4
gid=$5
age=$6
arg=$7
[ "${4}" = '-' -o "${4}" = '' ] && uid=0
[ "${5}" = '-' -o "${5}" = '' ] && gid=0
[ "${6}" = '-' -o "${6}" = '' ] && age=0
[ "${7}" = '-' -o "${7}" = '' ] && arg=''
[ "$uid" = '-' -o "$uid" = '' ] && uid=0
[ "$gid" = '-' -o "$gid" = '' ] && gid=0
[ "$age" = '-' -o "$age" = '' ] && age=0
[ "$arg" = '-' -o "$arg" = '' ] && arg=''
set -- "$path" "$mode" "$uid" "$gid" "$age" "$arg"
[ "$VERBOSE" -eq "1" ] && echo _$cmd "$@"