#!/bin/env bash # # Copyright (c) 2013 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. FAKE_SYSCALLS_LIB=`pwd`/libfakesyscalls.so FAKE_SYSCALLS_DBG=/tmp/fake_syscalls.dbg TEST_EXE=`pwd`/fakesyscalls-exercise # build up the redirection envrionment variable FILE_REDIRECTIONS_PRELOAD=: FILE_REDIRECTIONS_PRELOAD=${FILE_REDIRECTIONS_PRELOAD}:/tmp/foo1=/tmp/foo2 FILE_REDIRECTIONS_PRELOAD=${FILE_REDIRECTIONS_PRELOAD}:/tmp/foo3 FILE_REDIRECTIONS_PRELOAD=${FILE_REDIRECTIONS_PRELOAD}:/tmp/foo4=. FILE_REDIRECTIONS_PRELOAD=${FILE_REDIRECTIONS_PRELOAD}:/tmp/foo5=/tmp/foo6 export FILE_REDIRECTIONS_PRELOAD=$FILE_REDIRECTIONS_PRELOAD rm -f /tmp/foo1 /tmp/foo2 /tmp/foo3 /tmp/foo4 /tmp/foo5 /tmp/foo6 /tmp/foo99 rm -f ${FAKE_SYSCALLS_DBG} # Successful redirection echo LD_PRELOAD=${FAKE_SYSCALLS_LIB} ${TEST_EXE} /tmp/foo1 /tmp/foo2 LD_PRELOAD=${FAKE_SYSCALLS_LIB} ${TEST_EXE} /tmp/foo1 /tmp/foo2 echo echo ${FAKE_SYSCALLS_DBG} cat ${FAKE_SYSCALLS_DBG} echo # Malformed map --> unsuccessful redirection echo LD_PRELOAD=${FAKE_SYSCALLS_LIB} ${TEST_EXE} /tmp/foo3 /tmp/foo3 LD_PRELOAD=${FAKE_SYSCALLS_LIB} ${TEST_EXE} /tmp/foo3 /tmp/foo3 echo echo ${FAKE_SYSCALLS_DBG} cat ${FAKE_SYSCALLS_DBG} echo # Relative path in map --> unsuccessful redirection echo LD_PRELOAD=${FAKE_SYSCALLS_LIB} ${TEST_EXE} /tmp/foo4 /tmp/foo4 LD_PRELOAD=${FAKE_SYSCALLS_LIB} ${TEST_EXE} /tmp/foo4 /tmp/foo4 echo echo ${FAKE_SYSCALLS_DBG} cat ${FAKE_SYSCALLS_DBG} echo # Does not exist in map --> no redirection. echo LD_PRELOAD=${FAKE_SYSCALLS_LIB} ${TEST_EXE} /tmp/foo99 /tmp/foo99 LD_PRELOAD=${FAKE_SYSCALLS_LIB} ${TEST_EXE} /tmp/foo99 /tmp/foo99 echo echo ${FAKE_SYSCALLS_DBG} cat ${FAKE_SYSCALLS_DBG} echo pushd . >/dev/null cd /tmp >/dev/null # Relative path in open() --> unsuccessful redirection echo LD_PRELOAD=${FAKE_SYSCALLS_LIB} ${TEST_EXE} foo5 foo5 LD_PRELOAD=${FAKE_SYSCALLS_LIB} ${TEST_EXE} foo5 foo5 if test -e /tmp/foo6 then echo Fail: /tmp/foo6 should not have been created. foo6: cat /tmp/foo6 fi echo echo ${FAKE_SYSCALLS_DBG} cat ${FAKE_SYSCALLS_DBG} echo popd >/dev/null