161 lines
4.2 KiB
Bash
Executable File
161 lines
4.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -x
|
|
|
|
exit_handler() {
|
|
exit "${TEST_EXIT_STATUS:-1}"
|
|
}
|
|
trap exit_handler TERM
|
|
trap 'kill $(jobs -p); exit $TEST_EXIT_STATUS' INT EXIT
|
|
|
|
export RUST_BACKTRACE=1
|
|
|
|
NC="\e[39m"
|
|
GREEN="\e[32m"
|
|
RED="\e[31m"
|
|
|
|
function run_allow_root_test {
|
|
useradd fusertest1
|
|
useradd fusertest2
|
|
DIR=$(su fusertest1 -c "mktemp --directory")
|
|
cargo build --example hello --features libfuse,abi-7-30 > /dev/null 2>&1
|
|
su fusertest1 -c "target/debug/examples/hello $DIR --allow-root" &
|
|
FUSE_PID=$!
|
|
sleep 2
|
|
|
|
echo "mounting at $DIR"
|
|
# Make sure FUSE was successfully mounted
|
|
mount | grep hello || exit 1
|
|
|
|
if [[ $(su root -c "cat ${DIR}/hello.txt") = "Hello World!" ]]; then
|
|
echo -e "$GREEN OK root can read $NC"
|
|
else
|
|
echo -e "$RED FAILED root can't read $NC"
|
|
export TEST_EXIT_STATUS=1
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $(su fusertest1 -c "cat ${DIR}/hello.txt") = "Hello World!" ]]; then
|
|
echo -e "$GREEN OK owner can read $NC"
|
|
else
|
|
echo -e "$RED FAILED owner can't read $NC"
|
|
export TEST_EXIT_STATUS=1
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $(su fusertest2 -c "cat ${DIR}/hello.txt") = "Hello World!" ]]; then
|
|
echo -e "$RED FAILED other user can read $NC"
|
|
export TEST_EXIT_STATUS=1
|
|
exit 1
|
|
else
|
|
echo -e "$GREEN OK other user can't read $NC"
|
|
fi
|
|
|
|
kill $FUSE_PID
|
|
wait $FUSE_PID
|
|
}
|
|
|
|
function test_no_user_allow_other {
|
|
sed -i '/user_allow_other/d' /etc/fuse.conf
|
|
|
|
useradd fusertestnoallow
|
|
DIR=$(su fusertestnoallow -c "mktemp --directory")
|
|
DATA_DIR=$(su fusertestnoallow -c "mktemp --directory")
|
|
cargo build --example simple $1 > /dev/null 2>&1
|
|
su fusertestnoallow -c "target/debug/examples/simple -vvv --data-dir $DATA_DIR --mount-point $DIR"
|
|
exitCode=$?
|
|
if [[ $exitCode -eq 2 ]]; then
|
|
echo -e "$GREEN OK Detected lack of user_allow_other: $2 $NC"
|
|
else
|
|
echo -e "$RED FAILED Did not detect lack of user_allow_other: $2 $NC"
|
|
export TEST_EXIT_STATUS=1
|
|
exit 1
|
|
fi
|
|
|
|
# Make sure the FUSE mount did not mount
|
|
if [[ $(mount | grep hello) ]]; then
|
|
umount $DIR
|
|
echo -e "$RED FAILED Mount exists: $2 $NC"
|
|
export TEST_EXIT_STATUS=1
|
|
exit 1
|
|
else
|
|
echo -e "$GREEN OK Mount does not exist: $2 $NC"
|
|
fi
|
|
|
|
# Restore fuse.conf
|
|
echo 'user_allow_other' >> /etc/fuse.conf
|
|
}
|
|
|
|
function run_test {
|
|
DIR=$(mktemp --directory)
|
|
cargo build --example hello $1 > /dev/null 2>&1
|
|
cargo run --example hello $1 -- $DIR $3 &
|
|
FUSE_PID=$!
|
|
sleep 2
|
|
|
|
echo "mounting at $DIR"
|
|
# Make sure FUSE was successfully mounted
|
|
mount | grep hello || exit 1
|
|
|
|
if [[ $(cat ${DIR}/hello.txt) = "Hello World!" ]]; then
|
|
echo -e "$GREEN OK $2 $3 $NC"
|
|
else
|
|
echo -e "$RED FAILED $2 $3 $NC"
|
|
export TEST_EXIT_STATUS=1
|
|
exit 1
|
|
fi
|
|
|
|
kill $FUSE_PID
|
|
wait $FUSE_PID
|
|
|
|
if [[ "$3" == "--auto_unmount" ]]; then
|
|
# Make sure the FUSE mount automatically unmounted
|
|
if [[ $(mount | grep hello) ]]; then
|
|
echo -e "$RED FAILED Mount not cleaned up: $2 $3 $NC"
|
|
export TEST_EXIT_STATUS=1
|
|
exit 1
|
|
else
|
|
echo -e "$GREEN OK Mount cleaned up: $2 $3 $NC"
|
|
fi
|
|
else
|
|
umount $DIR
|
|
fi
|
|
}
|
|
|
|
apt update
|
|
apt install -y fuse
|
|
echo 'user_allow_other' >> /etc/fuse.conf
|
|
|
|
run_test --no-default-features 'without libfuse, with fusermount'
|
|
run_test --no-default-features 'without libfuse, with fusermount' --auto_unmount
|
|
test_no_user_allow_other --no-default-features 'without libfuse, with fusermount'
|
|
|
|
apt remove --purge -y fuse
|
|
apt autoremove -y
|
|
apt install -y fuse3
|
|
echo 'user_allow_other' >> /etc/fuse.conf
|
|
|
|
run_test --no-default-features 'without libfuse, with fusermount3'
|
|
run_test --no-default-features 'without libfuse, with fusermount3' --auto_unmount
|
|
test_no_user_allow_other --no-default-features 'without libfuse, with fusermount3'
|
|
|
|
apt remove --purge -y fuse3
|
|
apt autoremove -y
|
|
apt install -y libfuse-dev pkg-config fuse
|
|
echo 'user_allow_other' >> /etc/fuse.conf
|
|
|
|
run_test --features=libfuse 'with libfuse'
|
|
run_test --features=libfuse 'with libfuse' --auto_unmount
|
|
|
|
apt remove --purge -y libfuse-dev fuse
|
|
apt autoremove -y
|
|
apt install -y libfuse3-dev fuse3
|
|
echo 'user_allow_other' >> /etc/fuse.conf
|
|
|
|
run_test --features=libfuse,abi-7-30 'with libfuse3'
|
|
run_test --features=libfuse,abi-7-30 'with libfuse3' --auto_unmount
|
|
|
|
run_allow_root_test
|
|
|
|
export TEST_EXIT_STATUS=0
|