summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2013-08-23 10:09:34 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2013-08-25 15:27:01 +0200
commit7755215040bca03ac929dfd67fdf2c7dbd2068ea (patch)
tree242154856a6c04e34a0bc1cdde65bb42046f115d
parent25a628b3403249499ba3f87ab177c441c8f432ee (diff)
utils: escape arguments in fakeroot.sh
fakeroot.sh uses /bin/sh to first change the working directory and then execute the given program in the fakeroot context. But the arguments given on the command line were not properly escaped: % '/bin/sh' '-c' 'echo $0' /bin/sh % fakeroot-tcp '/bin/sh' '-c' 'echo $0' /bin/sh % fakeroot-hurd '/bin/sh' '-c' 'echo $0' <empty line> % fakeroot-hurd-fixed '/bin/sh' '-c' 'echo $0' /bin/sh * utils/fakeroot.sh: Escape arguments handed to /bin/sh so that they are not evaluated prematurely.
-rw-r--r--utils/fakeroot.sh10
1 files changed, 8 insertions, 2 deletions
diff --git a/utils/fakeroot.sh b/utils/fakeroot.sh
index 1ace1cf7..a64e9631 100644
--- a/utils/fakeroot.sh
+++ b/utils/fakeroot.sh
@@ -1,7 +1,7 @@
#!/bin/sh
# Execute a command in an environment where it appears to be root.
#
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2013 Free Software Foundation, Inc.
#
# This file is part of the GNU Hurd.
#
@@ -54,10 +54,16 @@ if [ $# -eq 0 ]; then
set -- ${SHELL:-/bin/sh}
fi
+TARGET=
+until [ $# -eq 0 ]; do
+ TARGET="${TARGET} '$(echo "$1" | sed -e "s/'/'\\\\''/g")'"
+ shift
+done
+
# We exec settrans, which execs the "fakeauth" command in the chroot context.
# The `pwd` is evaluated here and now, and that result interpreted inside
# the shell running under fakeauth to chdir there inside the chroot world.
# That shell then execs our arguments as a command line.
exec /bin/settrans --chroot \
- /bin/fakeauth /bin/sh -c "cd `pwd`; $*" \
+ /bin/fakeauth /bin/sh -c "cd `pwd`; exec ${TARGET}" \
-- / /hurd/fakeroot