From 6bc89f5f85fd3877d8f46724bbf4baba607f2cb0 Mon Sep 17 00:00:00 2001 From: Bernhard Voelker Date: Sat, 20 Oct 2018 02:00:11 +0200 Subject: [PATCH] test: avoid FP in chroot-credentials.sh for different group list order On my openSUSE:Tumbleweed system, I get a false positive test failure in the above 'check-root' test because the group lists inside and outside the chroot have a different order: ++ chroot --userspec=berny / id -G ++ id -G berny + test '100 454 457 480 492' = '100 480 492 457 454' + fail=1 * tests/misc/chroot-credentials.sh (num_sort): Add function to sort group lists, and use it in the test cases which test multiple groups. --- tests/misc/chroot-credentials.sh | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/misc/chroot-credentials.sh b/tests/misc/chroot-credentials.sh index 89d68451ef..0c156820e2 100755 --- a/tests/misc/chroot-credentials.sh +++ b/tests/misc/chroot-credentials.sh @@ -61,6 +61,9 @@ if ! test "$HAVE_SETGROUPS"; then Exit $fail fi +# Change all whitespaces to newlines, then sort the input. +# Use for tests with more groups in 'id' output. +num_sort() { tr -s ' ' '\n' | sort -n; } # Verify that there are no additional groups. id_G_after_chroot=$( @@ -70,12 +73,12 @@ id_G_after_chroot=$( test "$id_G_after_chroot" = $NON_ROOT_GID || fail=1 # Verify that when specifying only the user name we get all their groups -test "$(chroot --userspec=$NON_ROOT_USERNAME / id -G)" = \ - "$(id -G $NON_ROOT_USERNAME)" || fail=1 +test "$(chroot --userspec=$NON_ROOT_USERNAME / id -G | num_sort)" = \ + "$(id -G $NON_ROOT_USERNAME | num_sort)" || fail=1 # Ditto with trailing : on the user name. -test "$(chroot --userspec=$NON_ROOT_USERNAME: / id -G)" = \ - "$(id -G $NON_ROOT_USERNAME)" || fail=1 +test "$(chroot --userspec=$NON_ROOT_USERNAME: / id -G | num_sort)" = \ + "$(id -G $NON_ROOT_USERNAME | num_sort)" || fail=1 # Verify that when specifying only the user and clearing supplemental groups # that we only get the primary group @@ -83,8 +86,8 @@ test "$(chroot --userspec=$NON_ROOT_USERNAME --groups='' / id -G)" = \ $NON_ROOT_GID || fail=1 # Verify that when specifying only the UID we get all their groups -test "$(chroot --userspec=$NON_ROOT_UID / id -G)" = \ - "$(id -G $NON_ROOT_USERNAME)" || fail=1 +test "$(chroot --userspec=$NON_ROOT_UID / id -G | num_sort)" = \ + "$(id -G $NON_ROOT_USERNAME | num_sort)" || fail=1 # Verify that when specifying only the user and clearing supplemental groups # that we only get the primary group. Note this variant with prepended '+' -- 2.47.2