diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2022-08-26 15:23:23 -0500 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2022-08-26 16:39:16 -0500 |
commit | 0b74885e81b90d6ab4890b195dce99ca9109fe59 (patch) | |
tree | 6d4b3df349fa35a26b8c3bab24d469584791204a /tests | |
parent | 258d1c44e5ee7c58b28bf0000e9d737df6081885 (diff) | |
download | tar-0b74885e81b90d6ab4890b195dce99ca9109fe59.tar.gz |
Fix bug with -x --xattr read-only files
Problem reported by Kevin Raymond in:
https://bugzilla.redhat.com/show_bug.cgi?id=1886540
* src/extract.c (open_output_file): If we already created the
empty file, do not open with O_EXCL, or with O_CREAT or O_TRUNC
for that matter. Instead, use only O_NOFOLLOW to avoid some
races. When estimating current mode, use openflag & O_EXCL rather
than overwriting_old_files.
(extract_file): Also invert S_IWUSR if it’s not set.
* tests/xattr08.at: New test.
* tests/Makefile.am, tests/testsuite.at: Add it.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/testsuite.at | 1 | ||||
-rw-r--r-- | tests/xattr08.at | 41 |
3 files changed, 43 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index eff8a3bf..a0ce690b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -275,6 +275,7 @@ TESTSUITE_AT = \ xattr05.at\ xattr06.at\ xattr07.at\ + xattr08.at\ acls01.at\ acls02.at\ acls03.at\ diff --git a/tests/testsuite.at b/tests/testsuite.at index 0769e71b..a99cdeee 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -502,6 +502,7 @@ m4_include([xattr04.at]) m4_include([xattr05.at]) m4_include([xattr06.at]) m4_include([xattr07.at]) +m4_include([xattr08.at]) m4_include([acls01.at]) m4_include([acls02.at]) diff --git a/tests/xattr08.at b/tests/xattr08.at new file mode 100644 index 00000000..2beef235 --- /dev/null +++ b/tests/xattr08.at @@ -0,0 +1,41 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- +# +# Test suite for GNU tar. +# Copyright 2022 Free Software Foundation, Inc. + +# This file is part of GNU tar. + +# GNU tar is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# GNU tar is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Test description: +# Test read-only files can be extracted with --xattr. +# Per report: +# https://lists.gnu.org/r/bug-tar/2020-10/msg00001.html + +AT_SETUP([xattrs: xattrs and read-only files]) +AT_KEYWORDS([xattrs xattr08]) + +AT_TAR_CHECK([ +AT_XATTRS_PREREQ +mkdir dir dir2 +genfile --file dir/file + +setfattr -n user.test -v OurDirValue dir/file +chmod a-w dir/file + +tar --xattrs -C dir -cf archive.tar file +tar --xattrs -C dir2 -xf archive.tar +]) + +AT_CLEANUP |