linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Lakshmipathi.G" <Lakshmipathi.G@giis.co.in>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH]btrfs-progs: Post btrfs-convert verify permissions and acls
Date: Mon, 5 Sep 2016 21:27:36 +0200	[thread overview]
Message-ID: <20160905192736.GA2999@fedori> (raw)

Signed-off-by: Lakshmipathi.G <Lakshmipathi.G@giis.co.in>
---
 tests/common.convert | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 94 insertions(+), 1 deletion(-)

diff --git a/tests/common.convert b/tests/common.convert
index 4e3d49c..67c99b1 100644
--- a/tests/common.convert
+++ b/tests/common.convert
@@ -123,6 +123,38 @@ convert_test_gen_checksums() {
 		count=1 >/dev/null 2>&1
 	run_check_stdout $SUDO_HELPER find $TEST_MNT -type f ! -name 'image' -exec md5sum {} \+ > "$CHECKSUMTMP"
 }
+# list $TEST_MNT data set file permissions.
+# $1: path where the permissions will be stored
+convert_test_perm() {
+	local PERMTMP
+	PERMTMP="$1"
+	FILES_LIST=$(mktemp --tmpdir btrfs-progs-convert.fileslistXXXXXX)
+
+	run_check $SUDO_HELPER dd if=/dev/zero of=$TEST_MNT/test bs=$nodesize \
+		count=1 >/dev/null 2>&1
+	run_check_stdout $SUDO_HELPER find $TEST_MNT -type f ! -name 'image' -fprint $FILES_LIST
+	#Fix directory entries order.
+	sort $FILES_LIST -o $FILES_LIST
+	for file in `cat $FILES_LIST` ;do
+		run_check_stdout $SUDO_HELPER getfacl --absolute-names $file >> "$PERMTMP"
+	done
+	rm $FILES_LIST
+}
+# list acls of files on $TEST_MNT
+# $1: path where the acls will be stored
+convert_test_acl() {
+	local ACLSTMP
+	ACLTMP="$1"
+	FILES_LIST=$(mktemp --tmpdir btrfs-progs-convert.fileslistXXXXXX)
+
+	run_check_stdout $SUDO_HELPER find $TEST_MNT/acls -type f -fprint $FILES_LIST
+	#Fix directory entries order.
+	sort $FILES_LIST -o $FILES_LIST
+	for file in `cat $FILES_LIST`;do
+		run_check_stdout $SUDO_HELPER getfattr --absolute-names -d $file >> "$ACLTMP"
+	done
+	rm $FILES_LIST
+}
 
 # do conversion with given features and nodesize, fsck afterwards
 # $1: features, argument of -O, can be empty
@@ -133,15 +165,68 @@ convert_test_do_convert() {
 	run_check $TOP/btrfs-show-super -Ffa $TEST_DEV
 }
 
