169 lines
3.5 KiB
Plaintext
Executable File
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
|