rustdesk/vendor/fuser/mount_tests.sh

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