diff --git a/.gitignore b/.gitignore index 013a3aa..f9724b8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -/tar-1.28.tar.xz -/tar-1.28.tar.xz.sig +/tar-1.29.tar.xz +/tar-1.29.tar.xz.sig diff --git a/sources b/sources index da0b8d3..474669a 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -49b6306167724fe48f419a33a5beb857 tar-1.28.tar.xz -a84d018c092514a65ba1c270a68826c3 tar-1.28.tar.xz.sig +a1802fec550baaeecff6c381629653ef tar-1.29.tar.xz +34219e18adf27b7b0ce3548013ec09d8 tar-1.29.tar.xz.sig diff --git a/tar-1.28-T-matchflags.patch b/tar-1.28-T-matchflags.patch deleted file mode 100644 index 84338ac..0000000 --- a/tar-1.28-T-matchflags.patch +++ /dev/null @@ -1,283 +0,0 @@ -From: Sergey Poznyakoff -Date: Fri, 26 Jun 2015 13:59:35 +0200 -Subject: [PATCH 10/10] Bugfix: entries read from the -T file did not get - proper matching_flag. - -(upstream commit 163e96a0e619a900eab6de827c7c5749ecc9d3f2) - -Resolves: #1230762 - -diff --git a/src/common.h b/src/common.h -index edf787c..3cc2011 100644 ---- a/src/common.h -+++ b/src/common.h -@@ -725,7 +725,7 @@ int uname_to_uid (char const *uname, uid_t *puid); - void name_init (void); - void name_add_name (const char *name, int matching_flags); - void name_add_dir (const char *name); --void name_add_file (const char *name, int term); -+void name_add_file (const char *name, int term, int matching_flags); - void name_term (void); - const char *name_next (int change_dirs); - void name_gather (void); -diff --git a/src/names.c b/src/names.c -index fe3bcad..7c79a00 100644 ---- a/src/names.c -+++ b/src/names.c -@@ -258,6 +258,21 @@ name_elt_alloc (void) - return elt; - } - -+static struct name_elt * -+name_elt_alloc_matflags (int matflags) -+{ -+ static int prev_flags = 0; /* FIXME: Or EXCLUDE_ANCHORED? */ -+ struct name_elt *ep = name_elt_alloc (); -+ if (prev_flags != matflags) -+ { -+ ep->type = NELT_FMASK; -+ ep->v.matching_flags = matflags; -+ prev_flags = matflags; -+ ep = name_elt_alloc (); -+ } -+ return ep; -+} -+ - static void - name_list_adjust (void) - { -@@ -276,20 +291,13 @@ name_list_advance (void) - free (elt); - } - --/* Add to name_array the file NAME with fnmatch options MATCHING_FLAGS */ -+ -+/* Add to name_array the file NAME with fnmatch options MATFLAGS */ - void --name_add_name (const char *name, int matching_flags) -+name_add_name (const char *name, int matflags) - { -- static int prev_flags = 0; /* FIXME: Or EXCLUDE_ANCHORED? */ -- struct name_elt *ep = name_elt_alloc (); -+ struct name_elt *ep = name_elt_alloc_matflags (matflags); - -- if (prev_flags != matching_flags) -- { -- ep->type = NELT_FMASK; -- ep->v.matching_flags = matching_flags; -- prev_flags = matching_flags; -- ep = name_elt_alloc (); -- } - ep->type = NELT_NAME; - ep->v.name = name; - name_count++; -@@ -305,9 +313,10 @@ name_add_dir (const char *name) - } - - void --name_add_file (const char *name, int term) -+name_add_file (const char *name, int term, int matflags) - { -- struct name_elt *ep = name_elt_alloc (); -+ struct name_elt *ep = name_elt_alloc_matflags (matflags); -+ - ep->type = NELT_FILE; - ep->v.file.name = name; - ep->v.file.term = term; -@@ -389,6 +398,15 @@ add_file_id (const char *filename) - file_id_list = p; - return 0; - } -+ -+/* Chop trailing slashes. */ -+static void -+chopslash (char *str) -+{ -+ char *p = str + strlen (str) - 1; -+ while (p > str && ISSLASH (*p)) -+ *p-- = '\0'; -+} - - enum read_file_list_state /* Result of reading file name from the list file */ - { -@@ -428,7 +446,7 @@ read_name_from_file (struct name_elt *ent) - if (counter == name_buffer_length) - name_buffer = x2realloc (name_buffer, &name_buffer_length); - name_buffer[counter] = 0; -- -+ chopslash (name_buffer); - return (counter == 0 && c == EOF) ? file_list_end : file_list_success; - } - -@@ -518,7 +536,6 @@ copy_name (struct name_elt *ep) - { - const char *source; - size_t source_len; -- char *cursor; - - source = ep->v.name; - source_len = strlen (source); -@@ -536,11 +553,7 @@ copy_name (struct name_elt *ep) - name_buffer = xmalloc(name_buffer_length + 2); - } - strcpy (name_buffer, source); -- -- /* Zap trailing slashes. */ -- cursor = name_buffer + strlen (name_buffer) - 1; -- while (cursor > name_buffer && ISSLASH (*cursor)) -- *cursor-- = '\0'; -+ chopslash (name_buffer); - } - - -@@ -553,7 +566,8 @@ static int matching_flags; /* exclude_fnmatch options */ - the request to change to the given directory. - - Entries of type NELT_FMASK cause updates of the matching_flags -- value. */ -+ value. -+*/ - static struct name_elt * - name_next_elt (int change_dirs) - { -diff --git a/src/tar.c b/src/tar.c -index 79b0a10..6fa43d1 100644 ---- a/src/tar.c -+++ b/src/tar.c -@@ -1640,7 +1640,7 @@ parse_opt (int key, char *arg, struct argp_state *state) - break; - - case 'T': -- name_add_file (arg, filename_terminator); -+ name_add_file (arg, filename_terminator, MAKE_INCL_OPTIONS (args)); - /* Indicate we've been given -T option. This is for backward - compatibility only, so that `tar cfT archive /dev/null will - succeed */ -diff --git a/tests/Makefile.am b/tests/Makefile.am -index 2a2e1cc..fc06c3b 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -43,6 +43,8 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac - - TESTSUITE_AT = \ - T-cd.at\ -+ T-dir00.at\ -+ T-dir01.at\ - T-empty.at\ - T-null.at\ - T-rec.at\ -diff --git a/tests/T-dir00.at b/tests/T-dir00.at -new file mode 100644 -index 0000000..7f89fcf ---- /dev/null -+++ b/tests/T-dir00.at -@@ -0,0 +1,45 @@ -+# Process this file with autom4te to create testsuite. -*- Autotest -*- -+# -+# Test suite for GNU tar. -+# Copyright 2014 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 . -+ -+# Tar 1.27 and 1.28 did not extract files under directory memberes listed -+# in the file read by --file-from. -+# -+# Reported-by: Jean-Louis Martineau -+# References: <541AE02C.2050008@zmanda.com>, -+# http://lists.gnu.org/archive/html/bug-tar/2014-09/msg00006.html -+ -+AT_SETUP([recursive extraction from --files-from]) -+AT_KEYWORDS([files-from extract T-dir T-dir00]) -+AT_TAR_CHECK([ -+mkdir dir -+genfile -f dir/file1 -+genfile -f dir/file2 -+tar cf archive dir -+rm -rf dir -+echo dir > list -+tar xfTv archive list -+], -+[0], -+[dir/ -+dir/file1 -+dir/file2 -+]) -+AT_CLEANUP -+ -diff --git a/tests/T-dir01.at b/tests/T-dir01.at -new file mode 100644 -index 0000000..155a373 ---- /dev/null -+++ b/tests/T-dir01.at -@@ -0,0 +1,45 @@ -+# Process this file with autom4te to create testsuite. -*- Autotest -*- -+# -+# Test suite for GNU tar. -+# Copyright 2014 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 . -+ -+# Tar 1.27 and 1.28 did not remove trailing slashes from file names -+# obtained with the --file-from option. -+# -+# Reported-by: Jean-Louis Martineau -+# References: <541AE02C.2050008@zmanda.com>, -+# http://lists.gnu.org/archive/html/bug-tar/2014-09/msg00006.html -+ -+AT_SETUP([trailing slash in --files-from]) -+AT_KEYWORDS([files-from extract T-dir T-dir01]) -+AT_TAR_CHECK([ -+mkdir dir -+genfile -f dir/file1 -+genfile -f dir/file2 -+tar cf archive dir -+rm -rf dir -+echo dir/ > list -+tar xfTv archive list -+], -+[0], -+[dir/ -+dir/file1 -+dir/file2 -+]) -+AT_CLEANUP -+ -diff --git a/tests/testsuite.at b/tests/testsuite.at -index f1ce58f..789f16c 100644 ---- a/tests/testsuite.at -+++ b/tests/testsuite.at -@@ -205,6 +205,8 @@ m4_include([T-empty.at]) - m4_include([T-null.at]) - m4_include([T-zfile.at]) - m4_include([T-nonl.at]) -+m4_include([T-dir00.at]) -+m4_include([T-dir01.at]) - - AT_BANNER([Various options]) - m4_include([indexfile.at]) diff --git a/tar-1.28-T-recursion-tests.patch b/tar-1.28-T-recursion-tests.patch deleted file mode 100644 index 59b42cd..0000000 --- a/tar-1.28-T-recursion-tests.patch +++ /dev/null @@ -1,157 +0,0 @@ -From: rpm-build -Date: Fri, 26 Jun 2015 14:10:30 +0200 -Subject: [PATCH 11/11] tests: better test --{,no-}recursion options - -Downstream patch, proposed: -http://www.mail-archive.com/bug-tar@gnu.org/msg04803.html - -Related: #1230762 -diff --git a/tests/Makefile.am b/tests/Makefile.am -index fc06c3b..670291b 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -48,6 +48,7 @@ TESTSUITE_AT = \ - T-empty.at\ - T-null.at\ - T-rec.at\ -+ T-recurse.at\ - T-zfile.at\ - T-nonl.at\ - T-mult.at\ -diff --git a/tests/T-recurse.at b/tests/T-recurse.at -new file mode 100644 -index 0000000..7d5efe8 ---- /dev/null -+++ b/tests/T-recurse.at -@@ -0,0 +1,96 @@ -+# Process this file with autom4te to create testsuite. -*- Autotest -*- -+ -+# Test suite for GNU tar. -+# Copyright 2015 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 . -+ -+# Description: Test interaction of --recursion and --no-recursion options -+# together with --files-from option. This is complementary to recurs02.at test -+# case. References: -+# -+# http://lists.gnu.org/archive/html/bug-tar/2015-06/msg00006.html -+ -+AT_SETUP([files-from & recurse: toggle]) -+AT_KEYWORDS([recurse T-recurse files-from]) -+ -+AT_TAR_CHECK([ -+mkdir directory1 directory2 -+touch directory1/file directory2/file -+ -+AT_DATA([F1],[--no-recursion -+directory1/ -+--recursion -+directory2/ -+]) -+ -+AT_DATA([F2A],[directory1/ -+]) -+ -+AT_DATA([F2B],[directory2/ -+]) -+ -+a=archive -+tar cf "$a" --files-from F1 -+tar tf "$a" -+ -+a=archive2 -+tar cf "$a" --no-recursion -T F2A --recursion -T F2B -+tar tf "$a" -+], -+[0], -+[directory1/ -+directory2/ -+directory2/file -+directory1/ -+directory2/ -+directory2/file -+]) -+ -+AT_CLEANUP -+ -+# Tar is not yet ready to properly handle --{,no-}recursion options if those are -+# set both as program arguments and from within --files-from file. The problem -+# is that content of -T argument is parsed too late; solution to this would -+# require additional NELT_* type implemented to allow handling of --recursion -+# option similarly to how the -C option is processed now. -+ -+AT_SETUP([toggle --recursion (not) from -T]) -+AT_KEYWORDS([recurse T-recurse T-recurse2 files-from]) -+ -+AT_TAR_CHECK([ -+mkdir directory1 directory2 -+touch directory1/file directory2/file -+ -+AT_DATA([F1],[--no-recursion -+directory1/ -+]) -+ -+AT_DATA([F2],[directory2/ -+]) -+ -+tar cf archive -T F1 --recursion -T F2 -+tar tf archive -+ -+AT_XFAIL_IF([true]) -+], -+[0], -+[directory1/ -+directory2/ -+directory2/file -+]) -+ -+AT_CLEANUP -diff --git a/tests/recurs02.at b/tests/recurs02.at -index 93aa2c1..00e1d66 100644 ---- a/tests/recurs02.at -+++ b/tests/recurs02.at -@@ -37,11 +37,18 @@ tar --create --file archive \ - --no-recursion directory1 \ - --recursion directory2 || exit 1 - tar tf archive -+tar cf archive directory1 directory2 -+tar tf archive \ -+ --no-recursion directory1 \ -+ --recursion directory2 || exit 1 - ], - [0], - [directory1/ - directory2/ - directory2/file -+directory1/ -+directory2/ -+directory2/file - ]) - - AT_CLEANUP -diff --git a/tests/testsuite.at b/tests/testsuite.at -index 789f16c..e3da356 100644 ---- a/tests/testsuite.at -+++ b/tests/testsuite.at -@@ -200,6 +200,7 @@ AT_BANNER([The -T option]) - m4_include([T-mult.at]) - m4_include([T-nest.at]) - m4_include([T-rec.at]) -+m4_include([T-recurse.at]) - m4_include([T-cd.at]) - m4_include([T-empty.at]) - m4_include([T-null.at]) diff --git a/tar-1.28-T-tests-false-failure.patch b/tar-1.28-T-tests-false-failure.patch deleted file mode 100644 index f5d444b..0000000 --- a/tar-1.28-T-tests-false-failure.patch +++ /dev/null @@ -1,47 +0,0 @@ -From: Pavel Raiskup -Date: Wed, 17 Dec 2014 07:22:28 +0100 -Subject: [PATCH 12/12] testsuite: sort (otherwise random) expected output - -Downstream, proposed: -http://www.mail-archive.com/bug-tar@gnu.org/msg04798.html - -diff --git a/tests/T-dir00.at b/tests/T-dir00.at -index 7f89fcf..8ff6ba8 100644 ---- a/tests/T-dir00.at -+++ b/tests/T-dir00.at -@@ -28,13 +28,14 @@ - AT_SETUP([recursive extraction from --files-from]) - AT_KEYWORDS([files-from extract T-dir T-dir00]) - AT_TAR_CHECK([ -+AT_SORT_PREREQ - mkdir dir - genfile -f dir/file1 - genfile -f dir/file2 - tar cf archive dir - rm -rf dir - echo dir > list --tar xfTv archive list -+tar xfTv archive list | sort - ], - [0], - [dir/ -diff --git a/tests/T-dir01.at b/tests/T-dir01.at -index 155a373..db92292 100644 ---- a/tests/T-dir01.at -+++ b/tests/T-dir01.at -@@ -28,13 +28,14 @@ - AT_SETUP([trailing slash in --files-from]) - AT_KEYWORDS([files-from extract T-dir T-dir01]) - AT_TAR_CHECK([ -+AT_SORT_PREREQ - mkdir dir - genfile -f dir/file1 - genfile -f dir/file2 - tar cf archive dir - rm -rf dir - echo dir/ > list --tar xfTv archive list -+tar xfTv archive list | sort - ], - [0], - [dir/ diff --git a/tar-1.28-big-sparse-listing.patch b/tar-1.28-big-sparse-listing.patch deleted file mode 100644 index 3a14d43..0000000 --- a/tar-1.28-big-sparse-listing.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 6400976234810f4de138ee692756072f5beaa64d Mon Sep 17 00:00:00 2001 -From: Pavel Raiskup -Date: Mon, 28 Jul 2014 08:18:53 +0200 -Subject: [PATCH 9/9] --posix & big (effective) sparse files can not be listed - -Upstram bugreports (still downstream): -http://www.mail-archive.com/bug-tar%40gnu.org/msg03909.html -http://www.mail-archive.com/bug-tar@gnu.org/msg04489.html - -Related: #916995 - ---- - src/list.c | 1 - - src/sparse.c | 4 ++-- - src/tar.h | 4 ++++ - src/xheader.c | 28 +++++++++++++++++++++++++++- - 4 files changed, 33 insertions(+), 4 deletions(-) - -diff --git a/src/list.c b/src/list.c -index 0c7a740..ce9ce4b 100644 ---- a/src/list.c -+++ b/src/list.c -@@ -700,7 +700,6 @@ decode_header (union block *header, struct tar_stat_info *stat_info, - } - } - -- stat_info->archive_file_size = stat_info->stat.st_size; - xheader_decode (stat_info); - - if (sparse_member_p (stat_info)) -diff --git a/src/sparse.c b/src/sparse.c -index 53c1868..c8bec6b 100644 ---- a/src/sparse.c -+++ b/src/sparse.c -@@ -892,7 +892,7 @@ static struct tar_sparse_optab const star_optab = { - * 1.0 - - Starting from this version, the exact sparse format version is specified -- explicitely in the header using the following variables: -+ explicitly in the header using the following variables: - - GNU.sparse.major Major version - GNU.sparse.minor Minor version -@@ -921,7 +921,7 @@ static struct tar_sparse_optab const star_optab = { - directory. Then, using a simple program it would be possible to expand the - file to its original form even without GNU tar. - -- Bu default, v.1.0 archives are created. To use other formats, -+ By default, v.1.0 archives are created. To use other formats, - --sparse-version option is provided. Additionally, v.0.0 can be obtained - by deleting GNU.sparse.map from 0.1 format: --sparse-version 0.1 - --pax-option delete=GNU.sparse.map -diff --git a/src/tar.h b/src/tar.h -index 3d69399..73cd11e 100644 ---- a/src/tar.h -+++ b/src/tar.h -@@ -327,6 +327,10 @@ struct tar_stat_info - size_t sparse_map_size; /* Size of the sparse map */ - struct sp_array *sparse_map; - -+ off_t real_size; /* The real size of sparse file */ -+ int real_size_set; /* True when GNU.sparse.realsize is set in -+ archived file */ -+ - size_t xattr_map_size; /* Size of the xattr map */ - struct xattr_array *xattr_map; - -diff --git a/src/xheader.c b/src/xheader.c -index c94c6d3..0be83a4 100644 ---- a/src/xheader.c -+++ b/src/xheader.c -@@ -742,6 +742,20 @@ decx (void *data, char const *keyword, char const *value, size_t size) - keyword)); - } - -+static void -+xheader_fixup_file_size (struct tar_stat_info *st) -+{ -+ /* The effective size is in st_size, regardless of whether the file is sparse -+ * or not. */ -+ st->archive_file_size = st->stat.st_size; -+ -+ /* For non-sparse files we are done (effective size == real size). But for -+ sparse files we must take the GNU.sparse.realsize header into account (if -+ present, its content was parsed by sparse_size_decoder already. */ -+ if (st->real_size_set) -+ st->stat.st_size = st->real_size; -+} -+ - void - xheader_decode (struct tar_stat_info *st) - { -@@ -755,6 +769,11 @@ xheader_decode (struct tar_stat_info *st) - continue; - } - run_override_list (keyword_override_list, st); -+ -+ /* Here we know for sure that we have "effective" size stored into -+ st->stat->st_size (this may be set by read_header directly from regular pax -+ header, or overwritten by size_decoder() from extended pax header). */ -+ xheader_fixup_file_size (st); - } - - static void -@@ -1360,7 +1379,14 @@ sparse_size_decoder (struct tar_stat_info *st, - { - uintmax_t u; - if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword)) -- st->stat.st_size = u; -+ { -+ /* do not set the st->stat.st_size here immediately because there may be -+ the 'size' extended header following 'GNU.sparse.realsize' which would -+ override our setup. We must handle size (and real size) of sparse -+ files once whole xheader is read */ -+ st->real_size_set = 1; -+ st->real_size = u; -+ } - } - - static void --- -1.9.3 - diff --git a/tar-1.28-docu-xattrs.patch b/tar-1.28-docu-xattrs.patch deleted file mode 100644 index 394c4b6..0000000 --- a/tar-1.28-docu-xattrs.patch +++ /dev/null @@ -1,380 +0,0 @@ -From 914bb84cb71ebb63c40bc27f4d017cc0a0a39bf2 Mon Sep 17 00:00:00 2001 -From: rpm-build -Date: Mon, 28 Jul 2014 08:15:14 +0200 -Subject: [PATCH 6/9] Add documentation which was not yet pushed upstream - -Upstream bugreport: -http://lists.gnu.org/archive/html/bug-tar/2012-08/msg00012.html -http://www.mail-archive.com/bug-tar@gnu.org/msg04135.html - -Related: #996753 - ---- - doc/tar.texi | 276 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 276 insertions(+) - -diff --git a/doc/tar.texi b/doc/tar.texi -index db79824..a000f3f 100644 ---- a/doc/tar.texi -+++ b/doc/tar.texi -@@ -161,6 +161,7 @@ How to Create Archives - How to List Archives - - * list dir:: -+* List Extended Attributes:: - - How to Extract Members from an Archive - -@@ -1491,6 +1492,7 @@ for a detailed discussion of globbing patterns and related - - @menu - * list dir:: -+* List Extended Attributes:: - @end menu - - @node list dir -@@ -1521,6 +1523,116 @@ drwxrwxrwx myself/user 0 1990-05-31 21:49 practice/ - When you use a directory name as a file name argument, @command{tar} acts on - all the files (including sub-directories) in that directory. - -+@node List Extended Attributes -+@unnumberedsubsec Listing xattrs, POSIX ACLs and SELinux context -+ -+From upstream GNU tar 1.26.9, tar is able to store, extract and list extended -+file attributes. Listing of those attributes is then active only in verbose and -+double-verbose mode. -+ -+This section exercises how to list attributes on examples. Lets start with -+simple verbose mode. This output is inspired by GNU @command{ls -l} command -+output. -+ -+@itemize @bullet -+@item -+Show only pure extended attributes. -+ -+@smallexample -+$ tar --xattrs --list -v archive.tar -+-rw-rwxr-- user/group 0 2012-08-08 15:15 acls.txt -+-rw-rw-r--* user/group 0 2012-08-08 15:15 xattrs.txt -+@end smallexample -+ -+Note the asterisk on the third line! It reflects the situation that the file -+'xattrs.txt' has some extended attribute set. The default mode (same as if you -+are extracting extended attributes) shows information only about extended -+attributes from 'user.*' domain. Anyway, feel free to change the sensitivity -+using @option{--xattrs-include} or @option{--xattrs-exclude} options. -+ -+@item Show only POSIX ACLs - the character you should look for is '+': -+ -+@smallexample -+$ tar --acls --list -v archive.tar -+-rw-rwxr--+ praiskup/praiskup 0 2012-08-08 15:15 acls.txt -+-rw-rw-r-- praiskup/praiskup 0 2012-08-08 15:15 xattrs.txt -+@end smallexample -+ -+@item Show only SELinux - the key character is '.': -+ -+@smallexample -+$ tar --selinux --list -v archive.tar -+-rw-rw-r--. praiskup/praiskup 0 2012-08-08 15:16 selinux_only.txt -+-rw-rw-r-- praiskup/praiskup 0 2012-08-08 15:15 xattrs.txt -+@end smallexample -+ -+@item -+Show info about ACLs, SELinux and general extended attributes together: -+ -+@smallexample -+$ tar --selinux --acls --xattrs --list -v archive.tar -+-rw-rw-r--. praiskup/praiskup 0 2012-08-08 15:16 selinux_only.txt -+-rw-rwxr--+ praiskup/praiskup 0 2012-08-08 15:15 acls.txt -+-rw-rw-r--. praiskup/praiskup 0 2012-08-08 15:15 xattrs.txt -+@end smallexample -+ -+In this case, the priority of character is '+' > '.' > '*'. You don't see the -+general extended attributes flag ('*' character) on this example because it is -+hidden by '.' (meaning that the file has SELinux context set). -+ -+@end itemize -+ -+The example of double verbose mode is here. In this output the single verbose -+characters '.', '+' and '*' are also present after the permission string. -+ -+@smallexample -+$ tar --xattrs --selinux --acls -tvvf archive.tar -+-rw-rw-r--. praiskup/praiskup 0 2012-08-08 15:16 selinux_only.txt -+ s: unconfined_u:object_r:user_tmp_t:s0 -+-rw-rwxr--+ praiskup/praiskup 0 2012-08-08 15:15 acls.txt -+ s: unconfined_u:object_r:user_tmp_t:s0 -+ a: user::rw-,user:tester:rwx,group::rw-,mask::rwx,other::r-- -+-rw-rw-r--. praiskup/praiskup 0 2012-08-08 15:15 xattrs.txt -+ s: unconfined_u:object_r:user_tmp_t:s0 -+ x: 12 user.xattr -+ x: 12 user.we_like_tar -+@end smallexample -+ -+This mode extends tar's output with additional lines beginning with -+distinguishing characters - 's' for SELinux context, 'a' for POSIX Access -+Control Lists and 'x' for generic extended attributes. -+ -+In this format, POSIX ACLs are written in SHORT TEXT FORM as specified in manual -+page @command{man 5 acl}. -+ -+Use the @option{--xattrs-include} again if you want to print other than default -+'user.*' extended attributes domain: -+ -+@smallexample -+$ tar --xattrs --xattrs-include='*' --acls --selinux -tvvf archive.tar -+-rw-rw-r--. praiskup/praiskup 0 2012-08-08 15:16 selinux_only.txt -+ s: unconfined_u:object_r:user_tmp_t:s0 -+ x: 36 security.selinux -+-rw-rwxr--+ praiskup/praiskup 0 2012-08-08 15:15 acls.txt -+ s: unconfined_u:object_r:user_tmp_t:s0 -+ a: user::rw-,user:tester:rwx,group::rw-,mask::rwx,other::r-- -+ x: 36 security.selinux -+ x: 44 system.posix_acl_access -+-rw-rw-r--. praiskup/praiskup 0 2012-08-08 15:15 xattrs.txt -+ s: unconfined_u:object_r:user_tmp_t:s0 -+ x: 36 security.selinux -+ x: 12 user.xattr -+ x: 12 user.we_like_tar -+@end smallexample -+ -+As is in @pxref{Option Summary} section described, tar by default stores all -+extended attributes that are available (not only 'user.*' domain). It means -+that the SELinux context and POSIX ACLs (because they are implemented using the -+generic extended attributes on usual file system) may be stored twice sometimes -+-- firstly in "raw" file system binary format and secondly in more portable way -+-- using appropriate system calls (invoked by @command{tar} options -+@option{--selinux} and @option{--acls}). -+ - @node extract - @section How to Extract Members from an Archive - @cindex Extraction -@@ -2368,6 +2480,10 @@ Normally when creating an archive, @command{tar} strips an initial - treats names specially if they have initial @samp{/} or internal - @samp{..}. This option disables that behavior. @xref{absolute}. - -+@opsummary{acls} -+@item --acls -+Causes @command{tar} to store/restore/list POSIX ACL's. @xref{Attributes}. -+ - @opsummary{after-date} - @item --after-date - -@@ -2953,6 +3069,11 @@ contents have changed (as opposed to just @option{--newer}, which will - also back up files for which any status information has - changed). @xref{after}. - -+@opsummary{no-acls} -+@item --no-acls -+Causes @command{tar} not to store, extract or list POSIX ACL's. -+@xref{Attributes}. -+ - @opsummary{no-anchored} - @item --no-anchored - An exclude pattern can match any subsequence of the name's components. -@@ -3036,11 +3157,20 @@ locations. Usually @command{tar} determines automatically whether - the archive can be seeked or not. Use this option to disable this - mechanism. - -+@opsummary{no-selinux} -+@item --no-selinux -+Causes @command{tar} not to store, extract or list SELinux security context. -+@xref{Attributes}. -+ - @opsummary{no-unquote} - @item --no-unquote - Treat all input file or member names literally, do not interpret - escape sequences. @xref{input name quoting}. - -+@opsummary{no-xattrs} -+@item --no-xattrs -+Causes @command{tar} not to store, extract or list xattrs. @xref{Attributes}. -+ - @opsummary{no-wildcards} - @item --no-wildcards - Do not use wildcards. -@@ -3286,6 +3416,11 @@ in cases when such recognition fails. It takes effect only if the - archive is open for reading (e.g. with @option{--list} or - @option{--extract} options). - -+@opsummary{selinux} -+@item --selinux -+Causes @command{tar} to store, extract or list SELinux security context. -+@xref{Attributes}. -+ - @opsummary{show-defaults} - @item --show-defaults - -@@ -3541,6 +3676,11 @@ Enable or disable warning messages identified by @var{keyword}. The - messages are suppressed if @var{keyword} is prefixed with @samp{no-}. - @xref{warnings}. - -+@opsummary{xattrs} -+@item --xattrs -+Causes @command{tar} to store, restore or list extended file attributes. For -+more info see @xref{Attributes}. -+ - @opsummary{wildcards} - @item --wildcards - Use wildcards when matching member names with patterns. -@@ -4363,6 +4503,11 @@ failed, switched to @command{gzip}. - @cindex @samp{Record size = %lu blocks}, warning message - @item record-size - @samp{Record size = %lu blocks} -+@kwindex xattr-write -+@item xattr-write -+@samp{%s: Cannot set '%s' extended attribute for file '%s'} -+@*@samp{%s: Cannot set POSIX ACLs for file '%s'} -+@*@samp{%s: Cannot set SELinux context for file '%s'} - @end table - - @subheading Keywords controlling incremental extraction: -@@ -8968,6 +9113,8 @@ implementation able to read @samp{ustar} archives will be able to read - most @samp{posix} archives as well, with the only exception that any - additional information (such as long file names etc.) will in such - case be extracted as plain text files along with the files it refers to. -+This is the only format that can store ACLs, SELinux context and extended -+attributes. - - This archive format will be the default format for future versions - of @GNUTAR{}. -@@ -9607,6 +9754,135 @@ Same as both @option{--same-permissions} and @option{--same-order}. - - This option is deprecated, and will be removed in @GNUTAR{} version 1.23. - -+@opindex xattrs -+@item --xattrs -+This option causes @command{tar} to store, restore or list the extended file -+attributes (for information about extended attributes see @command{man(5) -+attr}). -+ -+Note that all extended attributes are stored "as-is" (in file system binary -+format) and the resulting archive may be not fully portable. See the -+@option{--selinux} and @option{--acls} options when you want to deal with these -+types of extended attributes in a better way. -+ -+The @option{--xattrs} option implies the option @option{--format=posix} when -+tar is in @option{--create} operation mode. It is the only one format which -+hase usable headers for storing additional file information like extended -+attributes are. -+ -+By default, all extended attributes are stored into the archive. The reason is -+that we want to make the backup process as complete as possible by default. On -+the other hand, during extracting only the 'user.*' domain is extracted by -+default. Anyway, this default behaviour may be easily modified by the -+@option{--xattrs-include} and @option{--xattrs-exclude} options. -+ -+When you list an archive in verbose mode -+(@command{tar --xattrs --verbose -tf archive.tar}), tar shows the '*' character -+after the permissions string of concrete file ringht to tell you that at least -+one extended attribute is stored with corresponding file. -+ -+Double verbose mode (@command{tar --xattrs -tvvf archive.tar}) prints the -+extended attribute length (in bytes) and its ASCII key (for printed examples -+@pxref{List Extended Attributes}). -+ -+@option{--xattrs} option has no equivalent short option. -+ -+Warnings which occur during impossible writing of extended attributes to -+a file system may be suppressed using the @option{--warning=no-xattr-write} -+option. -+ -+@opindex no-xattrs -+@item --no-xattrs -+This option causes @command{tar} not to store/extract or list the current -+extended attributes. This option does not affect options @option{--no-selinux} -+or @option{--no-acls}. -+ -+The @option{--no-xattrs} option has no equivalent short option name. -+ -+@opindex xattrs-include -+@opindex xattrs-exclude -+@item --xattrs-include=MASK -+@itemx --xattrs-exclude=MASK -+ -+These options allows the xattr store/restore/list process to be more fine -+grained. The default configuration is that @option{--create} mode handles all -+available extended attributes and the @option{--extract}/@option{--list} mode -+handles only 'user.*' domain. These options may be used for editing of this -+default behaviour. -+ -+@itemize @bullet -+@item -+Lets say we want to store all attributes except some "public restricted" domain -+(e.g. 'user.restricted.*' domain. The correct way how to do it is: -+ -+@command{tar --xattrs --xattrs-include='*' --xattrs-exclude='user.restricted.*' -+-cf archive.tar FILES} -+@item -+And, when we want to extract only some specific domain from an archive - we can -+use: -+ -+@command{tar --xattrs --xattrs-include='security.capability' -xf archive.tar -+FILES} -+@end itemize -+ -+Multiple passed include/exclude patterns are combined together. The attribute -+is covered then only if (1) at least one of all include patterns matches its -+keyword and (2) no exclude pattern matches its keyword. -+ -+When only include pattern is set - exclude pattern is left in default mode (and -+vice versa). -+ -+@opindex selinux -+@item --selinux -+This option causes @command{tar} to store/extract/list the SELinux context -+information into/from an archive. Command @command{tar} is able to show info -+whether the SELinux context is present in archived file using the verbose -+listing mode (@command{tar --selinux -tvf archive.tar}). It shows the '.' -+character after permission string in that case. Double-verbose listing mode -+(@command{tar -tvvf archive.tar}) then prints the full SELinux context to -+standard output, @pxref{List Extended Attributes} for printed example. -+ -+This option implies the @option{--format=posix} when @command{tar} works in -+@option{--create} operation mode. -+ -+Warnings complaining that SELinux context may not be written to a file system -+may be suppressed by the @option{--warning=no-xattr-write} option. -+ -+The @option{--selinux} option has no equivalent short option name. -+ -+@opindex no-selinux -+@item --no-selinux -+This option causes @command{tar} not to store the current SELinux security -+context information in the archive and not to extract any SELinux information in -+an archive. -+ -+The @option{--no-selinux} option has no equivalent short option name. -+ -+@opindex acls -+@item --acls -+This option causes @command{tar} to store the current POSIX access control lists -+into the archive or restore POSIX ACLs from an archive. It also allows -+@command{tar} to show whether archived file contains ACLs when the verbose mode -+is active (@option{tar --acls -tvf} shows the symbol '+' after the permission -+characters in that case). Double-verbose mode allows @command{tar} to list -+contained POSIX ACLs (@command{tar --acls -tvvf archive.tar}), for printed -+examples @pxref{List Extended Attributes}. -+ -+This option implies the @option{--format=posix} when @command{tar} works in -+@option{--create} operation mode. -+ -+Warnings complaining that POSIX ACLs may not be written to a file system may be -+suppressed by the @option{--warning=no-xattr-write} option. -+ -+The @option{--acls} option has no equivalent short form. -+ -+@opindex no-acls -+@item --no-acls -+This option causes @command{tar} not to store the current POSIX ACL into the -+archive and not to extract any POSIX ACL information from an archive. -+ -+The @option{--no-acls} option has no equivalent short option name. -+ - @end table - - @node Portability --- -1.9.3 - diff --git a/tar-1.28-wildcards.patch b/tar-1.28-wildcards.patch deleted file mode 100644 index e8eaf01..0000000 --- a/tar-1.28-wildcards.patch +++ /dev/null @@ -1,112 +0,0 @@ -From ea75b84e2408a60d75df9e68eb5683fa27209939 Mon Sep 17 00:00:00 2001 -From: rpm-build -Date: Mon, 28 Jul 2014 08:12:14 +0200 -Subject: [PATCH 3/9] wildcard defaults (downstram; compatibility) - -Change inclusion defaults of tar to "wildcards --anchored ---wildcards-match-slash" for compatibility reasons. - -Resolves: #206841 - ---- - doc/tar.texi | 5 ++++- - src/names.c | 5 +---- - src/tar.c | 9 ++++----- - tests/exclude01.at | 1 + - 4 files changed, 10 insertions(+), 10 deletions(-) - -diff --git a/doc/tar.texi b/doc/tar.texi -index 82c303d..db79824 100644 ---- a/doc/tar.texi -+++ b/doc/tar.texi -@@ -7902,7 +7902,7 @@ The following table summarizes pattern-matching default values: - - @multitable @columnfractions .3 .7 - @headitem Members @tab Default settings --@item Inclusion @tab @option{--no-wildcards --anchored --no-wildcards-match-slash} -+@item Inclusion @tab @option{--wildcards --anchored --wildcards-match-slash} - @item Exclusion @tab @option{--wildcards --no-anchored --wildcards-match-slash} - @end multitable - -@@ -12365,6 +12365,9 @@ version of this document is available at - @table @asis - @item Use of globbing patterns when listing and extracting. - -+Note: Following is true for original unpatched GNU tar. -+For compatibility reasons, the old behavior was preserved. -+ - Previous versions of GNU tar assumed shell-style globbing when - extracting from or listing an archive. For example: - -diff --git a/src/names.c b/src/names.c -index 594e7fd..fe3bcad 100644 ---- a/src/names.c -+++ b/src/names.c -@@ -1200,10 +1200,7 @@ collect_and_sort_names (void) - - if (name->found_count || name->directory) - continue; -- if (name->matching_flags & EXCLUDE_WILDCARDS) -- /* NOTE: EXCLUDE_ANCHORED is not relevant here */ -- /* FIXME: just skip regexps for now */ -- continue; -+ - chdir_do (name->change_dir); - - if (name->name[0] == 0) -diff --git a/src/tar.c b/src/tar.c -index cd32379..79b0a10 100644 ---- a/src/tar.c -+++ b/src/tar.c -@@ -800,7 +800,7 @@ static struct argp_option options[] = { - {"no-ignore-case", NO_IGNORE_CASE_OPTION, 0, 0, - N_("case sensitive matching (default)"), GRID+1 }, - {"wildcards", WILDCARDS_OPTION, 0, 0, -- N_("use wildcards (default for exclusion)"), GRID+1 }, -+ N_("use wildcards (default)"), GRID+1 }, - {"no-wildcards", NO_WILDCARDS_OPTION, 0, 0, - N_("verbatim string matching"), GRID+1 }, - {"no-wildcards-match-slash", NO_WILDCARDS_MATCH_SLASH_OPTION, 0, 0, -@@ -895,8 +895,7 @@ ARGMATCH_VERIFY (atime_preserve_args, atime_preserve_types); - /* Wildcard matching settings */ - enum wildcards - { -- default_wildcards, /* For exclusion == enable_wildcards, -- for inclusion == disable_wildcards */ -+ default_wildcards, /* enable_wildcards */ - disable_wildcards, - enable_wildcards - }; -@@ -927,7 +926,7 @@ struct tar_args /* Variables used during option parsing */ - | recursion_option) - - #define MAKE_INCL_OPTIONS(args) \ -- ((((args)->wildcards == enable_wildcards) ? EXCLUDE_WILDCARDS : 0) \ -+ ((((args)->wildcards != disable_wildcards) ? EXCLUDE_WILDCARDS : 0) \ - | (args)->include_anchored \ - | (args)->matching_flags \ - | recursion_option) -@@ -2442,7 +2441,7 @@ decode_options (int argc, char **argv) - - /* Warn about implicit use of the wildcards in command line arguments. - See TODO */ -- warn_regex_usage = args.wildcards == default_wildcards; -+ warn_regex_usage = 0; /* args.wildcards == default_wildcards; */ - - /* Derive option values and check option consistency. */ - -diff --git a/tests/exclude01.at b/tests/exclude01.at -index 27dd9fe..61e5910 100644 ---- a/tests/exclude01.at -+++ b/tests/exclude01.at -@@ -61,6 +61,7 @@ testdir/dir2/file2 - testdir/dir3/ - NEXT - testdir/dir1/* -+testdir/dir1/file1 - NEXT - testdir/dir1/* - NEXT --- -1.9.3 - diff --git a/tar.spec b/tar.spec index bee22d2..c052a57 100644 --- a/tar.spec +++ b/tar.spec @@ -4,8 +4,8 @@ Summary: A GNU file archiving program Name: tar Epoch: 2 -Version: 1.28 -Release: 7%{?dist} +Version: 1.29 +Release: 1%{?dist} License: GPLv3+ Group: Applications/Archiving URL: http://www.gnu.org/software/tar/ @@ -16,16 +16,11 @@ Source1: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.xz.sig # Note that all patches are documented in patch files (git format-patch format) Patch1: tar-1.28-loneZeroWarning.patch Patch2: tar-1.28-vfatTruncate.patch -Patch3: tar-1.28-wildcards.patch +Patch3: tar-1.29-wildcards.patch Patch4: tar-1.28-atime-rofs.patch Patch5: tar-1.28-update-with-change-directory.patch -Patch7: tar-1.28-docu-xattrs.patch Patch9: tar-1.28-document-exclude-mistakes.patch Patch11: tar-1.28-sparse-inf-loops.patch -Patch12: tar-1.28-big-sparse-listing.patch -Patch13: tar-1.28-T-matchflags.patch -Patch14: tar-1.28-T-recursion-tests.patch -Patch15: tar-1.28-T-tests-false-failure.patch # run "make check" by default %bcond_without check @@ -119,6 +114,9 @@ fi %{_infodir}/tar.info* %changelog +* Tue May 17 2016 Pavel Raiskup - 1.29-1 +- new upstream release 1.29 (rhbz#1336607) + * Fri Feb 05 2016 Fedora Release Engineering - 2:1.28-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild