From c11c50a53f677f3977f3144b9fc5f02a3516de9f Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Fri, 19 May 2023 17:37:17 +0200 Subject: [PATCH 1/5] test: check if we can use --merge with --follow Provides coverage for #24565. --- test/units/testsuite-04.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/units/testsuite-04.sh b/test/units/testsuite-04.sh index 3c4c8afd53..6ed41f24ea 100755 --- a/test/units/testsuite-04.sh +++ b/test/units/testsuite-04.sh @@ -154,8 +154,12 @@ sleep 3 [[ ! -f "/tmp/i-lose-my-logs" ]] systemctl stop forever-print-hola +set +o pipefail # https://github.com/systemd/systemd/issues/15528 -journalctl --follow --file=/var/log/journal/*/* | head -n1 || [[ $? -eq 1 ]] +journalctl --follow --file=/var/log/journal/*/* | head -n1 | grep . +# https://github.com/systemd/systemd/issues/24565 +journalctl --follow --merge | head -n1 | grep . +set -o pipefail add_logs_filtering_override() { local unit="${1:?}" From 928733cd86d967ef6013e19d763edfc8f4713550 Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Fri, 19 May 2023 17:27:38 +0200 Subject: [PATCH 2/5] test: assorted TEST-13-NSPAWN tweaks --- test/units/testsuite-13.nspawn-oci.sh | 1 + test/units/testsuite-13.nspawn.sh | 30 +++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/test/units/testsuite-13.nspawn-oci.sh b/test/units/testsuite-13.nspawn-oci.sh index 6329d25f3b..8fa0bc4290 100755 --- a/test/units/testsuite-13.nspawn-oci.sh +++ b/test/units/testsuite-13.nspawn-oci.sh @@ -76,6 +76,7 @@ cat >"$OCI/config.json" </tmp/cred.path + systemd-nspawn --directory="$root" \ + --load-credential=cred.path:/tmp/cred.path \ + --set-credential="cred.set:hello world" \ + bash -xec '[[ "$( Date: Fri, 19 May 2023 18:42:36 +0200 Subject: [PATCH 3/5] test: check if we correctly handle invalid UTF-8 in mount stuff Provides coverage for #27611. --- .../units/testsuite-07.mount-invalid-chars.sh | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100755 test/units/testsuite-07.mount-invalid-chars.sh diff --git a/test/units/testsuite-07.mount-invalid-chars.sh b/test/units/testsuite-07.mount-invalid-chars.sh new file mode 100755 index 0000000000..617ea697c8 --- /dev/null +++ b/test/units/testsuite-07.mount-invalid-chars.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: LGPL-2.1-or-later +set -eux +set -o pipefail + +# Don't send invalid characters over dbus if a mount contains them + +at_exit() { + mountpoint -q /proc/1/mountinfo && umount /proc/1/mountinfo + [[ -e /tmp/fstab.bak ]] && mv -f /tmp/fstab /etc/fstab + rm -f /run/systemd/system/foo-*.mount + systemctl daemon-reload +} + +trap at_exit EXIT + +# Check invalid characters directly in /proc/mountinfo +# +# This is a bit tricky (and hacky), since we have to temporarily replace +# PID 1's /proc/mountinfo, but we have to keep the original mounts intact, +# otherwise systemd would unmount them on reload +TMP_MOUNTINFO="$(mktemp)" + +cp /proc/1/mountinfo "$TMP_MOUNTINFO" +# Add a mount entry with a "Unicode non-character" in it +echo -ne '69 1 252:2 / /foo/mountinfo rw,relatime shared:1 - cifs //foo\ufffebar rw,seclabel\n' >>"$TMP_MOUNTINFO" +mount --bind "$TMP_MOUNTINFO" /proc/1/mountinfo +systemctl daemon-reload +# On affected versions this would throw an error: +# Failed to get properties: Bad message +systemctl status foo-mountinfo.mount + +umount /proc/1/mountinfo +systemctl daemon-reload +rm -f "$TMP_MOUNTINFO" + +# Check invalid characters in a mount unit +# +# systemd already handles this and refuses to load the invalid string, e.g.: +# foo-fstab.mount:9: String is not UTF-8 clean, ignoring assignment: What=//localhost/foo���bar +# +# a) Unit generated from /etc/fstab +[[ -e /etc/fstab ]] && cp -f /etc/fstab /tmp/fstab.bak + +echo -ne '//localhost/foo\ufffebar /foo/fstab cifs defaults 0 0\n' >/etc/fstab +systemctl daemon-reload +[[ "$(systemctl show -P UnitFileState foo-fstab.mount)" == bad ]] + +# b) Unit generated from /etc/fstab (but the invalid character is in options) +echo -ne '//localhost/foobar /foo/fstab/opt cifs nosuid,a\ufffeb,noexec 0 0\n' >/etc/fstab +systemctl daemon-reload +[[ "$(systemctl show -P UnitFileState foo-fstab-opt.mount)" == bad ]] +rm -f /etc/fstab + +[[ -e /tmp/fstab.bak ]] && mv -f /tmp/fstab /etc/fstab +systemctl daemon-reload + +# c) Mount unit +mkdir -p /run/systemd/system +echo -ne '[Mount]\nWhat=//localhost/foo\ufffebar\nWhere=/foo/unit\nType=cifs\nOptions=noexec\n' >/run/systemd/system/foo-unit.mount +systemctl daemon-reload +[[ "$(systemctl show -P UnitFileState foo-unit.mount)" == bad ]] +rm -f /run/systemd/system/foo-unit.mount + +# d) Mount unit (but the invalid character is in Options=) +mkdir -p /run/systemd/system +echo -ne '[Mount]\nWhat=//localhost/foobar\nWhere=/foo/unit/opt\nType=cifs\nOptions=noexec,a\ufffeb,nosuid\n' >/run/systemd/system/foo-unit-opt.mount +systemctl daemon-reload +[[ "$(systemctl show -P UnitFileState foo-unit-opt.mount)" == bad ]] +rm -f /run/systemd/system/foo-unit-opt.mount From 305aa43815bb66e4c512d0f0900a0727940dfecb Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Fri, 19 May 2023 18:48:07 +0200 Subject: [PATCH 4/5] tests: run all functions with testcase_ prefix automagically --- test/units/testsuite-73.sh | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/test/units/testsuite-73.sh b/test/units/testsuite-73.sh index 39992a844b..8e2bca1005 100755 --- a/test/units/testsuite-73.sh +++ b/test/units/testsuite-73.sh @@ -51,7 +51,7 @@ restore_locale() { fi } -test_locale() { +testcase_locale() { local i output if [[ -f /etc/locale.conf ]]; then @@ -222,7 +222,7 @@ wait_vconsole_setup() { return 1 } -test_vc_keymap() { +testcase_vc_keymap() { local i output vc if [[ -z "$(localectl list-keymaps)" ]]; then @@ -292,7 +292,7 @@ test_vc_keymap() { assert_in "VC Keymap: .unset." "$(localectl)" } -test_x11_keymap() { +testcase_x11_keymap() { local output if [[ -z "$(localectl list-x11-keymap-layouts)" ]]; then @@ -431,7 +431,7 @@ XKBMODEL=pc105+inet" assert_not_in "X11 Options:" "$output" } -test_convert() { +testcase_convert() { if [[ -z "$(localectl list-keymaps)" ]]; then echo "No vconsole keymap installed, skipping test." return @@ -552,7 +552,7 @@ test_convert() { assert_not_in "X11 Options:" "$output" } -test_validate() { +testcase_validate() { if [[ -z "$(localectl list-keymaps)" ]]; then echo "No vconsole keymap installed, skipping test." return @@ -656,11 +656,18 @@ EOF export SYSTEMD_KBD_MODEL_MAP=/usr/lib/systemd/tests/testdata/test-keymap-util/kbd-model-map enable_debug -test_locale -test_vc_keymap -test_x11_keymap -test_convert -test_validate + +# Create a list of all functions prefixed with testcase_ +mapfile -t TESTCASES < <(declare -F | awk '$3 ~ /^testcase_/ {print $3;}') + +if [[ "${#TESTCASES[@]}" -eq 0 ]]; then + echo >&2 "No test cases found, this is most likely an error" + exit 1 +fi + +for testcase in "${TESTCASES[@]}"; do + "$testcase" +done touch /testok rm /failed From a9ec30ab7e494aef2a998545dd316a122c5cc65a Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Fri, 19 May 2023 19:53:55 +0200 Subject: [PATCH 5/5] test: check if we correctly handle locales with leading spaces Provides coverage for #27179. --- test/units/testsuite-73.sh | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/test/units/testsuite-73.sh b/test/units/testsuite-73.sh index 8e2bca1005..523acd8d06 100755 --- a/test/units/testsuite-73.sh +++ b/test/units/testsuite-73.sh @@ -648,6 +648,38 @@ EOF assert_in "XKBLAYOUT=us" "$output" } +locale_gen_cleanup() { + # Some running apps might keep the mount point busy, hence the lazy unmount + mountpoint -q /usr/lib/locale && umount --lazy /usr/lib/locale + [[ -e /tmp/locale.gen.bak ]] && mv -f /tmp/locale.gen.bak /etc/locale.gen + + return 0 +} + +# Issue: https://github.com/systemd/systemd/pull/27179 +testcase_locale_gen_leading_space() { + if ! command -v locale-gen >/dev/null; then + echo "No locale-gen support, skipping test." + return 0 + fi + + [[ -e /etc/locale.gen ]] && cp -f /etc/locale.gen /tmp/locale.gen.bak + trap locale_gen_cleanup RETURN + # Overmount the existing locale-gen database with an empty directory + # to force it to regenerate locales + mount -t tmpfs tmpfs /usr/lib/locale + + { + echo -e "en_US.UTF-8 UTF-8" + echo -e " en_US.UTF-8 UTF-8" + echo -e "\ten_US.UTF-8 UTF-8" + echo -e " \t en_US.UTF-8 UTF-8 \t" + } >/etc/locale.gen + + localectl set-locale de_DE.UTF-8 + localectl set-locale en_US.UTF-8 +} + : >/failed # Make sure the content of kbd-model-map is the one that the tests expect