diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2013-08-23 10:09:35 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2013-08-25 15:27:09 +0200 |
commit | 67dcc66dbbe940d2ead770a0bfe1c74411b002e7 (patch) | |
tree | 2bb64dcf23ee9c294b49e413443142996e856f0d /utils/remap.sh | |
parent | 7755215040bca03ac929dfd67fdf2c7dbd2068ea (diff) |
utils: escape arguments in remap.sh
remap.sh uses /bin/sh to first change the working directory and then
execute the given program in the remap context. But the arguments
given on the command line were not properly escaped:
% '/bin/sh' '-c' 'echo $0'
/bin/sh
% remap '/bin/sh' '-c' 'echo $0'
<empty line>
% remap-fixed '/bin/sh' '-c' 'echo $0'
/bin/sh
* utils/remap.sh: Escape arguments handed to /bin/sh so that they are
not evaluated prematurely.
Diffstat (limited to 'utils/remap.sh')
-rw-r--r-- | utils/remap.sh | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/utils/remap.sh b/utils/remap.sh index d7997591..064f0f5f 100644 --- a/utils/remap.sh +++ b/utils/remap.sh @@ -57,10 +57,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/sh -c "cd `pwd`; $*" \ + /bin/sh -c "cd `pwd`; exec ${TARGET}" \ -- / /hurd/remap $MAPPED |