PWD = $(shell pwd)
TESTROOT = $(PWD)/../..
include ${TESTROOT}/include/common.makefile
ifeq "$(OS_NAME)" "iPhoneOS"
RUN_AS_USER = login -f -l mobile
else
RUN_AS_USER =
endif
all-check: all check
check:
./main || echo "FAIL rpath-indirect-suid absolute path"
${RUN_AS_USER} ${PASS_IFF_FAILURE} "rpath-indirect-suid @loader_path path" "rpath-indirect-suid @loader_path path" $(PWD)/main_bad1
${RUN_AS_USER} ${PASS_IFF_FAILURE} "rpath-indirect-suid relative path" "rpath-indirect-suid relative path" $(PWD)/main_bad2
${RUN_AS_USER} ${PASS_IFF_FAILURE} "rpath-indirect-suid @rpath spoof" "rpath-indirect-suid @rpath spoof" $(PWD)/main_bad3
all: main main_bad1 main_bad2 main_bad3
hide/hole/libbar.dylib : bar.c
mkdir -p hide/hole
${CC} bar.c -dynamiclib -o hide/hole/libbar.dylib -install_name @rpath/libbar.dylib
libfoo.dylib : foo.c hide/hole/libbar.dylib
${CC} foo.c -dynamiclib -o "${PWD}/libfoo.dylib" hide/hole/libbar.dylib
main : main.c libfoo.dylib
${CC} -I${TESTROOT}/include main.c -o main libfoo.dylib -Wl,-rpath -Wl,${PWD}/hide/hole
sudo chown root main
sudo chmod 4755 main
main_bad1 : main.c libfoo.dylib
${CC} -I${TESTROOT}/include main.c -DDEFAULT_FAIL -o main_bad1 libfoo.dylib -Wl,-rpath -Wl,@loader_path/hide/hole
sudo chown root main_bad1
sudo chmod 4755 main_bad1
main_bad2 : main.c libfoo.dylib
${CC} -I${TESTROOT}/include main.c -DDEFAULT_FAIL -o main_bad2 libfoo.dylib -Wl,-rpath -Wl,hide/hole
sudo chown root main_bad2
sudo chmod 4755 main_bad2
main_bad3 : main.c libfoo.dylib
${CC} -I${TESTROOT}/include main.c -DDEFAULT_FAIL -o main_bad3 libfoo.dylib
ln -s hide/hole @rpath
sudo chown root main_bad3
sudo chmod 4755 main_bad3
clean:
${RM} ${RMFLAGS} *~ main main_bad1 main_bad2 main_bad3 hide libfoo.dylib @rpath