From 7755215040bca03ac929dfd67fdf2c7dbd2068ea Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Fri, 23 Aug 2013 10:09:34 +0200 Subject: 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' % 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. --- utils/fakeroot.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'utils/fakeroot.sh') 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 -- cgit v1.2.3