diff --git a/tar-1.29-create-and-xattrs-exclude.patch b/tar-1.29-create-and-xattrs-exclude.patch new file mode 100644 index 0000000..1d08607 --- /dev/null +++ b/tar-1.29-create-and-xattrs-exclude.patch @@ -0,0 +1,153 @@ +From 313fa7700598821fa35e502955cf110632d4318d Mon Sep 17 00:00:00 2001 +From: Ian McLeod +Date: Mon, 28 Nov 2016 06:56:00 +0100 +Subject: [PATCH] Bugfix - fix xattr exclude/include for archive create + +This makes archive create behavior consistent with the +documentation. Without this change xattr include/exclude options +are accepted when creating an archive but are silently ignored. + +* src/xattrs.c (xattrs_xattrs_get): Apply exclude/include mask +when fetching extended attributes +* tests/Makefile.am: Add new test case. +* tests/testsuite.at: Likewise. + +This commit includes c81a0853bb8c5c6d78a commit also. Patch given +by 'git diff c81a0853b^^..c81a0853b'. +--- + src/xattrs.c | 15 ++++++++++----- + tests/Makefile.am | 1 + + tests/testsuite.at | 1 + + tests/xattr06.at | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 68 insertions(+), 5 deletions(-) + create mode 100644 tests/xattr06.at + +diff --git a/src/xattrs.c b/src/xattrs.c +index 8e56168..d9f1f8b 100644 +--- a/src/xattrs.c ++++ b/src/xattrs.c +@@ -434,8 +434,12 @@ xattrs_clear_setup (void) + clear_mask_map (&xattrs_setup.excl); + } + +-/* get all xattrs from file given by FILE_NAME or FD (when non-zero). This +- includes all the user.*, security.*, system.*, etc. available domains */ ++static bool xattrs_masked_out (const char *kw, bool archiving); ++ ++/* get xattrs from file given by FILE_NAME or FD (when non-zero) ++ xattrs are checked against the user supplied include/exclude mask ++ if no mask is given this includes all the user.*, security.*, system.*, ++ etc. available domains */ + void + xattrs_xattrs_get (int parentfd, char const *file_name, + struct tar_stat_info *st, int fd) +@@ -480,8 +484,6 @@ xattrs_xattrs_get (int parentfd, char const *file_name, + size_t len = strlen (attr); + ssize_t aret = 0; + +- /* Archive all xattrs during creation, decide at extraction time +- * which ones are of interest/use for the target filesystem. */ + while (((fd == 0) + ? ((aret = lgetxattrat (parentfd, file_name, attr, + val, asz)) == -1) +@@ -492,7 +494,10 @@ xattrs_xattrs_get (int parentfd, char const *file_name, + } + + if (aret != -1) +- xheader_xattr_add (st, attr, val, aret); ++ { ++ if (!xattrs_masked_out (attr, true)) ++ xheader_xattr_add (st, attr, val, aret); ++ } + else if (errno != ENOATTR) + call_arg_warn ((fd == 0) ? "lgetxattrat" + : "fgetxattr", file_name); +diff --git a/tests/Makefile.am b/tests/Makefile.am +index ce9b5b2..abc17a4 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -242,6 +242,7 @@ TESTSUITE_AT = \ + xattr03.at\ + xattr04.at\ + xattr05.at\ ++ xattr06.at\ + acls01.at\ + acls02.at\ + acls03.at\ +diff --git a/tests/testsuite.at b/tests/testsuite.at +index 9a792c8..db83c80 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -439,6 +439,7 @@ m4_include([xattr02.at]) + m4_include([xattr03.at]) + m4_include([xattr04.at]) + m4_include([xattr05.at]) ++m4_include([xattr06.at]) + + m4_include([acls01.at]) + m4_include([acls02.at]) +diff --git a/tests/xattr06.at b/tests/xattr06.at +new file mode 100644 +index 0000000..691f7e7 +--- /dev/null ++++ b/tests/xattr06.at +@@ -0,0 +1,56 @@ ++# Process this file with autom4te to create testsuite. -*- Autotest -*- ++# ++# Test suite for GNU tar. ++# Copyright 2012-2014, 2016 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 . ++# ++# Test description: Test for exclude of xattr during archive creation ++# ++# Relevant mailing list thread: ++# ++# http://lists.gnu.org/archive/html/bug-tar/2016-05/msg00031.html ++ ++AT_SETUP([xattrs: exclude xattrs on create ]) ++AT_KEYWORDS([xattrs xattr06]) ++ ++AT_TAR_CHECK([ ++AT_XATTRS_PREREQ ++ ++mkdir dir ++mkdir output ++genfile --file dir/file ++ ++for attr in excluded incla inclb inclc incl_excluded ++do ++ setfattr -n user.${attr} -v value dir/file || AT_SKIP_TEST ++done ++ ++tar --xattrs-include=user.incl'*' --xattrs-exclude=user.incl_excluded -cf archive.tar -C dir . ++tar -xf archive.tar --xattrs-include=user.incl[[ab]] --xattrs-exclude=user.inclb -C output ++ ++getfattr -d output/file | grep -v \ ++ -e excluded \ ++ -e inclb \ ++ -e inclc > filtered ++getfattr -d output/file > full ++# if they differ then the attribute is still present ++diff filtered full ++], ++[0], ++[]) ++ ++AT_CLEANUP +-- +2.9.3 + diff --git a/tar.spec b/tar.spec index c2991d9..88e8c39 100644 --- a/tar.spec +++ b/tar.spec @@ -22,6 +22,7 @@ Patch4: tar-1.28-atime-rofs.patch Patch5: tar-1.28-update-with-change-directory.patch Patch9: tar-1.28-document-exclude-mistakes.patch Patch11: tar-1.28-sparse-inf-loops.patch +Patch12: tar-1.29-create-and-xattrs-exclude.patch # run "make check" by default %bcond_without check @@ -123,6 +124,7 @@ fi %changelog * Mon Nov 28 2016 Pavel Raiskup - 1.29-3 - revert back some docs +- fix --create to use --xattrs-include/exclude (rhbz#1341787) * Mon Nov 7 2016 Peter Robinson 1.29-2 - Drop large docs, minor specs cleanups