summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2022-08-26 15:23:23 -0500
committerPaul Eggert <eggert@cs.ucla.edu>2022-08-26 16:39:16 -0500
commit0b74885e81b90d6ab4890b195dce99ca9109fe59 (patch)
tree6d4b3df349fa35a26b8c3bab24d469584791204a /tests
parent258d1c44e5ee7c58b28bf0000e9d737df6081885 (diff)
downloadtar-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.am1
-rw-r--r--tests/testsuite.at1
-rw-r--r--tests/xattr08.at41
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