File: fakeroot.in

package info (click to toggle)
fakeroot 1.25.3-1.1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, sid
  • size: 968 kB
  • sloc: ansic: 4,804; sh: 442; makefile: 186; perl: 14
file content (184 lines) | stat: -rwxr-xr-x 4,178 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#!/bin/sh

# 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
}

stderr ()
{
  local i
  for i
  do
      echo >&2 "fakeroot: $i"
  done
}

fatal ()
{
  stderr "$@"
  exit 1
}

# strip /bin/fakeroot to find install prefix
FAKEROOT_PREFIX=@prefix@
FAKEROOT_BINDIR=@bindir@

USEABSLIBPATH=@LDPRELOADABS@
FAKEROOT_LIB=lib@fakeroot_transformed@@DLSUFFIX@
PATHS=@libdir@:${FAKEROOT_PREFIX}/lib64/libfakeroot:${FAKEROOT_PREFIX}/lib32/libfakeroot
FAKED=${FAKEROOT_BINDIR}/@faked_transformed@

FAKED_MODE="unknown-is-root"
export FAKED_MODE

libfound=no

GETOPTTEST=`getopt -T`
if test "$?" -eq 4; then # GNU getopt
    FAKE_TEMP=`getopt -l lib: -l faked: -l unknown-is-real -l fd-base: -l version -l help -- +l:f:i:s:ub:vh "$@"`
else
    FAKE_TEMP=`getopt l:f:i:s:ub:vh "$@"`
fi

if test "$?" -ne 0; then
  usage
fi

eval set -- "$FAKE_TEMP"

FAKEDOPTS=""
PIPEIN=""
WAITINTRAP=0

while test "X$1" != "X--"; do
  case "$1" in
    -l|--lib)
       shift
       FAKEROOT_LIB=`eval echo "$1"`
       PATHS=
       ;;
    -f|--faked)
       shift
       FAKED="$1"
       ;;
    -i)
       shift
       if test -f "$1"; then
         FAKEDOPTS=$FAKEDOPTS" --load"
         PIPEIN="<$1"
       else
         stderr "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/$FAKEROOT_LIB"
	then
	    libfound=yes
	    ABSLIB="$dir/$FAKEROOT_LIB"
	fi
    done
else
    if test -r "$FAKEROOT_LIB"
    then
	libfound=yes
	ABSLIB="$FAKEROOT_LIB"
    fi
fi

if test $libfound = no
then
    fatal "preload library \`$FAKEROOT_LIB' not found, aborting."
fi

if test -n "$FAKEROOTKEY"
then
    fatal "FAKEROOTKEY set to $FAKEROOTKEY" \
          "nested operation not yet supported"
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
  @MACOSX_FALSE@trap 'FAKEROOTKEY=$FAKEROOTKEY @LDLIBPATHVAR@="$PATHS" @LDPRELOADVAR@="$FAKEROOT_LIB" /bin/ls -l / >/dev/null 2>&1; while kill -s @signal@ $PID 2>/dev/null; do sleep 0.1; done' EXIT INT
  @MACOSX_TRUE@trap 'FAKEROOTKEY=$FAKEROOTKEY @LDPRELOADVAR@="$FAKEROOT_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
  fatal "error while starting the \`faked' daemon."
fi

if test $USEABSLIBPATH -ne 0 ; then
  FAKEROOT_LIB=$ABSLIB
fi
# Keep other library paths
if test -n "$@LDLIBPATHVAR@"; then
  PATHS="$PATHS:$@LDLIBPATHVAR@"
fi
# ...and preloaded libs
if test -n "$@LDPRELOADVAR@"; then
  FAKEROOT_LIB="$FAKEROOT_LIB:$@LDPRELOADVAR@"
fi

export FAKEROOT_FD_BASE

if test -z "$*"; then
  @MACOSX_FALSE@FAKEROOTKEY=$FAKEROOTKEY @LDLIBPATHVAR@="$PATHS" @LDEXTRAVAR@ @LDPRELOADVAR@="$FAKEROOT_LIB" ${SHELL:-/bin/sh}
  @MACOSX_TRUE@FAKEROOTKEY=$FAKEROOTKEY @LDEXTRAVAR@ @LDPRELOADVAR@="$FAKEROOT_LIB" ${SHELL:-/bin/sh}
  RESULT=$?
else
  @MACOSX_FALSE@FAKEROOTKEY=$FAKEROOTKEY @LDLIBPATHVAR@="$PATHS" @LDEXTRAVAR@ @LDPRELOADVAR@="$FAKEROOT_LIB" "$@"
  @MACOSX_TRUE@FAKEROOTKEY=$FAKEROOTKEY @LDEXTRAVAR@ @LDPRELOADVAR@="$FAKEROOT_LIB" "$@"
  RESULT=$?
fi

exit $RESULT

# Local Variables:
# mode: shell-script
# End: