diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/Makefile | 6 | ||||
-rw-r--r-- | utils/remap.sh | 64 |
2 files changed, 67 insertions, 3 deletions
diff --git a/utils/Makefile b/utils/Makefile index 00f6142f..e3bed0bf 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -21,14 +21,14 @@ makemode := utilities targets = shd ps settrans showtrans syncfs fsysopts \ storeinfo login w uptime ids loginpr sush vmstat portinfo \ devprobe vminfo addauth rmauth unsu setauth ftpcp ftpdir storecat \ - storeread msgport rpctrace mount gcore fakeauth fakeroot -special-targets = loginpr sush uptime fakeroot + storeread msgport rpctrace mount gcore fakeauth fakeroot remap +special-targets = loginpr sush uptime fakeroot remap SRCS = shd.c ps.c settrans.c syncfs.c showtrans.c addauth.c rmauth.c \ fsysopts.c storeinfo.c login.c loginpr.sh sush.sh w.c \ uptime.sh psout.c ids.c vmstat.c portinfo.c devprobe.c vminfo.c \ parse.c frobauth.c frobauth-mod.c setauth.c pids.c nonsugid.c \ unsu.c ftpcp.c ftpdir.c storeread.c storecat.c msgport.c \ - rpctrace.c mount.c gcore.c fakeauth.c fakeroot.sh + rpctrace.c mount.c gcore.c fakeauth.c fakeroot.sh remap.sh OBJS = $(filter-out %.sh,$(SRCS:.c=.o)) HURDLIBS = ps ihash store fshelp ports ftpconn shouldbeinlibc diff --git a/utils/remap.sh b/utils/remap.sh new file mode 100644 index 00000000..106109e8 --- /dev/null +++ b/utils/remap.sh @@ -0,0 +1,64 @@ +#!/bin/sh +# Execute a command in an environment where some paths are remapped +# +# Copyright (C) 2002, 2013 Free Software Foundation, Inc. +# +# This file is part of the GNU Hurd. +# +# The GNU Hurd is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2, or (at +# your option) any later version. +# +# The GNU Hurd is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +USAGE="Usage: $0 [OPTION...] [FROM1 TO1 [FROM2 TO2 [...]] -- [COMMAND...]" +DOC="Execute COMMAND in an environment where some paths are remapped." + +while :; do + case "$1" in + --help|"-?") + echo "$USAGE" + echo "$DOC" + echo "" + echo " -?, --help Give this help list" + echo " --usage Give a short usage message" + echo " -V, --version Print program version" + exit 0;; + --usage) + echo "Usage: $0 [-V?] [--help] [--usage] [--version]" + exit 0;; + --version|-V) + echo "STANDARD_HURD_VERSION_remap_"; exit 0;; + --) + shift + break;; + -*) + echo 1>&2 "$0: unrecognized option \`$1'" + echo 1>&2 "Try \`$0 --help' or \`$0 --usage' for more information"; + exit 1;; + *) + MAPPED="$MAPPED $1" + break;; + esac +done + +if [ $# -eq 0 ]; then + set -- ${SHELL:-/bin/sh} +fi + +# 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`; $*" \ + -- / /hurd/remap $MAPPED |