rebase: latest upstream release v1.30
Per upstream release notes: http://lists.gnu.org/archive/html/info-gnu/2017-12/msg00011.html Version: 1.30-1
This commit is contained in:
parent
2858c8d1dd
commit
c0ab324711
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,2 +1,2 @@
|
|||||||
/tar-1.29.tar.xz
|
/tar-1.30.tar.xz
|
||||||
/tar-1.29.tar.xz.sig
|
/tar-1.30.tar.xz.sig
|
||||||
|
4
sources
4
sources
@ -1,2 +1,2 @@
|
|||||||
a1802fec550baaeecff6c381629653ef tar-1.29.tar.xz
|
SHA512 (tar-1.30.tar.xz) = 9c8b2cacf8f6ca1b19f788d4ec0410127c4d71e54b9c9cac99ee5af6c002189ccc521302955510bb22a54a069ffd00fc2de12ac776985cbbeb3f1ecf38a4f8d9
|
||||||
34219e18adf27b7b0ce3548013ec09d8 tar-1.29.tar.xz.sig
|
SHA512 (tar-1.30.tar.xz.sig) = 149bfb112aae05e1f40a26ab2570fef71cf736eac62bf3a1bc8df905270c745500fc82764867323e440c67b1dd7116f5b0e1fd1977be7f10b333d481da3355e8
|
||||||
|
@ -1,122 +0,0 @@
|
|||||||
From fecf72d73021fa47956ea551f6ccc804213452ce Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pavel Raiskup <praiskup@redhat.com>
|
|
||||||
Date: Wed, 4 Apr 2012 18:04:53 +0200
|
|
||||||
Subject: [PATCH 5/9] Bad cooperation of -C and -u options
|
|
||||||
|
|
||||||
Previously, tar did not update archive with newly created files in archived
|
|
||||||
directory -- it failed instead with "file not found" error (because it looked
|
|
||||||
in bad directory in filesystem).
|
|
||||||
|
|
||||||
---
|
|
||||||
src/update.c | 2 +-
|
|
||||||
tests/Makefile.am | 1 +
|
|
||||||
tests/testsuite.at | 1 +
|
|
||||||
tests/update03.at | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
4 files changed, 62 insertions(+), 1 deletion(-)
|
|
||||||
create mode 100644 tests/update03.at
|
|
||||||
|
|
||||||
diff --git a/src/update.c b/src/update.c
|
|
||||||
index c8fca0c..9a9c4e2 100644
|
|
||||||
--- a/src/update.c
|
|
||||||
+++ b/src/update.c
|
|
||||||
@@ -152,7 +152,7 @@ update_archive (void)
|
|
||||||
|
|
||||||
for (p = dirp; *p; p += strlen (p) + 1)
|
|
||||||
addname (namebuf_name (nbuf, p),
|
|
||||||
- 0, false, NULL);
|
|
||||||
+ name->change_dir, false, NULL);
|
|
||||||
|
|
||||||
namebuf_free (nbuf);
|
|
||||||
free (dirp);
|
|
||||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
|
||||||
index 6684d1d..2a2e1cc 100644
|
|
||||||
--- a/tests/Makefile.am
|
|
||||||
+++ b/tests/Makefile.am
|
|
||||||
@@ -208,6 +208,7 @@ TESTSUITE_AT = \
|
|
||||||
update.at\
|
|
||||||
update01.at\
|
|
||||||
update02.at\
|
|
||||||
+ update03.at\
|
|
||||||
volsize.at\
|
|
||||||
volume.at\
|
|
||||||
verbose.at\
|
|
||||||
diff --git a/tests/testsuite.at b/tests/testsuite.at
|
|
||||||
index 7f8e4c4..f1ce58f 100644
|
|
||||||
--- a/tests/testsuite.at
|
|
||||||
+++ b/tests/testsuite.at
|
|
||||||
@@ -360,6 +360,7 @@ AT_BANNER([Updates])
|
|
||||||
m4_include([update.at])
|
|
||||||
m4_include([update01.at])
|
|
||||||
m4_include([update02.at])
|
|
||||||
+m4_include([update03.at])
|
|
||||||
|
|
||||||
AT_BANNER([Verifying the archive])
|
|
||||||
m4_include([verify.at])
|
|
||||||
diff --git a/tests/update03.at b/tests/update03.at
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..185f9eb
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/update03.at
|
|
||||||
@@ -0,0 +1,59 @@
|
|
||||||
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
|
|
||||||
+
|
|
||||||
+# Test suite for GNU tar.
|
|
||||||
+# Copyright (C) 2012 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program 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, or (at your option) any later version.
|
|
||||||
+
|
|
||||||
+# This program 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, write to the Free Software Foundation, Inc., 51 Franklin
|
|
||||||
+# Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
+
|
|
||||||
+# Description:
|
|
||||||
+# Test if the '--update' option works with the '--directory DIR' option
|
|
||||||
+# properly. In version <= 1.26 tar this combination caused problems.
|
|
||||||
+#
|
|
||||||
+# References:
|
|
||||||
+# https://bugzilla.redhat.com/show_bug.cgi?id=688567
|
|
||||||
+#
|
|
||||||
+# Last-Affected-Version: 1.26.90
|
|
||||||
+
|
|
||||||
+AT_SETUP([update & change directory (-C)])
|
|
||||||
+AT_KEYWORDS([update update03])
|
|
||||||
+
|
|
||||||
+AT_TAR_CHECK([
|
|
||||||
+AT_SORT_PREREQ
|
|
||||||
+
|
|
||||||
+# prepare filesystem
|
|
||||||
+mkdir dir
|
|
||||||
+mkdir dir/subdir
|
|
||||||
+genfile --file dir/subdir/a
|
|
||||||
+
|
|
||||||
+# crate archive of subdir
|
|
||||||
+tar -C dir -cf file.tar subdir
|
|
||||||
+
|
|
||||||
+# update filesystem
|
|
||||||
+mkdir dir/subdir/b
|
|
||||||
+genfile --file dir/subdir/b/c
|
|
||||||
+
|
|
||||||
+# sync the 'file.tar' archive
|
|
||||||
+tar -C dir -uf file.tar subdir
|
|
||||||
+
|
|
||||||
+# print contents
|
|
||||||
+tar -tf file.tar | sort || exit 1
|
|
||||||
+],
|
|
||||||
+[0],
|
|
||||||
+[subdir/
|
|
||||||
+subdir/a
|
|
||||||
+subdir/b/
|
|
||||||
+subdir/b/c
|
|
||||||
+])
|
|
||||||
+
|
|
||||||
+AT_CLEANUP
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,293 +0,0 @@
|
|||||||
From 7f6d7043332d3d4029ada9ac8e66e2ef9422046e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sergey Poznyakoff <gray@gnu.org>
|
|
||||||
Date: Sat, 12 Nov 2016 11:20:47 +0200
|
|
||||||
Subject: [PATCH] Fix the --add-file option.
|
|
||||||
|
|
||||||
* src/common.h (name_more_files): New proto.
|
|
||||||
(files_from_option): Remove.
|
|
||||||
* src/names.c (name_more_files): New file.
|
|
||||||
(names_options): Fix declaration of the
|
|
||||||
add-file option.
|
|
||||||
(names_parse_opt): Handle --add-file.
|
|
||||||
* src/tar.c (struct tar_args): Remove the input_files member.
|
|
||||||
Change all uses: use name_more_files() instead.
|
|
||||||
* tests/Makefile.am: Add new test.
|
|
||||||
* tests/add-file.at: New testcase.
|
|
||||||
* tests/testsuite.at: Add new test.
|
|
||||||
---
|
|
||||||
src/common.h | 4 +---
|
|
||||||
src/names.c | 20 +++++++++++-----
|
|
||||||
src/tar.c | 16 ++++---------
|
|
||||||
tests/Makefile.am | 3 ++-
|
|
||||||
tests/add-file.at | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
tests/testsuite.at | 2 ++
|
|
||||||
6 files changed, 91 insertions(+), 21 deletions(-)
|
|
||||||
create mode 100644 tests/add-file.at
|
|
||||||
|
|
||||||
diff --git a/src/common.h b/src/common.h
|
|
||||||
index 50c34cc..6fdb622 100644
|
|
||||||
--- a/src/common.h
|
|
||||||
+++ b/src/common.h
|
|
||||||
@@ -414,9 +414,6 @@ GLOBAL bool show_transformed_names_option;
|
|
||||||
timestamps from archives with an unusual member order. It is automatically
|
|
||||||
set for incremental archives. */
|
|
||||||
GLOBAL bool delay_directory_restore_option;
|
|
||||||
-
|
|
||||||
-/* When set, tar will not refuse to create empty archives */
|
|
||||||
-GLOBAL bool files_from_option;
|
|
||||||
|
|
||||||
/* Declarations for each module. */
|
|
||||||
|
|
||||||
@@ -738,6 +735,7 @@ void uid_to_uname (uid_t uid, char **uname);
|
|
||||||
int uname_to_uid (char const *uname, uid_t *puid);
|
|
||||||
|
|
||||||
void name_init (void);
|
|
||||||
+bool name_more_files (void);
|
|
||||||
void name_add_name (const char *name);
|
|
||||||
void name_term (void);
|
|
||||||
const char *name_next (int change_dirs);
|
|
||||||
diff --git a/src/names.c b/src/names.c
|
|
||||||
index d96ad71..57d97e2 100644
|
|
||||||
--- a/src/names.c
|
|
||||||
+++ b/src/names.c
|
|
||||||
@@ -32,7 +32,8 @@ static void name_add_file (const char *name);
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
- EXCLUDE_BACKUPS_OPTION = 256,
|
|
||||||
+ ADD_FILE_OPTION = 256,
|
|
||||||
+ EXCLUDE_BACKUPS_OPTION,
|
|
||||||
EXCLUDE_CACHES_OPTION,
|
|
||||||
EXCLUDE_CACHES_UNDER_OPTION,
|
|
||||||
EXCLUDE_CACHES_ALL_OPTION,
|
|
||||||
@@ -67,7 +68,7 @@ static struct argp_option names_options[] = {
|
|
||||||
{NULL, 0, NULL, 0,
|
|
||||||
N_("Local file name selection:"), GRID },
|
|
||||||
|
|
||||||
- {"add-file", ARGP_KEY_ARG, N_("FILE"), 0,
|
|
||||||
+ {"add-file", ADD_FILE_OPTION, N_("FILE"), 0,
|
|
||||||
N_("add given FILE to the archive (useful if its name starts with a dash)"), GRID+1 },
|
|
||||||
{"directory", 'C', N_("DIR"), 0,
|
|
||||||
N_("change to directory DIR"), GRID+1 },
|
|
||||||
@@ -177,10 +178,10 @@ names_parse_opt (int key, char *arg, struct argp_state *state)
|
|
||||||
|
|
||||||
case 'T':
|
|
||||||
name_add_file (arg);
|
|
||||||
- /* Indicate we've been given -T option. This is for backward
|
|
||||||
- compatibility only, so that `tar cfT archive /dev/null will
|
|
||||||
- succeed */
|
|
||||||
- files_from_option = true;
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ case ADD_FILE_OPTION:
|
|
||||||
+ name_add_name (arg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
@@ -680,6 +681,12 @@ name_list_advance (void)
|
|
||||||
free (elt);
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Return true if there are names or options in the list */
|
|
||||||
+bool
|
|
||||||
+name_more_files (void)
|
|
||||||
+{
|
|
||||||
+ return name_count > 0;
|
|
||||||
+}
|
|
||||||
|
|
||||||
/* Add to name_array the file NAME with fnmatch options MATFLAGS */
|
|
||||||
void
|
|
||||||
@@ -719,6 +726,7 @@ name_add_file (const char *name)
|
|
||||||
ep->v.file.name = name;
|
|
||||||
ep->v.file.line = 0;
|
|
||||||
ep->v.file.fp = NULL;
|
|
||||||
+ name_count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Names from external name file. */
|
|
||||||
diff --git a/src/tar.c b/src/tar.c
|
|
||||||
index ba24c43..685fc8e 100644
|
|
||||||
--- a/src/tar.c
|
|
||||||
+++ b/src/tar.c
|
|
||||||
@@ -813,7 +813,6 @@ struct tar_args /* Variables used during option parsing */
|
|
||||||
bool pax_option; /* True if --pax-option was given */
|
|
||||||
char const *backup_suffix_string; /* --suffix option argument */
|
|
||||||
char const *version_control_string; /* --backup option argument */
|
|
||||||
- bool input_files; /* True if some input files where given */
|
|
||||||
int compress_autodetect; /* True if compression autodetection should
|
|
||||||
be attempted when creating archives */
|
|
||||||
};
|
|
||||||
@@ -1322,7 +1321,6 @@ parse_opt (int key, char *arg, struct argp_state *state)
|
|
||||||
case ARGP_KEY_ARG:
|
|
||||||
/* File name or non-parsed option, because of ARGP_IN_ORDER */
|
|
||||||
name_add_name (arg);
|
|
||||||
- args->input_files = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'A':
|
|
||||||
@@ -2179,7 +2177,7 @@ more_options (int argc, char **argv, struct option_locus *loc)
|
|
||||||
args.loc = loc;
|
|
||||||
if (argp_parse (&argp, argc, argv, ARGP_IN_ORDER|ARGP_NO_EXIT, &idx, &args))
|
|
||||||
abort (); /* shouldn't happen */
|
|
||||||
- if (loc->source == OPTS_ENVIRON && args.input_files)
|
|
||||||
+ if (loc->source == OPTS_ENVIRON && name_more_files ())
|
|
||||||
USAGE_ERROR ((0, 0, _("non-option arguments in %s"), loc->name));
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2220,7 +2218,6 @@ decode_options (int argc, char **argv)
|
|
||||||
args.pax_option = false;
|
|
||||||
args.backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
|
|
||||||
args.version_control_string = 0;
|
|
||||||
- args.input_files = false;
|
|
||||||
args.compress_autodetect = false;
|
|
||||||
|
|
||||||
subcommand_option = UNKNOWN_SUBCOMMAND;
|
|
||||||
@@ -2339,10 +2336,7 @@ decode_options (int argc, char **argv)
|
|
||||||
|
|
||||||
/* Handle operands after any "--" argument. */
|
|
||||||
for (; idx < argc; idx++)
|
|
||||||
- {
|
|
||||||
- name_add_name (argv[idx]);
|
|
||||||
- args.input_files = true;
|
|
||||||
- }
|
|
||||||
+ name_add_name (argv[idx]);
|
|
||||||
|
|
||||||
/* Derive option values and check option consistency. */
|
|
||||||
|
|
||||||
@@ -2364,7 +2358,7 @@ decode_options (int argc, char **argv)
|
|
||||||
|
|
||||||
if (occurrence_option)
|
|
||||||
{
|
|
||||||
- if (!args.input_files)
|
|
||||||
+ if (!name_more_files ())
|
|
||||||
USAGE_ERROR ((0, 0,
|
|
||||||
_("--occurrence is meaningless without a file list")));
|
|
||||||
if (!IS_SUBCOMMAND_CLASS (SUBCL_OCCUR))
|
|
||||||
@@ -2568,7 +2562,7 @@ decode_options (int argc, char **argv)
|
|
||||||
{
|
|
||||||
/* --test-label is silent if the user has specified the label name to
|
|
||||||
compare against. */
|
|
||||||
- if (!args.input_files)
|
|
||||||
+ if (!name_more_files ())
|
|
||||||
verbose_option++;
|
|
||||||
}
|
|
||||||
else if (utc_option)
|
|
||||||
@@ -2597,7 +2591,7 @@ decode_options (int argc, char **argv)
|
|
||||||
switch (subcommand_option)
|
|
||||||
{
|
|
||||||
case CREATE_SUBCOMMAND:
|
|
||||||
- if (!args.input_files && !files_from_option)
|
|
||||||
+ if (!name_more_files ())
|
|
||||||
USAGE_ERROR ((0, 0,
|
|
||||||
_("Cowardly refusing to create an empty archive")));
|
|
||||||
if (args.compress_autodetect && archive_names
|
|
||||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
|
||||||
index 4f3b918..c8fa922 100644
|
|
||||||
--- a/tests/Makefile.am
|
|
||||||
+++ b/tests/Makefile.am
|
|
||||||
@@ -42,6 +42,7 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac
|
|
||||||
## ------------ ##
|
|
||||||
|
|
||||||
TESTSUITE_AT = \
|
|
||||||
+ testsuite.at\
|
|
||||||
T-cd.at\
|
|
||||||
T-dir00.at\
|
|
||||||
T-dir01.at\
|
|
||||||
@@ -54,7 +55,7 @@ TESTSUITE_AT = \
|
|
||||||
T-nonl.at\
|
|
||||||
T-mult.at\
|
|
||||||
T-nest.at\
|
|
||||||
- testsuite.at\
|
|
||||||
+ add-file.at\
|
|
||||||
append.at\
|
|
||||||
append01.at\
|
|
||||||
append02.at\
|
|
||||||
diff --git a/tests/add-file.at b/tests/add-file.at
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..97003ff
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/add-file.at
|
|
||||||
@@ -0,0 +1,67 @@
|
|
||||||
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
|
|
||||||
+#
|
|
||||||
+# Test suite for GNU tar.
|
|
||||||
+# Copyright 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 <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+AT_SETUP([The --add-file option])
|
|
||||||
+AT_KEYWORDS([add-file])
|
|
||||||
+
|
|
||||||
+# Version 1.29 would give "tar: Cowardly refusing to create an empty archive"
|
|
||||||
+# if only --add-file arguments were used, and would give "tar: unhandled
|
|
||||||
+# positional option 0" when handling the --add-file if at least one file was
|
|
||||||
+# also given normally.
|
|
||||||
+#
|
|
||||||
+# Reported by: James Clarke <jrtc27@jrtc27.com>
|
|
||||||
+# References: <20161112000246.77013-1-jrtc27@jrtc27.com>,
|
|
||||||
+# http://lists.gnu.org/archive/html/bug-tar/2016-11/msg00013.html
|
|
||||||
+
|
|
||||||
+AT_TAR_CHECK([
|
|
||||||
+genfile --file -File
|
|
||||||
+genfile --file foo
|
|
||||||
+genfile --file bar
|
|
||||||
+
|
|
||||||
+echo 1:
|
|
||||||
+tar -cvf arc.tar --add-file foo --add-file -File
|
|
||||||
+
|
|
||||||
+echo 2:
|
|
||||||
+tar -cvf arc.tar foo --add-file -File bar
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+AT_DATA([input],[foo
|
|
||||||
+--add-file=-File
|
|
||||||
+bar
|
|
||||||
+])
|
|
||||||
+
|
|
||||||
+echo 3:
|
|
||||||
+tar -cvf arc.tar -T input
|
|
||||||
+],
|
|
||||||
+[0],
|
|
||||||
+[1:
|
|
||||||
+foo
|
|
||||||
+-File
|
|
||||||
+2:
|
|
||||||
+foo
|
|
||||||
+-File
|
|
||||||
+bar
|
|
||||||
+3:
|
|
||||||
+foo
|
|
||||||
+-File
|
|
||||||
+bar
|
|
||||||
+])
|
|
||||||
+
|
|
||||||
+AT_CLEANUP
|
|
||||||
diff --git a/tests/testsuite.at b/tests/testsuite.at
|
|
||||||
index 9493641..e97e5cb 100644
|
|
||||||
--- a/tests/testsuite.at
|
|
||||||
+++ b/tests/testsuite.at
|
|
||||||
@@ -213,6 +213,8 @@ m4_include([opcomp04.at])
|
|
||||||
m4_include([opcomp05.at])
|
|
||||||
m4_include([opcomp06.at])
|
|
||||||
|
|
||||||
+m4_include([add-file.at])
|
|
||||||
+
|
|
||||||
AT_BANNER([The -T option])
|
|
||||||
m4_include([T-mult.at])
|
|
||||||
m4_include([T-nest.at])
|
|
||||||
--
|
|
||||||
2.9.4
|
|
||||||
|
|
@ -1,153 +0,0 @@
|
|||||||
From 313fa7700598821fa35e502955cf110632d4318d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ian McLeod <imcleod@redhat.com>
|
|
||||||
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 <http://www.gnu.org/licenses/>.
|
|
||||||
+#
|
|
||||||
+# 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
|
|
||||||
|
|
@ -1,215 +0,0 @@
|
|||||||
From 6bd6bf244fb1b6bc07eb9cd1cd0bfdfd76576219 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pavel Raiskup <praiskup@redhat.com>
|
|
||||||
Date: Fri, 11 Nov 2016 12:30:35 +0200
|
|
||||||
Subject: [PATCH] don't set xattrs when --skip-old-files is used
|
|
||||||
|
|
||||||
* src/extract.c (set_xattr): Properly handle maybe_recoverable()
|
|
||||||
output. Throw warnings to not complicate caller.
|
|
||||||
(extract_file): Don't handle set_xattr's error.
|
|
||||||
* tests/xattr07.at: New testcase.
|
|
||||||
* tests/Makefile.am: Mention new testcase.
|
|
||||||
* tests/testsuite.at: Likewise.
|
|
||||||
* THANKS: Dawid.
|
|
||||||
|
|
||||||
Upstream commits 597b0ae509 and ca9399d4e.
|
|
||||||
---
|
|
||||||
THANKS | 1 +
|
|
||||||
src/extract.c | 41 +++++++++++++++++++-----------
|
|
||||||
tests/Makefile.am | 1 +
|
|
||||||
tests/testsuite.at | 1 +
|
|
||||||
tests/xattr07.at | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
5 files changed, 102 insertions(+), 15 deletions(-)
|
|
||||||
create mode 100644 tests/xattr07.at
|
|
||||||
|
|
||||||
diff --git a/THANKS b/THANKS
|
|
||||||
index 3dda4cc..559f240 100644
|
|
||||||
--- a/THANKS
|
|
||||||
+++ b/THANKS
|
|
||||||
@@ -138,6 +138,7 @@ David Nugent davidn@blaze.net.au
|
|
||||||
David Shaw david.shaw@alcatel.com.au
|
|
||||||
David Steiner dsteiner@ispa.uni-osnabrueck.de
|
|
||||||
David Taylor taylor@think.com
|
|
||||||
+Dawid dpc@dpc.pw
|
|
||||||
Dean Gaudet dgaudet@watdragon.uwaterloo.ca
|
|
||||||
Demizu Noritoshi nori-d@is.aist-nara.ac.jp
|
|
||||||
Denis Excoffier denis.excoffier@free.fr
|
|
||||||
diff --git a/src/extract.c b/src/extract.c
|
|
||||||
index f982433..67885d7 100644
|
|
||||||
--- a/src/extract.c
|
|
||||||
+++ b/src/extract.c
|
|
||||||
@@ -795,13 +795,13 @@ maybe_recoverable (char *file_name, bool regular, bool *interdir_made)
|
|
||||||
in advance dramatically improves the following performance of reading and
|
|
||||||
writing a file). If not restoring permissions, invert the INVERT_PERMISSIONS
|
|
||||||
bits from the file's current permissions. TYPEFLAG specifies the type of the
|
|
||||||
- file. FILE_CREATED indicates set_xattr has created the file */
|
|
||||||
+ file. Returns non-zero when error occurs (while un-available xattrs is not
|
|
||||||
+ an error, rather no-op). Non-zero FILE_CREATED indicates set_xattr has
|
|
||||||
+ created the file. */
|
|
||||||
static int
|
|
||||||
set_xattr (char const *file_name, struct tar_stat_info const *st,
|
|
||||||
mode_t invert_permissions, char typeflag, int *file_created)
|
|
||||||
{
|
|
||||||
- int status = 0;
|
|
||||||
-
|
|
||||||
#ifdef HAVE_XATTRS
|
|
||||||
bool interdir_made = false;
|
|
||||||
|
|
||||||
@@ -809,17 +809,32 @@ set_xattr (char const *file_name, struct tar_stat_info const *st,
|
|
||||||
{
|
|
||||||
mode_t mode = current_stat_info.stat.st_mode & MODE_RWX & ~ current_umask;
|
|
||||||
|
|
||||||
- do
|
|
||||||
- status = mknodat (chdir_fd, file_name, mode ^ invert_permissions, 0);
|
|
||||||
- while (status && maybe_recoverable ((char *)file_name, false,
|
|
||||||
- &interdir_made));
|
|
||||||
+ for (;;)
|
|
||||||
+ {
|
|
||||||
+ if (!mknodat (chdir_fd, file_name, mode ^ invert_permissions, 0))
|
|
||||||
+ {
|
|
||||||
+ /* Successfully created file */
|
|
||||||
+ xattrs_xattrs_set (st, file_name, typeflag, 0);
|
|
||||||
+ *file_created = 1;
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- xattrs_xattrs_set (st, file_name, typeflag, 0);
|
|
||||||
- *file_created = 1;
|
|
||||||
+ switch (maybe_recoverable ((char *)file_name, false, &interdir_made))
|
|
||||||
+ {
|
|
||||||
+ case RECOVER_OK:
|
|
||||||
+ continue;
|
|
||||||
+ case RECOVER_NO:
|
|
||||||
+ skip_member ();
|
|
||||||
+ open_error (file_name);
|
|
||||||
+ return 1;
|
|
||||||
+ case RECOVER_SKIP:
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
- return(status);
|
|
||||||
+ return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fix the statuses of all directories whose statuses need fixing, and
|
|
||||||
@@ -1136,11 +1151,7 @@ extract_file (char *file_name, int typeflag)
|
|
||||||
int file_created = 0;
|
|
||||||
if (set_xattr (file_name, ¤t_stat_info, invert_permissions,
|
|
||||||
typeflag, &file_created))
|
|
||||||
- {
|
|
||||||
- skip_member ();
|
|
||||||
- open_error (file_name);
|
|
||||||
- return 1;
|
|
||||||
- }
|
|
||||||
+ return 1;
|
|
||||||
|
|
||||||
while ((fd = open_output_file (file_name, typeflag, mode,
|
|
||||||
file_created, ¤t_mode,
|
|
||||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
|
||||||
index abc17a4..4f3b918 100644
|
|
||||||
--- a/tests/Makefile.am
|
|
||||||
+++ b/tests/Makefile.am
|
|
||||||
@@ -243,6 +243,7 @@ TESTSUITE_AT = \
|
|
||||||
xattr04.at\
|
|
||||||
xattr05.at\
|
|
||||||
xattr06.at\
|
|
||||||
+ xattr07.at\
|
|
||||||
acls01.at\
|
|
||||||
acls02.at\
|
|
||||||
acls03.at\
|
|
||||||
diff --git a/tests/testsuite.at b/tests/testsuite.at
|
|
||||||
index db83c80..9493641 100644
|
|
||||||
--- a/tests/testsuite.at
|
|
||||||
+++ b/tests/testsuite.at
|
|
||||||
@@ -440,6 +440,7 @@ m4_include([xattr03.at])
|
|
||||||
m4_include([xattr04.at])
|
|
||||||
m4_include([xattr05.at])
|
|
||||||
m4_include([xattr06.at])
|
|
||||||
+m4_include([xattr07.at])
|
|
||||||
|
|
||||||
m4_include([acls01.at])
|
|
||||||
m4_include([acls02.at])
|
|
||||||
diff --git a/tests/xattr07.at b/tests/xattr07.at
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..a834981
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/xattr07.at
|
|
||||||
@@ -0,0 +1,73 @@
|
|
||||||
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
|
|
||||||
+#
|
|
||||||
+# Test suite for GNU tar.
|
|
||||||
+# Copyright 2011, 2013-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 <http://www.gnu.org/licenses/>.
|
|
||||||
+#
|
|
||||||
+# Test description:
|
|
||||||
+# Test that --keep-old-files doesn't change xattrs of already existing file.
|
|
||||||
+# Per report:
|
|
||||||
+# https://lists.gnu.org/archive/html/bug-tar/2016-10/msg00001.html
|
|
||||||
+
|
|
||||||
+AT_SETUP([xattrs: xattrs and --skip-old-files])
|
|
||||||
+AT_KEYWORDS([xattrs xattr07])
|
|
||||||
+
|
|
||||||
+AT_TAR_CHECK([
|
|
||||||
+AT_XATTRS_PREREQ
|
|
||||||
+mkdir dir
|
|
||||||
+genfile --file dir/file
|
|
||||||
+genfile --file dir/file2
|
|
||||||
+
|
|
||||||
+setfattr -n user.test -v OurDirValue dir
|
|
||||||
+setfattr -n user.test -v OurFileValue dir/file
|
|
||||||
+setfattr -n user.test -v OurFileValue dir/file2
|
|
||||||
+
|
|
||||||
+tar --xattrs --no-recursion -cf archive.tar dir dir/file dir/file2
|
|
||||||
+
|
|
||||||
+setfattr -n user.test -v OurDirValue2 dir
|
|
||||||
+setfattr -n user.test -v OurFileValue2 dir/file
|
|
||||||
+setfattr -n user.test -v OurFileValue2 dir/file2
|
|
||||||
+
|
|
||||||
+# Check that tar continues to file2 too!
|
|
||||||
+tar --xattrs -xvf archive.tar --skip-old-files
|
|
||||||
+tar --xattrs -xvf archive.tar --keep-old-files
|
|
||||||
+
|
|
||||||
+getfattr -h -d dir | grep -v -e '^#' -e ^$
|
|
||||||
+getfattr -h -d dir/file | grep -v -e '^#' -e ^$
|
|
||||||
+getfattr -h -d dir/file2 | grep -v -e '^#' -e ^$
|
|
||||||
+],
|
|
||||||
+[0],
|
|
||||||
+[dir/
|
|
||||||
+dir/file
|
|
||||||
+dir/file2
|
|
||||||
+dir/
|
|
||||||
+dir/file
|
|
||||||
+dir/file2
|
|
||||||
+user.test="OurDirValue2"
|
|
||||||
+user.test="OurFileValue2"
|
|
||||||
+user.test="OurFileValue2"
|
|
||||||
+], [tar: dir: skipping existing file
|
|
||||||
+tar: dir/file: skipping existing file
|
|
||||||
+tar: dir/file: skipping existing file
|
|
||||||
+tar: dir/file2: skipping existing file
|
|
||||||
+tar: dir/file2: skipping existing file
|
|
||||||
+tar: dir/file: Cannot open: File exists
|
|
||||||
+tar: dir/file2: Cannot open: File exists
|
|
||||||
+tar: Exiting with failure status due to previous errors
|
|
||||||
+])
|
|
||||||
+
|
|
||||||
+AT_CLEANUP
|
|
||||||
--
|
|
||||||
2.9.3
|
|
||||||
|
|
14
tar.spec
14
tar.spec
@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
Summary: A GNU file archiving program
|
Summary: A GNU file archiving program
|
||||||
Name: tar
|
Name: tar
|
||||||
Epoch: 2
|
Epoch: 1
|
||||||
Version: 1.29
|
Version: 1.30
|
||||||
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/
|
||||||
@ -19,12 +19,8 @@ Patch1: tar-1.28-loneZeroWarning.patch
|
|||||||
Patch2: tar-1.28-vfatTruncate.patch
|
Patch2: tar-1.28-vfatTruncate.patch
|
||||||
Patch3: tar-1.29-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
|
|
||||||
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.29-create-and-xattrs-exclude.patch
|
|
||||||
Patch13: tar-1.29-xattrs-and-skip-old-files.patch
|
|
||||||
Patch14: tar-1.29-add-file-option.patch
|
|
||||||
|
|
||||||
# run "make check" by default
|
# run "make check" by default
|
||||||
%bcond_without check
|
%bcond_without check
|
||||||
@ -124,6 +120,10 @@ fi
|
|||||||
%{_infodir}/tar.info*
|
%{_infodir}/tar.info*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Dec 18 2017 Pavel Raiskup <praiskup@redhat.com> - 1.30-1
|
||||||
|
- rebase to latest upstream release, per release notes
|
||||||
|
http://lists.gnu.org/archive/html/info-gnu/2017-12/msg00011.html
|
||||||
|
|
||||||
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.29-7
|
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.29-7
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user