1
0
Files
2016-11-30 09:03:17 +08:00

169 lines
3.5 KiB
Plaintext
Executable File

#!@SHELL@
# This script first starts faked (the daemon), and then it will run
# the requested program with fake root privileges.
usage () {
cat - >&2 <<EOF
fakeroot, create a fake root environment.
usage: fakeroot [-l|--lib fakerootlib] [-f|--faked fakedbin]
[-i file] [-s file] [-u|--unknown-is-real]
[-b|--fd-base fd] [-h|--help] [-v|--version]
[--] [command]
EOF
exit 1
}
# strip /bin/fakeroot to find install prefix
PREFIX=@prefix@
BINDIR=@bindir@
USEABSLIBPATH=@LDPRELOADABS@
LIB=lib@fakeroot_transformed@@DLSUFFIX@
PATHS=@libdir@:${PREFIX}/lib64/libfakeroot:${PREFIX}/lib32/libfakeroot
FAKED=${BINDIR}/@faked_transformed@
FAKED_MODE="unknown-is-root"
export FAKED_MODE
libfound=no
GETOPTEST=`getopt --version`
case $GETOPTEST in
getopt*) # GNU getopt
TEMP=`getopt -l lib: -l faked: -l unknown-is-real -l fd-base: -l version -l help -- +l:f:i:s:ub:vh "$@"`
;;
*) # POSIX getopt ?
TEMP=`getopt l:f:i:s:ub:vh "$@"`
;;
esac
if test "$?" -ne 0; then
usage
fi
eval set -- "$TEMP"
FAKEDOPTS=""
PIPEIN=""
WAITINTRAP=0
while test "X$1" != "X--"; do
case "$1" in
-l|--lib)
shift
LIB=`eval echo "$1"`
PATHS=
;;
-f|--faked)
shift
FAKED="$1"
;;
-i)
shift
if test -f "$1"; then
FAKEDOPTS=$FAKEDOPTS" --load"
PIPEIN="<$1"
else
echo 1>&2 "fakeroot: database file \`$1' does not exist."
fi
;;
-s)
shift
FAKEDOPTS=$FAKEDOPTS" --save-file $1"
[ -p $1 ] || WAITINTRAP=1
;;
-u|--unknown-is-real)
FAKEDOPTS=$FAKEDOPTS" --unknown-is-real"
FAKED_MODE="unknown-is-real"
;;
-b|--fd-base)
shift
FAKEROOT_FD_BASE="$1"
;;
-v|--version)
echo "fakeroot version @VERSION@"
exit 0
;;
-h|--help)
usage
;;
esac
shift
done
shift #get rid of the '--'
# make sure the preload is available
ABSLIB=""
if [ -n "$PATHS" ]
then
for dir in `echo $PATHS | sed 's/:/ /g'`
do
if test -r "$dir/$LIB"
then
libfound=yes
ABSLIB="$dir/$LIB"
fi
done
else
if test -r "$LIB"
then
libfound=yes
ABSLIB="$LIB"
fi
fi
if test $libfound = no
then
echo >&2 "fakeroot: preload library not found, aborting."
exit 1
fi
if test -n "$FAKEROOTKEY"
then
echo >&2 "fakeroot: FAKEROOTKEY set to $FAKEROOTKEY"
echo >&2 "fakeroot: nested operation not yet supported"
exit 1
fi
unset FAKEROOTKEY
KEY_PID=`eval $FAKED $FAKEDOPTS $PIPEIN`
FAKEROOTKEY=`echo $KEY_PID|cut -d: -f1`
PID=`echo $KEY_PID|cut -d: -f2`
if [ "$WAITINTRAP" -eq 0 ]; then
trap "kill -s @signal@ $PID" EXIT INT
else
trap 'FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS" LD_PRELOAD="$LIB" /bin/ls -l / >/dev/null 2>&1; while kill -s @signal@ $PID 2>/dev/null; do sleep 0.1; done' EXIT INT
fi
if test -z "$FAKEROOTKEY" || test -z "$PID"; then
echo >&2 "fakeroot: error while starting the \`faked' daemon."
exit 1
fi
if test $USEABSLIBPATH -ne 0 ; then
LIB=$ABSLIB
fi
# Keep other library paths
if test -n "$@LDLIBPATHVAR@"; then
PATHS="$PATHS:$@LDLIBPATHVAR@"
fi
# ...and preloaded libs
if test -n "$@LDPRELOADVAR@"; then
LIB="$LIB $@LDPRELOADVAR@"
fi
export FAKEROOT_FD_BASE
if test -z "$*"; then
FAKEROOTKEY=$FAKEROOTKEY @LDLIBPATHVAR@="$PATHS" @LDEXTRAVAR@ @LDPRELOADVAR@="$LIB" ${SHELL:-/bin/sh}
RESULT=$?
else
FAKEROOTKEY=$FAKEROOTKEY @LDLIBPATHVAR@="$PATHS" @LDEXTRAVAR@ @LDPRELOADVAR@="$LIB" "$@"
RESULT=$?
fi
exit $RESULT