diff mbox series

chown: fix ownership format string

Message ID 20220425082051.2wpffz2ek3jvtd6z@xzhouw.hosts.qa.psi.rdu2.redhat.com (mailing list archive)
State New, archived
Headers show
Series chown: fix ownership format string | expand

Commit Message

Murphy Zhou April 25, 2022, 8:20 a.m. UTC
After coreutils rebasing to 9.1, chown(1) behavior changes:
"
   chown and chroot now warn about usages like "chown root.root f",
   which have the nonstandard and long-obsolete "." separator that
   causes problems on platforms where user names contain ".".
   Applications should use ":" instead of ".".
"

https://lwn.net/Articles/891574/

With this behavior change, old format of ownership string will cause
warning like this:
"
+chown: warning: '.' should be ':': '1000.1000'
+.chown: warning: '.' should be ':': '1100.1100'
+.chown: warning: '.' should be ':': '1200.1200'
+.chown: warning: '.' should be ':': '1300.1300'
+.chown: warning: '.' should be ':': '1400.1400'
"

The new format works fine with old versions of coreutils.

Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
---
 common/dump       | 6 +++---
 tests/generic/099 | 4 ++--
 tests/generic/237 | 2 +-
 tests/generic/318 | 2 +-
 tests/generic/380 | 2 +-
 tests/generic/597 | 6 +++---
 tests/generic/598 | 6 +++---
 7 files changed, 14 insertions(+), 14 deletions(-)

Comments

Zorro Lang April 25, 2022, 7:49 p.m. UTC | #1
On Mon, Apr 25, 2022 at 04:20:51PM +0800, Murphy Zhou wrote:
> After coreutils rebasing to 9.1, chown(1) behavior changes:
> "
>    chown and chroot now warn about usages like "chown root.root f",
>    which have the nonstandard and long-obsolete "." separator that
>    causes problems on platforms where user names contain ".".
>    Applications should use ":" instead of ".".
> "
> 
> https://lwn.net/Articles/891574/
> 
> With this behavior change, old format of ownership string will cause
> warning like this:
> "
> +chown: warning: '.' should be ':': '1000.1000'
> +.chown: warning: '.' should be ':': '1100.1100'
> +.chown: warning: '.' should be ':': '1200.1200'
> +.chown: warning: '.' should be ':': '1300.1300'
> +.chown: warning: '.' should be ':': '1400.1400'
> "
> 
> The new format works fine with old versions of coreutils.
> 
> Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
> ---

Thanks for catching this new change early, this looks like a reasonable fix.
So chown would like to abandon "." separator in one day. As the ":" is
recommended by chown now, let xfstests follow it.

Reviewed-by: Zorro Lang <zlang@kernel.org>

