rebase to new upstream release
Per release notes: https://savannah.gnu.org/forum/forum.php?forum_id=8545 Resolves: rhbz#1336607 Version: 1.29-1
This commit is contained in:
parent
b1611038b8
commit
b8c4a6f530
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,2 +1,2 @@
|
|||||||
/tar-1.28.tar.xz
|
/tar-1.29.tar.xz
|
||||||
/tar-1.28.tar.xz.sig
|
/tar-1.29.tar.xz.sig
|
||||||
|
4
sources
4
sources
@ -1,2 +1,2 @@
|
|||||||
49b6306167724fe48f419a33a5beb857 tar-1.28.tar.xz
|
a1802fec550baaeecff6c381629653ef tar-1.29.tar.xz
|
||||||
a84d018c092514a65ba1c270a68826c3 tar-1.28.tar.xz.sig
|
34219e18adf27b7b0ce3548013ec09d8 tar-1.29.tar.xz.sig
|
||||||
|
@ -1,283 +0,0 @@
|
|||||||
From: Sergey Poznyakoff <gray@gnu.org.ua>
|
|
||||||
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 <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+# 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 <martineau@zmanda.com>
|
|
||||||
+# 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 <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+# 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 <martineau@zmanda.com>
|
|
||||||
+# 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])
|
|
@ -1,157 +0,0 @@
|
|||||||
From: rpm-build <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 <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+# Description: Test interaction of --recursion and --no-recursion options
|
|
||||||
+# together with --files-from option. This is complementary to recurs02.at test
|
|
||||||
+# case. References:
|
|
||||||
+# <alpine.LSU.2.11.1502201029580.29773@nerf60.vanv.qr>
|
|
||||||
+# 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])
|
|
@ -1,47 +0,0 @@
|
|||||||
From: Pavel Raiskup <praiskup@redhat.com>
|
|
||||||
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/
|
|
@ -1,123 +0,0 @@
|
|||||||
From 6400976234810f4de138ee692756072f5beaa64d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pavel Raiskup <praiskup@redhat.com>
|
|
||||||
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
|
|
||||||
|
|
@ -1,380 +0,0 @@
|
|||||||
From 914bb84cb71ebb63c40bc27f4d017cc0a0a39bf2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: rpm-build <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
|
|
||||||
|
|
@ -1,112 +0,0 @@
|
|||||||
From ea75b84e2408a60d75df9e68eb5683fa27209939 Mon Sep 17 00:00:00 2001
|
|
||||||
From: rpm-build <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
|
|
||||||
|
|
14
tar.spec
14
tar.spec
@ -4,8 +4,8 @@
|
|||||||
Summary: A GNU file archiving program
|
Summary: A GNU file archiving program
|
||||||
Name: tar
|
Name: tar
|
||||||
Epoch: 2
|
Epoch: 2
|
||||||
Version: 1.28
|
Version: 1.29
|
||||||
Release: 7%{?dist}
|
Release: 1%{?dist}
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
Group: Applications/Archiving
|
Group: Applications/Archiving
|
||||||
URL: http://www.gnu.org/software/tar/
|
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)
|
# Note that all patches are documented in patch files (git format-patch format)
|
||||||
Patch1: tar-1.28-loneZeroWarning.patch
|
Patch1: tar-1.28-loneZeroWarning.patch
|
||||||
Patch2: tar-1.28-vfatTruncate.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
|
Patch4: tar-1.28-atime-rofs.patch
|
||||||
Patch5: tar-1.28-update-with-change-directory.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
|
Patch9: tar-1.28-document-exclude-mistakes.patch
|
||||||
Patch11: tar-1.28-sparse-inf-loops.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
|
# run "make check" by default
|
||||||
%bcond_without check
|
%bcond_without check
|
||||||
@ -119,6 +114,9 @@ fi
|
|||||||
%{_infodir}/tar.info*
|
%{_infodir}/tar.info*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue May 17 2016 Pavel Raiskup <praiskup@redhat.com> - 1.29-1
|
||||||
|
- new upstream release 1.29 (rhbz#1336607)
|
||||||
|
|
||||||
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.28-7
|
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.28-7
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user