summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2024-11-14 10:08:35 +0100
committerYu Watanabe <watanabe.yu+github@gmail.com>2024-11-14 10:08:50 +0100
commita65f008784a74257c8bd7f010dc398f2e891a3ee (patch)
tree16fc2a9d244bac574de76b6fd537958d7b482387 /test
parentnspawn: ignore failure in creating /dev/net/tun when --private-network is uns... (diff)
downloadsystemd-a65f008784a74257c8bd7f010dc398f2e891a3ee.tar.xz
systemd-a65f008784a74257c8bd7f010dc398f2e891a3ee.zip
TEST-13-NSPAWN: add test case for /dev/net/tun
For issue #35116.
Diffstat (limited to 'test')
-rwxr-xr-xtest/TEST-13-NSPAWN/test.sh2
-rwxr-xr-xtest/units/TEST-13-NSPAWN.nspawn.sh52
2 files changed, 54 insertions, 0 deletions
diff --git a/test/TEST-13-NSPAWN/test.sh b/test/TEST-13-NSPAWN/test.sh
index b1d9fb6c53..5d21f340c3 100755
--- a/test/TEST-13-NSPAWN/test.sh
+++ b/test/TEST-13-NSPAWN/test.sh
@@ -19,6 +19,8 @@ test_append_files() {
instmods mac80211_hwsim
# for IPMasquerade=
instmods "=net/netfilter"
+ # For /dev/net/tun
+ instmods tun
generate_module_dependencies
# For unprivileged mountfsd.
if command -v openssl >/dev/null 2>&1; then
diff --git a/test/units/TEST-13-NSPAWN.nspawn.sh b/test/units/TEST-13-NSPAWN.nspawn.sh
index ae6088a00e..664962f9a0 100755
--- a/test/units/TEST-13-NSPAWN.nspawn.sh
+++ b/test/units/TEST-13-NSPAWN.nspawn.sh
@@ -1214,4 +1214,56 @@ testcase_unpriv_fuse() {
bash -c 'cat <>/dev/fuse' 2>&1)" == *'cat: -: Operation not permitted' ]]
}
+test_tun() {
+ local expect=${1?}
+ local exists=${2?}
+ local command command_exists command_not_exists
+ shift 2
+
+ command_exists='[[ -c /dev/net/tun ]]; [[ "$(stat /dev/net/tun --format=%u)" == 0 ]]; [[ "$(stat /dev/net/tun --format=%g)" == 0 ]]'
+ command_not_exists='[[ ! -e /dev/net/tun ]]'
+
+ if [[ "$exists" == 0 ]]; then
+ command="$command_not_exists"
+ else
+ command="$command_exists"
+ fi
+
+ systemd-nspawn "$@" bash -xec "$command_exists"
+
+ # check if the owner of the host device is unchanged, see issue #34243.
+ [[ "$(stat /dev/net/tun --format=%u)" == 0 ]]
+ [[ "$(stat /dev/net/tun --format=%g)" == 0 ]]
+
+ # Without DeviceAllow= for /dev/net/tun, see issue #35116.
+ assert_rc \
+ "$expect" \
+ systemd-run --pty --wait -p DevicePolicy=closed -p DeviceAllow="char-pts rw" \
+ systemd-nspawn "$@" bash -xec "$command"
+
+ [[ "$(stat /dev/net/tun --format=%u)" == 0 ]]
+ [[ "$(stat /dev/net/tun --format=%g)" == 0 ]]
+}
+
+testcase_dev_net_tun() {
+ local root
+
+ if [[ ! -c /dev/net/tun ]]; then
+ echo "/dev/net/tun does not exist, skipping tests"
+ return 0
+ fi
+
+ root="$(mktemp -d /var/lib/machines/TEST-13-NSPAWN.tun.XXX)"
+ create_dummy_container "$root"
+
+ test_tun 0 1 --ephemeral --directory="$root" --private-users=no
+ test_tun 0 1 --ephemeral --directory="$root" --private-users=yes
+ test_tun 0 0 --ephemeral --directory="$root" --private-users=pick
+ test_tun 0 1 --ephemeral --directory="$root" --private-users=no --private-network
+ test_tun 0 1 --ephemeral --directory="$root" --private-users=yes --private-network
+ test_tun 1 0 --ephemeral --directory="$root" --private-users=pick --private-network
+
+ rm -fr "$root"
+}
+
run_testcases