>  common/dump       | 6 +++---
>  tests/generic/099 | 4 ++--
>  tests/generic/237 | 2 +-
>  tests/generic/318 | 2 +-
>  tests/generic/380 | 2 +-
>  tests/generic/597 | 6 +++---
>  tests/generic/598 | 6 +++---
>  7 files changed, 14 insertions(+), 14 deletions(-)
> 
> diff --git a/common/dump b/common/dump
> index ea16d442..44a9a708 100644
> --- a/common/dump
> +++ b/common/dump
> @@ -526,7 +526,7 @@ _do_create_dumpdir_fill()
>  	    fi
>  	fi
>  	if [ -n "$owner" -a -n "$group" ]; then
> -	    chown $owner.$group $file
> +	    chown $owner:$group $file
>  	fi
>  	if [ -n "$perms" ]; then
>  	    chmod $perms $file
> @@ -691,10 +691,10 @@ _do_create_dump_symlinks()
>  	fi
>  
>  	if [ -n "$owner" -a -n "$group" ]; then
> -	    chown $owner.$group $file
> +	    chown $owner:$group $file
>  	fi
>  	if [ -n "$owner" -a -n "$group" ]; then
> -	    chown -h $owner.$group $file-link
> +	    chown -h $owner:$group $file-link
>  	fi
>  	if [ -n "$perms" ]; then
>  	    chmod $perms $file
> diff --git a/tests/generic/099 b/tests/generic/099
> index 6ba04dd8..5cdac9ab 100755
> --- a/tests/generic/099
> +++ b/tests/generic/099
> @@ -74,7 +74,7 @@ EOF
>  chmod u=rwx file1
>  chmod g=rw- file1
>  chmod o=r-- file1
> -chown $acl1.$acl2 file1
> +chown $acl1:$acl2 file1
>  _acl_ls file1
>  
>  echo ""
> @@ -264,7 +264,7 @@ do
>  	touch a/$i/mumble
>  done
>  popd >/dev/null
> -chown -R 12345.54321 root
> +chown -R 12345:54321 root
>  echo "Change #1..."
>  _runas -u 12345 -g 54321 -- chacl -r u::rwx,g::-w-,o::--x root
>  find root -print | sort | xargs chacl -l
> diff --git a/tests/generic/237 b/tests/generic/237
> index 93eafd84..f17e32e4 100755
> --- a/tests/generic/237
> +++ b/tests/generic/237
> @@ -38,7 +38,7 @@ mkdir $seq.dir1
>  cd $seq.dir1
>  
>  touch file1
> -chown $acl1.$acl1 file1
> +chown $acl1:$acl1 file1
>  
>  echo "Expect to FAIL"
>  _runas -u $acl2 -g $acl2 -- setfacl -m u::rwx file1 2>&1 | sed 's/^setfacl: \/.*file1: Operation not permitted$/setfacl: file1: Operation not permitted/'
> diff --git a/tests/generic/318 b/tests/generic/318
> index 5edc9f35..ed50818a 100755
> --- a/tests/generic/318
> +++ b/tests/generic/318
> @@ -72,7 +72,7 @@ _scratch_mkfs       >>$seqres.full 2>&1 || _fail "mkfs failed"
>  _scratch_mount
>  
>  touch $file
> -chown $acl1.$acl1 $file
> +chown $acl1:$acl1 $file
>  
>  # set acls from init_user_ns, to be checked from inside the userns
>  setfacl -n -m u:$acl2:rw,g:$acl2:r $file
> diff --git a/tests/generic/380 b/tests/generic/380
> index 4993dad0..21b789dd 100755
> --- a/tests/generic/380
> +++ b/tests/generic/380
> @@ -35,7 +35,7 @@ _chowning_file()
>  	let count=$start
>  	while (( count < limit )); do
>  	    touch $file
> -	    chown $count.$count $file
> +	    chown $count:$count $file
>  	    echo -n "."
>  	    let count=count+delta
>  	done
> diff --git a/tests/generic/597 b/tests/generic/597
> index aa93237e..ff985ca6 100755
> --- a/tests/generic/597
> +++ b/tests/generic/597
> @@ -46,8 +46,8 @@ HARDLINK_PROTECTION=`sysctl -n fs.protected_hardlinks`
>  test_symlink()
>  {
>  	ln -s $TEST_DIR/$seq/target $TEST_DIR/$seq/sticky_dir/symlink
> -	chown $OTHER.$OTHER $TEST_DIR/$seq/sticky_dir
> -	chown $OWNER.$OWNER $TEST_DIR/$seq/sticky_dir/symlink
> +	chown $OTHER:$OTHER $TEST_DIR/$seq/sticky_dir
> +	chown $OWNER:$OWNER $TEST_DIR/$seq/sticky_dir/symlink
>  	# If we can read the target, we followed the link
>  	_user_do "cat $TEST_DIR/$seq/sticky_dir/symlink" | _filter_test_dir
>  	rm -f $TEST_DIR/$seq/sticky_dir/symlink
> @@ -55,7 +55,7 @@ test_symlink()
>  
>  test_hardlink()
>  {
> -	chown $OWNER.$OWNER $TEST_DIR/$seq/target
> +	chown $OWNER:$OWNER $TEST_DIR/$seq/target
>  	chmod go-rw $TEST_DIR/$seq/target
>  	_user_do "ln $TEST_DIR/$seq/target $TEST_DIR/$seq/sticky_dir/hardlink" \
>  		| _filter_test_dir
> diff --git a/tests/generic/598 b/tests/generic/598
> index 160e6d4b..769c1b1a 100755
> --- a/tests/generic/598
> +++ b/tests/generic/598
> @@ -64,16 +64,16 @@ setup_tree()
>  	mkdir -p $TEST_DIR/$seq
>  	mkdir -p $TEST_DIR/$seq/sticky_dir
>  	chmod 1777 $TEST_DIR/$seq/sticky_dir
> -	chown $USER2.$USER2 $TEST_DIR/$seq/sticky_dir
> +	chown $USER2:$USER2 $TEST_DIR/$seq/sticky_dir
>  
>  	# Create file & fifo in that dir owned by $USER1, and open
>  	# normal read/write privs for world & group
>  	$XFS_IO_PROG -c "open -f $TEST_DIR/$seq/sticky_dir/file"
> -	chown $USER1.$USER1 $TEST_DIR/$seq/sticky_dir/file
> +	chown $USER1:$USER1 $TEST_DIR/$seq/sticky_dir/file
>  	chmod o+rw $TEST_DIR/$seq/sticky_dir/file
>  
>  	mkfifo $TEST_DIR/$seq/sticky_dir/fifo
> -	chown $USER1.$USER1 $TEST_DIR/$seq/sticky_dir/fifo
> +	chown $USER1:$USER1 $TEST_DIR/$seq/sticky_dir/fifo
>  	chmod o+rw $TEST_DIR/$seq/sticky_dir/fifo
>  }
>  
> -- 
> 2.27.0
>
diff mbox series

Patch

diff --git a/common/dump b/common/dump
index ea16d442..44a9a708 100644
--- a/common/dump
+++ b/common/dump
@@ -526,7 +526,7 @@  _do_create_dumpdir_fill()
 	    fi
 	fi
 	if [ -n "$owner" -a -n "$group" ]; then
-	    chown $owner.$group $file
+	    chown $owner:$group $file
 	fi
 	if [ -n "$perms" ]; then
 	    chmod $perms $file
@@ -691,10 +691,10 @@  _do_create_dump_symlinks()
 	fi
 
 	if [ -n "$owner" -a -n "$group" ]; then
-	    chown $owner.$group $file
+	    chown $owner:$group $file
 	fi
 	if [ -n "$owner" -a -n "$group" ]; then
-	    chown -h $owner.$group $file-link
+	    chown -h $owner:$group $file-link
 	fi
 	if [ -n "$perms" ]; then
 	    chmod $perms $file
diff --git a/tests/generic/099 b/tests/generic/099
index 6ba04dd8..5cdac9ab 100755
--- a/tests/generic/099
+++ b/tests/generic/099
@@ -74,7 +74,7 @@  EOF
 chmod u=rwx file1
 chmod g=rw- file1
 chmod o=r-- file1
-chown $acl1.$acl2 file1
+chown $acl1:$acl2 file1
 _acl_ls file1
 
 echo ""
@@ -264,7 +264,7 @@  do
 	touch a/$i/mumble
 done
 popd >/dev/null
-chown -R 12345.54321 root
+chown -R 12345:54321 root
 echo "Change #1..."
 _runas -u 12345 -g 54321 -- chacl -r u::rwx,g::-w-,o::--x root
 find root -print | sort | xargs chacl -l
diff --git a/tests/generic/237 b/tests/generic/237
index 93eafd84..f17e32e4 100755
--- a/tests/generic/237
+++ b/tests/generic/237
@@ -38,7 +38,7 @@  mkdir $seq.dir1
 cd $seq.dir1
 
 touch file1
-chown $acl1.$acl1 file1
+chown $acl1:$acl1 file1
 
 echo "Expect to FAIL"
 _runas -u $acl2 -g $acl2 -- setfacl -m u::rwx file1 2>&1 | sed 's/^setfacl: \/.*file1: Operation not permitted$/setfacl: file1: Operation not permitted/'
diff --git a/tests/generic/318 b/tests/generic/318
index 5edc9f35..ed50818a 100755
--- a/tests/generic/318
+++ b/tests/generic/318
@@ -72,7 +72,7 @@  _scratch_mkfs       >>$seqres.full 2>&1 || _fail "mkfs failed"
 _scratch_mount
 
 touch $file
-chown $acl1.$acl1 $file
+chown $acl1:$acl1 $file
 
 # set acls from init_user_ns, to be checked from inside the userns
 setfacl -n -m u:$acl2:rw,g:$acl2:r $file
diff --git a/tests/generic/380 b/tests/generic/380
index 4993dad0..21b789dd 100755
--- a/tests/generic/380
+++ b/tests/generic/380
@@ -35,7 +35,7 @@  _chowning_file()
 	let count=$start
 	while (( count < limit )); do
 	    touch $file
-	    chown $count.$count $file
+	    chown $count:$count $file
 	    echo -n "."
 	    let count=count+delta
 	done
diff --git a/tests/generic/597 b/tests/generic/597
index aa93237e..ff985ca6 100755
--- a/tests/generic/597
+++ b/tests/generic/597
@@ -46,8 +46,8 @@  HARDLINK_PROTECTION=`sysctl -n fs.protected_hardlinks`
 test_symlink()
 {
 	ln -s $TEST_DIR/$seq/target $TEST_DIR/$seq/sticky_dir/symlink
-	chown $OTHER.$OTHER $TEST_DIR/$seq/sticky_dir
-	chown $OWNER.$OWNER $TEST_DIR/$seq/sticky_dir/symlink
+	chown $OTHER:$OTHER $TEST_DIR/$seq/sticky_dir
+	chown $OWNER:$OWNER $TEST_DIR/$seq/sticky_dir/symlink
 	# If we can read the target, we followed the link
 	_user_do "cat $TEST_DIR/$seq/sticky_dir/symlink" | _filter_test_dir
 	rm -f $TEST_DIR/$seq/sticky_dir/symlink
@@ -55,7 +55,7 @@  test_symlink()
 
 test_hardlink()
 {
-	chown $OWNER.$OWNER $TEST_DIR/$seq/target
+	chown $OWNER:$OWNER $TEST_DIR/$seq/target
 	chmod go-rw $TEST_DIR/$seq/target
 	_user_do "ln $TEST_DIR/$seq/target $TEST_DIR/$seq/sticky_dir/hardlink" \
 		| _filter_test_dir
diff --git a/tests/generic/598 b/tests/generic/598
index 160e6d4b..769c1b1a 100755
--- a/tests/generic/598
+++ b/tests/generic/598
@@ -64,16 +64,16 @@  setup_tree()
 	mkdir -p $TEST_DIR/$seq
 	mkdir -p $TEST_DIR/$seq/sticky_dir
 	chmod 1777 $TEST_DIR/$seq/sticky_dir
-	chown $USER2.$USER2 $TEST_DIR/$seq/sticky_dir
+	chown $USER2:$USER2 $TEST_DIR/$seq/sticky_dir
 
 	# Create file & fifo in that dir owned by $USER1, and open
 	# normal read/write privs for world & group
 	$XFS_IO_PROG -c "open -f $TEST_DIR/$seq/sticky_dir/file"
-	chown $USER1.$USER1 $TEST_DIR/$seq/sticky_dir/file
+	chown $USER1:$USER1 $TEST_DIR/$seq/sticky_dir/file
 	chmod o+rw $TEST_DIR/$seq/sticky_dir/file
 
 	mkfifo $TEST_DIR/$seq/sticky_dir/fifo
-	chown $USER1.$USER1 $TEST_DIR/$seq/sticky_dir/fifo
+	chown $USER1:$USER1 $TEST_DIR/$seq/sticky_dir/fifo
 	chmod o+rw $TEST_DIR/$seq/sticky_dir/fifo
 }