From: Eryu Guan <guan@eryu.me>
To: fdmanana@kernel.org
Cc: fstests@vger.kernel.org, linux-btrfs@vger.kernel.org,
Filipe Manana <fdmanana@suse.com>
Subject: Re: [PATCH] fstests: add a filter for the new getcap output
Date: Sun, 11 Oct 2020 13:13:40 +0800 [thread overview]
Message-ID: <20201011051340.GW3853@desktop> (raw)
In-Reply-To: <f2980ed83a5268a96b3ff9da15c58477ff24d7a4.1602334589.git.fdmanana@suse.com>
On Sat, Oct 10, 2020 at 01:57:31PM +0100, fdmanana@kernel.org wrote:
> From: Filipe Manana <fdmanana@suse.com>
>
> Starting with version 2.41 of libcap, the output of the getcap program
> changed and therefore some existing tests fail when the installed version
> of libcap is >= 2.41 (the latest version available at the moment is 2.44).
>
> The change was made by the following commit of libcap:
>
> commit 177cd418031b1acfcf73fe3b1af9f3279828681c
> Author: Andrew G. Morgan <morgan@kernel.org>
> Date: Tue Jul 21 22:58:05 2020 -0700
>
> A more compact form for the text representation of capabilities.
>
> While this does not change anything about the supported range of
> equivalent text specifications for capabilities, as accepted by
> cap_from_text(), this does alter the preferred output format of
> cap_to_text() to be two characters shorter in most cases. That is,
> what used to be summarized as:
>
> "= cap_foo+..."
>
> is now converted to the equivalent text:
>
> "cap_foo=..."
>
> which is also more intuitive.
>
> So add a filter to change the old format to the new one and adapt existing
> tests to use it and expect the new format in the golden output.
>
> Signed-off-by: Filipe Manana <fdmanana@suse.com>
> ---
> common/filter | 28 ++++++++++++++++++++++++++++
> tests/btrfs/214 | 14 +++++++-------
> tests/generic/093 | 2 +-
> tests/generic/093.out | 2 +-
> tests/overlay/064 | 4 ++--
> tests/overlay/064.out | 4 ++--
> tests/xfs/296 | 2 +-
> tests/xfs/296.out | 4 ++--
> 8 files changed, 44 insertions(+), 16 deletions(-)
>
> diff --git a/common/filter b/common/filter
> index 2477f386..64844c98 100644
> --- a/common/filter
> +++ b/common/filter
> @@ -603,5 +603,33 @@ _filter_assert_dmesg()
> -e "s#$warn2#Intentional warnings in assfail#"
> }
>
> +# With version 2.41 of libcap, the output format of getcap changed.
> +# More specifically such change was added by the following commit:
> +#
> +# commit 177cd418031b1acfcf73fe3b1af9f3279828681c
> +# Author: Andrew G. Morgan <morgan@kernel.org>
> +# Date: Tue Jul 21 22:58:05 2020 -0700
> +#
> +# A more compact form for the text representation of capabilities.
> +#
> +# While this does not change anything about the supported range of
> +# equivalent text specifications for capabilities, as accepted by
> +# cap_from_text(), this does alter the preferred output format of
> +# cap_to_text() to be two characters shorter in most cases. That is,
> +# what used to be summarized as:
> +#
> +# "= cap_foo+..."
> +#
> +# is now converted to the equivalent text:
> +#
> +# "cap_foo=..."
> +#
> +# which is also more intuitive.
> +#
> +_filter_getcap()
> +{
> + sed -e "s/ = / /" -e "s/\+/=/"
> +}
> +
Thanks for the fix!
I' wondering if we could introduce a new _getcap helper which calls
_filter_getcap internally, so external users could just call _getcap
instead of "$GETCAP_PROG ... | _filter_getcap", like what we did in
commit 794f4594fbf4 ("fstests: filter redundant output by getfattr")
Thanks,
Eryu
> # make sure this script returns success
> /bin/true
> diff --git a/tests/btrfs/214 b/tests/btrfs/214
> index 35c4656c..6d08b991 100755
> --- a/tests/btrfs/214
> +++ b/tests/btrfs/214
> @@ -43,7 +43,7 @@ check_capabilities()
> local ret
> file="$1"
> cap="$2"
> - ret=$($GETCAP_PROG "$file")
> + ret=$($GETCAP_PROG "$file" | _filter_getcap)
> if [ -z "$ret" ]; then
> echo "$ret"
> echo "missing capability in file $file"
> @@ -84,7 +84,7 @@ full_nocap_inc_withcap_send()
> $BTRFS_UTIL_PROG subvolume snapshot -r "$FS1" "$FS1/snap_inc" >/dev/null
> $BTRFS_UTIL_PROG send -p "$FS1/snap_init" "$FS1/snap_inc" -q | \
> $BTRFS_UTIL_PROG receive "$FS2" -q
> - check_capabilities "$FS2/snap_inc/foo.bar" "cap_sys_ptrace,cap_sys_nice+ep"
> + check_capabilities "$FS2/snap_inc/foo.bar" "cap_sys_ptrace,cap_sys_nice=ep"
>
> _scratch_unmount
> }
> @@ -107,25 +107,25 @@ roundtrip_send()
> $SETCAP_PROG "cap_sys_ptrace+ep cap_sys_nice+ep" "$FS1/foo.bar"
> $BTRFS_UTIL_PROG subvolume snapshot -r "$FS1" "$FS1/snap_init" >/dev/null
> $BTRFS_UTIL_PROG send "$FS1/snap_init" -q | $BTRFS_UTIL_PROG receive "$FS2" -q
> - check_capabilities "$FS2/snap_init/foo.bar" "cap_sys_ptrace,cap_sys_nice+ep"
> + check_capabilities "$FS2/snap_init/foo.bar" "cap_sys_ptrace,cap_sys_nice=ep"
>
> # Test incremental send with different owner/group but same capabilities
> chgrp 100 "$FS1/foo.bar"
> $SETCAP_PROG "cap_sys_ptrace+ep cap_sys_nice+ep" "$FS1/foo.bar"
> $BTRFS_UTIL_PROG subvolume snapshot -r "$FS1" "$FS1/snap_inc" >/dev/null
> - check_capabilities "$FS1/snap_inc/foo.bar" "cap_sys_ptrace,cap_sys_nice+ep"
> + check_capabilities "$FS1/snap_inc/foo.bar" "cap_sys_ptrace,cap_sys_nice=ep"
> $BTRFS_UTIL_PROG send -p "$FS1/snap_init" "$FS1/snap_inc" -q | \
> $BTRFS_UTIL_PROG receive "$FS2" -q
> - check_capabilities "$FS2/snap_inc/foo.bar" "cap_sys_ptrace,cap_sys_nice+ep"
> + check_capabilities "$FS2/snap_inc/foo.bar" "cap_sys_ptrace,cap_sys_nice=ep"
>
> # Test capabilities after incremental send with different group and capabilities
> chgrp 0 "$FS1/foo.bar"
> $SETCAP_PROG "cap_sys_time+ep cap_syslog+ep" "$FS1/foo.bar"
> $BTRFS_UTIL_PROG subvolume snapshot -r "$FS1" "$FS1/snap_inc2" >/dev/null
> - check_capabilities "$FS1/snap_inc2/foo.bar" "cap_sys_time,cap_syslog+ep"
> + check_capabilities "$FS1/snap_inc2/foo.bar" "cap_sys_time,cap_syslog=ep"
> $BTRFS_UTIL_PROG send -p "$FS1/snap_inc" "$FS1/snap_inc2" -q | \
> $BTRFS_UTIL_PROG receive "$FS2" -q
> - check_capabilities "$FS2/snap_inc2/foo.bar" "cap_sys_time,cap_syslog+ep"
> + check_capabilities "$FS2/snap_inc2/foo.bar" "cap_sys_time,cap_syslog=ep"
>
> _scratch_unmount
> }
> diff --git a/tests/generic/093 b/tests/generic/093
> index 0f835e7e..ed5f6f50 100755
> --- a/tests/generic/093
> +++ b/tests/generic/093
> @@ -51,7 +51,7 @@ touch $file
>
> echo "**** Verifying that appending to file clears capabilities ****"
> $SETCAP_PROG cap_chown+ep $file
> -$GETCAP_PROG $file | filefilter
> +$GETCAP_PROG $file | filefilter | _filter_getcap
> echo data1 >> $file
> cat $file
> $GETCAP_PROG $file | filefilter
> diff --git a/tests/generic/093.out b/tests/generic/093.out
> index cb29153e..fe6dfe5c 100644
> --- a/tests/generic/093.out
> +++ b/tests/generic/093.out
> @@ -1,7 +1,7 @@
> QA output created by 093
>
> **** Verifying that appending to file clears capabilities ****
> -file = cap_chown+ep
> +file cap_chown=ep
> data1
>
> **** Verifying that appending to file doesn't clear other xattrs ****
> diff --git a/tests/overlay/064 b/tests/overlay/064
> index f5d5df1b..7ec3e420 100755
> --- a/tests/overlay/064
> +++ b/tests/overlay/064
> @@ -55,7 +55,7 @@ _scratch_mount "-o metacopy=on"
> $XFS_IO_PROG -c "stat" ${SCRATCH_MNT}/file1 >>$seqres.full
>
> # Make sure cap_setuid is still there
> -$GETCAP_PROG ${SCRATCH_MNT}/file1 | _filter_scratch
> +$GETCAP_PROG ${SCRATCH_MNT}/file1 | _filter_scratch | _filter_getcap
>
> # Trigger metadata only copy-up
> chmod 000 ${SCRATCH_MNT}/file2
> @@ -64,7 +64,7 @@ chmod 000 ${SCRATCH_MNT}/file2
> $XFS_IO_PROG -c "stat" ${SCRATCH_MNT}/file2 >>$seqres.full
>
> # Make sure cap_setuid is still there
> -$GETCAP_PROG ${SCRATCH_MNT}/file2 | _filter_scratch
> +$GETCAP_PROG ${SCRATCH_MNT}/file2 | _filter_scratch | _filter_getcap
>
> # success, all done
> status=0
> diff --git a/tests/overlay/064.out b/tests/overlay/064.out
> index cdd3064d..07f89fbd 100644
> --- a/tests/overlay/064.out
> +++ b/tests/overlay/064.out
> @@ -1,3 +1,3 @@
> QA output created by 064
> -SCRATCH_MNT/file1 = cap_setuid+ep
> -SCRATCH_MNT/file2 = cap_setuid+ep
> +SCRATCH_MNT/file1 cap_setuid=ep
> +SCRATCH_MNT/file2 cap_setuid=ep
> diff --git a/tests/xfs/296 b/tests/xfs/296
> index 915ffa0c..f67b8386 100755
> --- a/tests/xfs/296
> +++ b/tests/xfs/296
> @@ -49,7 +49,7 @@ $SETCAP_PROG cap_setgid,cap_setuid+ep $dump_dir/testfile
> echo "Checking for xattr on source file"
> getfattr --absolute-names -m user.name $dump_dir/testfile | _dir_filter
> echo "Checking for capability on source file"
> -$GETCAP_PROG $dump_dir/testfile | _dir_filter
> +$GETCAP_PROG $dump_dir/testfile | _dir_filter | _filter_getcap
> getfattr --absolute-names -m security.capability $dump_dir/testfile | _dir_filter
>
> _do_dump_file -f $tmp.df.0
> diff --git a/tests/xfs/296.out b/tests/xfs/296.out
> index c279465c..f5cc624e 100644
> --- a/tests/xfs/296.out
> +++ b/tests/xfs/296.out
> @@ -4,7 +4,7 @@ Checking for xattr on source file
> user.name
>
> Checking for capability on source file
> -DUMP_DIR/testfile = cap_setgid,cap_setuid+ep
> +DUMP_DIR/testfile cap_setgid,cap_setuid=ep
> # file: DUMP_DIR/testfile
> security.capability
>
> @@ -50,7 +50,7 @@ Checking for xattr on restored file
> user.name
>
> Checking for capability on restored file
> -RESTORE_DIR/DUMP_SUBDIR/testfile = cap_setgid,cap_setuid+ep
> +RESTORE_DIR/DUMP_SUBDIR/testfile cap_setgid,cap_setuid=ep
> # file: RESTORE_DIR/DUMP_SUBDIR/testfile
> security.capability
>
> --
> 2.28.0
next prev parent reply other threads:[~2020-10-11 5:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-10 12:57 [PATCH] fstests: add a filter for the new getcap output fdmanana
2020-10-11 5:13 ` Eryu Guan [this message]
2020-10-11 12:38 ` [PATCH v2] " fdmanana
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201011051340.GW3853@desktop \
--to=guan@eryu.me \
--cc=fdmanana@kernel.org \
--cc=fdmanana@suse.com \
--cc=fstests@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).