+# post conversion check, verify file permissions.
+# $1: file with ext permissions.
+convert_test_post_check_permissions() {
+	local EXT_PERMTMP
+	local BTRFS_PERMTMP
+
+	EXT_PERMTMP="$1"
+	BTRFS_PERMTMP=$(mktemp --tmpdir btrfs-progs-convert.permXXXXXX)
+	convert_test_perm "$BTRFS_PERMTMP"
+
+	btrfs_perm=`md5sum $BTRFS_PERMTMP | cut -f1 -d' '`
+	ext_perm=`md5sum $EXT_PERMTMP | cut -f1 -d' '`
+
+	if [ "$btrfs_perm" != "$ext_perm" ];
+	then
+		btrfs_perm_file=`md5sum $BTRFS_PERMTMP | cut -f2 -d' '`
+		ext_perm_file=`md5sum $EXT_PERMTMP | cut -f2 -d' '`
+		_fail "file permission failed. Mismatched BTRFS:$btrfs_perm_file:$btrfs_perm EXT:$ext_perm_file:$ext_perm"
+	fi
+
+	rm $BTRFS_PERMTMP
+}
+# post conversion check, compare BTRFS file acls against EXT.
+# $1: file with ext acls.
+convert_test_post_check_acl() {
+	local EXT_ACLTMP
+	local BTRFS_ACLTMP
+
+	EXT_ACLTMP="$1"
+	BTRFS_ACLTMP=$(mktemp --tmpdir btrfs-progs-convert.aclsXXXXXXX)
+	convert_test_acl "$BTRFS_ACLTMP"
+
+	btrfs_acl=`md5sum $BTRFS_ACLTMP | cut -f1 -d' '`
+	ext_acl=`md5sum $EXT_ACLTMP | cut -f1 -d' '`
+
+	if [ "$btrfs_acl" != "$ext_acl" ]
+	then
+		btrfs_acl_file=`md5sum $BTRFS_ACLTMP | cut -f2 -d' '`
+		ext_acl_file=`md5sum $EXT_ACLTMP | cut -f2 -d' '`
+		_fail "file acl failed. Mismatched BTRFS:$btrfs_acl_file:$btrfs_acl EXT:$ext_acl_file:$ext_acl"
+	fi
+
+	rm $BTRFS_ACLTMP
+}
 # post conversion checks, verify md5sums
 # $1: file with checksums
+# $2: file with permissions.
+# $3: file with acl entries.
 convert_test_post_check() {
 	local CHECKSUMTMP
+	local EXT_PERMTMP
+	local EXT_ACLTMP
+
 	CHECKSUMTMP="$1"
+	EXT_PERMTMP="$2"
+	EXT_ACLTMP="$3"
 
 	run_check_mount_test_dev
 	run_check_stdout $SUDO_HELPER md5sum -c "$CHECKSUMTMP" |
 		grep -q 'FAILED' && _fail "file validation failed"
+	convert_test_post_check_permissions "$EXT_PERMTMP"
+	convert_test_post_check_acl "$EXT_ACLTMP"
 	run_check_umount_test_dev
 }
 
@@ -161,6 +246,8 @@ convert_test() {
 	local nodesize
 	local msg
 	local CHECKSUMTMP
+	local EXT_PERMTMP
+	local EXT_ACLTMP
 
 	features="$1"
 	msg="$2"
@@ -170,13 +257,19 @@ convert_test() {
 	convert_test_prep_fs "$@"
 	populate_fs
 	CHECKSUMTMP=$(mktemp --tmpdir btrfs-progs-convert.XXXXXXXXXX)
+	EXT_PERMTMP=$(mktemp --tmpdir btrfs-progs-convert.permXXXXXX)
+	EXT_ACLTMP=$(mktemp --tmpdir btrfs-progs-convert.aclsXXXXXXX)
 	convert_test_gen_checksums "$CHECKSUMTMP"
+	convert_test_perm "$EXT_PERMTMP"
+	convert_test_acl "$EXT_ACLTMP"
 
 	run_check_umount_test_dev
 
 	convert_test_do_convert "$features" "$nodesize"
-	convert_test_post_check "$CHECKSUMTMP"
+	convert_test_post_check "$CHECKSUMTMP" "$EXT_PERMTMP" "$EXT_ACLTMP"
 	rm $CHECKSUMTMP
+	rm $EXT_PERMTMP
+	rm $EXT_ACLTMP
 
 	convert_test_post_rollback
 }
-- 
1.9.3


             reply	other threads:[~2016-09-05 19:46 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-05 19:27 Lakshmipathi.G [this message]
2016-09-06 15:16 ` [PATCH]btrfs-progs: Post btrfs-convert verify permissions and acls David Sterba
     [not found] ` <fb74fa46-43b2-80e3-a6e5-0026d8831e19@cn.fujitsu.com>
2016-09-20 16:28   ` lakshmipathi.g

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=20160905192736.GA2999@fedori \
    --to=lakshmipathi.g@giis.co.in \
    --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).