basebuilder_pel7ppc64bebuilder0
7 years ago
31 changed files with 15181 additions and 0 deletions
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
diff --git a/src/list.c b/src/list.c |
||||
index cf2de09..f4e6e0a 100644 |
||||
--- a/src/list.c |
||||
+++ b/src/list.c |
||||
@@ -212,6 +212,14 @@ read_and (void (*do_something) (void)) |
||||
|
||||
if (!ignore_zeros_option) |
||||
{ |
||||
+ /* |
||||
+ * According to POSIX tar specs, this is wrong, but on the web |
||||
+ * there are some tar specs that can trigger this, and some tar |
||||
+ * implementations create tars according to that spec. For now, |
||||
+ * let's not be pedantic about issuing the warning. |
||||
+ */ |
||||
+#if 0 |
||||
+ |
||||
char buf[UINTMAX_STRSIZE_BOUND]; |
||||
|
||||
status = read_header (¤t_header, ¤t_stat_info, |
||||
@@ -221,6 +229,9 @@ read_and (void (*do_something) (void)) |
||||
WARNOPT (WARN_ALONE_ZERO_BLOCK, |
||||
(0, 0, _("A lone zero block at %s"), |
||||
STRINGIFY_BIGINT (current_block_ordinal (), buf))); |
||||
+#endif |
||||
+ status = read_header (¤t_header, ¤t_stat_info, |
||||
+ read_header_auto); |
||||
break; |
||||
} |
||||
status = prev_status; |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
diff --git a/src/system.c b/src/system.c |
||||
index ba4ac2d..ea88cd6 100644 |
||||
--- a/src/system.c |
||||
+++ b/src/system.c |
||||
@@ -231,8 +231,25 @@ sys_compare_links (struct stat *link_data, struct stat *stat_data) |
||||
int |
||||
sys_truncate (int fd) |
||||
{ |
||||
+ struct stat st; |
||||
off_t pos = lseek (fd, (off_t) 0, SEEK_CUR); |
||||
- return pos < 0 ? -1 : ftruncate (fd, pos); |
||||
+ |
||||
+ if ( pos < 0) |
||||
+ return -1; |
||||
+ |
||||
+ if ( ftruncate(fd, pos) && errno == EPERM ) { |
||||
+ /* wrapper around ftruncate: |
||||
+ * ftruncate may fail to grow the size of a file with some OS and filesystem |
||||
+ * combinations. Linux and vfat/fat is one example. If this is the case do |
||||
+ * a write to grow the file to the desired length. |
||||
+ */ |
||||
+ if( (fstat( fd, &st ) == -1) || |
||||
+ (st.st_size >= pos) || |
||||
+ (lseek( fd, pos - 1, SEEK_SET) == (off_t)-1) || |
||||
+ (write( fd, "\0", 1) == -1) ) |
||||
+ return -1; |
||||
+ } |
||||
+ return 0; |
||||
} |
||||
|
||||
/* Return nonzero if NAME is the name of a regular file, or if the file |
@ -0,0 +1,92 @@
@@ -0,0 +1,92 @@
|
||||
diff --git a/doc/tar.texi b/doc/tar.texi |
||||
index db8f986..d70d113 100644 |
||||
--- a/doc/tar.texi |
||||
+++ b/doc/tar.texi |
||||
@@ -7597,7 +7597,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 |
||||
|
||||
@@ -12038,6 +12038,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 ba4d509..3911f8c 100644 |
||||
--- a/src/names.c |
||||
+++ b/src/names.c |
||||
@@ -966,10 +966,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 928cfdd..22d3db1 100644 |
||||
--- a/src/tar.c |
||||
+++ b/src/tar.c |
||||
@@ -722,7 +722,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, |
||||
@@ -815,8 +815,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 |
||||
}; |
||||
@@ -847,7 +846,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) |
||||
@@ -2347,7 +2346,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 778a7fc..bd65ae0 100644 |
||||
--- a/tests/exclude01.at |
||||
+++ b/tests/exclude01.at |
||||
@@ -59,6 +59,7 @@ testdir/dir2/file2 |
||||
testdir/dir3/ |
||||
NEXT |
||||
testdir/dir1/* |
||||
+testdir/dir1/file1 |
||||
NEXT |
||||
testdir/dir1/* |
||||
NEXT |
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
diff --git a/src/create.c b/src/create.c |
||||
index 43b5a4c..f98cbb5 100644 |
||||
--- a/src/create.c |
||||
+++ b/src/create.c |
||||
@@ -1798,7 +1798,8 @@ dump_file0 (struct tar_stat_info *st, char const *name, char const *p) |
||||
} |
||||
else if (atime_preserve_option == replace_atime_preserve |
||||
&& fd && (is_dir || original_size != 0) |
||||
- && set_file_atime (fd, parentfd, name, st->atime) != 0) |
||||
+ && set_file_atime (fd, parentfd, name, st->atime) != 0 |
||||
+ && errno != EROFS ) |
||||
utime_error (p); |
||||
} |
@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
|
||||
diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c |
||||
--- tar-1.23-orig/src/tar.c 2010-06-01 13:55:03.792173060 +0200 |
||||
+++ tar-1.23/src/tar.c 2010-06-01 14:01:40.494172986 +0200 |
||||
@@ -1911,6 +1911,10 @@ parse_opt (int key, char *arg, struct ar |
||||
_("Invalid number"))); |
||||
} |
||||
break; |
||||
+ |
||||
+ case OLD_ARCHIVE_OPTION: |
||||
+ set_archive_format ("v7"); |
||||
+ break; |
||||
|
||||
case OVERWRITE_DIR_OPTION: |
||||
old_files_option = DEFAULT_OLD_FILES; |
@ -0,0 +1,370 @@
@@ -0,0 +1,370 @@
|
||||
diff --git a/doc/tar.texi b/doc/tar.texi |
||||
index d70d113..a0e3d5f 100644 |
||||
--- a/doc/tar.texi |
||||
+++ b/doc/tar.texi |
||||
@@ -1881,6 +1881,7 @@ The other operations of @command{tar} (@option{--list}, |
||||
@option{--extract}, @option{--compare}, and @option{--update}) |
||||
will act on the entire contents of the archive. |
||||
|
||||
+@anchor{exit status} |
||||
@cindex exit status |
||||
@cindex return status |
||||
Besides successful exits, @GNUTAR{} may fail for |
||||
@@ -2815,7 +2816,10 @@ when extracting files from an archive. |
||||
@item --keep-old-files |
||||
@itemx -k |
||||
|
||||
-Do not overwrite existing files when extracting files from an archive. |
||||
+Do not overwrite existing files when extracting files from an |
||||
+archive. Return error if such files exist. See also |
||||
+@ref{--skip-old-files}. |
||||
+ |
||||
@xref{Keep Old Files}. |
||||
|
||||
@opsummary{label} |
||||
@@ -3268,6 +3272,20 @@ the archive creation operations it instructs @command{tar} to list the |
||||
member names stored in the archive, as opposed to the actual file |
||||
names. @xref{listing member and file names}. |
||||
|
||||
+@opsummary{skip-old-files} |
||||
+@item --skip-old-files |
||||
+ |
||||
+Do not overwrite existing files when extracting files from an |
||||
+archive. @xref{Keep Old Files}. |
||||
+ |
||||
+This option differs from @option{--keep-old-files} in that it does not |
||||
+treat such files as an error, instead it just silently avoids |
||||
+overwriting them. |
||||
+ |
||||
+The @option{--warning=existing-file} option can be used together with |
||||
+this option to produce warning messages about existing old files |
||||
+(@pxref{warnings}). |
||||
+ |
||||
@opsummary{sparse} |
||||
@item --sparse |
||||
@itemx -S |
||||
@@ -4443,11 +4461,11 @@ in the archive; the most recently archived members will be extracted |
||||
last. Additionally, an extracted member will @emph{replace} a file of |
||||
the same name which existed in the directory already, and @command{tar} |
||||
will not prompt you about this@footnote{Unless you give it |
||||
-@option{--keep-old-files} option, or the disk copy is newer than |
||||
-the one in the archive and you invoke @command{tar} with |
||||
-@option{--keep-newer-files} option.}. Thus, only the most recently archived |
||||
-member will end up being extracted, as it will replace the one |
||||
-extracted before it, and so on. |
||||
+@option{--keep-old-files} (or @option{--skip-old-files}) option, or |
||||
+the disk copy is newer than the one in the archive and you invoke |
||||
+@command{tar} with @option{--keep-newer-files} option.}. Thus, only |
||||
+the most recently archived member will end up being extracted, as it |
||||
+will replace the one extracted before it, and so on. |
||||
|
||||
@cindex extracting @var{n}th copy of the file |
||||
@xopindex{occurrence, described} |
||||
@@ -5123,10 +5141,25 @@ such a directory, use the @option{--no-overwrite-dir} option. |
||||
@cindex Overwriting old files, prevention |
||||
@xopindex{keep-old-files, introduced} |
||||
To be even more cautious and prevent existing files from being replaced, use |
||||
-the @option{--keep-old-files} (@option{-k}) option. It causes @command{tar} to refuse |
||||
-to replace or update a file that already exists, i.e., a file with the |
||||
-same name as an archive member prevents extraction of that archive |
||||
-member. Instead, it reports an error. |
||||
+the @option{--keep-old-files} (@option{-k}) option. It causes |
||||
+@command{tar} to refuse to replace or update a file that already |
||||
+exists, i.e., a file with the same name as an archive member prevents |
||||
+extraction of that archive member. Instead, it reports an error. For |
||||
+example: |
||||
+ |
||||
+@example |
||||
+$ @kbd{ls} |
||||
+blues |
||||
+$ @kbd{tar -x -k -f archive.tar} |
||||
+tar: blues: Cannot open: File exists |
||||
+tar: Exiting with failure status due to previous errors |
||||
+@end example |
||||
+ |
||||
+@xopindex{skip-old-files, introduced} |
||||
+If you wish to preserve old files untouched, but don't want |
||||
+@command{tar} to treat them as errors, use the |
||||
+@option{--skip-old-files} option. This option causes @command{tar} to |
||||
+silently skip extracting over existing files. |
||||
|
||||
@xopindex{overwrite, introduced} |
||||
To be more aggressive about altering existing files, use the |
||||
@@ -5192,16 +5225,24 @@ archive, but remove other files before extracting. |
||||
@node Keep Old Files |
||||
@unnumberedsubsubsec Keep Old Files |
||||
|
||||
+@GNUTAR{} provides two options to control its actions in a situation |
||||
+when it is about to extract a file which already exists on disk. |
||||
+ |
||||
@table @option |
||||
@opindex keep-old-files |
||||
@item --keep-old-files |
||||
@itemx -k |
||||
-Do not replace existing files from archive. The |
||||
-@option{--keep-old-files} (@option{-k}) option prevents @command{tar} |
||||
-from replacing existing files with files with the same name from the |
||||
-archive. The @option{--keep-old-files} option is meaningless with |
||||
-@option{--list} (@option{-t}). Prevents @command{tar} from replacing |
||||
-files in the file system during extraction. |
||||
+Do not replace existing files from archive. When such a file is |
||||
+encountered, @command{tar} issues an error message. Upon end of |
||||
+extraction, @command{tar} exits with code 2 (@pxref{exit status}). |
||||
+ |
||||
+@item --skip-old-files |
||||
+Do not replace existing files from archive, but do not treat that |
||||
+as error. Such files are silently skipped and do not affect |
||||
+@command{tar} exit status. |
||||
+ |
||||
+Additional verbosity can be obtained using @option{--warning=existing-file} |
||||
+together with that option (@pxref{warnings}). |
||||
@end table |
||||
|
||||
@node Keep Newer Files |
||||
diff --git a/src/common.h b/src/common.h |
||||
index 0b9bd7a..2409413 100644 |
||||
--- a/src/common.h |
||||
+++ b/src/common.h |
||||
@@ -182,6 +182,7 @@ enum old_files |
||||
OVERWRITE_OLD_FILES, /* --overwrite */ |
||||
UNLINK_FIRST_OLD_FILES, /* --unlink-first */ |
||||
KEEP_OLD_FILES, /* --keep-old-files */ |
||||
+ SKIP_OLD_FILES, /* --skip-old-files */ |
||||
KEEP_NEWER_FILES /* --keep-newer-files */ |
||||
}; |
||||
GLOBAL enum old_files old_files_option; |
||||
@@ -807,11 +808,12 @@ void checkpoint_run (bool do_write); |
||||
#define WARN_UNKNOWN_KEYWORD 0x00020000 |
||||
#define WARN_XDEV 0x00040000 |
||||
#define WARN_DECOMPRESS_PROGRAM 0x00080000 |
||||
+#define WARN_EXISTING_FILE 0x00100000 |
||||
|
||||
/* The warnings composing WARN_VERBOSE_WARNINGS are enabled by default |
||||
in verbose mode */ |
||||
#define WARN_VERBOSE_WARNINGS (WARN_RENAME_DIRECTORY|WARN_NEW_DIRECTORY|\ |
||||
- WARN_DECOMPRESS_PROGRAM) |
||||
+ WARN_DECOMPRESS_PROGRAM|WARN_EXISTING_FILE) |
||||
#define WARN_ALL (~WARN_VERBOSE_WARNINGS) |
||||
|
||||
void set_warning_option (const char *arg); |
||||
diff --git a/src/extract.c b/src/extract.c |
||||
index aaea56e..662ea0b 100644 |
||||
--- a/src/extract.c |
||||
+++ b/src/extract.c |
||||
@@ -639,9 +639,14 @@ maybe_recoverable (char *file_name, bool regular, bool *interdir_made) |
||||
|
||||
switch (old_files_option) |
||||
{ |
||||
- case KEEP_OLD_FILES: |
||||
+ case SKIP_OLD_FILES: |
||||
+ WARNOPT (WARN_EXISTING_FILE, |
||||
+ (0, 0, _("%s: skipping existing file"), file_name)); |
||||
return RECOVER_SKIP; |
||||
|
||||
+ case KEEP_OLD_FILES: |
||||
+ return RECOVER_NO; |
||||
+ |
||||
case KEEP_NEWER_FILES: |
||||
if (file_newer_p (file_name, stp, ¤t_stat_info)) |
||||
break; |
||||
diff --git a/src/tar.c b/src/tar.c |
||||
index 7b62996..7a673e0 100644 |
||||
--- a/src/tar.c |
||||
+++ b/src/tar.c |
||||
@@ -328,6 +328,7 @@ enum |
||||
SHOW_DEFAULTS_OPTION, |
||||
SHOW_OMITTED_DIRS_OPTION, |
||||
SHOW_TRANSFORMED_NAMES_OPTION, |
||||
+ SKIP_OLD_FILES_OPTION, |
||||
SPARSE_VERSION_OPTION, |
||||
STRIP_COMPONENTS_OPTION, |
||||
SUFFIX_OPTION, |
||||
@@ -452,7 +453,11 @@ static struct argp_option options[] = { |
||||
{"remove-files", REMOVE_FILES_OPTION, 0, 0, |
||||
N_("remove files after adding them to the archive"), GRID+1 }, |
||||
{"keep-old-files", 'k', 0, 0, |
||||
- N_("don't replace existing files when extracting"), GRID+1 }, |
||||
+ N_("don't replace existing files when extracting, " |
||||
+ "treat them as errors"), GRID+1 }, |
||||
+ {"skip-old-files", SKIP_OLD_FILES_OPTION, 0, 0, |
||||
+ N_("don't replace existing files when extracting, silently skip over them"), |
||||
+ GRID+1 }, |
||||
{"keep-newer-files", KEEP_NEWER_FILES_OPTION, 0, 0, |
||||
N_("don't replace existing files that are newer than their archive copies"), GRID+1 }, |
||||
{"overwrite", OVERWRITE_OPTION, 0, 0, |
||||
@@ -1618,6 +1623,10 @@ parse_opt (int key, char *arg, struct argp_state *state) |
||||
sparse_option = true; |
||||
break; |
||||
|
||||
+ case SKIP_OLD_FILES_OPTION: |
||||
+ old_files_option = SKIP_OLD_FILES; |
||||
+ break; |
||||
+ |
||||
case SPARSE_VERSION_OPTION: |
||||
sparse_option = true; |
||||
{ |
||||
diff --git a/src/warning.c b/src/warning.c |
||||
index 5d1bcab..ee9d684 100644 |
||||
--- a/src/warning.c |
||||
+++ b/src/warning.c |
||||
@@ -42,6 +42,7 @@ static char const *const warning_args[] = { |
||||
"unknown-keyword", |
||||
"xdev", |
||||
"decompress-program", |
||||
+ "existing-file", |
||||
NULL |
||||
}; |
||||
|
||||
@@ -66,7 +67,8 @@ static int warning_types[] = { |
||||
WARN_UNKNOWN_CAST, |
||||
WARN_UNKNOWN_KEYWORD, |
||||
WARN_XDEV, |
||||
- WARN_DECOMPRESS_PROGRAM |
||||
+ WARN_DECOMPRESS_PROGRAM, |
||||
+ WARN_EXISTING_FILE, |
||||
}; |
||||
|
||||
ARGMATCH_VERIFY (warning_args, warning_types); |
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am |
||||
index 119f1f3..3d78ea2 100644 |
||||
--- a/tests/Makefile.am |
||||
+++ b/tests/Makefile.am |
||||
@@ -77,6 +77,8 @@ TESTSUITE_AT = \ |
||||
extrac07.at\ |
||||
extrac08.at\ |
||||
extrac09.at\ |
||||
+ extrac18.at\ |
||||
+ extrac19.at\ |
||||
extrac10.at\ |
||||
extrac11.at\ |
||||
extrac12.at\ |
||||
diff --git a/tests/extrac18.at b/tests/extrac18.at |
||||
new file mode 100644 |
||||
index 0000000..8b42ef7 |
||||
--- /dev/null |
||||
+++ b/tests/extrac18.at |
||||
@@ -0,0 +1,60 @@ |
||||
+# Process this file with autom4te to create testsuite. -*- Autotest -*- |
||||
+# |
||||
+# Test suite for GNU tar. |
||||
+# Copyright (C) 2011 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, see <http://www.gnu.org/licenses/>. |
||||
+ |
||||
+# Description: Check the functionality of the --keep-old-files option. |
||||
+# It should report an error and cause tar to exit with status 2. |
||||
+# |
||||
+# There was a regression in versions 1.23 to 1.26 inclusive, where |
||||
+# this option silently skipped such files. |
||||
+# Reported by: Doug McLaren <dougmc@frenzied.us>, |
||||
+# Gary Partis <gary@partis.co.uk>, |
||||
+# Jim Meyering <jim@meyering.net> |
||||
+# |
||||
+# References: <20111117045433.GA8245@algol.frenzied.us>, |
||||
+# <4F3D824717847C4487F77228F83329A3514CBB@server.Partis.local>, |
||||
+# <87wrar6zzz.fsf@rho.meyering.net> |
||||
+ |
||||
+AT_SETUP([keep-old-files]) |
||||
+AT_KEYWORDS([extract extrac18 old-files keep-old-files]) |
||||
+ |
||||
+AT_TAR_CHECK([ |
||||
+mkdir dir |
||||
+cd dir |
||||
+echo 'Old file a' > a |
||||
+echo 'Old file b' > b |
||||
+ |
||||
+tar cf ../archive . |
||||
+ |
||||
+rm b |
||||
+echo 'File a' > a |
||||
+ |
||||
+tar -x -k -f ../archive |
||||
+echo status=$? |
||||
+ |
||||
+cat a |
||||
+], |
||||
+[0], |
||||
+[status=2 |
||||
+File a |
||||
+], |
||||
+[tar: ./a: Cannot open: File exists |
||||
+tar: Exiting with failure status due to previous errors |
||||
+]) |
||||
+ |
||||
+AT_CLEANUP |
||||
+ |
||||
diff --git a/tests/extrac19.at b/tests/extrac19.at |
||||
new file mode 100644 |
||||
index 0000000..43c4c50 |
||||
--- /dev/null |
||||
+++ b/tests/extrac19.at |
||||
@@ -0,0 +1,44 @@ |
||||
+# Process this file with autom4te to create testsuite. -*- Autotest -*- |
||||
+# |
||||
+# Test suite for GNU tar. |
||||
+# Copyright (C) 2011 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, see <http://www.gnu.org/licenses/>. |
||||
+ |
||||
+AT_SETUP([skip-old-files]) |
||||
+AT_KEYWORDS([extract extrac19 old-files skip-old-files]) |
||||
+ |
||||
+AT_TAR_CHECK([ |
||||
+mkdir dir |
||||
+cd dir |
||||
+echo 'Old file a' > a |
||||
+echo 'Old file b' > b |
||||
+ |
||||
+tar cf ../archive . |
||||
+ |
||||
+rm b |
||||
+echo 'File a' > a |
||||
+ |
||||
+tar -x --skip-old-files -f ../archive |
||||
+echo status=$? |
||||
+ |
||||
+cat a |
||||
+], |
||||
+[0], |
||||
+[status=0 |
||||
+File a |
||||
+]) |
||||
+ |
||||
+AT_CLEANUP |
||||
+ |
||||
diff --git a/tests/testsuite.at b/tests/testsuite.at |
||||
index d1dab36..e43653e 100644 |
||||
--- a/tests/testsuite.at |
||||
+++ b/tests/testsuite.at |
||||
@@ -166,6 +166,9 @@ m4_include([extrac15.at]) |
||||
m4_include([extrac16.at]) |
||||
m4_include([extrac17.at]) |
||||
|
||||
+m4_include([extrac18.at]) |
||||
+m4_include([extrac19.at]) |
||||
+ |
||||
m4_include([label01.at]) |
||||
m4_include([label02.at]) |
||||
m4_include([label03.at]) |
@ -0,0 +1,266 @@
@@ -0,0 +1,266 @@
|
||||
From e3a7b9c8f26ca3b5a9aedd4c1d596a4a8504c812 Mon Sep 17 00:00:00 2001 |
||||
From: Pavel Raiskup <praiskup@redhat.com> |
||||
Date: Thu, 4 Jun 2015 09:30:38 +0200 |
||||
Subject: [PATCH] acls: don't mistakenly set default ACLs |
||||
|
||||
Upstream commits |
||||
efbf4cce0b93e8c5a5fc93335b917bbeae2f67cb |
||||
9df17e6005e7a333399e3dc21a7afec75565c767 |
||||
7fe7adcbb985e78aaf9f78051fa26167779be1f6 |
||||
--- |
||||
configure.ac | 2 + |
||||
src/xattrs.c | 37 ++++++++++++--- |
||||
tests/Makefile.am | 1 + |
||||
tests/acls03.at | 131 +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||||
tests/testsuite.at | 1 + |
||||
5 files changed, 165 insertions(+), 7 deletions(-) |
||||
create mode 100644 tests/acls03.at |
||||
|
||||
diff --git a/configure.ac b/configure.ac |
||||
index 9b3e0c8..7ccb579 100644 |
||||
--- a/configure.ac |
||||
+++ b/configure.ac |
||||
@@ -85,6 +85,8 @@ if test "x$with_posix_acls" != "xno"; then |
||||
AC_SEARCH_LIBS([acl_set_fd], [acl pacl],, [with_posix_acl=no]) |
||||
AC_SEARCH_LIBS([acl_to_text], [acl pacl],, [with_posix_acl=no]) |
||||
AC_SEARCH_LIBS([acl_from_text], [acl pacl],, [with_posix_acl=no]) |
||||
+ AC_SEARCH_LIBS([acl_delete_def_file], [acl pacl],, [with_posix_acl=no]) |
||||
+ AC_SEARCH_LIBS([acl_free], [acl pacl],, [with_posix_acl=no]) |
||||
if test "x$with_posix_acls" != xno; then |
||||
AC_DEFINE(HAVE_POSIX_ACLS,,[Define when we have working POSIX acls]) |
||||
fi |
||||
diff --git a/src/xattrs.c b/src/xattrs.c |
||||
index bdf6ba0..5bd4b02 100644 |
||||
--- a/src/xattrs.c |
||||
+++ b/src/xattrs.c |
||||
@@ -61,6 +61,7 @@ static struct |
||||
acl_t acl_get_file_at (int dirfd, const char *file, acl_type_t type); |
||||
int acl_set_file_at (int dirfd, const char *file, acl_type_t type, acl_t acl); |
||||
int file_has_acl_at (int dirfd, char const *, struct stat const *); |
||||
+int acl_delete_def_file_at (int, char const *); |
||||
|
||||
/* acl_get_file_at */ |
||||
#define AT_FUNC_NAME acl_get_file_at |
||||
@@ -88,6 +89,17 @@ int file_has_acl_at (int dirfd, char const *, struct stat const *); |
||||
#undef AT_FUNC_POST_FILE_PARAM_DECLS |
||||
#undef AT_FUNC_POST_FILE_ARGS |
||||
|
||||
+/* acl_delete_def_file_at */ |
||||
+#define AT_FUNC_NAME acl_delete_def_file_at |
||||
+#define AT_FUNC_F1 acl_delete_def_file |
||||
+#define AT_FUNC_POST_FILE_PARAM_DECLS |
||||
+#define AT_FUNC_POST_FILE_ARGS |
||||
+#include "at-func.c" |
||||
+#undef AT_FUNC_NAME |
||||
+#undef AT_FUNC_F1 |
||||
+#undef AT_FUNC_POST_FILE_PARAM_DECLS |
||||
+#undef AT_FUNC_POST_FILE_ARGS |
||||
+ |
||||
/* gnulib file_has_acl_at */ |
||||
#define AT_FUNC_NAME file_has_acl_at |
||||
#define AT_FUNC_F1 file_has_acl |
||||
@@ -187,7 +199,8 @@ fixup_extra_acl_fields (char *ptr) |
||||
return ptr; |
||||
} |
||||
|
||||
-/* "system.posix_acl_access" */ |
||||
+/* Set the "system.posix_acl_access/system.posix_acl_default" extended |
||||
+ attribute. Called only when acls_option > 0. */ |
||||
static void |
||||
xattrs__acls_set (struct tar_stat_info const *st, |
||||
char const *file_name, int type, |
||||
@@ -199,15 +212,25 @@ xattrs__acls_set (struct tar_stat_info const *st, |
||||
{ |
||||
/* assert (strlen (ptr) == len); */ |
||||
ptr = fixup_extra_acl_fields (ptr); |
||||
- |
||||
acl = acl_from_text (ptr); |
||||
- acls_option = 1; |
||||
} |
||||
- else if (acls_option > 0) |
||||
+ else if (def) |
||||
+ { |
||||
+ /* No "default" IEEE 1003.1e ACL set for directory. At this moment, |
||||
+ FILE_NAME may already have inherited default acls from parent |
||||
+ directory; clean them up. */ |
||||
+ if (acl_delete_def_file_at (chdir_fd, file_name)) |
||||
+ WARNOPT (WARN_XATTR_WRITE, |
||||
+ (0, errno, |
||||
+ _("acl_delete_def_file_at: Cannot drop default POSIX ACLs " |
||||
+ "for file '%s'"), |
||||
+ file_name)); |
||||
+ return; |
||||
+ } |
||||
+ else |
||||
+ /* There is nothing like "acl_delete_def_file" for non-default acls, we |
||||
+ need to re-set ACLs based on permission bits */ |
||||
acl = perms2acl (st->stat.st_mode); |
||||
- else |
||||
- return; /* don't call acl functions unless we first hit an ACL, or |
||||
- --acls was passed explicitly */ |
||||
|
||||
if (!acl) |
||||
{ |
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am |
||||
index b0da439..228e936 100644 |
||||
--- a/tests/Makefile.am |
||||
+++ b/tests/Makefile.am |
||||
@@ -179,6 +179,7 @@ TESTSUITE_AT = \ |
||||
xattr05.at\ |
||||
acls01.at\ |
||||
acls02.at\ |
||||
+ acls03.at\ |
||||
selnx01.at\ |
||||
selacl01.at\ |
||||
capabs_raw01.at |
||||
diff --git a/tests/acls03.at b/tests/acls03.at |
||||
new file mode 100644 |
||||
index 0000000..83c5bdc |
||||
--- /dev/null |
||||
+++ b/tests/acls03.at |
||||
@@ -0,0 +1,131 @@ |
||||
+# Process this file with autom4te to create testsuite. -*- Autotest -*- |
||||
+# |
||||
+# Test suite for GNU tar. |
||||
+# Copyright 2013, 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/>. |
||||
+# |
||||
+# Test description: |
||||
+# |
||||
+# Check the storing/restoring with/without default ACLs. When --acls is passed, |
||||
+# restored directory tree should always match archive contents (even when the |
||||
+# archive does not contain any ACLs). |
||||
+# |
||||
+# References: |
||||
+# http://www.mail-archive.com/bug-tar@gnu.org/msg04355.html |
||||
+ |
||||
+AT_SETUP([acls: default ACLs]) |
||||
+AT_KEYWORDS([xattrs acls acls03]) |
||||
+ |
||||
+m4_define([ACL_LISTDIR], [ |
||||
+ cd $1 |
||||
+ $1="$(find d1 | sort | xargs -n 1 getfacl)" |
||||
+ cd .. |
||||
+]) |
||||
+ |
||||
+m4_define([ACL_ASSERT], [ |
||||
+ echo "$$1" > $1.log |
||||
+ echo "$$2" > $2.log |
||||
+ if test ! "$$1" "$3" "$$2"; then |
||||
+ echo "bad '$1' against '$2' output" |
||||
+ fi |
||||
+]) |
||||
+ |
||||
+AT_TAR_CHECK([ |
||||
+AT_XATTRS_UTILS_PREREQ |
||||
+AT_ACLS_PREREQ |
||||
+AT_SORT_PREREQ |
||||
+ |
||||
+MYNAME=$( id -un ) |
||||
+MYGROUP=$( id -gn ) |
||||
+ |
||||
+# Prepare directory structure with default ACLs |
||||
+mkdir -p pure/d1/d2 |
||||
+genfile --file pure/d1/f2a |
||||
+genfile --file pure/d1/f2b |
||||
+genfile --file pure/d1/d2/f3a |
||||
+genfile --file pure/d1/d2/f3b |
||||
+setfacl -m g:$MYGROUP:r-x pure/d1 |
||||
+setfacl -d -m g:$MYGROUP:rwx pure/d1 |
||||
+setfacl -d -m u:$MYNAME:rwx pure/d1 |
||||
+# "*a" files have "some" additional ACLs |
||||
+setfacl -m u:$MYNAME:--- pure/d1/d2/f3a |
||||
+setfacl -m u:$MYNAME:--- pure/d1/f2a |
||||
+ |
||||
+# use default format (no acls stored) |
||||
+tar -cf noacl.tar -C pure d1 |
||||
+ |
||||
+# use posix format, acls stored |
||||
+tar --acls -cf acl.tar -C pure d1 |
||||
+ |
||||
+# Directory names are chosen based on "how the files were extracted from |
||||
+# archive". Equivalent no* tags are used also: |
||||
+# ^sacl_ — extracted archive has stored ACLs |
||||
+# _def_ — target directory (-C) has default ACLs |
||||
+# _optacl$ — extraction was done with --acls option |
||||
+ |
||||
+mkdir sacl_def_optacl |
||||
+mkdir sacl_def_optnoacl |
||||
+mkdir sacl_nodef_optacl |
||||
+mkdir sacl_nodef_optnoacl |
||||
+mkdir nosacl_def_optacl |
||||
+mkdir nosacl_def_optnoacl |
||||
+mkdir nosacl_nodef_optacl |
||||
+mkdir nosacl_nodef_optnoacl |
||||
+ |
||||
+setfacl -d -m u:$MYNAME:--- nosacl_def_optnoacl sacl_def_optnoacl sacl_def_optacl nosacl_def_optacl |
||||
+setfacl -d -m g:$MYGROUP:--- nosacl_def_optnoacl sacl_def_optnoacl sacl_def_optacl nosacl_def_optacl |
||||
+ |
||||
+tar -xf acl.tar -C sacl_nodef_optnoacl |
||||
+tar --acls -xf acl.tar -C sacl_nodef_optacl |
||||
+tar -xf acl.tar -C sacl_def_optnoacl |
||||
+tar --acls -xf acl.tar -C sacl_def_optacl |
||||
+tar -xf noacl.tar -C nosacl_def_optnoacl |
||||
+# _NO_ ACLs in output |
||||
+tar -xf noacl.tar -C nosacl_nodef_optnoacl |
||||
+tar -xf noacl.tar -C nosacl_nodef_optacl |
||||
+tar -cf noacl_repackaged.tar -C nosacl_nodef_optnoacl d1 |
||||
+# _NO_ ACLs in output (even when default ACLs exist) |
||||
+tar --acls -xf noacl_repackaged.tar -C nosacl_def_optacl |
||||
+ |
||||
+ACL_LISTDIR(pure) |
||||
+ |
||||
+ACL_LISTDIR(sacl_def_optacl) |
||||
+ACL_LISTDIR(sacl_def_optnoacl) |
||||
+ACL_LISTDIR(sacl_nodef_optacl) |
||||
+ACL_LISTDIR(sacl_nodef_optnoacl) |
||||
+ACL_LISTDIR(nosacl_def_optacl) |
||||
+ACL_LISTDIR(nosacl_def_optnoacl) |
||||
+ACL_LISTDIR(nosacl_nodef_optacl) |
||||
+ACL_LISTDIR(nosacl_nodef_optnoacl) |
||||
+ |
||||
+ACL_ASSERT(pure, sacl_def_optacl, =) |
||||
+ |
||||
+ACL_ASSERT(sacl_def_optacl, sacl_nodef_optacl, =) |
||||
+ACL_ASSERT(sacl_def_optnoacl, nosacl_def_optnoacl, =) |
||||
+ACL_ASSERT(sacl_nodef_optnoacl, nosacl_nodef_optnoacl, =) |
||||
+ACL_ASSERT(nosacl_def_optacl, nosacl_nodef_optacl, =) |
||||
+ACL_ASSERT(nosacl_def_optacl, nosacl_nodef_optnoacl, =) |
||||
+ |
||||
+ACL_ASSERT(sacl_def_optacl, sacl_def_optnoacl, !=) |
||||
+ACL_ASSERT(sacl_def_optacl, nosacl_def_optnoacl, !=) |
||||
+ACL_ASSERT(nosacl_def_optnoacl, nosacl_nodef_optnoacl, !=) |
||||
+], |
||||
+[0], |
||||
+[], |
||||
+[]) |
||||
+ |
||||
+AT_CLEANUP |
||||
diff --git a/tests/testsuite.at b/tests/testsuite.at |
||||
index d5925b3..10cf26a 100644 |
||||
--- a/tests/testsuite.at |
||||
+++ b/tests/testsuite.at |
||||
@@ -341,6 +341,7 @@ m4_include([xattr05.at]) |
||||
|
||||
m4_include([acls01.at]) |
||||
m4_include([acls02.at]) |
||||
+m4_include([acls03.at]) |
||||
|
||||
m4_include([selnx01.at]) |
||||
m4_include([selacl01.at]) |
||||
-- |
||||
2.1.0 |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,372 @@
@@ -0,0 +1,372 @@
|
||||
diff --git a/doc/tar.texi b/doc/tar.texi |
||||
index d678db9..ab8a0c8 100644 |
||||
--- a/doc/tar.texi |
||||
+++ b/doc/tar.texi |
||||
@@ -37,7 +37,8 @@ This manual is for @acronym{GNU} @command{tar} (version |
||||
from archives. |
||||
|
||||
Copyright @copyright{} 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2001, |
||||
-2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
||||
+2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software |
||||
+Foundation, Inc. |
||||
|
||||
@quotation |
||||
Permission is granted to copy, distribute and/or modify this document |
||||
@@ -162,6 +163,7 @@ How to Create Archives |
||||
How to List Archives |
||||
|
||||
* list dir:: |
||||
+* List Extended Attributes:: |
||||
|
||||
How to Extract Members from an Archive |
||||
|
||||
@@ -1492,6 +1494,7 @@ for a detailed discussion of globbing patterns and related |
||||
|
||||
@menu |
||||
* list dir:: |
||||
+* List Extended Attributes:: |
||||
@end menu |
||||
|
||||
@node list dir |
||||
@@ -1522,6 +1525,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 |
||||
@@ -2371,6 +2484,10 @@ Normally when creating an archive, @command{tar} strips an initial |
||||
@samp{/} from member names. 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 |
||||
|
||||
@@ -2919,6 +3036,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. |
||||
@@ -3002,11 +3124,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. |
||||
@@ -3239,6 +3370,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 |
||||
|
||||
@@ -3466,6 +3602,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. |
||||
@@ -4218,6 +4359,11 @@ tar (child): trying gzip |
||||
This means that @command{tar} first tried to decompress |
||||
@file{archive.Z} using @command{compress}, and, when that |
||||
failed, switched to @command{gzip}. |
||||
+@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: |
||||
@@ -8770,6 +8916,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{}. |
||||
@@ -9412,6 +9560,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 |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
From b6b3ed1fa4c6de12908a9f01d1689f156c3cd441 Mon Sep 17 00:00:00 2001 |
||||
From: Pavel Raiskup <praiskup@redhat.com> |
||||
Date: Wed, 1 Jul 2015 12:30:57 +0200 |
||||
Subject: [PATCH] selinux-h: avoid double free after *getfilecon() |
||||
|
||||
Originally reported by Ben Shelton on bug-tar: |
||||
http://lists.gnu.org/archive/html/bug-tar/2015-04/msg00009.html |
||||
|
||||
* lib/getfilecon.c (map_to_failure): Set the already freed '*con' |
||||
pointer to NULL. Man getfilecon(3) says that any non-NULL '*con' |
||||
parameter should be freed by freecon(3) (regardless the return |
||||
value). |
||||
--- |
||||
ChangeLog | 9 +++++++++ |
||||
lib/getfilecon.c | 1 + |
||||
2 files changed, 10 insertions(+) |
||||
|
||||
diff --git a/lib/getfilecon.c b/lib/getfilecon.c |
||||
index 9ac69be..ef6adc8 100644 |
||||
--- a/gnu/getfilecon.c |
||||
+++ b/gnu/getfilecon.c |
||||
@@ -57,6 +57,7 @@ map_to_failure (int ret, security_context_t *con) |
||||
if (ret == 10 && strcmp (*con, "unlabeled") == 0) |
||||
{ |
||||
freecon (*con); |
||||
+ *con = NULL; |
||||
errno = ENODATA; |
||||
return -1; |
||||
} |
||||
-- |
||||
2.7.4 |
@ -0,0 +1,91 @@
@@ -0,0 +1,91 @@
|
||||
diff --git a/gnu/stat-time.h b/gnu/stat-time.h |
||||
index 1dc4098..7b8428e 100644 |
||||
--- a/gnu/stat-time.h |
||||
+++ b/gnu/stat-time.h |
||||
@@ -144,7 +144,7 @@ get_stat_mtime (struct stat const *st) |
||||
} |
||||
|
||||
/* Return *ST's birth time, if available; otherwise return a value |
||||
- with negative tv_nsec. */ |
||||
+ with tv_sec and tv_nsec both equal to -1. */ |
||||
static inline struct timespec |
||||
get_stat_birthtime (struct stat const *st) |
||||
{ |
||||
@@ -163,7 +163,7 @@ get_stat_birthtime (struct stat const *st) |
||||
t.tv_sec = st->st_ctime; |
||||
t.tv_nsec = 0; |
||||
#else |
||||
- /* Birth time is not supported. Set tv_sec to avoid undefined behavior. */ |
||||
+ /* Birth time is not supported. */ |
||||
t.tv_sec = -1; |
||||
t.tv_nsec = -1; |
||||
/* Avoid a "parameter unused" warning. */ |
||||
@@ -177,10 +177,12 @@ get_stat_birthtime (struct stat const *st) |
||||
using zero. Attempt to work around this problem. Alas, this can |
||||
report failure even for valid time stamps. Also, NetBSD |
||||
sometimes returns junk in the birth time fields; work around this |
||||
- bug if it it is detected. There's no need to detect negative |
||||
- tv_nsec junk as negative tv_nsec already indicates an error. */ |
||||
- if (t.tv_sec == 0 || 1000000000 <= t.tv_nsec) |
||||
- t.tv_nsec = -1; |
||||
+ bug if it is detected. */ |
||||
+ if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) |
||||
+ { |
||||
+ t.tv_sec = -1; |
||||
+ t.tv_nsec = -1; |
||||
+ } |
||||
#endif |
||||
|
||||
return t; |
||||
diff --git a/src/extract.c b/src/extract.c |
||||
index 340beea..3afb95d 100644 |
||||
--- a/src/extract.c |
||||
+++ b/src/extract.c |
||||
@@ -119,12 +119,15 @@ struct delayed_link |
||||
/* The next delayed link in the list. */ |
||||
struct delayed_link *next; |
||||
|
||||
- /* The device, inode number and ctime of the placeholder. Use |
||||
- ctime, not mtime, to make false matches less likely if some |
||||
- other process removes the placeholder. */ |
||||
+ /* The device, inode number and birthtime of the placeholder. |
||||
+ birthtime.tv_nsec is negative if the birthtime is not available. |
||||
+ Don't use mtime as this would allow for false matches if some |
||||
+ other process removes the placeholder. Don't use ctime as |
||||
+ this would cause race conditions and other screwups, e.g., |
||||
+ when restoring hard-linked symlinks. */ |
||||
dev_t dev; |
||||
ino_t ino; |
||||
- struct timespec ctime; |
||||
+ struct timespec birthtime; |
||||
|
||||
/* True if the link is symbolic. */ |
||||
bool is_symlink; |
||||
@@ -1200,7 +1203,7 @@ create_placeholder_file (char *file_name, bool is_symlink, bool *interdir_made) |
||||
delayed_link_head = p; |
||||
p->dev = st.st_dev; |
||||
p->ino = st.st_ino; |
||||
- p->ctime = get_stat_ctime (&st); |
||||
+ p->birthtime = get_stat_birthtime (&st); |
||||
p->is_symlink = is_symlink; |
||||
if (is_symlink) |
||||
{ |
||||
@@ -1265,7 +1268,8 @@ extract_link (char *file_name, int typeflag) |
||||
if (ds->change_dir == chdir_current |
||||
&& ds->dev == st1.st_dev |
||||
&& ds->ino == st1.st_ino |
||||
- && timespec_cmp (ds->ctime, get_stat_ctime (&st1)) == 0) |
||||
+ && (timespec_cmp (ds->birthtime, get_stat_birthtime (&st1)) |
||||
+ == 0)) |
||||
{ |
||||
struct string_list *p = xmalloc (offsetof (struct string_list, string) |
||||
+ strlen (file_name) + 1); |
||||
@@ -1638,7 +1642,7 @@ apply_delayed_links (void) |
||||
if (fstatat (chdir_fd, source, &st, AT_SYMLINK_NOFOLLOW) == 0 |
||||
&& st.st_dev == ds->dev |
||||
&& st.st_ino == ds->ino |
||||
- && timespec_cmp (get_stat_ctime (&st), ds->ctime) == 0) |
||||
+ && timespec_cmp (get_stat_birthtime (&st), ds->birthtime) == 0) |
||||
{ |
||||
/* Unlink the placeholder, then create a hard link if possible, |
||||
a symbolic link otherwise. */ |
@ -0,0 +1,208 @@
@@ -0,0 +1,208 @@
|
||||
From 49b5cd11bc3d64b0316cfc5b7245d25e4f7f4fcd Mon Sep 17 00:00:00 2001 |
||||
From: Pavel Raiskup <praiskup@redhat.com> |
||||
Date: Thu, 19 Oct 2017 16:53:00 +0200 |
||||
Subject: [PATCH] test keep-directory-symlink |
||||
|
||||
Upstream commit: |
||||
From d06126f814563b01e598b85a8cc233604a2948f2 Mon Sep 17 00:00:00 2001 |
||||
From: Pavel Raiskup <praiskup@redhat.com> |
||||
Date: Tue, 28 Feb 2017 09:55:09 +0100 |
||||
Subject: [PATCH] Test and document --keep-directory-symlink |
||||
|
||||
* doc/tar.1: Document the option. |
||||
* tests/extrac20.at: New testcase. |
||||
* tests/Makefile.am: Mention extrac20. |
||||
* tests/testsuite.at: Likewise. |
||||
--- |
||||
tests/Makefile.am | 1 + |
||||
tests/extrac20.at | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||||
tests/testsuite.at | 2 +- |
||||
3 files changed, 153 insertions(+), 1 deletion(-) |
||||
create mode 100644 tests/extrac20.at |
||||
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am |
||||
index 094b71c..bd8d3e8 100644 |
||||
--- a/tests/Makefile.am |
||||
+++ b/tests/Makefile.am |
||||
@@ -79,6 +79,7 @@ TESTSUITE_AT = \ |
||||
extrac09.at\ |
||||
extrac18.at\ |
||||
extrac19.at\ |
||||
+ extrac20.at\ |
||||
extrac10.at\ |
||||
extrac11.at\ |
||||
extrac12.at\ |
||||
diff --git a/tests/extrac20.at b/tests/extrac20.at |
||||
new file mode 100644 |
||||
index 0000000..dd9b00d |
||||
--- /dev/null |
||||
+++ b/tests/extrac20.at |
||||
@@ -0,0 +1,151 @@ |
||||
+# Process this file with autom4te to create testsuite. -*- Autotest -*- |
||||
+# |
||||
+# Test suite for GNU tar. |
||||
+# Copyright 2017 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([keep-directory-symlink]) |
||||
+AT_KEYWORDS([extrac20 extract old-files keep-old-files]) |
||||
+ |
||||
+AT_TAR_CHECK([ |
||||
+AT_SORT_PREREQ |
||||
+ |
||||
+for i in a b c |
||||
+do |
||||
+ dir=in$i |
||||
+ mkdir -p $dir/root/dir $dir/root/dirsymlink |
||||
+ touch $dir/root/dirsymlink/file$i |
||||
+ test $i != a && touch $dir/root/dirsymlink/file.conflict |
||||
+ tar cf archive$i.tar -C $dir root |
||||
+done |
||||
+ |
||||
+prep() |
||||
+{ |
||||
+ echo "== $1 ==" |
||||
+ echo "== $1 ==" >&2 |
||||
+ backup_dir=$1 |
||||
+ dir=out |
||||
+ mkdir -p $dir/root/dir |
||||
+ ln -s dir $dir/root/dirsymlink |
||||
+ test $round = normal && cd $dir >/dev/null |
||||
+} |
||||
+ |
||||
+clean() |
||||
+{ |
||||
+ test $round = normal && cd .. >/dev/null |
||||
+ find $dir | sort |
||||
+ mv $dir $backup_dir |
||||
+} |
||||
+ |
||||
+# Expand to '-f ../$1' or '-f $1 -C $dir' depending on $round variable |
||||
+file_spec() |
||||
+{ |
||||
+ if test $round = normal |
||||
+ then |
||||
+ echo "-f ../$1" |
||||
+ else |
||||
+ echo "-f $1 -C $dir" |
||||
+ fi |
||||
+} |
||||
+ |
||||
+for round in normal dir |
||||
+do |
||||
+ # Check that 'dirsymlink' replaces 'dir' |
||||
+ prep without_option_$round |
||||
+ tar -x `file_spec archivea.tar` || exit 1 |
||||
+ tar -x `file_spec archiveb.tar` || exit 1 |
||||
+ clean |
||||
+ |
||||
+ # Keep directory symlink must keep root/dirsymlink |
||||
+ prep with_option_$round |
||||
+ tar -x --keep-directory-symlink `file_spec archivea.tar` || exit 1 |
||||
+ tar -x --keep-directory-symlink `file_spec archiveb.tar` || exit 1 |
||||
+ clean |
||||
+ |
||||
+ prep collision_$round |
||||
+ tar -x --keep-directory-symlink `file_spec archivea.tar` --keep-old-files || exit 1 |
||||
+ tar -x --keep-directory-symlink `file_spec archiveb.tar` --keep-old-files || exit 1 |
||||
+ tar -x --keep-directory-symlink `file_spec archivec.tar` --keep-old-files && exit 1 |
||||
+ clean |
||||
+done |
||||
+], |
||||
+[0], |
||||
+[== without_option_normal == |
||||
+out |
||||
+out/root |
||||
+out/root/dir |
||||
+out/root/dirsymlink |
||||
+out/root/dirsymlink/file.conflict |
||||
+out/root/dirsymlink/filea |
||||
+out/root/dirsymlink/fileb |
||||
+== with_option_normal == |
||||
+out |
||||
+out/root |
||||
+out/root/dir |
||||
+out/root/dir/file.conflict |
||||
+out/root/dir/filea |
||||
+out/root/dir/fileb |
||||
+out/root/dirsymlink |
||||
+== collision_normal == |
||||
+out |
||||
+out/root |
||||
+out/root/dir |
||||
+out/root/dir/file.conflict |
||||
+out/root/dir/filea |
||||
+out/root/dir/fileb |
||||
+out/root/dir/filec |
||||
+out/root/dirsymlink |
||||
+== without_option_dir == |
||||
+out |
||||
+out/root |
||||
+out/root/dir |
||||
+out/root/dirsymlink |
||||
+out/root/dirsymlink/file.conflict |
||||
+out/root/dirsymlink/filea |
||||
+out/root/dirsymlink/fileb |
||||
+== with_option_dir == |
||||
+out |
||||
+out/root |
||||
+out/root/dir |
||||
+out/root/dir/file.conflict |
||||
+out/root/dir/filea |
||||
+out/root/dir/fileb |
||||
+out/root/dirsymlink |
||||
+== collision_dir == |
||||
+out |
||||
+out/root |
||||
+out/root/dir |
||||
+out/root/dir/file.conflict |
||||
+out/root/dir/filea |
||||
+out/root/dir/fileb |
||||
+out/root/dir/filec |
||||
+out/root/dirsymlink |
||||
+], |
||||
+[== without_option_normal == |
||||
+== with_option_normal == |
||||
+== collision_normal == |
||||
+tar: root/dirsymlink/file.conflict: Cannot open: File exists |
||||
+tar: Exiting with failure status due to previous errors |
||||
+== without_option_dir == |
||||
+== with_option_dir == |
||||
+== collision_dir == |
||||
+tar: root/dirsymlink/file.conflict: Cannot open: File exists |
||||
+tar: Exiting with failure status due to previous errors |
||||
+]) |
||||
+ |
||||
+AT_CLEANUP |
||||
+ |
||||
diff --git a/tests/testsuite.at b/tests/testsuite.at |
||||
index f7f00ee..b540948 100644 |
||||
--- a/tests/testsuite.at |
||||
+++ b/tests/testsuite.at |
||||
@@ -234,9 +234,9 @@ m4_include([extrac14.at]) |
||||
m4_include([extrac15.at]) |
||||
m4_include([extrac16.at]) |
||||
m4_include([extrac17.at]) |
||||
- |
||||
m4_include([extrac18.at]) |
||||
m4_include([extrac19.at]) |
||||
+m4_include([extrac20.at]) |
||||
|
||||
m4_include([label01.at]) |
||||
m4_include([label02.at]) |
||||
-- |
||||
2.13.6 |
@ -0,0 +1,389 @@
@@ -0,0 +1,389 @@
|
||||
From 77cef4ee39ee083838e5cf2137b0f344b49afb6a Mon Sep 17 00:00:00 2001 |
||||
From: Pavel Raiskup <praiskup@redhat.com> |
||||
Date: Tue, 29 Jan 2013 10:39:30 +0100 |
||||
Subject: [PATCH 1/4] Fix bug in sparse file listing |
||||
|
||||
List posix archives containing sparse files >8GB correctly and do not fail. |
||||
This fixes also bug in format of listing for sparse files >8GB - now the |
||||
real size is printed instead of the effective one (this is not strictly |
||||
posix format related). |
||||
|
||||
* src/list.c: Remove redundant assignment. |
||||
* src/tar.h: Add new 'real_size' and 'real_size_set' fields in |
||||
tar_stat_info struct. |
||||
* src/xheader.c: Correctly handle (especially sparse) file sizes directly in |
||||
xheader_decode(). |
||||
--- |
||||
src/list.c | 1 - |
||||
src/tar.h | 4 ++++ |
||||
src/xheader.c | 15 ++++++++++++++- |
||||
3 files changed, 18 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/src/list.c b/src/list.c |
||||
index dd501a9..6db36d1 100644 |
||||
--- a/src/list.c |
||||
+++ b/src/list.c |
||||
@@ -670,7 +670,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/tar.h b/src/tar.h |
||||
index b181e58..690c146 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 be793d4..708aece 100644 |
||||
--- a/src/xheader.c |
||||
+++ b/src/xheader.c |
||||
@@ -764,6 +764,16 @@ xheader_decode (struct tar_stat_info *st) |
||||
continue; |
||||
} |
||||
run_override_list (keyword_override_list, st); |
||||
+ |
||||
+ /* The archived (effective) file size is always set directly in tar header |
||||
+ field, possibly overridden by "size" extended header - in both cases, |
||||
+ result is now decoded in st->stat.st_size */ |
||||
+ st->archive_file_size = st->stat.st_size; |
||||
+ |
||||
+ /* The real file size (given by stat()) may be redefined for sparse |
||||
+ files in "GNU.sparse.realsize" extended header */ |
||||
+ if (st->real_size_set) |
||||
+ st->stat.st_size = st->real_size; |
||||
} |
||||
|
||||
static void |
||||
@@ -1438,7 +1435,10 @@ 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; |
||||
+ { |
||||
+ st->real_size_set = 1; |
||||
+ st->real_size = u; |
||||
+ } |
||||
} |
||||
|
||||
static void |
||||
-- |
||||
2.13.5 |
||||
|
||||
|
||||
From 198d4621b2a367986c71cd2489c1465ec3be89dc Mon Sep 17 00:00:00 2001 |
||||
From: Sergey Poznyakoff <gray@gnu.org> |
||||
Date: Fri, 7 Nov 2014 11:47:44 +0200 |
||||
Subject: [PATCH 2/4] Add testcase for the previous commit. |
||||
|
||||
* tests/sparse05.at: New file. |
||||
* tests/Makefile.am: Add sparse05.at |
||||
* tests/testsuite.at: Include sparse05.at |
||||
--- |
||||
tests/Makefile.am | 1 + |
||||
tests/sparse05.at | 46 ++++++++++++++++++++++++++++++++++++++++++++++ |
||||
tests/testsuite.at | 1 + |
||||
3 files changed, 48 insertions(+) |
||||
create mode 100644 tests/sparse05.at |
||||
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am |
||||
index 8e1ef8d..094b71c 100644 |
||||
--- a/tests/Makefile.am |
||||
+++ b/tests/Makefile.am |
||||
@@ -171,6 +171,7 @@ TESTSUITE_AT = \ |
||||
sparse02.at\ |
||||
sparse03.at\ |
||||
sparse04.at\ |
||||
+ sparse05.at\ |
||||
sparsemv.at\ |
||||
sparsemvp.at\ |
||||
spmvp00.at\ |
||||
diff --git a/tests/sparse05.at b/tests/sparse05.at |
||||
new file mode 100644 |
||||
index 0000000..72f3274 |
||||
--- /dev/null |
||||
+++ b/tests/sparse05.at |
||||
@@ -0,0 +1,46 @@ |
||||
+# 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/>. |
||||
+ |
||||
+AT_SETUP([listing sparse files bigger than 2^33 B]) |
||||
+AT_KEYWORDS([sparse sparse05]) |
||||
+ |
||||
+# Description: If an archive in POSIX.1-2001 archive contained a sparse file |
||||
+# member whose real size (excluding zero blocks) is bigger than 2^33 bytes, |
||||
+# tar 1.28 would incorrectly list the real member size. |
||||
+# Reported by: Pavel Raiskup <praiskup@redhat.com> |
||||
+# References: <1359119879.15037.4.camel@raiskup>, |
||||
+# http://lists.gnu.org/archive/html/bug-tar/2013-01/msg00001.html |
||||
+ |
||||
+AT_TAR_CHECK([ |
||||
+(echo 0 =2560 |
||||
+for i in `seq 1 999`; do |
||||
+ echo 10M =2560 |
||||
+done) | genfile --sparse --file BIGFILE --block-size 4K - || AT_SKIP_TEST |
||||
+tar -f - -c --sparse --posix BIGFILE | tar tvf - | awk '{ print $3, $(NF) }' |
||||
+], |
||||
+[0], |
||||
+[20961034240 BIGFILE |
||||
+], |
||||
+[], |
||||
+[], |
||||
+[], |
||||
+[pax]) |
||||
+ |
||||
+AT_CLEANUP |
||||
diff --git a/tests/testsuite.at b/tests/testsuite.at |
||||
index 3eb0eee..f7f00ee 100644 |
||||
--- a/tests/testsuite.at |
||||
+++ b/tests/testsuite.at |
||||
@@ -308,6 +308,7 @@ m4_include([sparse01.at]) |
||||
m4_include([sparse02.at]) |
||||
m4_include([sparse03.at]) |
||||
m4_include([sparse04.at]) |
||||
+m4_include([sparse05.at]) |
||||
m4_include([sparsemv.at]) |
||||
m4_include([spmvp00.at]) |
||||
m4_include([spmvp01.at]) |
||||
-- |
||||
2.13.5 |
||||
|
||||
|
||||
From 8a795036f08bca508c3f3425f41c566562573e5f Mon Sep 17 00:00:00 2001 |
||||
From: Sergey Poznyakoff <gray@gnu.org> |
||||
Date: Fri, 7 Nov 2014 11:37:33 +0200 |
||||
Subject: [PATCH 3/4] genfile: improve sparse mode |
||||
|
||||
Paxutils: 45af1632aa64a5ba1b108e248920e67c180e8485 |
||||
|
||||
* tests/genfile.c (generate_sparse_file): Handle '-' argument |
||||
(read from stdin); |
||||
If content strings starts with '=', treat it as fragment size and |
||||
use default pattern to fill it. |
||||
* doc/genfile.texi: Document changes to genfile. |
||||
--- |
||||
doc/genfile.texi | 31 +++++++++++++++------- |
||||
tests/genfile.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++------- |
||||
2 files changed, 91 insertions(+), 19 deletions(-) |
||||
|
||||
diff --git a/doc/genfile.texi b/doc/genfile.texi |
||||
index b37e26e..b993b9b 100644 |
||||
--- a/doc/genfile.texi |
||||
+++ b/doc/genfile.texi |
||||
@@ -124,9 +124,8 @@ the rest of the command line specifies a so-called @dfn{file map}. |
||||
descriptors}. Each descriptor is composed of two values: a number, |
||||
specifying fragment offset from the end of the previous fragment or, |
||||
for the very first fragment, from the beginning of the file, and |
||||
-@dfn{contents string}, i.e., a string of characters, specifying the |
||||
-pattern to fill the fragment with. File offset can be suffixed with |
||||
-the following quantifiers: |
||||
+@dfn{contents string}, that specifies the pattern to fill the fragment |
||||
+with. File offset can be suffixed with the following quantifiers: |
||||
|
||||
@table @samp |
||||
@item k |
||||
@@ -140,17 +139,29 @@ The number is expressed in megabytes. |
||||
The number is expressed in gigabytes. |
||||
@end table |
||||
|
||||
- For each letter in contents string @command{genfile} will generate |
||||
-a @dfn{block} of data, filled with this letter and will write it to |
||||
-the fragment. The size of block is given by @option{--block-size} |
||||
-option. It defaults to 512. Thus, if the string consists of @var{n} |
||||
-characters, the resulting file fragment will contain |
||||
-@code{@var{n}*@var{block-size}} of data. |
||||
+ Contents string can be either a fragment size or a pattern. |
||||
+Fragment size is a decimal number, prefixed with an equals sign. It |
||||
+can be suffixed with a quantifier, as discussed above. If fragment |
||||
+size is given, the fragment of that size will be filled with the |
||||
+currently selected pattern (@pxref{Generate Mode, --pattern}) and |
||||
+written to the file. |
||||
|
||||
- Last fragment descriptor can have only file offset part. In this |
||||
+ A pattern is a string of arbitrary ASCII characters. For each |
||||
+of them, @command{genfile} will generate a @dfn{block} of data, |
||||
+filled with that character and will write it to the fragment. The size |
||||
+of block is given by @option{--block-size} option. It defaults to 512. |
||||
+Thus, if pattern consists of @var{n} characters, the resulting file |
||||
+fragment will contain @code{@var{n}*@var{block-size}} bytes of data. |
||||
+ |
||||
+ The last fragment descriptor can have only file offset part. In this |
||||
case @command{genfile} will create a hole at the end of the file up to |
||||
the given offset. |
||||
|
||||
+ A dash appearing as a fragment descriptor instructs |
||||
+@command{genfile} to read file map from the standard input. Each line |
||||
+of input should consist of fragment offset and contents string, |
||||
+separated by any amount of whitespace. |
||||
+ |
||||
For example, consider the following invocation: |
||||
|
||||
@smallexample |
||||
diff --git a/tests/genfile.c b/tests/genfile.c |
||||
index fa480ef..d41336b 100644 |
||||
--- a/tests/genfile.c |
||||
+++ b/tests/genfile.c |
||||
@@ -32,6 +32,7 @@ |
||||
#include <inttostr.h> |
||||
#include <fcntl.h> |
||||
#include <sys/stat.h> |
||||
+#include <c-ctype.h> |
||||
#define obstack_chunk_alloc malloc |
||||
#define obstack_chunk_free free |
||||
#include <obstack.h> |
||||
@@ -506,6 +507,53 @@ mksparse (int fd, off_t displ, char *marks) |
||||
} |
||||
} |
||||
|
||||
+static int |
||||
+make_fragment (int fd, char *offstr, char *mapstr) |
||||
+{ |
||||
+ int i; |
||||
+ off_t displ = get_size (offstr, 1); |
||||
+ |
||||
+ file_length += displ; |
||||
+ |
||||
+ if (!mapstr || !*mapstr) |
||||
+ { |
||||
+ mkhole (fd, displ); |
||||
+ return 1; |
||||
+ } |
||||
+ else if (*mapstr == '=') |
||||
+ { |
||||
+ off_t n = get_size (mapstr + 1, 1); |
||||
+ |
||||
+ switch (pattern) |
||||
+ { |
||||
+ case DEFAULT_PATTERN: |
||||
+ for (i = 0; i < block_size; i++) |
||||
+ buffer[i] = i & 255; |
||||
+ break; |
||||
+ |
||||
+ case ZEROS_PATTERN: |
||||
+ memset (buffer, 0, block_size); |
||||
+ break; |
||||
+ } |
||||
+ |
||||
+ if (lseek (fd, displ, SEEK_CUR) == -1) |
||||
+ error (EXIT_FAILURE, errno, "lseek"); |
||||
+ |
||||
+ for (; n; n--) |
||||
+ { |
||||
+ if (write (fd, buffer, block_size) != block_size) |
||||
+ error (EXIT_FAILURE, errno, "write"); |
||||
+ file_length += block_size; |
||||
+ } |
||||
+ } |
||||
+ else |
||||
+ { |
||||
+ file_length += block_size * strlen (mapstr); |
||||
+ mksparse (fd, displ, mapstr); |
||||
+ } |
||||
+ return 0; |
||||
+} |
||||
+ |
||||
static void |
||||
generate_sparse_file (int argc, char **argv) |
||||
{ |
||||
@@ -526,20 +574,33 @@ generate_sparse_file (int argc, char **argv) |
||||
|
||||
file_length = 0; |
||||
|
||||
- for (i = 0; i < argc; i += 2) |
||||
+ while (argc) |
||||
{ |
||||
- off_t displ = get_size (argv[i], 1); |
||||
- file_length += displ; |
||||
+ if (argv[0][0] == '-' && argv[0][1] == 0) |
||||
+ { |
||||
+ char buf[256]; |
||||
+ while (fgets (buf, sizeof (buf), stdin)) |
||||
+ { |
||||
+ size_t n = strlen (buf); |
||||
|
||||
- if (i == argc-1) |
||||
- { |
||||
- mkhole (fd, displ); |
||||
- break; |
||||
+ while (n > 0 && c_isspace (buf[n-1])) |
||||
+ buf[--n] = 0; |
||||
+ |
||||
+ n = strcspn (buf, " \t"); |
||||
+ buf[n++] = 0; |
||||
+ while (buf[n] && c_isblank (buf[n])) |
||||
+ ++n; |
||||
+ make_fragment (fd, buf, buf + n); |
||||
+ } |
||||
+ ++argv; |
||||
+ --argc; |
||||
} |
||||
else |
||||
{ |
||||
- file_length += block_size * strlen (argv[i+1]); |
||||
- mksparse (fd, displ, argv[i+1]); |
||||
+ if (make_fragment (fd, argv[0], argv[1])) |
||||
+ break; |
||||
+ argc -= 2; |
||||
+ argv += 2; |
||||
} |
||||
} |
||||
|
||||
-- |
||||
2.13.5 |
||||
|
||||
|
||||
From 29e35df407d6c7b1e1ff57f7ef2030a253132a8a Mon Sep 17 00:00:00 2001 |
||||
From: Pavel Raiskup <praiskup@redhat.com> |
||||
Date: Fri, 4 Dec 2015 19:36:14 +0100 |
||||
Subject: [PATCH 4/4] genfile: remove unused variable |
||||
|
||||
paxutils: 58b8ac114790e2de7992db1a387ec14238783f39 |
||||
|
||||
* tests/genfile.c (generate_sparse_file): Remove unused 'i'. |
||||
--- |
||||
tests/genfile.c | 1 - |
||||
1 file changed, 1 deletion(-) |
||||
|
||||
diff --git a/tests/genfile.c b/tests/genfile.c |
||||
index d41336b..4699d21 100644 |
||||
--- a/tests/genfile.c |
||||
+++ b/tests/genfile.c |
||||
@@ -557,7 +557,6 @@ make_fragment (int fd, char *offstr, char *mapstr) |
||||
static void |
||||
generate_sparse_file (int argc, char **argv) |
||||
{ |
||||
- int i; |
||||
int fd; |
||||
int flags = O_CREAT | O_RDWR | O_BINARY; |
||||
|
||||
-- |
||||
2.13.5 |
@ -0,0 +1,77 @@
@@ -0,0 +1,77 @@
|
||||
|
||||
From 1847ec67cec36a17354115374954fea211d1f0da Mon Sep 17 00:00:00 2001 |
||||
From: Sergey Poznyakoff <gray@gnu.org.ua> |
||||
Date: Thu, 19 Feb 2015 17:00:58 +0200 |
||||
Subject: [PATCH] Improve compression format recognition |
||||
|
||||
Some comressed archives can pass the checksum test, which makes tar |
||||
treat them as uncompressed archives. |
||||
|
||||
* src/buffer.c (check_compressed_archive): Test the checksum only |
||||
if the block we read looks like a valid tar header (i.e. has |
||||
a magic string). |
||||
--- |
||||
src/buffer.c | 5 ++++- |
||||
1 file changed, 4 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/src/buffer.c b/src/buffer.c |
||||
index a7d8971..1a96595 100644 |
||||
--- a/src/buffer.c |
||||
+++ b/src/buffer.c |
||||
@@ -391,7 +391,10 @@ check_compressed_archive (bool *pshort) |
||||
/* Restore global values */ |
||||
read_full_records = sfr; |
||||
|
||||
- if (tar_checksum (record_start, true) == HEADER_SUCCESS) |
||||
+ if ((strcmp (record_start->header.magic, TMAGIC) == 0 || |
||||
+ strcmp (record_start->buffer + offsetof (struct posix_header, magic), |
||||
+ OLDGNU_MAGIC) == 0) && |
||||
+ tar_checksum (record_start, true) == HEADER_SUCCESS) |
||||
/* Probably a valid header */ |
||||
return ct_tar; |
||||
|
||||
-- |
||||
2.13.5 |
||||
|
||||
|
||||
|
||||
From 1e8b786e651d174a5fc9bf63a08d00c2d592ee3e Mon Sep 17 00:00:00 2001 |
||||
From: Pavel Raiskup <praiskup@redhat.com> |
||||
Date: Thu, 30 Mar 2017 13:30:15 +0200 |
||||
Subject: [PATCH] Fix non-deterministic archive type detection |
||||
|
||||
Due to analysis of partly uninitialized read-ahead buffer |
||||
(short_read call), we sometimes mistakenly classified very small |
||||
compressed archives as non-compressed; which in turn caused |
||||
extraction failure. |
||||
|
||||
* src/buffer.c (check_compressed_archive): Don't assume that |
||||
archives smaller than BLOCKSIZE could be non-compressed, as tar |
||||
header always has at least one block. |
||||
--- |
||||
src/buffer.c | 10 ++++++---- |
||||
1 file changed, 6 insertions(+), 4 deletions(-) |
||||
|
||||
diff --git a/src/buffer.c b/src/buffer.c |
||||
index 57fe813..6f96c2f 100644 |
||||
--- a/src/buffer.c |
||||
+++ b/src/buffer.c |
||||
@@ -402,10 +402,12 @@ check_compressed_archive (bool *pshort) |
||||
/* Restore global values */ |
||||
read_full_records = sfr; |
||||
|
||||
- if ((strcmp (record_start->header.magic, TMAGIC) == 0 || |
||||
- strcmp (record_start->buffer + offsetof (struct posix_header, magic), |
||||
- OLDGNU_MAGIC) == 0) && |
||||
- tar_checksum (record_start, true) == HEADER_SUCCESS) |
||||
+ if (record_start != record_end /* no files smaller than BLOCKSIZE */ |
||||
+ && (strcmp (record_start->header.magic, TMAGIC) == 0 |
||||
+ || strcmp (record_start->buffer + offsetof (struct posix_header, |
||||
+ magic), |
||||
+ OLDGNU_MAGIC) == 0) |
||||
+ && tar_checksum (record_start, true) == HEADER_SUCCESS) |
||||
/* Probably a valid header */ |
||||
return ct_tar; |
||||
|
||||
-- |
||||
2.13.5 |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
diff --git a/src/create.c b/src/create.c |
||||
index 25387a9..9a7a05a 100644 |
||||
--- a/src/create.c |
||||
+++ b/src/create.c |
||||
@@ -514,8 +514,8 @@ start_private_header (const char *name, size_t size, time_t t) |
||||
|
||||
TIME_TO_CHARS (t, header->header.mtime); |
||||
MODE_TO_CHARS (S_IFREG|S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, header->header.mode); |
||||
- UID_TO_CHARS (getuid (), header->header.uid); |
||||
- GID_TO_CHARS (getgid (), header->header.gid); |
||||
+ UID_TO_CHARS (0, header->header.uid); |
||||
+ GID_TO_CHARS (0, header->header.gid); |
||||
MAJOR_TO_CHARS (0, header->header.devmajor); |
||||
MINOR_TO_CHARS (0, header->header.devminor); |
||||
strncpy (header->header.magic, TMAGIC, TMAGLEN); |
@ -0,0 +1,250 @@
@@ -0,0 +1,250 @@
|
||||
diff -urN tar-1.26/src/common.h tar-1.26new/src/common.h |
||||
--- tar-1.26/src/common.h 2017-01-24 09:43:08.638550577 +0100 |
||||
+++ tar-1.26new/src/common.h 2017-01-23 10:58:19.675411746 +0100 |
||||
@@ -598,6 +598,7 @@ |
||||
char *normalize_filename (const char *name); |
||||
void replace_prefix (char **pname, const char *samp, size_t slen, |
||||
const char *repl, size_t rlen); |
||||
+char *tar_savedir (const char *name, int must_exist); |
||||
|
||||
typedef struct namebuf *namebuf_t; |
||||
namebuf_t namebuf_create (const char *dir); |
||||
diff -urN tar-1.26/src/incremen.c tar-1.26new/src/incremen.c |
||||
--- tar-1.26/src/incremen.c 2011-02-16 23:12:16.000000000 +0100 |
||||
+++ tar-1.26new/src/incremen.c 2017-01-23 10:58:19.676411754 +0100 |
||||
@@ -1580,7 +1580,7 @@ |
||||
if (!is_dumpdir (¤t_stat_info)) |
||||
return false; |
||||
|
||||
- current_dir = savedir (directory_name); |
||||
+ current_dir = tar_savedir (directory_name, 0); |
||||
|
||||
if (!current_dir) |
||||
/* The directory doesn't exist now. It'll be created. In any |
||||
diff -urN tar-1.26/src/misc.c tar-1.26new/src/misc.c |
||||
--- tar-1.26/src/misc.c 2011-02-16 23:12:16.000000000 +0100 |
||||
+++ tar-1.26new/src/misc.c 2017-01-23 10:58:19.677411762 +0100 |
||||
@@ -483,7 +483,7 @@ |
||||
|
||||
case RECURSIVE_REMOVE_OPTION: |
||||
{ |
||||
- char *directory = savedir (file_name); |
||||
+ char *directory = tar_savedir (file_name, 0); |
||||
char const *entry; |
||||
size_t entrylen; |
||||
|
||||
@@ -945,3 +945,31 @@ |
||||
strcpy (buf->buffer + buf->dir_length, name); |
||||
return buf->buffer; |
||||
} |
||||
+ |
||||
+/* Return the filenames in directory NAME, relative to the chdir_fd. |
||||
+ If the directory does not exist, report error if MUST_EXIST is |
||||
+ true. |
||||
+ |
||||
+ Return NULL on errors. |
||||
+*/ |
||||
+char * |
||||
+tar_savedir (const char *name, int must_exist) |
||||
+{ |
||||
+ char *ret = NULL; |
||||
+ DIR *dir = NULL; |
||||
+ int fd = openat (chdir_fd, name, open_read_flags | O_DIRECTORY); |
||||
+ if (fd < 0) |
||||
+ { |
||||
+ if (!must_exist && errno == ENOENT) |
||||
+ return NULL; |
||||
+ open_error (name); |
||||
+ } |
||||
+ else if (! ((dir = fdopendir (fd)) |
||||
+ && (ret = streamsavedir (dir)))) |
||||
+ savedir_error (name); |
||||
+ |
||||
+ if (dir ? closedir (dir) != 0 : 0 <= fd && close (fd) != 0) |
||||
+ savedir_error (name); |
||||
+ |
||||
+ return ret; |
||||
+} |
||||
diff -urN tar-1.26/src/update.c tar-1.26new/src/update.c |
||||
--- tar-1.26/src/update.c 2017-01-24 09:43:08.620550423 +0100 |
||||
+++ tar-1.26new/src/update.c 2017-01-23 12:29:20.410943374 +0100 |
||||
@@ -144,16 +144,8 @@ |
||||
{ |
||||
if (S_ISDIR (s.st_mode)) |
||||
{ |
||||
- char *p, *dirp; |
||||
- DIR *stream; |
||||
- int fd = openat (chdir_fd, name->name, |
||||
- open_read_flags | O_DIRECTORY); |
||||
- if (fd < 0) |
||||
- open_error (name->name); |
||||
- else if (! ((stream = fdopendir (fd)) |
||||
- && (dirp = streamsavedir (stream)))) |
||||
- savedir_error (name->name); |
||||
- else |
||||
+ char *p, *dirp = tar_savedir (name->name, 1); |
||||
+ if (dirp) |
||||
{ |
||||
namebuf_t nbuf = namebuf_create (name->name); |
||||
|
||||
@@ -166,11 +158,6 @@ |
||||
|
||||
remname (name); |
||||
} |
||||
- |
||||
- if (stream |
||||
- ? closedir (stream) != 0 |
||||
- : 0 <= fd && close (fd) != 0) |
||||
- savedir_error (name->name); |
||||
} |
||||
else if (tar_timespec_cmp (get_stat_mtime (&s), |
||||
current_stat_info.mtime) |
||||
diff -urN tar-1.26/tests/incr07.at tar-1.26new/tests/incr07.at |
||||
--- tar-1.26/tests/incr07.at 1970-01-01 01:00:00.000000000 +0100 |
||||
+++ tar-1.26new/tests/incr07.at 2017-01-24 09:39:34.305615960 +0100 |
||||
@@ -0,0 +1,112 @@ |
||||
+# Process this file with autom4te to create testsuite. -*- Autotest -*- |
||||
+# Test suite for GNU tar. |
||||
+# Copyright 2009, 2013 Free Software Foundation, Inc. |
||||
+# |
||||
+# 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([incremental restores with -C]) |
||||
+AT_KEYWORDS([incremental extract incr07]) |
||||
+ |
||||
+# Tar 1.26 had problems extracting from incremental restores when given |
||||
+# the -C option. The code in incremen.c:try_purge_directory and |
||||
+# misc.c:remove_any_file was using savedir(), which ignored eventual changes |
||||
+# in the current working directory and caused the malfunctioning. |
||||
+# |
||||
+# The problem was reported by Piotr Rotter on 2013-03-22. |
||||
+# |
||||
+# This testcase is based on scripts provided by Piotr Rotter and Nathan |
||||
+# Stratton Treadway. |
||||
+# |
||||
+# References: <514C8F56.90900@active24.pl>, |
||||
+# http://lists.gnu.org/archive/html/bug-tar/2013-03/msg00036.html, |
||||
+# <20130326181922.GZ3732@shire.ontko.com>, |
||||
+# http://lists.gnu.org/archive/html/bug-tar/2013-03/msg00042.html, |
||||
+# <20130327051828.GA3732@shire.ontko.com>, |
||||
+# http://lists.gnu.org/archive/html/bug-tar/2013-03/msg00043.html, |
||||
+# <20130327054957.GB3732@shire.ontko.com>, |
||||
+# http://lists.gnu.org/archive/html/bug-tar/2013-03/msg00044.html |
||||
+ |
||||
+AT_TAR_CHECK([ |
||||
+mkdir dirA |
||||
+echo 'a' > dirA/a |
||||
+echo 'a' > dirA/b |
||||
+ |
||||
+decho C0 |
||||
+tar -g test.snar -vcf test.0.tar dirA |
||||
+ |
||||
+echo 'a' > dirA/c |
||||
+decho C1 |
||||
+tar -g test.snar -vcf test.1.tar dirA |
||||
+ |
||||
+rm -f dirA/a |
||||
+decho C2 |
||||
+tar -g test.snar -vcf test.2.tar dirA |
||||
+ |
||||
+mkdir ext |
||||
+rm -rf dirA |
||||
+ |
||||
+decho E0 |
||||
+tar -g test.snar -vxf test.0.tar -C ext/ |
||||
+decho E1 |
||||
+tar -g test.snar -vxf test.1.tar -C ext/ |
||||
+ |
||||
+decho E2 |
||||
+tar -g test.snar -vxf test.2.tar -C ext/ |
||||
+ |
||||
+mkdir ext/dirA/dirB |
||||
+touch ext/dirA/dirB/file |
||||
+ |
||||
+decho E3 |
||||
+tar -g test.snar -vxf test.2.tar -C ext/ |
||||
+ |
||||
+echo FIN |
||||
+test -d dirA && echo >&2 "toplevel dirA exists" |
||||
+exit 0 |
||||
+], |
||||
+[0], |
||||
+[C0 |
||||
+dirA/ |
||||
+dirA/a |
||||
+dirA/b |
||||
+C1 |
||||
+dirA/ |
||||
+dirA/c |
||||
+C2 |
||||
+dirA/ |
||||
+E0 |
||||
+dirA/ |
||||
+dirA/a |
||||
+dirA/b |
||||
+E1 |
||||
+dirA/ |
||||
+dirA/c |
||||
+E2 |
||||
+dirA/ |
||||
+tar: Deleting `dirA/a' |
||||
+E3 |
||||
+dirA/ |
||||
+tar: Deleting `dirA/dirB' |
||||
+FIN |
||||
+], |
||||
+[C0 |
||||
+tar: dirA: Directory is new |
||||
+C1 |
||||
+C2 |
||||
+E0 |
||||
+E1 |
||||
+E2 |
||||
+E3 |
||||
+],[],[],[gnu, oldgnu, posix]) |
||||
+ |
||||
+AT_CLEANUP |
||||
diff -urN tar-1.26/tests/Makefile.am tar-1.26new/tests/Makefile.am |
||||
--- tar-1.26/tests/Makefile.am 2017-01-24 09:43:08.656550731 +0100 |
||||
+++ tar-1.26new/tests/Makefile.am 2017-01-23 10:58:19.678411770 +0100 |
||||
@@ -98,6 +98,7 @@ |
||||
incr04.at\ |
||||
incr05.at\ |
||||
incr06.at\ |
||||
+ incr07.at\ |
||||
indexfile.at\ |
||||
ignfail.at\ |
||||
label01.at\ |
||||
diff -urN tar-1.26/tests/testsuite.at tar-1.26new/tests/testsuite.at |
||||
--- tar-1.26/tests/testsuite.at 2017-01-24 09:43:08.656550731 +0100 |
||||
+++ tar-1.26new/tests/testsuite.at 2017-01-23 10:58:19.678411770 +0100 |
||||
@@ -259,6 +259,7 @@ |
||||
m4_include([incr04.at]) |
||||
m4_include([incr05.at]) |
||||
m4_include([incr06.at]) |
||||
+m4_include([incr07.at]) |
||||
|
||||
m4_include([filerem01.at]) |
||||
m4_include([filerem02.at]) |
||||
diff -urN tar-1.26/THANKS tar-1.26new/THANKS |
||||
--- tar-1.26/THANKS 2017-01-24 09:43:08.636550560 +0100 |
||||
+++ tar-1.26new/THANKS 2017-01-23 10:58:19.674411738 +0100 |
||||
@@ -397,6 +397,7 @@ |
||||
Philippe Defert defert@cern.ch |
||||
Piercarlo Grandi piercarl@sabi.demon.co.uk |
||||
Pierce Cantrell cantrell@ee.tamu.edu |
||||
+Piotr Rotter piotr.rotter@active24.pl |
||||
R. Kent Dybvig dyb@cadence.bloomington.in.us |
||||
R. Scott Butler butler@prism.es.dupont.com |
||||
Rainer Orth ro@TechFak.Uni-Bielefeld.DE |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,152 @@
@@ -0,0 +1,152 @@
|
||||
diff --git a/lib/rmt.h b/lib/rmt.h |
||||
index 2ce9dc5..4580e49 100644 |
||||
--- a/lib/rmt.h |
||||
+++ b/lib/rmt.h |
||||
@@ -17,8 +17,9 @@ |
||||
along with this program; if not, write to the Free Software Foundation, |
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
||||
|
||||
-extern char *rmt_command; |
||||
-extern char *rmt_dev_name__; |
||||
+/* upstream fix 0b3d84a0ee */ |
||||
+extern char const *rmt_command; |
||||
+extern char const *rmt_dev_name__; |
||||
|
||||
int rmt_open__ (const char *, int, int, const char *); |
||||
int rmt_close__ (int); |
||||
diff --git a/lib/rtapelib.c b/lib/rtapelib.c |
||||
index 3aee428..1cef0fc 100644 |
||||
--- a/lib/rtapelib.c |
||||
+++ b/lib/rtapelib.c |
||||
@@ -90,10 +90,10 @@ static int from_remote[MAXUNIT][2] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}}; |
||||
/* The pipes for sending data to remote tape drives. */ |
||||
static int to_remote[MAXUNIT][2] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}}; |
||||
|
||||
-char *rmt_command = DEFAULT_RMT_COMMAND; |
||||
+char const *rmt_command = DEFAULT_RMT_COMMAND; /* upstream fix 0b3d84a0ee */ |
||||
|
||||
/* Temporary variable used by macros in rmt.h. */ |
||||
-char *rmt_dev_name__; |
||||
+char const *rmt_dev_name__; /* upstream fix 0b3d84a0ee */ |
||||
|
||||
/* If true, always consider file names to be local, even if they contain |
||||
colons */ |
||||
@@ -490,15 +490,17 @@ rmt_open__ (const char *file_name, int open_mode, int bias, |
||||
{ |
||||
/* Child. */ |
||||
|
||||
- close (STDIN_FILENO); |
||||
- dup (to_remote[remote_pipe_number][PREAD]); |
||||
- close (to_remote[remote_pipe_number][PREAD]); |
||||
- close (to_remote[remote_pipe_number][PWRITE]); |
||||
- |
||||
- close (STDOUT_FILENO); |
||||
- dup (from_remote[remote_pipe_number][PWRITE]); |
||||
- close (from_remote[remote_pipe_number][PREAD]); |
||||
- close (from_remote[remote_pipe_number][PWRITE]); |
||||
+ /* upstream fix 0b3d84a0ee */ |
||||
+ if (dup2 (to_remote[remote_pipe_number][PREAD], STDIN_FILENO) < 0 |
||||
+ || (to_remote[remote_pipe_number][PREAD] != STDIN_FILENO |
||||
+ && close (to_remote[remote_pipe_number][PREAD]) != 0) |
||||
+ || (to_remote[remote_pipe_number][PWRITE] != STDIN_FILENO |
||||
+ && close (to_remote[remote_pipe_number][PWRITE]) != 0) |
||||
+ || dup2 (from_remote[remote_pipe_number][PWRITE], STDOUT_FILENO) < 0 |
||||
+ || close (from_remote[remote_pipe_number][PREAD]) != 0 |
||||
+ || close (from_remote[remote_pipe_number][PWRITE]) != 0) |
||||
+ error (EXIT_ON_EXEC_ERROR, errno, |
||||
+ _("Cannot redirect files for remote shell")); |
||||
|
||||
sys_reset_uid_gid (); |
||||
|
||||
diff --git a/lib/system.h b/lib/system.h |
||||
index 2deb585..599d4ba 100644 |
||||
--- a/lib/system.h |
||||
+++ b/lib/system.h |
||||
@@ -471,8 +471,13 @@ char *getenv (); |
||||
# define SET_BINARY_MODE(arc) |
||||
# define ERRNO_IS_EACCES 0 |
||||
# define TTY_NAME "/dev/tty" |
||||
-# define sys_reset_uid_gid() \ |
||||
- do { setuid (getuid ()); setgid (getgid ()); } while (0) |
||||
+ |
||||
+/* upstream fix 0b3d84a0ee */ |
||||
+# define sys_reset_uid_gid() \ |
||||
+ do { \ |
||||
+ if (! (setuid (getuid ()) == 0 && setgid (getgid ()) == 0)) \ |
||||
+ abort (); \ |
||||
+ } while (0) |
||||
#endif |
||||
|
||||
#if XENIX |
||||
diff --git a/src/compare.c b/src/compare.c |
||||
index 273269a..796d7aa 100644 |
||||
--- a/src/compare.c |
||||
+++ b/src/compare.c |
||||
@@ -362,7 +362,7 @@ static void |
||||
diff_dumpdir (void) |
||||
{ |
||||
const char *dumpdir_buffer; |
||||
- dev_t dev = 0; |
||||
+ /* upstream fix 5bb04335079 */ |
||||
struct stat stat_data; |
||||
|
||||
if (deref_stat (current_stat_info.file_name, &stat_data) != 0) |
||||
@@ -372,8 +372,7 @@ diff_dumpdir (void) |
||||
else |
||||
stat_error (current_stat_info.file_name); |
||||
} |
||||
- else |
||||
- dev = stat_data.st_dev; |
||||
+ /* upstream fix 5bb04335079 */ |
||||
|
||||
dumpdir_buffer = directory_contents (scan_directory (¤t_stat_info)); |
||||
|
||||
diff --git a/tests/genfile.c b/tests/genfile.c |
||||
index 8541be6..fa480ef 100644 |
||||
--- a/tests/genfile.c |
||||
+++ b/tests/genfile.c |
||||
@@ -485,9 +485,11 @@ generate_files_from_list () |
||||
static void |
||||
mkhole (int fd, off_t displ) |
||||
{ |
||||
- if (lseek (fd, displ, SEEK_CUR) == -1) |
||||
+ off_t offset = lseek (fd, displ, SEEK_CUR); |
||||
+ if (offset < 0) |
||||
error (EXIT_FAILURE, errno, "lseek"); |
||||
- ftruncate (fd, lseek (fd, 0, SEEK_CUR)); |
||||
+ if (ftruncate (fd, offset) != 0) |
||||
+ error (EXIT_FAILURE, errno, "ftruncate"); |
||||
} |
||||
|
||||
static void |
||||
@@ -685,13 +687,18 @@ exec_checkpoint (struct action *p) |
||||
error (0, errno, _("cannot open `%s'"), p->name); |
||||
break; |
||||
} |
||||
- ftruncate (fd, p->size); |
||||
+ if (ftruncate (fd, p->size) != 0) |
||||
+ { |
||||
+ error (0, errno, _("cannot truncate `%s'"), p->name); |
||||
+ break; |
||||
+ } |
||||
close (fd); |
||||
} |
||||
break; |
||||
|
||||
case OPT_EXEC: |
||||
- system (p->name); |
||||
+ if (system (p->name) != 0) |
||||
+ error (0, 0, _("command failed: %s"), p->name); |
||||
break; |
||||
|
||||
case OPT_UNLINK: |
||||
@@ -761,7 +768,8 @@ exec_command (void) |
||||
signal (SIGCHLD, SIG_DFL); |
||||
#endif |
||||
|
||||
- pipe (fd); |
||||
+ if (pipe (fd) != 0) |
||||
+ error (EXIT_FAILURE, errno, "pipe"); |
||||
|
||||
pid = fork (); |
||||
if (pid == -1) |
@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
|
||||
diff --git a/gnu/stdio.in.h b/gnu/stdio.in.h |
||||
index 465a9c9..b703457 100644 |
||||
--- a/gnu/stdio.in.h |
||||
+++ b/gnu/stdio.in.h |
||||
@@ -164,7 +164,9 @@ _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " |
||||
so any use of gets warrants an unconditional warning. Assume it is |
||||
always declared, since it is required by C89. */ |
||||
#undef gets |
||||
+#if HAVE_RAW_DECL_GETS |
||||
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); |
||||
+#endif |
||||
|
||||
#if @GNULIB_FOPEN@ |
||||
# if @REPLACE_FOPEN@ |
@ -0,0 +1,147 @@
@@ -0,0 +1,147 @@
|
||||
From 207b445ca7018a95f2f96d9514b8d87c80e8e11e Mon Sep 17 00:00:00 2001 |
||||
From: Pavel Raiskup <praiskup@redhat.com> |
||||
Date: Wed, 4 Apr 2012 18:04:53 +0200 |
||||
Subject: [PATCH] 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 | 4 +- |
||||
tests/Makefile.am | 3 +- |
||||
tests/testsuite.at | 3 +- |
||||
tests/update03.at | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||||
4 files changed, 65 insertions(+), 4 deletions(-) |
||||
create mode 100644 tests/update03.at |
||||
|
||||
diff --git a/src/update.c b/src/update.c |
||||
index e3228d4..4739e0d 100644 |
||||
--- a/src/update.c |
||||
+++ b/src/update.c |
||||
@@ -1,7 +1,7 @@ |
||||
/* Update a tar archive. |
||||
|
||||
Copyright (C) 1988, 1992, 1994, 1996, 1997, 1999, 2000, 2001, 2003, |
||||
- 2004, 2005, 2007, 2010 Free Software Foundation, Inc. |
||||
+ 2004, 2005, 2007, 2010, 2011, 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 |
||||
@@ -159,7 +159,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 ab7d104..119f1f3 100644 |
||||
--- a/tests/Makefile.am |
||||
+++ b/tests/Makefile.am |
||||
@@ -1,7 +1,7 @@ |
||||
# Makefile for GNU tar regression tests. |
||||
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2001, 2003, 2004, 2005, |
||||
-# 2006, 2007, 2009 Free Software Foundation, Inc. |
||||
+# 2006, 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. |
||||
|
||||
# François Pinard <pinard@iro.umontreal.ca>, 1988. |
||||
# Sergey Poznyakoff <gray@mirddin.farlep.net>, 2004. |
||||
@@ -156,6 +156,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 8366ef0..13f7506 100644 |
||||
--- a/tests/testsuite.at |
||||
+++ b/tests/testsuite.at |
||||
@@ -1,7 +1,7 @@ |
||||
# Process this file with autom4te to create testsuite. -*- Autotest -*- |
||||
|
||||
# Test suite for GNU tar. |
||||
-# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 Free Software |
||||
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012 Free Software |
||||
# Foundation, Inc. |
||||
|
||||
# This program is free software; you can redistribute it and/or modify |
||||
@@ -241,6 +241,7 @@ m4_include([spmvp10.at]) |
||||
m4_include([update.at]) |
||||
m4_include([update01.at]) |
||||
m4_include([update02.at]) |
||||
+m4_include([update03.at]) |
||||
|
||||
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.7.7.6 |
@ -0,0 +1,121 @@
@@ -0,0 +1,121 @@
|
||||
diff -urN tar-1.26/src/xattrs.c tar-1.26new/src/xattrs.c |
||||
--- tar-1.26/src/xattrs.c 2017-01-10 10:58:11.894958586 +0100 |
||||
+++ tar-1.26new/src/xattrs.c 2017-01-10 11:54:23.418221159 +0100 |
||||
@@ -436,8 +436,12 @@ |
||||
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) |
||||
@@ -482,8 +486,6 @@ |
||||
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) |
||||
@@ -494,7 +496,10 @@ |
||||
} |
||||
|
||||
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 -urN tar-1.26/tests/Makefile.am tar-1.26new/tests/Makefile.am |
||||
--- tar-1.26/tests/Makefile.am 2017-01-10 10:58:11.894958586 +0100 |
||||
+++ tar-1.26new/tests/Makefile.am 2017-01-10 11:53:55.046987231 +0100 |
||||
@@ -177,6 +177,7 @@ |
||||
xattr03.at\ |
||||
xattr04.at\ |
||||
xattr05.at\ |
||||
+ xattr06.at\ |
||||
acls01.at\ |
||||
acls02.at\ |
||||
acls03.at\ |
||||
diff -urN tar-1.26/tests/testsuite.at tar-1.26new/tests/testsuite.at |
||||
--- tar-1.26/tests/testsuite.at 2017-01-10 10:58:11.896958604 +0100 |
||||
+++ tar-1.26new/tests/testsuite.at 2017-01-10 11:53:55.047987240 +0100 |
||||
@@ -338,6 +338,7 @@ |
||||
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 -urN tar-1.26/tests/xattr06.at tar-1.26new/tests/xattr06.at |
||||
--- tar-1.26/tests/xattr06.at 1970-01-01 01:00:00.000000000 +0100 |
||||
+++ tar-1.26new/tests/xattr06.at 2017-01-10 11:54:23.418221159 +0100 |
||||
@@ -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 |
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
diff --git a/src/tar.c b/src/tar.c |
||||
index e244808..18277e4 100644 |
||||
--- a/src/tar.c |
||||
+++ b/src/tar.c |
||||
@@ -162,6 +162,14 @@ set_archive_format (char const *name) |
||||
archive_format = p->fmt; |
||||
} |
||||
|
||||
+static void |
||||
+set_xattr_option (int value) |
||||
+{ |
||||
+ if (value == 1) |
||||
+ set_archive_format ("posix"); |
||||
+ xattrs_option = value; |
||||
+} |
||||
+ |
||||
const char * |
||||
archive_format_string (enum archive_format fmt) |
||||
{ |
||||
@@ -2141,16 +2149,16 @@ parse_opt (int key, char *arg, struct argp_state *state) |
||||
break; |
||||
|
||||
case XATTR_OPTION: |
||||
- set_archive_format ("posix"); |
||||
- xattrs_option = 1; |
||||
+ set_xattr_option (1); |
||||
break; |
||||
|
||||
case NO_XATTR_OPTION: |
||||
- xattrs_option = -1; |
||||
+ set_xattr_option (-1); |
||||
break; |
||||
|
||||
case XATTR_INCLUDE: |
||||
case XATTR_EXCLUDE: |
||||
+ set_xattr_option (1); |
||||
xattrs_mask_add (arg, (key == XATTR_INCLUDE)); |
||||
break; |
@ -0,0 +1,35 @@
@@ -0,0 +1,35 @@
|
||||
diff --git a/src/xattrs.c b/src/xattrs.c |
||||
index 5a4bf72..bdf6ba0 100644 |
||||
--- a/src/xattrs.c |
||||
+++ b/src/xattrs.c |
||||
@@ -693,7 +693,7 @@ xattrs_print_char (struct tar_stat_info const *st, char *output) |
||||
if (selinux_context_option > 0 && st->cntx_name) |
||||
*output = '.'; |
||||
|
||||
- if (acls_option && (st->acls_a_len || st->acls_d_len)) |
||||
+ if (acls_option > 0 && (st->acls_a_len || st->acls_d_len)) |
||||
*output = '+'; |
||||
} |
||||
|
||||
@@ -704,11 +704,11 @@ xattrs_print (struct tar_stat_info const *st) |
||||
return; |
||||
|
||||
/* selinux */ |
||||
- if (selinux_context_option && st->cntx_name) |
||||
+ if (selinux_context_option > 0 && st->cntx_name) |
||||
fprintf (stdlis, " s: %s\n", st->cntx_name); |
||||
|
||||
/* acls */ |
||||
- if (acls_option && (st->acls_a_len || st->acls_d_len)) |
||||
+ if (acls_option > 0 && (st->acls_a_len || st->acls_d_len)) |
||||
{ |
||||
fprintf (stdlis, " a: "); |
||||
acls_one_line ("", ',', st->acls_a_ptr, st->acls_a_len); |
||||
@@ -717,7 +717,7 @@ xattrs_print (struct tar_stat_info const *st) |
||||
} |
||||
|
||||
/* xattrs */ |
||||
- if (xattrs_option && st->xattr_map_size) |
||||
+ if (xattrs_option > 0 && st->xattr_map_size) |
||||
{ |
||||
int i; |
@ -0,0 +1,214 @@
@@ -0,0 +1,214 @@
|
||||
diff --git a/THANKS b/THANKS |
||||
index e87381f..6fa0a9e 100644 |
||||
--- a/THANKS |
||||
+++ b/THANKS |
||||
@@ -131,6 +131,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 b622a2a..63e4d14 100644 |
||||
--- a/src/extract.c |
||||
+++ b/src/extract.c |
||||
@@ -745,13 +745,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; |
||||
|
||||
@@ -759,17 +759,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 |
||||
@@ -1089,11 +1104,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 2a70314..8e1ef8d 100644 |
||||
--- a/tests/Makefile.am |
||||
+++ b/tests/Makefile.am |
||||
@@ -200,6 +200,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 ebce9cc..3eb0eee 100644 |
||||
--- a/tests/testsuite.at |
||||
+++ b/tests/testsuite.at |
||||
@@ -361,6 +361,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 -cf archive.tar dir |
||||
+ |
||||
+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 |
||||
From f2a7560718946e0920b55419f0953953bf824077 Mon Sep 17 00:00:00 2001 |
||||
From: Pavel Raiskup <praiskup@redhat.com> |
||||
Date: Mon, 28 Nov 2016 08:44:42 +0100 |
||||
Subject: [PATCH] tests: more deterministic xattr07 |
||||
|
||||
* tests/xattr07.at: Define order of files within tested archive. |
||||
--- |
||||
tests/xattr07.at | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/tests/xattr07.at b/tests/xattr07.at |
||||
index a834981..47d54b8 100644 |
||||
--- a/tests/xattr07.at |
||||
+++ b/tests/xattr07.at |
||||
@@ -36,7 +36,7 @@ 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 -cf archive.tar dir |
||||
+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 |
||||
-- |
||||
2.13.5 |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
diff --git a/lib/system.h b/lib/system.h |
||||
index ef46267..e7f531c 100644 |
||||
--- a/lib/system.h |
||||
+++ b/lib/system.h |
||||
@@ -389,9 +389,16 @@ extern int errno; |
||||
# define ST_NBLOCKSIZE 512 |
||||
#endif |
||||
|
||||
+/* Network Appliance file systems store small files directly in the |
||||
+ inode if st_size <= 64; in this case the number of blocks can be |
||||
+ zero. Perhaps other file systems have similar problems; so, |
||||
+ somewhat arbitrarily, do not consider a file to be sparse if |
||||
+ it has no blocks but st_size < ST_NBLOCKSIZE. */ |
||||
#define ST_IS_SPARSE(st) \ |
||||
(ST_NBLOCKS (st) \ |
||||
- < ((st).st_size / ST_NBLOCKSIZE + ((st).st_size % ST_NBLOCKSIZE != 0))) |
||||
+ < ((st).st_size / ST_NBLOCKSIZE \ |
||||
+ + ((st).st_size % ST_NBLOCKSIZE != 0 \ |
||||
+ && (st).st_size / ST_NBLOCKSIZE != 0))) |
||||
|
||||
/* Declare standard functions. */ |
@ -0,0 +1,638 @@
@@ -0,0 +1,638 @@
|
||||
.\" This file was originally generated by help2man |
||||
.TH TAR "1" "February 2013" "tar 1.26" "User Commands" |
||||
.SH NAME |
||||
tar \- manual page for tar 1.26 |
||||
.SH SYNOPSIS |
||||
.B tar |
||||
[\fIOPTION\fR...] [\fIFILE\fR]... |
||||
.SH DESCRIPTION |
||||
GNU `tar' saves many files together into a single tape or disk archive, and can |
||||
restore individual files from the archive. |
||||
|
||||
Note that this manual page contains just very brief description (or more like |
||||
a list of possible functionality) originally generated by the |
||||
.B |
||||
help2man |
||||
utility. The full documentation for |
||||
.B tar |
||||
is maintained as a Texinfo manual. If the |
||||
.B info |
||||
and |
||||
.B tar |
||||
programs are properly installed at your site, the command |
||||
.B `info tar' |
||||
should give you access to the complete manual. |
||||
.SH EXAMPLES |
||||
.TP |
||||
tar \fB\-cf\fR archive.tar foo bar |
||||
# Create archive.tar from files foo and bar. |
||||
.TP |
||||
tar \fB\-tvf\fR archive.tar |
||||
# List all files in archive.tar verbosely. |
||||
.TP |
||||
tar \fB\-xf\fR archive.tar |
||||
# Extract all files from archive.tar. |
||||
.IP |
||||
.SH DEFAULTS |
||||
*This* tar installation defaults to: |
||||
|
||||
\fB\-\-format\fR=\fIgnu\fR \fB\-f\-\fR \fB\-b20\fR \fB\-\-quoting\-style\fR=\fIescape\fR \fB\-\-rmt\-command=\fR/sbin/rmt |
||||
\fB\-\-rsh\-command=\fR/usr/bin/rsh |
||||
.SH \fBMain operation mode:\fR |
||||
.TP |
||||
\fB\-A\fR, \fB\-\-catenate\fR, \fB\-\-concatenate\fR |
||||
append tar files to an archive |
||||
.TP |
||||
\fB\-c\fR, \fB\-\-create\fR |
||||
create a new archive |
||||
.TP |
||||
\fB\-d\fR, \fB\-\-diff\fR, \fB\-\-compare\fR |
||||
find differences between archive and file system |
||||
.TP |
||||
\fB\-\-delete\fR |
||||
delete from the archive (not on mag tapes!) |
||||
.TP |
||||
\fB\-r\fR, \fB\-\-append\fR |
||||
append files to the end of an archive |
||||
.TP |
||||
\fB\-t\fR, \fB\-\-list\fR |
||||
list the contents of an archive |
||||
.TP |
||||
\fB\-\-test\-label\fR |
||||
test the archive volume label and exit |
||||
.TP |
||||
\fB\-u\fR, \fB\-\-update\fR |
||||
only append files newer than copy in archive |
||||
.TP |
||||
\fB\-x\fR, \fB\-\-extract\fR, \fB\-\-get\fR |
||||
extract files from an archive |
||||
.IP |
||||
.SH \fBCommon options:\fR |
||||
.TP |
||||
\fB-C\fR, \fB--directory=DIR\fR |
||||
change to directory DIR |
||||
.TP |
||||
\fB-f\fR, \fB--file=ARCHIVE\fR |
||||
use archive file or device ARCHIVE |
||||
.TP |
||||
\fB-j\fR, \fB--bzip2\fR |
||||
filter the archive through bzip2 |
||||
.TP |
||||
\fB -J\fR, \fB--xz\fR |
||||
filter the archive through xz |
||||
.TP |
||||
\fB-p\fR, \fB--preserve-permissions\fR |
||||
extract information about file permissions (default for superuser) |
||||
.TP |
||||
\fB-v\fR, \fB--verbose\fR |
||||
verbosely list files processed |
||||
.TP |
||||
\fB-z\fR, \fB--gzip\fR |
||||
filter the archive through gzip |
||||
|
||||
.SH \fBOperation modifiers:\fR |
||||
.TP |
||||
\fB\-\-check\-device\fR |
||||
check device numbers when creating incremental |
||||
archives (default) |
||||
.TP |
||||
\fB\-g\fR, \fB\-\-listed\-incremental\fR=\fIFILE\fR |
||||
handle new GNU\-format incremental backup |
||||
.TP |
||||
\fB\-G\fR, \fB\-\-incremental\fR |
||||
handle old GNU\-format incremental backup |
||||
.TP |
||||
\fB\-\-ignore\-failed\-read\fR |
||||
do not exit with nonzero on unreadable files |
||||
.TP |
||||
\fB\-\-level\fR=\fINUMBER\fR |
||||
dump level for created listed\-incremental archive |
||||
.TP |
||||
\fB\-n\fR, \fB\-\-seek\fR |
||||
archive is seekable |
||||
.TP |
||||
\fB\-\-no\-check\-device\fR |
||||
do not check device numbers when creating |
||||
incremental archives |
||||
.TP |
||||
\fB\-\-no\-seek\fR |
||||
archive is not seekable |
||||
.TP |
||||
\fB\-\-occurrence\fR[=\fINUMBER\fR] |
||||
process only the NUMBERth occurrence of each file |
||||
in the archive; this option is valid only in |
||||
conjunction with one of the subcommands \fB\-\-delete\fR, |
||||
\fB\-\-diff\fR, \fB\-\-extract\fR or \fB\-\-list\fR and when a list of |
||||
files is given either on the command line or via |
||||
the \fB\-T\fR option; NUMBER defaults to 1 |
||||
.TP |
||||
\fB\-\-sparse\-version\fR=\fIMAJOR[\fR.MINOR] |
||||
set version of the sparse format to use (implies |
||||
\fB\-\-sparse\fR) |
||||
.TP |
||||
\fB\-S\fR, \fB\-\-sparse\fR |
||||
handle sparse files efficiently |
||||
.IP |
||||
.SH \fBOverwrite control:\fR |
||||
.TP |
||||
\fB\-k\fR, \fB\-\-keep\-old\-files\fR |
||||
don't replace existing files when extracting, |
||||
treat them as errors |
||||
.TP |
||||
\fB\-\-keep\-newer\-files\fR |
||||
don't replace existing files that are newer than |
||||
their archive copies |
||||
.TP |
||||
\fB\-\-keep\-directory\-symlink\fR |
||||
Don't replace existing symlinks to directories when extracting. |
||||
.TP |
||||
\fB\-\-no\-overwrite\-dir\fR |
||||
preserve metadata of existing directories |
||||
.TP |
||||
\fB\-\-overwrite\fR |
||||
overwrite existing files when extracting |
||||
.TP |
||||
\fB\-\-overwrite\-dir\fR |
||||
overwrite metadata of existing directories when |
||||
extracting (default) |
||||
.TP |
||||
\fB\-\-recursive\-unlink\fR |
||||
empty hierarchies prior to extracting directory |
||||
.TP |
||||
\fB\-\-remove\-files\fR |
||||
remove files after adding them to the archive |
||||
.TP |
||||
\fB\-\-skip\-old\-files\fR |
||||
don't replace existing files when extracting, |
||||
silently skip over them |
||||
.TP |
||||
\fB\-U\fR, \fB\-\-unlink\-first\fR |
||||
remove each file prior to extracting over it |
||||
.TP |
||||
\fB\-W\fR, \fB\-\-verify\fR |
||||
attempt to verify the archive after writing it |
||||
.IP |
||||
.SH \fBSelect output stream:\fR |
||||
.HP |
||||
\fB\-\-ignore\-command\-error\fR ignore exit codes of children |
||||
.TP |
||||
\fB\-\-no\-ignore\-command\-error\fR |
||||
treat non\-zero exit codes of children as |
||||
error |
||||
.TP |
||||
\fB\-O\fR, \fB\-\-to\-stdout\fR |
||||
extract files to standard output |
||||
.TP |
||||
\fB\-\-to\-command\fR=\fICOMMAND\fR |
||||
pipe extracted files to another program |
||||
.IP |
||||
.SH \fBHandling of file attributes:\fR |
||||
.TP |
||||
\fB\-\-atime\-preserve\fR[=\fIMETHOD\fR] |
||||
preserve access times on dumped files, either |
||||
by restoring the times after reading |
||||
(METHOD='replace'; default) or by not setting the |
||||
times in the first place (METHOD='system') |
||||
.TP |
||||
\fB\-\-delay\-directory\-restore\fR |
||||
delay setting modification times and |
||||
permissions of extracted directories until the end |
||||
of extraction |
||||
.TP |
||||
\fB\-\-group\fR=\fINAME\fR |
||||
force NAME as group for added files |
||||
.TP |
||||
\fB\-\-mode\fR=\fICHANGES\fR |
||||
force (symbolic) mode CHANGES for added files |
||||
.TP |
||||
\fB\-\-mtime\fR=\fIDATE\-OR\-FILE\fR |
||||
set mtime for added files from DATE\-OR\-FILE |
||||
.TP |
||||
\fB\-m\fR, \fB\-\-touch\fR |
||||
don't extract file modified time |
||||
.TP |
||||
\fB\-\-no\-delay\-directory\-restore\fR |
||||
cancel the effect of \fB\-\-delay\-directory\-restore\fR |
||||
option |
||||
.TP |
||||
\fB\-\-no\-same\-owner\fR |
||||
extract files as yourself (default for ordinary |
||||
users) |
||||
.TP |
||||
\fB\-\-no\-same\-permissions\fR |
||||
apply the user's umask when extracting permissions |
||||
from the archive (default for ordinary users) |
||||
.TP |
||||
\fB\-\-numeric\-owner\fR |
||||
always use numbers for user/group names |
||||
.TP |
||||
\fB\-\-owner\fR=\fINAME\fR |
||||
force NAME as owner for added files |
||||
.TP |
||||
\fB\-p\fR, \fB\-\-preserve\-permissions\fR, \fB\-\-same\-permissions\fR |
||||
extract information about file permissions |
||||
(default for superuser) |
||||
.TP |
||||
\fB\-\-preserve\fR |
||||
same as both \fB\-p\fR and \fB\-s\fR |
||||
.TP |
||||
\fB\-\-same\-owner\fR |
||||
try extracting files with the same ownership as |
||||
exists in the archive (default for superuser) |
||||
.TP |
||||
\fB\-s\fR, \fB\-\-preserve\-order\fR, \fB\-\-same\-order\fR |
||||
sort names to extract to match archive |
||||
.IP |
||||
.SH \fBHandling of extended file attributes:\fR |
||||
.TP |
||||
\fB\-\-acls\fR |
||||
Enable the POSIX ACLs support |
||||
.TP |
||||
\fB\-\-no\-acls\fR |
||||
Disable the POSIX ACLs support |
||||
.TP |
||||
\fB\-\-no\-selinux\fR |
||||
Disable the SELinux context support |
||||
.TP |
||||
\fB\-\-no\-xattrs\fR |
||||
Disable extended attributes support |
||||
.TP |
||||
\fB\-\-selinux\fR |
||||
Enable the SELinux context support |
||||
.TP |
||||
\fB\-\-xattrs\fR |
||||
Enable extended attributes support |
||||
.TP |
||||
\fB\-\-xattrs\-exclude\fR=\fIMASK\fR |
||||
specify the exclude pattern for xattr keys |
||||
.TP |
||||
\fB\-\-xattrs\-include\fR=\fIMASK\fR |
||||
specify the include pattern for xattr keys |
||||
.IP |
||||
.SH \fBDevice selection and switching:\fR |
||||
.TP |
||||
\fB\-f\fR, \fB\-\-file\fR=\fIARCHIVE\fR |
||||
use archive file or device ARCHIVE |
||||
.TP |
||||
\fB\-\-force\-local\fR |
||||
archive file is local even if it has a colon |
||||
.TP |
||||
\fB\-F\fR, \fB\-\-info\-script\fR=\fINAME\fR, \fB\-\-new\-volume\-script\fR=\fINAME\fR |
||||
run script at end of each tape (implies \fB\-M\fR) |
||||
.TP |
||||
\fB\-L\fR, \fB\-\-tape\-length\fR=\fINUMBER\fR |
||||
change tape after writing NUMBER x 1024 bytes |
||||
.TP |
||||
\fB\-M\fR, \fB\-\-multi\-volume\fR |
||||
create/list/extract multi\-volume archive |
||||
.TP |
||||
\fB\-\-rmt\-command\fR=\fICOMMAND\fR |
||||
use given rmt COMMAND instead of rmt |
||||
.TP |
||||
\fB\-\-rsh\-command\fR=\fICOMMAND\fR |
||||
use remote COMMAND instead of rsh |
||||
.TP |
||||
\fB\-\-volno\-file\fR=\fIFILE\fR |
||||
use/update the volume number in FILE |
||||
.IP |
||||
.SH \fBDevice blocking:\fR |
||||
.TP |
||||
\fB\-b\fR, \fB\-\-blocking\-factor\fR=\fIBLOCKS\fR |
||||
BLOCKS x 512 bytes per record |
||||
.TP |
||||
\fB\-B\fR, \fB\-\-read\-full\-records\fR |
||||
reblock as we read (for 4.2BSD pipes) |
||||
.TP |
||||
\fB\-i\fR, \fB\-\-ignore\-zeros\fR |
||||
ignore zeroed blocks in archive (means EOF) |
||||
.TP |
||||
\fB\-\-record\-size\fR=\fINUMBER\fR |
||||
NUMBER of bytes per record, multiple of 512 |
||||
.IP |
||||
.SH \fBArchive format selection:\fR |
||||
\fB\-H\fR, \fB\-\-format\fR=\fIFORMAT\fR |
||||
.RS |
||||
create archive of the given format |
||||
.sp |
||||
FORMAT is one of the following: |
||||
.RS |
||||
.TP |
||||
gnu |
||||
GNU tar 1.13.x format |
||||
.TP |
||||
oldgnu |
||||
GNU format as per tar <= 1.12 |
||||
.TP |
||||
pax |
||||
POSIX 1003.1\-2001 (pax) format |
||||
.TP |
||||
posix |
||||
same as pax |
||||
.TP |
||||
ustar |
||||
POSIX 1003.1\-1988 (ustar) format |
||||
.TP |
||||
v7 |
||||
old V7 tar format |
||||
.RE |
||||
.RE |
||||
.TP |
||||
\fB\-\-old\-archive\fR, \fB\-\-portability\fR |
||||
same as \fB\-\-format\fR=\fIv7\fR |
||||
.TP |
||||
\fB\-\-pax\-option\fR=\fIkeyword[[\fR:]=value][,keyword[[:]=value]]... |
||||
control pax keywords |
||||
.TP |
||||
\fB\-\-posix\fR |
||||
same as \fB\-\-format\fR=\fIposix\fR |
||||
.TP |
||||
\fB\-V\fR, \fB\-\-label\fR=\fITEXT\fR |
||||
create archive with volume name TEXT; at |
||||
list/extract time, use TEXT as a globbing pattern |
||||
for volume name |
||||
.IP |
||||
.SH \fBCompression options:\fR |
||||
.TP |
||||
\fB\-a\fR, \fB\-\-auto\-compress\fR |
||||
use archive suffix to determine the compression |
||||
program |
||||
.TP |
||||
\fB\-I\fR, \fB\-\-use\-compress\-program\fR=\fIPROG\fR |
||||
filter through PROG (must accept \fB\-d\fR) |
||||
.TP |
||||
\fB\-j\fR, \fB\-\-bzip2\fR |
||||
filter the archive through bzip2 |
||||
.TP |
||||
\fB\-J\fR, \fB\-\-xz\fR |
||||
filter the archive through xz |
||||
.TP |
||||
\fB\-\-lzip\fR |
||||
filter the archive through lzip |
||||
.TP |
||||
\fB\-\-lzma\fR |
||||
filter the archive through lzma |
||||
.HP |
||||
\fB\-\-lzop\fR |
||||
.TP |
||||
\fB\-\-no\-auto\-compress\fR |
||||
do not use archive suffix to determine the |
||||
compression program |
||||
.TP |
||||
\fB\-z\fR, \fB\-\-gzip\fR, \fB\-\-gunzip\fR, \fB\-\-ungzip\fR |
||||
filter the archive through gzip |
||||
.TP |
||||
\fB\-Z\fR, \fB\-\-compress\fR, \fB\-\-uncompress\fR |
||||
filter the archive through compress |
||||
.TP |
||||
\fBNote: You might need to install external program (lzip/ncompress/lzma...) to use some of these compression options\fB |
||||
.IP |
||||
.SH \fBLocal file selection:\fR |
||||
.TP |
||||
\fB\-\-add\-file\fR=\fIFILE\fR |
||||
add given FILE to the archive (useful if its name |
||||
starts with a dash) |
||||
.TP |
||||
\fB\-\-backup\fR[=\fICONTROL\fR] |
||||
backup before removal, choose version CONTROL |
||||
.TP |
||||
\fB\-C\fR, \fB\-\-directory\fR=\fIDIR\fR |
||||
change to directory DIR |
||||
.TP |
||||
\fB\-\-exclude\fR=\fIPATTERN\fR |
||||
exclude files, given as a PATTERN |
||||
.TP |
||||
\fB\-\-exclude\-backups\fR |
||||
exclude backup and lock files |
||||
.TP |
||||
\fB\-\-exclude\-caches\fR |
||||
exclude contents of directories containing |
||||
CACHEDIR.TAG, except for the tag file itself |
||||
.TP |
||||
\fB\-\-exclude\-caches\-all\fR |
||||
exclude directories containing CACHEDIR.TAG |
||||
.TP |
||||
\fB\-\-exclude\-caches\-under\fR exclude everything under directories containing |
||||
CACHEDIR.TAG |
||||
.TP |
||||
\fB\-\-exclude\-tag\fR=\fIFILE\fR |
||||
exclude contents of directories containing FILE, |
||||
except for FILE itself |
||||
.HP |
||||
\fB\-\-exclude\-tag\-all\fR=\fIFILE\fR exclude directories containing FILE |
||||
.TP |
||||
\fB\-\-exclude\-tag\-under\fR=\fIFILE\fR |
||||
exclude everything under directories |
||||
containing FILE |
||||
.TP |
||||
\fB\-\-exclude\-vcs\fR |
||||
exclude version control system directories |
||||
.TP |
||||
\fB\-h\fR, \fB\-\-dereference\fR |
||||
follow symlinks; archive and dump the files they |
||||
point to |
||||
.TP |
||||
\fB\-\-hard\-dereference\fR |
||||
follow hard links; archive and dump the files they |
||||
refer to |
||||
.TP |
||||
\fB\-K\fR, \fB\-\-starting\-file\fR=\fIMEMBER\-NAME\fR |
||||
begin at member MEMBER\-NAME in the archive |
||||
.TP |
||||
\fB\-\-newer\-mtime\fR=\fIDATE\fR |
||||
compare date and time when data changed only |
||||
.TP |
||||
\fB\-\-no\-null\fR |
||||
disable the effect of the previous \fB\-\-null\fR option |
||||
.TP |
||||
\fB\-\-no\-recursion\fR |
||||
avoid descending automatically in directories |
||||
.TP |
||||
\fB\-\-no\-unquote\fR |
||||
do not unquote filenames read with \fB\-T\fR |
||||
.HP |
||||
\fB\-\-null\fR \fB\-T\fR reads null\-terminated names, disable \fB\-C\fR |
||||
.TP |
||||
\fB\-N\fR, \fB\-\-newer\fR=\fIDATE\-OR\-FILE\fR, \fB\-\-after\-date\fR=\fIDATE\-OR\-FILE\fR |
||||
only store files newer than DATE\-OR\-FILE |
||||
.TP |
||||
\fB\-\-one\-file\-system\fR |
||||
stay in local file system when creating archive |
||||
.TP |
||||
\fB\-P\fR, \fB\-\-absolute\-names\fR |
||||
don't strip leading `/'s from file names |
||||
.TP |
||||
\fB\-\-recursion\fR |
||||
recurse into directories (default) |
||||
.TP |
||||
\fB\-\-suffix\fR=\fISTRING\fR |
||||
backup before removal, override usual suffix ('~' |
||||
unless overridden by environment variable |
||||
SIMPLE_BACKUP_SUFFIX) |
||||
.TP |
||||
\fB\-T\fR, \fB\-\-files\-from\fR=\fIFILE\fR |
||||
get names to extract or create from FILE |
||||
.TP |
||||
\fB\-\-unquote\fR |
||||
unquote filenames read with \fB\-T\fR (default) |
||||
.TP |
||||
\fB\-X\fR, \fB\-\-exclude\-from\fR=\fIFILE\fR |
||||
exclude patterns listed in FILE |
||||
.IP |
||||
.SH \fBFile name transformations:\fR |
||||
.TP |
||||
\fB\-\-strip\-components\fR=\fINUMBER\fR |
||||
strip NUMBER leading components from file |
||||
names on extraction |
||||
.TP |
||||
\fB\-\-transform\fR=\fIEXPRESSION\fR, \fB\-\-xform\fR=\fIEXPRESSION\fR |
||||
use sed replace EXPRESSION to transform file |
||||
names |
||||
.IP |
||||
File name matching options (affect both exclude and include patterns): |
||||
.TP |
||||
\fB\-\-anchored\fR |
||||
patterns match file name start |
||||
.TP |
||||
\fB\-\-ignore\-case\fR |
||||
ignore case |
||||
.TP |
||||
\fB\-\-no\-anchored\fR |
||||
patterns match after any `/' (default for |
||||
exclusion) |
||||
.TP |
||||
\fB\-\-no\-ignore\-case\fR |
||||
case sensitive matching (default) |
||||
.TP |
||||
\fB\-\-no\-wildcards\fR |
||||
verbatim string matching |
||||
.TP |
||||
\fB\-\-no\-wildcards\-match\-slash\fR |
||||
wildcards do not match `/' |
||||
.TP |
||||
\fB\-\-wildcards\fR |
||||
use wildcards (default) |
||||
.TP |
||||
\fB\-\-wildcards\-match\-slash\fR |
||||
wildcards match `/' (default for exclusion) |
||||
.IP |
||||
.SH \fBInformative output:\fR |
||||
.TP |
||||
\fB\-\-checkpoint\fR[=\fINUMBER\fR] |
||||
display progress messages every NUMBERth record |
||||
(default 10) |
||||
.TP |
||||
\fB\-\-checkpoint\-action\fR=\fIACTION\fR |
||||
execute ACTION on each checkpoint |
||||
.TP |
||||
\fB\-\-full\-time\fR |
||||
print file time to its full resolution |
||||
.TP |
||||
\fB\-\-index\-file\fR=\fIFILE\fR |
||||
send verbose output to FILE |
||||
.TP |
||||
\fB\-l\fR, \fB\-\-check\-links\fR |
||||
print a message if not all links are dumped |
||||
.TP |
||||
\fB\-\-no\-quote\-chars\fR=\fISTRING\fR |
||||
disable quoting for characters from STRING |
||||
.TP |
||||
\fB\-\-quote\-chars\fR=\fISTRING\fR |
||||
additionally quote characters from STRING |
||||
.TP |
||||
\fB\-\-quoting\-style\fR=\fISTYLE\fR |
||||
set name quoting style; see below for valid STYLE |
||||
values |
||||
.TP |
||||
\fB\-R\fR, \fB\-\-block\-number\fR |
||||
show block number within archive with each |
||||
message |
||||
.TP |
||||
\fB\-\-show\-defaults\fR |
||||
show tar defaults |
||||
.TP |
||||
\fB\-\-show\-omitted\-dirs\fR |
||||
when listing or extracting, list each directory |
||||
that does not match search criteria |
||||
.TP |
||||
\fB\-\-show\-transformed\-names\fR, \fB\-\-show\-stored\-names\fR |
||||
show file or archive names after transformation |
||||
.TP |
||||
\fB\-\-totals\fR[=\fISIGNAL\fR] |
||||
print total bytes after processing the archive; |
||||
with an argument \- print total bytes when this |
||||
SIGNAL is delivered; Allowed signals are: SIGHUP, |
||||
SIGQUIT, SIGINT, SIGUSR1 and SIGUSR2; the names |
||||
without SIG prefix are also accepted |
||||
.TP |
||||
\fB\-\-utc\fR |
||||
print file modification dates in UTC |
||||
.TP |
||||
\fB\-v\fR, \fB\-\-verbose\fR |
||||
verbosely list files processed |
||||
.TP |
||||
\fB\-\-warning\fR=\fIKEYWORD\fR |
||||
warning control |
||||
.TP |
||||
\fB\-w\fR, \fB\-\-interactive\fR, \fB\-\-confirmation\fR |
||||
ask for confirmation for every action |
||||
.IP |
||||
.SH \fBCompatibility options:\fR |
||||
.TP |
||||
\fB\-o\fR |
||||
when creating, same as \fB\-\-old\-archive\fR; when |
||||
extracting, same as \fB\-\-no\-same\-owner\fR |
||||
.IP |
||||
.SH \fBOther options:\fR |
||||
.TP |
||||
\-?, \fB\-\-help\fR |
||||
give this help list |
||||
.TP |
||||
\fB\-\-restrict\fR |
||||
disable use of some potentially harmful options |
||||
.TP |
||||
\fB\-\-usage\fR |
||||
give a short usage message |
||||
.TP |
||||
\fB\-\-version\fR |
||||
print program version |
||||
.PP |
||||
.PP |
||||
Mandatory or optional arguments to long options are also mandatory or optional |
||||
for any corresponding short options. |
||||
.PP |
||||
The backup suffix is `~', unless set with \fB\-\-suffix\fR or SIMPLE_BACKUP_SUFFIX. |
||||
The version control may be set with \fB\-\-backup\fR or VERSION_CONTROL, values are: |
||||
.TP |
||||
none, off |
||||
never make backups |
||||
.TP |
||||
t, numbered |
||||
make numbered backups |
||||
.TP |
||||
nil, existing |
||||
numbered if numbered backups exist, simple otherwise |
||||
.TP |
||||
never, simple |
||||
always make simple backups |
||||
.PP |
||||
Valid arguments for the \fB\-\-quoting\-style\fR option are: |
||||
.IP |
||||
literal |
||||
shell |
||||
shell\-always |
||||
c |
||||
c\-maybe |
||||
escape |
||||
locale |
||||
clocale |
||||
.PP |
||||
.SH AUTHOR |
||||
Written by John Gilmore and Jay Fenlason. |
||||
.SH "REPORTING BUGS" |
||||
Report bugs to <bug\-tar@gnu.org>. |
||||
.SH COPYRIGHT |
||||
Copyright \(co 2013 Free Software Foundation, Inc. |
||||
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. |
||||
.br |
||||
This is free software: you are free to change and redistribute it. |
||||
There is NO WARRANTY, to the extent permitted by law. |
@ -0,0 +1,956 @@
@@ -0,0 +1,956 @@
|
||||
%if %{?WITH_SELINUX:0}%{!?WITH_SELINUX:1} |
||||
%global WITH_SELINUX 1 |
||||
%endif |
||||
Summary: A GNU file archiving program |
||||
Name: tar |
||||
Epoch: 2 |
||||
Version: 1.26 |
||||
Release: 34%{?dist} |
||||
License: GPLv3+ |
||||
Group: Applications/Archiving |
||||
URL: http://www.gnu.org/software/tar/ |
||||
|
||||
Source0: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.xz |
||||
Source1: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.xz.sig |
||||
# Manpage for tar and gtar, a bit modified help2man generated manpage |
||||
Source2: tar.1 |
||||
|
||||
# Stop issuing lone zero block warnings. |
||||
# ~> https://bugzilla.redhat.com/show_bug.cgi?id=135601 |
||||
# ~> downstream |
||||
Patch1: tar-1.14-loneZeroWarning.patch |
||||
|
||||
# Fix extracting sparse files to a file system like vfat, when ftruncate may fail |
||||
# to grow the size of a file. |
||||
# ~> #179507, |
||||
# ~> http://lists.gnu.org/archive/html/bug-tar/2006-02/msg00000.html |
||||
# ~> still downtream (do we need this now? ftruncate & vfat works is now OK) |
||||
Patch2: tar-1.15.1-vfatTruncate.patch |
||||
|
||||
# Change inclusion defaults of tar to |
||||
# "--wildcards --anchored --wildcards-match-slash" for compatibility reasons. |
||||
# ~> #206841 |
||||
# ~> downstream (compatibility) |
||||
Patch3: tar-1.17-wildcards.patch |
||||
|
||||
# Ignore errors from setting utime() for source file on read-only file-system. |
||||
# ~> #500742 |
||||
# ~> http://lists.gnu.org/archive/html/bug-tar/2009-06/msg00016.html |
||||
# ~> still downstream |
||||
Patch4: tar-1.22-atime-rofs.patch |
||||
|
||||
# The --old-archive option was not working. |
||||
# ~> #594044 |
||||
# ~> http://lists.gnu.org/archive/html/bug-tar/2010-05/msg00015.html |
||||
# ~> upstream (2a61a37) |
||||
Patch5: tar-1.23-oldarchive.patch |
||||
|
||||
# Fix for bad cooperation of -C and -u options. |
||||
# ~> #688567 |
||||
# ~> http://lists.gnu.org/archive/html/bug-tar/2012-02/msg00007.html |
||||
# ~> still downstream |
||||
Patch6: tar-1.26-update-with-change-directory.patch |
||||
|
||||
# Fix rawhide build failure with undefined gets. |
||||
# ~> upstream (gnulib) |
||||
Patch7: tar-1.26-stdio.in.patch |
||||
|
||||
# Fix regression with --keep-old-files option. |
||||
# ~> #799252 |
||||
# ~> http://lists.gnu.org/archive/html/bug-tar/2011-11/msg00043.html |
||||
# ~> upstream (7a5a3708c) |
||||
Patch8: tar-1.26-add-skip-old-files-option.patch |
||||
|
||||
# Prepare included gnulib library for SELinux support. |
||||
# -> Related to the next patch. |
||||
Patch9: tar-1.26-selinux-gnulib.patch |
||||
|
||||
# Add support for extended attributes, SELinux and POSIX ACLs. |
||||
# ~> Original implementation #200925 |
||||
# ~> http://lists.gnu.org/archive/html/bug-tar/2012-08/msg00012.html |
||||
# ~> upstream (b997c90f9, 696338043, d36f5a3cc, 085cace18, up-to ~> 83701a590) |
||||
Patch10: tar-1.26-xattrs.patch |
||||
|
||||
# Fix problem with bit UIDs/GIDs (> 2^21) and --posix format. |
||||
# ~> #913406 |
||||
# ~> upstream (it is part of df7b55a8f6354e) |
||||
Patch11: tar-1.26-posix-biguid.patch |
||||
|
||||
# Allow store sparse files of effective size >8GB into pax archives |
||||
# ~> #516309 |
||||
# ~> http://lists.gnu.org/archive/html/bug-tar/2013-01/msg00001.html |
||||
# ~> already upstream (2f6c03cba) |
||||
Patch12: tar-1.26-pax-big-sparse-files.patch |
||||
|
||||
# Fix: Allow extracting single volume in a multi-volume archive |
||||
# ~> #919897 |
||||
# ~> http://lists.gnu.org/archive/html/bug-tar/2013-03/msg00002.html |
||||
# ~> upstream (beca89bc) |
||||
Patch13: tar-1.26-allow-extract-single-volume.patch |
||||
|
||||
# Do not print xattrs/selinux/acls when --no-xattrs/--no-acls/--no-selinux |
||||
# options are used during -tvv output. (TODO: merge this with xattrs patch |
||||
# once becomes upstream) |
||||
# ~> downstream (yet) |
||||
# ~> proposal: http://lists.gnu.org/archive/html/bug-tar/2013-05/msg00020.html |
||||
Patch14: tar-1.26-xattrs-printing.patch |
||||
|
||||
# Use a birthtime instead of ctime. |
||||
# ~> upstream (189e43 & 49bd10) |
||||
# ~> http://lists.gnu.org/archive/html/bug-tar/2011-06/msg00000.html |
||||
# ~> http://lists.gnu.org/archive/html/bug-tar/2013-05/msg00022.html |
||||
Patch15: tar-1.26-fix-symlink-eating-bug.patch |
||||
|
||||
# Add documentation which was not yet pushed upstream |
||||
# ~> downstream |
||||
# ~> #996753 |
||||
Patch16: tar-1.26-docu-xattrs.patch |
||||
|
||||
# The --xattrs-include or --xattrs-exclude options should imply --xattrs. |
||||
# ~> still downstream |
||||
# http://lists.gnu.org/archive/html/bug-tar/2013-05/msg00020.html |
||||
# ~> #965969 |
||||
Patch17: tar-1.26-xattrs-include-implies-xattrs.patch |
||||
|
||||
# If the 'st_size' != 0 && count(blocks) == 0 && st_size < size(block), this |
||||
# does not necessarily must be a sparse file. |
||||
# ~> upstream (paxutils): 986382a0bb3261 |
||||
# ~> #1024095, #1024268 |
||||
Patch18: tar-1.27-sparse-stat-detection.patch |
||||
|
||||
# Don't add "false" default acls when during extraction (#1220890) |
||||
# ~> #1220890 |
||||
Patch19: tar-1.26-default-acls.patch |
||||
|
||||
# Make sure getfilecon's wrapper set's freed pointer to NULL to avoid double |
||||
# free later in client code. |
||||
# ~> upstream commit (gnulib): b6b3ed1fa4c |
||||
# ~> rhbz#1347396 |
||||
Patch20: tar-1.26-dont-segfault-with-disabled-selinux.patch |
||||
|
||||
# Restore incremental backups correctly, files were not being removed |
||||
# ~> upstream commits: 738fb9c2f44 b6979c7278e f86e0605d0e |
||||
# ~> rhbz#1184697 |
||||
Patch21: tar-1.26-restore-incremental-backups.patch |
||||
|
||||
# Fix the behavior of tar when --directory option is used together with |
||||
# --remove-files. |
||||
# ~> upstream commits: e3d28d84bda b41b004638f f7077dd38b0 d3fd92c6fb2 |
||||
# d28eee6b4f1 74ce228f6df 3125d311e17 3de5db2a151 fc58a8bd984 |
||||
# fcde08534bd e6fcc73efa7 |
||||
# ~> rhbz#1319820 |
||||
Patch22: tar-1.26-directory_with_remove-files.patch |
||||
|
||||
# Repair the ignorance of --xattrs-exclude/include options |
||||
# ~> upstream: bb6ddd8e04c and c81a0853bb8 |
||||
# ~> rhbz#1341786 |
||||
Patch23: tar-1.26-xattrs-exclude-include-repair.patch |
||||
|
||||
# Intorduce new option "--keep-directory-symlink", backported from version 1.27 |
||||
# ~> upstream: 2c06a809180 |
||||
# ~> rhbz#1350640 |
||||
Patch24: tar-1.26-keep-directory-symlink.patch |
||||
|
||||
# Fix non-determinism in archive-type-heuristic |
||||
# ~> upstream: 1847ec67cec + 1e8b786e651 |
||||
# ~> rhbz#1437297 |
||||
Patch25: tar-1.26-non-deterministic-archive-detection.patch |
||||
|
||||
# Avoid tar to hang with --extract --xatrrs and --skip-old-files options |
||||
# ~> upstream: 597b0ae509 and ca9399d4e |
||||
# -> proposed: https://www.mail-archive.com/bug-tar@gnu.org/msg05229.html |
||||
# ~> rhbz#1408168 |
||||
Patch26: tar-1.26-xattrs-skip-old-files-hangs.patch |
||||
|
||||
# List sparse files of 8GB+ properly, without failure. |
||||
# ~> upstream: 586a6263e9d97 ec94fbdf458ad |
||||
# ~> paxutils-upstream: 45af1632aa64a 58b8ac114790e |
||||
Patch27: tar-1.26-large-sparse-file-listing.patch |
||||
|
||||
# Document (and test) --keep-directory-option |
||||
# ~> upstream: d06126f814563b01e598b85a8cc233604a2948f2 |
||||
# ~> rhbz#1504146 |
||||
Patch28: tar-1.26-keep-directory-symlink-doc-and-test.patch |
||||
|
||||
# Silence gcc warnings |
||||
# ~> upstream tar: 17f99bc6f, 5bb0433 |
||||
# ~> upstream paxutils: 0b3d84a0 |
||||
Patch999: tar-1.26-silence-gcc.patch |
||||
|
||||
# run "make check" by default |
||||
%bcond_without check |
||||
|
||||
BuildRequires: autoconf automake texinfo gettext libacl-devel rsh |
||||
|
||||
%if %{with check} |
||||
# cover needs of tar's testsuite |
||||
BuildRequires: attr acl policycoreutils |
||||
%endif |
||||
|
||||
%if %{WITH_SELINUX} |
||||
BuildRequires: libselinux-devel |
||||
%endif |
||||
Provides: bundled(gnulib) |
||||
Provides: /bin/tar |
||||
Provides: /bin/gtar |
||||
Requires(post): /sbin/install-info |
||||
Requires(preun): /sbin/install-info |
||||
|
||||
%description |
||||
The GNU tar program saves many files together in one archive and can |
||||
restore individual files (or all of the files) from that archive. Tar |
||||
can also be used to add supplemental files to an archive and to update |
||||
or list files in the archive. Tar includes multivolume support, |
||||
automatic archive compression/decompression, the ability to perform |
||||
remote archives, and the ability to perform incremental and full |
||||
backups. |
||||
|
||||
If you want to use tar for remote backups, you also need to install |
||||
the rmt package on the remote box. |
||||
|
||||
%prep |
||||
%setup -q |
||||
%patch1 -p1 -b .loneZeroWarning |
||||
%patch2 -p1 -b .vfatTruncate |
||||
%patch3 -p1 -b .wildcards |
||||
%patch4 -p1 -b .rofs |
||||
%patch5 -p1 -b .oldarchive |
||||
%patch6 -p1 -b .update_and_changedir |
||||
%patch7 -p1 -b .gets %{?_rawbuild} |
||||
%patch8 -p1 -b .skip-old-files |
||||
%patch9 -p1 -b .selinux-gnulib-prep |
||||
%patch10 -p1 -b .xattrs-selinux-acls |
||||
%patch11 -p1 -b .big_uid_gid |
||||
%patch12 -p1 -b .pax-sparse-big-files |
||||
%patch13 -p1 -b .extract-single-volume |
||||
%patch14 -p1 -b .print-xattrs-fix |
||||
%patch15 -p1 -b .birthtime |
||||
%patch16 -p1 -b .xattrs-documentation |
||||
%patch17 -p1 -b .xattrs-if-xattrs-include |
||||
%patch18 -p1 -b .sparse-stat-detection |
||||
%patch19 -p1 -b .default-acls |
||||
%patch20 -p1 -b .disabled-selinux |
||||
%patch21 -p1 -b .incremental-backups |
||||
%patch22 -p1 -b .directory |
||||
%patch23 -p1 -b .xattrs-exclude-include |
||||
%patch24 -p1 -b .keep-directory-symlink |
||||
%patch25 -p1 -b .fix-archive-detection-heuristic |
||||
%patch26 -p1 -b .extract-xattrs-hangs |
||||
%patch27 -p1 -b .large-sparse-file-listing |
||||
%patch28 -p1 -b .test-and-doc-for-keep-dir-symlink |
||||
%patch999 -p1 -b .silence-gcc |
||||
|
||||
autoreconf -v |
||||
|
||||
%build |
||||
%if ! %{WITH_SELINUX} |
||||
%global CONFIGURE_SELINUX --without-selinux |
||||
%endif |
||||
|
||||
%configure %{?CONFIGURE_SELINUX} \ |
||||
DEFAULT_RMT_DIR=%{_sysconfdir} \ |
||||
RSH=/usr/bin/ssh |
||||
make |
||||
|
||||
%install |
||||
make DESTDIR=$RPM_BUILD_ROOT install |
||||
|
||||
ln -s tar $RPM_BUILD_ROOT%{_bindir}/gtar |
||||
rm -f $RPM_BUILD_ROOT/%{_infodir}/dir |
||||
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1 |
||||
install -c -p -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_mandir}/man1 |
||||
ln -s tar.1.gz $RPM_BUILD_ROOT%{_mandir}/man1/gtar.1 |
||||
|
||||
# XXX Nuke unpackaged files. |
||||
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/rmt |
||||
|
||||
%find_lang %name |
||||
|
||||
%check |
||||
%if %{with check} |
||||
rm -f $RPM_BUILD_ROOT/test/testsuite |
||||
make check || TESTSUITEFLAGS=-v make check |
||||
%endif |
||||
|
||||
%clean |
||||
rm -rf $RPM_BUILD_ROOT |
||||
|
||||
%post |
||||
if [ -f %{_infodir}/tar.info.gz ]; then |
||||
/sbin/install-info %{_infodir}/tar.info.gz %{_infodir}/dir || : |
||||
fi |
||||
|
||||
%preun |
||||
if [ $1 = 0 ]; then |
||||
if [ -f %{_infodir}/tar.info.gz ]; then |
||||
/sbin/install-info --delete %{_infodir}/tar.info.gz %{_infodir}/dir || : |
||||
fi |
||||
fi |
||||
|
||||
%files -f %{name}.lang |
||||
%doc AUTHORS ChangeLog ChangeLog.1 COPYING NEWS README THANKS TODO |
||||
%{_bindir}/tar |
||||
%{_bindir}/gtar |
||||
%{_mandir}/man1/tar.1* |
||||
%{_mandir}/man1/gtar.1* |
||||
%{_infodir}/tar.info* |
||||
|
||||
%changelog |
||||
* Thu Oct 19 2017 Pavel Raiskup <praiskup@redhat.com> - 1.26-34 |
||||
- document --keep-directory-symlink in manual page (rhbz#1504146) |
||||
|
||||
* Thu Sep 07 2017 Pavel Raiskup <praiskup@redhat.com> - 1.26-33 |
||||
- extract: deterministic archive type detection (rhbz#1437297) |
||||
- avoid hang when extracting with --xattrs --skip-old-files (rhbz#1408168) |
||||
- fix listing of large sparse members (rhbz#1347229) |
||||
|
||||
* Tue Feb 28 2017 Tomas Repik <trepik@redhat.com> - 2:1.26-32 |
||||
- restore incremental backups correctly, files were not being removed (rhbz#1184697) |
||||
- fix the behavior of tar when --directory option is used together with |
||||
--remove-files |
||||
- repair the ignorance of --xattrs-exclude/include options (rhbz#1341786) |
||||
- Intorduce new option '--keep-directory-symlink' |
||||
|
||||
* Mon Jun 20 2016 Pavel Raiskup <praiskup@redhat.com> - 1.26-31 |
||||
- avoid double free in selinux code (rhbz#1347396) |
||||
|
||||
* Thu Jun 04 2015 Pavel Raiskup <praiskup@redhat.com> - 1.26-30 |
||||
- don't mistakenly set default ACLs (#1220890) |
||||
|
||||
* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 2:1.26-29 |
||||
- Mass rebuild 2014-01-24 |
||||
|
||||
* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 2:1.26-28 |
||||
- Mass rebuild 2013-12-27 |
||||
|
||||
* Mon Nov 18 2013 Pavel Raiskup <praiskup@redhat.com> - 1.26-27 |
||||
- sparse file detection based on fstat() fix (#1024268) |
||||
|
||||
* Mon Sep 09 2013 Pavel Raiskup <praiskup@redhat.com> - 1.26-26 |
||||
- the --xattrs-include implies --xattrs now (#965969) |
||||
|
||||
* Wed Aug 14 2013 Pavel Raiskup <praiskup@redhat.com> - 1.26-26 |
||||
- add documenation for xattrs-like options (#996753) |
||||
|
||||
* Thu Jun 20 2013 Pavel Raiskup <praiskup@redhat.com> - 1.26-25 |
||||
- the /etc/rmt seems to be the best place where to look for rmt binary (see the |
||||
commit message in Fedora's cpio.git for more info) |
||||
|
||||
* Tue Jun 04 2013 Pavel Raiskup <praiskup@redhat.com> - 2:1.26-24 |
||||
- fix "symlink eating" bug (already fixed in upstream git) |
||||
|
||||
* Thu May 30 2013 Pavel Raiskup <praiskup@redhat.com> - 2:1.26-23 |
||||
- use /usr/bin/ssh as the default remote shell binary (#969015) |
||||
- do not verbose-print xattrs when --no-xattrs option is used |
||||
- do not override the config.{guess,sub} twice, this is already done by the |
||||
redhat-rpm-config package (#951442) |
||||
|
||||
* Tue May 28 2013 Pavel Raiskup <praiskup@redhat.com> - 2:1.26-22 |
||||
- again search for 'rmt' binary in %%{_sbindir} on target host |
||||
|
||||
* Tue Mar 26 2013 Pavel Raiskup <praiskup@redhat.com> - 2:1.26-21 |
||||
- enable build for arm64 (#926610) |
||||
- silence gcc warnings (lint fixes without risk from upstream) for RPMDiff |
||||
|
||||
* Tue Mar 19 2013 Pavel Raiskup <praiskup@redhat.com> - 2:1.26-20 |
||||
- allow extracting single volume from multi-volume archive (#919897) |
||||
- usrmove: /bin/tar ~> /usr/bin/tar, selinux handling edit |
||||
|
||||
* Fri Mar 01 2013 Pavel Raiskup <praiskup@redhat.com> - 2:1.26-19 |
||||
- fix creating sparse pax archives containing files of effective |
||||
size >8GB (#516309) |
||||
- silence rpmlint (fix bad dates in changelog based on git log dates) |
||||
|
||||
* Wed Feb 20 2013 Pavel Raiskup <praiskup@redhat.com> - 2:1.26-18 |
||||
- fix problems with big uids/gids and pax format (> 2^21) (#913406) |
||||
|
||||
* Mon Feb 18 2013 Pavel Raiskup <praiskup@redhat.com> - 2:1.26-17 |
||||
- add possibility to 'rpmbuild' without %%check phase |
||||
- make the autoreconf phase verbose |
||||
- re-create older patches (avoid offset warnings during patching) |
||||
- remove patches which we don't need now (xattrs - will be updated, sigpipe - |
||||
test should work now, partial revert of *at() conversion was done because of |
||||
incompatible xattr patch) |
||||
- add upstream up2date xattr patch |
||||
|
||||
* Fri Feb 01 2013 Pavel Raiskup <praiskup@redhat.com> - 2:1.26-16 |
||||
- make the info documentation more visible in manpage (#903666) |
||||
- sync tar.1 manpage with actual --help output (e.g. added --skip-old-files) |
||||
- add the last_help2man_run file to git repo to allow more easily find changes |
||||
in --help in future |
||||
- make the DEFAULTS section to be more visible in man page |
||||
- verbose 'make check' only when some fail happened (append to koji build.log) |
||||
|
||||
* Thu Nov 29 2012 Ondrej Vasik <ovasik@redhat.com> - 2:1.26-15 |
||||
- add missing --full-time option to manpage |
||||
|
||||
* Thu Oct 18 2012 Pavel Raiskup <praiskup@redhat.com> - 2:1.26-14 |
||||
- fix bad behaviour of --keep-old-files and add --skip-old-files option |
||||
(#799252) |
||||
|
||||
* Wed Oct 10 2012 Pavel Raiskup <praiskup@redhat.com> 2:1.26-13 |
||||
- fix badly written macro for building --without-selinux |
||||
- allow to build tar in difference CoverityScan by forcing the '.gets' patch to |
||||
be applied even in the run without patches |
||||
|
||||
* Fri Oct 05 2012 Pavel Raiskup <praiskup@redhat.com> 2:1.26-12 |
||||
- repair the xattr-gnulib-prepare patch to allow build tar without SELinux |
||||
support |
||||
- fedora-review compliance -> remove trailing white-spaces, remove macro from |
||||
comment, remove BR of gawk;coreutils;gzip that should be covered automatically |
||||
by minimum build environment, do not `rm -rf' buildroot at the beginning of |
||||
install phase (needed only in EPEL), remove BuildRoot definition, remove |
||||
defattr macro, s/define/global/ |
||||
- do not use ${VAR} syntax for bash variables, use just $VAR |
||||
|
||||
* Wed Aug 22 2012 Pavel Raiskup <praiskup@redhat.com> 2:1.26-11 |
||||
- fix manpage to reflect #850291 related commit |
||||
|
||||
* Tue Aug 21 2012 Pavel Raiskup <praiskup@redhat.com> 2:1.26-10 |
||||
- prepare Gnulib for new xattrs (#850291) |
||||
- new version of RH xattrs patch (#850291) |
||||
- enable verbose mode in testsuite to allow better debugging on error |
||||
|
||||
* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2:1.26-9 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild |
||||
|
||||
* Thu Jul 12 2012 Pavel Raiskup <praiskup@redhat.com> 2:1.26-8 |
||||
- force the fchown() be called before xattrs_set() (#771927) |
||||
|
||||
* Sat Jun 16 2012 Ondrej Vasik <ovasik@redhat.com> 2:1.26-7 |
||||
- store&restore security.capability extended attributes category |
||||
(#771927) |
||||
- fix build failure with undefined gets |
||||
|
||||
* Tue May 15 2012 Ondrej Vasik <ovasik@redhat.com> 2:1.26-6 |
||||
- add virtual provides for bundled(gnulib) copylib (#821790) |
||||
|
||||
* Thu Apr 05 2012 Pavel Raiskup <praiskup@redhat.com> 2:1.26-5 |
||||
- fix for bad cooperation of the '-C' (change directory) and '-u' (update |
||||
package) options (#688567) |
||||
|
||||
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2:1.26-4 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild |
||||
|
||||
* Sun Oct 2 2011 Ville Skyttä <ville.skytta@iki.fi> - 2:1.26-3 |
||||
- Man page heading formatting fixes. |
||||
|
||||
* Mon Sep 26 2011 Kamil Dudka <kdudka@redhat.com> 2:1.26-2 |
||||
- restore basic functionality of --acl, --selinux, and --xattr (#717684) |
||||
|
||||
* Sat Mar 12 2011 Ondrej Vasik <ovasik@redhat.com> 2:1.26-1 |
||||
- new upstream release 1.26 |
||||
* Wed Feb 09 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2:1.25-6 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild |
||||
|
||||
* Thu Jan 20 2011 Ondrej Vasik <ovasik@redhat.com> 2:1.25-5 |
||||
- drop unnecessary hard dependency on info package(#671157) |
||||
|
||||
* Mon Jan 03 2011 Ondrej Vasik <ovasik@redhat.com> 2:1.25-4 |
||||
- mention that some compression options might not work if |
||||
the external program is not available(#666755) |
||||
|
||||
* Wed Dec 08 2010 Kamil Dudka <kdudka@redhat.com> 2:1.25-3 |
||||
- correctly store long sparse file names in PAX archives (#656834) |
||||
|
||||
* Tue Nov 23 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.25-2 |
||||
- fix issue with --one-file-system and --listed-incremental |
||||
(#654718) |
||||
|
||||
* Mon Nov 08 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.25-1 |
||||
- new upstream release 1.25 |
||||
|
||||
* Mon Oct 25 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.24-1 |
||||
- new upstream release 1.24, use .xz archive |
||||
|
||||
* Wed Sep 29 2010 jkeating - 2:1.23-8 |
||||
- Rebuilt for gcc bug 634757 |
||||
|
||||
* Fri Sep 24 2010 Kamil Dudka <kdudka@redhat.com> 2:1.23-7 |
||||
- match non-stripped file names (#637085) |
||||
|
||||
* Mon Sep 20 2010 Kamil Dudka <kdudka@redhat.com> 2:1.23-6 |
||||
- fix exclusion of long file names with --xattrs (#634866) |
||||
- do not crash with --listed-incremental (#635318) |
||||
|
||||
* Mon Aug 16 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.23-5 |
||||
- add support for security.NTACL xattrs (#621215) |
||||
|
||||
* Tue Jun 01 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.23-4 |
||||
- recognize old-archive/portability options(#594044) |
||||
|
||||
* Wed Apr 07 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.23-3 |
||||
- allow storing of extended attributes for fifo and block |
||||
or character devices files(#573147) |
||||
|
||||
* Mon Mar 15 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.23-2 |
||||
- update help2maned manpage |
||||
|
||||
* Fri Mar 12 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.23-1 |
||||
- new upstream release 1.23, remove applied patches |
||||
|
||||
* Wed Mar 10 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.22-17 |
||||
- CVE-2010-0624 tar, cpio: Heap-based buffer overflow |
||||
by expanding a specially-crafted archive (#572149) |
||||
- realloc within check_exclusion_tags() caused invalid write |
||||
(#570591) |
||||
- not closing file descriptors for excluded files/dirs with |
||||
exlude-tag... options could cause descriptor exhaustion |
||||
(#570591) |
||||
|
||||
* Sat Feb 20 2010 Kamil Dudka <kdudka@redhat.com> 2:1.22-16 |
||||
- support for "lustre.*" extended attributes (#561855) |
||||
|
||||
* Thu Feb 04 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.22-15 |
||||
- fix segfault with corrupted metadata in code_ns_fraction |
||||
(#531441) |
||||
|
||||
* Wed Feb 03 2010 Kamil Dudka <kdudka@redhat.com> 2:1.22-14 |
||||
- allow also build with SELinux support |
||||
|
||||
* Mon Feb 01 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.22-13 |
||||
- allow build without SELinux support(#556679) |
||||
|
||||
* Tue Jan 05 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.22-12 |
||||
- do not fail with POSIX 2008 glibc futimens() (#552320) |
||||
- temporarily disable fix for #531441, causing stack smashing |
||||
with newer glibc(#551206) |
||||
|
||||
* Tue Dec 08 2009 Ondrej Vasik <ovasik@redhat.com> 2:1.22-11 |
||||
- fix segfault with corrupted metadata in code_ns_fraction |
||||
(#531441) |
||||
- commented patches and sources |
||||
|
||||
* Fri Nov 27 2009 Ondrej Vasik <ovasik@redhat.com> 2:1.22-10 |
||||
- store xattrs for symlinks (#525992) - by Kamil Dudka |
||||
- update tar(1) manpage (#539787) |
||||
- fix memory leak in xheader (#518079) |
||||
|
||||
* Wed Nov 18 2009 Kamil Dudka <kdudka@redhat.com> 2:1.22-9 |
||||
- store SELinux context for symlinks (#525992) |
||||
|
||||
* Thu Aug 27 2009 Ondrej Vasik <ovasik@redhat.com> 2:1.22-8 |
||||
- provide symlink manpage for gtar |
||||
|
||||
* Thu Aug 06 2009 Ondrej Vasik <ovasik@redhat.com> 2:1.22-7 |
||||
- do process install-info only without --excludedocs(#515923) |
||||
|
||||
* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2:1.22-6 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild |
||||
|
||||
* Thu Jul 16 2009 Ondrej Vasik <ovasik@redhat.com> 2:1.22-5 |
||||
- Fix restoring of directory default acls(#511145) |
||||
- Do not patch generated autotools files |
||||
|
||||
* Thu Jun 25 2009 Ondrej Vasik <ovasik@redhat.com> 2:1.22-4 |
||||
- Report record size only if the archive refers to a device |
||||
(#487760) |
||||
- Do not sigabrt with new gcc/glibc because of writing to |
||||
struct members of gnutar header at once via strcpy |
||||
|
||||
* Fri May 15 2009 Ondrej Vasik <ovasik@redhat.com> 2:1.22-3 |
||||
- ignore errors from setting utime() for source file |
||||
on read-only filesystem (#500742) |
||||
|
||||
* Fri Mar 06 2009 Kamil Dudka <kdudka@redhat.com> 2:1.22-2 |
||||
- improve tar-1.14-loneZeroWarning.patch (#487315) |
||||
|
||||
* Mon Mar 02 2009 Ondrej Vasik <ovasik@redhat.com> 2:1.22-1 |
||||
- New upstream release 1.22, removed applied patch |
||||
|
||||
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2:1.21-2 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild |
||||
|
||||
* Mon Jan 05 2009 Ondrej Vasik <ovasik@redhat.com> 2:1.21-1 |
||||
- New upstream release 1.21, removed applied patches |
||||
- add support for -I option, fix testsuite failure |
||||
|
||||
* Thu Dec 11 2008 Ondrej Vasik <ovasik@redhat.com> 2:1.20-6 |
||||
- add BuildRequires for rsh (#475950) |
||||
|
||||
* Fri Nov 21 2008 Ondrej Vasik <ovasik@redhat.com> 2:1.20-5 |
||||
- fix off-by-one errors in xattrs patch (#472355) |
||||
|
||||
* Mon Nov 10 2008 Kamil Dudka <kdudka@redhat.com> 2:1.20-4 |
||||
- fixed bug #465803: labels with --multi-volume (upstream patch) |
||||
|
||||
* Fri Oct 10 2008 Ondrej Vasik <ovasik@redhat.com> 2:1.20-3 |
||||
- Fixed wrong documentation for xattrs options (#466517) |
||||
- fixed bug with null file terminator and change dirs |
||||
(upstream) |
||||
|
||||
* Fri Aug 29 2008 Ondrej Vasik <ovasik@redhat.com> 2:1.20-2 |
||||
- patch fuzz clean up |
||||
|
||||
* Mon May 26 2008 Ondrej Vasik <ovasik@redhat.com> 2:1.20-1 |
||||
- new upstream release 1.20 (lzma support, few new options |
||||
and bugfixes) |
||||
- heavily modified xattrs patches(as tar-1.20 now uses automake |
||||
1.10.1) |
||||
|
||||
* Tue Feb 12 2008 Radek Brich <rbrich@redhat.com> 2:1.19-3 |
||||
- do not print getfilecon/setfilecon warnings when SELinux is disabled |
||||
or SELinux data are not available (bz#431879) |
||||
- fix for GCC 4.3 |
||||
|
||||
* Mon Jan 21 2008 Radek Brich <rbrich@redhat.com> 2:1.19-2 |
||||
- fix errors in man page |
||||
* fix definition of --occurrence (bz#416661, patch by Jonathan Wakely) |
||||
* update meaning of -l: it has changed from --one-filesystem |
||||
to --check-links (bz#426717) |
||||
- update license tag, tar 1.19 is GPLv3+ |
||||
|
||||
* Mon Dec 17 2007 Radek Brich <rbrich@redhat.com> 2:1.19-1 |
||||
- upgrade to 1.19 |
||||
- updated xattrs patch, removed 3 upstream patches |
||||
|
||||
* Wed Dec 12 2007 Radek Brich <rbrich@redhat.com> 2:1.17-5 |
||||
- fix (non)detection of xattrs |
||||
- move configure stuff from -xattrs patch to -xattrs-conf, |
||||
so the original patch could be easily read |
||||
- fix -xattrs patch to work with zero length files and show |
||||
warnings when xattrs not available (fixes by James Antill) |
||||
- possible corruption (#408621) - add warning to man page |
||||
for now, may be actually fixed later, depending on upstream |
||||
|
||||
* Tue Oct 23 2007 Radek Brich <rbrich@redhat.com> 2:1.17-4 |
||||
- upstream patch for CVE-2007-4476 |
||||
(tar stack crashing in safer_name_suffix) |
||||
|
||||
* Tue Aug 28 2007 Radek Brich <rbrich@redhat.com> 2:1.17-3 |
||||
- gawk build dependency |
||||
|
||||
* Tue Aug 28 2007 Radek Brich <rbrich@redhat.com> 2:1.17-2 |
||||
- updated license tag |
||||
- fixed CVE-2007-4131 tar directory traversal vulnerability (#251921) |
||||
|
||||
* Thu Jun 28 2007 Radek Brich <rbrich@redhat.com> 2:1.17-1 |
||||
- new upstream version |
||||
- patch for wildcards (#206841), restoring old behavior |
||||
- patch for testsuite |
||||
- update -xattrs patch |
||||
- drop 13 obsolete patches |
||||
|
||||
* Tue Feb 06 2007 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-26 |
||||
- fix spec file to meet Fedora standards (#226478) |
||||
|
||||
* Mon Jan 22 2007 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-25 |
||||
- fix non-failsafe install-info use in scriptlets (#223718) |
||||
|
||||
* Wed Jan 03 2007 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-24 |
||||
- supply tar man page (#219375) |
||||
|
||||
* Tue Dec 12 2006 Florian La Roche <laroche@redhat.com> 2:1.15.1-23 |
||||
- fix CVE-2006-6097 GNU tar directory traversal (#216937) |
||||
|
||||
* Sun Dec 10 2006 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-22 |
||||
- fix some rpmlint spec file issues |
||||
|
||||
* Wed Oct 25 2006 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-21 |
||||
- build with dist-tag |
||||
|
||||
* Mon Oct 09 2006 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-20 |
||||
- another fix of tar-1.15.1-xattrs.patch from James Antill |
||||
|
||||
* Wed Oct 04 2006 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-19 |
||||
- another fix of tar-1.15.1-xattrs.patch from James Antill |
||||
|
||||
* Sun Oct 01 2006 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-18 |
||||
- fix tar-1.15.1-xattrs.patch (#208701) |
||||
|
||||
* Tue Sep 19 2006 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-17 |
||||
- start new epoch, downgrade to solid stable 1.15.1-16 (#206979), |
||||
- all patches are backported |
||||
|
||||
* Tue Sep 19 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.91-2 |
||||
- apply patches, which were forgotten during upgrade |
||||
|
||||
* Wed Sep 13 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.91-1 |
||||
- upgrade, which also fix incremental backup (#206121) |
||||
|
||||
* Fri Sep 08 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.90-7 |
||||
- fix tar-debuginfo package (#205615) |
||||
|
||||
* Thu Aug 10 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.90-6 |
||||
- add xattr support (#200925), patch from james.antill@redhat.com |
||||
|
||||
* Mon Jul 24 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.90-5 |
||||
- fix incompatibilities in appending files to the end |
||||
of an archive (#199515) |
||||
|
||||
* Tue Jul 18 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.90-4 |
||||
- fix problem with unpacking archives in a directory for which |
||||
one has write permission but does not own (such as /tmp) (#149686) |
||||
|
||||
* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 1.15.90-3.1 |
||||
- rebuild |
||||
|
||||
* Thu Jun 29 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.90-3 |
||||
- fix typo in tar.1 man page |
||||
|
||||
* Tue Apr 25 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.90-2 |
||||
- exclude listed02.at from testsuite again, because it |
||||
still fails on s390 |
||||
|
||||
* Tue Apr 25 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.90-1 |
||||
- upgrade |
||||
|
||||
* Mon Apr 24 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.1-16 |
||||
- fix problem when options at the end of command line were |
||||
not recognized (#188707) |
||||
|
||||
* Thu Apr 13 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.1-15 |
||||
- fix segmentation faul introduced with hugeSparse.patch |
||||
|
||||
* Wed Mar 22 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.1-14 |
||||
- fix problems with extracting large sparse archive members (#185460) |
||||
|
||||
* Fri Feb 17 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.1-13 |
||||
- fix heap overlfow bug CVE-2006-0300 (#181773) |
||||
|
||||
* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 1.15.1-12.2 |
||||
- bump again for double-long bug on ppc(64) |
||||
|
||||
* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 1.15.1-12.1 |
||||
- rebuilt for new gcc4.1 snapshot and glibc changes |
||||
|
||||
* Mon Feb 06 2006 Peter Vrabec <pvrabec@redhat.com> 1.15.1-12 |
||||
- fix extracting sparse files to a filesystem like vfat, |
||||
when ftruncate may fail to grow the size of a file.(#179507) |
||||
|
||||
* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com> |
||||
- rebuilt |
||||
|
||||
* Fri Nov 04 2005 Peter Vrabec <pvrabec@redhat.com> 1.15.1-11 |
||||
- correctly pad archive members that shrunk during archiving (#172373) |
||||
|
||||
* Tue Sep 06 2005 Peter Vrabec <pvrabec@redhat.com> 1.15.1-10 |
||||
- provide man page (#163709, #54243, #56041) |
||||
|
||||
* Mon Aug 15 2005 Peter Vrabec <pvrabec@redhat.com> 1.15.1-9 |
||||
- silence newer option (#164902) |
||||
|
||||
* Wed Jul 27 2005 Peter Vrabec <pvrabec@redhat.com> 1.15.1-8 |
||||
- A file is dumpable if it is sparse and both --sparse |
||||
and --totals are specified (#154882) |
||||
|
||||
* Tue Jul 26 2005 Peter Vrabec <pvrabec@redhat.com> 1.15.1-7 |
||||
- exclude listed02.at from testsuite |
||||
|
||||
* Fri Jul 22 2005 Peter Vrabec <pvrabec@redhat.com> 1.15.1-6 |
||||
- remove tar-1.14-err.patch, not needed (158743) |
||||
|
||||
* Fri Apr 15 2005 Peter Vrabec <pvrabec@redhat.com> 1.15.1-5 |
||||
- extract sparse files even if the output fd is not seekable.(#154882) |
||||
- (sparse_scan_file): Bugfix. offset had incorrect type. |
||||
|
||||
* Mon Mar 14 2005 Peter Vrabec <pvrabec@redhat.com> |
||||
- gcc4 fix (#150993) 1.15.1-4 |
||||
|
||||
* Mon Jan 31 2005 Peter Vrabec <pvrabec@redhat.com> |
||||
- rebuild 1.15.1-3 |
||||
|
||||
* Mon Jan 17 2005 Peter Vrabec <pvrabec@redhat.com> |
||||
- fix tests/testsuite |
||||
|
||||
* Fri Jan 07 2005 Peter Vrabec <pvrabec@redhat.com> |
||||
- upgrade to 1.15.1 |
||||
|
||||
* Mon Oct 11 2004 Peter Vrabec <pvrabec@redhat.com> |
||||
- patch to stop issuing lone zero block warnings |
||||
- rebuilt |
||||
|
||||
* Mon Oct 11 2004 Peter Vrabec <pvrabec@redhat.com> |
||||
- URL added to spec file |
||||
- spec file clean up |
||||
|
||||
* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com> |
||||
- rebuilt |
||||
|
||||
* Mon Jun 7 2004 Jeff Johnson <jbj@jbj.org> 1.14-1 |
||||
- upgrade to 1.14. |
||||
|
||||
* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com> |
||||
- rebuilt |
||||
|
||||
* Tue Jun 17 2003 Jeff Johnson <jbj@redhat.com> 1.13.25-13 |
||||
- rebuilt because of crt breakage on ppc64. |
||||
- dump automake15 requirement. |
||||
|
||||
* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com> |
||||
- rebuilt |
||||
|
||||
* Wed Jan 22 2003 Tim Powers <timp@redhat.com> |
||||
- rebuilt |
||||
|
||||
* Fri Nov 29 2002 Tim Powers <timp@redhat.com> 1.13.25-10 |
||||
- fix broken buildrquires on autoconf253 |
||||
|
||||
* Thu Nov 7 2002 Jeff Johnson <jbj@redhat.com> 1.13.25-9 |
||||
- rebuild from CVS. |
||||
|
||||
* Fri Aug 23 2002 Phil Knirsch <pknirsch@redhat.com> 1.13.25-8 |
||||
- Included security patch from errata release. |
||||
|
||||
* Mon Jul 1 2002 Bernhard Rosenkraenzer <bero@redhat.com> 1.13.25-7 |
||||
- Fix argv NULL termination (#64869) |
||||
|
||||
* Thu May 23 2002 Tim Powers <timp@redhat.com> |
||||
- automated rebuild |
||||
|
||||
* Tue Apr 9 2002 Bernhard Rosenkraenzer <bero@redhat.com> 1.13.25-4 |
||||
- Fix build with autoconf253 (LIBOBJ change; autoconf252 worked) |
||||
|
||||
* Wed Jan 09 2002 Tim Powers <timp@redhat.com> |
||||
- automated rebuild |
||||
|
||||
* Tue Oct 23 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.13.25-2 |
||||
- Don't include hardlinks to sockets in a tar file (#54827) |
||||
|
||||
* Thu Sep 27 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.13.25-1 |
||||
- 1.13.25 |
||||
|
||||
* Tue Sep 18 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.13.22-1 |
||||
- Update to 1.13.22, adapt patches |
||||
|
||||
* Mon Aug 27 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.13.19-6 |
||||
- Fix #52084 |
||||
|
||||
* Thu May 17 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.13.19-5 |
||||
- Fix build with current autoconf (stricter checking on AC_DEFINE) |
||||
- Fix segfault when tarring directories without having read permissions |
||||
(#40802) |
||||
|
||||
* Tue Mar 6 2001 Bernhard Rosenkraenzer <bero@redhat.com> |
||||
- Don't depend on librt. |
||||
|
||||
* Fri Feb 23 2001 Trond Eivind Glomsröd <teg@redhat.com> |
||||
- langify |
||||
|
||||
* Thu Feb 22 2001 Bernhard Rosenkraenzer <bero@redhat.com> |
||||
- Fix up the man page (#28915) |
||||
|
||||
* Wed Feb 21 2001 Bernhard Rosenkraenzer <bero@redhat.com> |
||||
- 1.3.19, nukes -I and fixes up -N |
||||
- Add -I back in as an alias to -j with a nice loud warning |
||||
|
||||
* Mon Oct 30 2000 Bernhard Rosenkraenzer <bero@redhat.com> |
||||
- 1.3.18 |
||||
- Update man page to reflect changes |
||||
|
||||
* Thu Oct 5 2000 Bernhard Rosenkraenzer <bero@redhat.com> |
||||
- Fix the "ignore failed read" option (Bug #8330) |
||||
|
||||
* Mon Sep 25 2000 Bernhard Rosenkraenzer <bero@redhat.com> |
||||
- fix hang on tar tvzf - <something.tar.gz, introduced by |
||||
exit code fix (Bug #15448), Patch from Tim Waugh <twaugh@redhat.com> |
||||
|
||||
* Fri Aug 18 2000 Bernhard Rosenkraenzer <bero@redhat.com> |
||||
- really fix exit code (Bug #15448) |
||||
|
||||
* Mon Aug 7 2000 Bernhard Rosenkraenzer <bero@redhat.com> |
||||
- fix exit code (Bug #15448), patch from Tim Waugh <twaugh@redhat.com> |
||||
|
||||
* Wed Jul 12 2000 Prospector <bugzilla@redhat.com> |
||||
- automatic rebuild |
||||
|
||||
* Mon Jun 19 2000 Bernhard Rosenkraenzer <bero@redhat.com> |
||||
- FHSify |
||||
|
||||
* Fri Apr 28 2000 Bill Nottingham <notting@redhat.com> |
||||
- fix for ia64 |
||||
|
||||
* Wed Feb 9 2000 Bernhard Rosenkränzer <bero@redhat.com> |
||||
- Fix the exclude bug (#9201) |
||||
|
||||
* Wed Feb 02 2000 Cristian Gafton <gafton@redhat.com> |
||||
- man pages are compressed |
||||
- fix description |
||||
- fix fnmatch build problems |
||||
|
||||
* Sun Jan 9 2000 Bernhard Rosenkränzer <bero@redhat.com> |
||||
- 1.13.17 |
||||
- remove dotbug patch (fixed in base) |
||||
- update download URL |
||||
|
||||
* Fri Jan 7 2000 Bernhard Rosenkränzer <bero@redhat.com> |
||||
- Fix a severe bug (tar xf any_package_containing_. would delete the |
||||
current directory) |
||||
|
||||
* Wed Jan 5 2000 Bernhard Rosenkränzer <bero@redhat.com> |
||||
- 1.3.16 |
||||
- unset LINGUAS before running configure |
||||
|
||||
* Tue Nov 9 1999 Bernhard Rosenkränzer <bero@redhat.com> |
||||
- 1.13.14 |
||||
- Update man page to know about -I / --bzip |
||||
- Remove dependancy on rmt - tar can be used for anything local |
||||
without it. |
||||
|
||||
* Fri Aug 27 1999 Preston Brown <pbrown@redhat.com> |
||||
- upgrade to 1.13.11. |
||||
|
||||
* Wed Aug 18 1999 Jeff Johnson <jbj@redhat.com> |
||||
- update to 1.13.9. |
||||
|
||||
* Thu Aug 12 1999 Jeff Johnson <jbj@redhat.com> |
||||
- update to 1.13.6. |
||||
- support -y --bzip2 options for bzip2 compression (#2415). |
||||
|
||||
* Fri Jul 23 1999 Jeff Johnson <jbj@redhat.com> |
||||
- update to 1.13.5. |
||||
|
||||
* Tue Jul 13 1999 Bill Nottingham <notting@redhat.com> |
||||
- update to 1.13 |
||||
|
||||
* Sat Jun 26 1999 Jeff Johnson <jbj@redhat.com> |
||||
- update to 1.12.64014. |
||||
- pipe patch corrected for remote tars now merged in. |
||||
|
||||
* Sun Jun 20 1999 Jeff Johnson <jbj@redhat.com> |
||||
- update to tar-1.12.64013. |
||||
- subtract (and reopen #2415) bzip2 support using -y. |
||||
- move gtar to /bin. |
||||
|
||||
* Tue Jun 15 1999 Jeff Johnson <jbj@redhat.com> |
||||
- upgrade to tar-1.12.64011 to |
||||
- add bzip2 support (#2415) |
||||
- fix filename bug (#3479) |
||||
|
||||
* Mon Mar 29 1999 Jeff Johnson <jbj@redhat.com> |
||||
- fix suspended tar with compression over pipe produces error (#390). |
||||
|
||||
* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com> |
||||
- auto rebuild in the new build environment (release 8) |
||||
|
||||
* Mon Mar 08 1999 Michael Maher <mike@redhat.com> |
||||
- added patch for bad name cache. |
||||
- FIXES BUG 320 |
||||
|
||||
* Wed Feb 24 1999 Preston Brown <pbrown@redhat.com> |
||||
- Injected new description and group. |
||||
|
||||
* Fri Dec 18 1998 Preston Brown <pbrown@redhat.com> |
||||
- bumped spec number for initial rh 6.0 build |
||||
|
||||
* Tue Aug 4 1998 Jeff Johnson <jbj@redhat.com> |
||||
- add /usr/bin/gtar symlink (change #421) |
||||
|
||||
* Tue Jul 14 1998 Jeff Johnson <jbj@redhat.com> |
||||
- Fiddle bindir/libexecdir to get RH install correct. |
||||
- Don't include /sbin/rmt -- use the rmt from dump. |
||||
- Turn on nls. |
||||
|
||||
* Mon Apr 27 1998 Prospector System <bugs@redhat.com> |
||||
- translations modified for de, fr, tr |
||||
|
||||
* Thu Oct 16 1997 Donnie Barnes <djb@redhat.com> |
||||
- updated from 1.11.8 to 1.12 |
||||
- various spec file cleanups |
||||
- /sbin/install-info support |
||||
|
||||
* Thu Jun 19 1997 Erik Troan <ewt@redhat.com> |
||||
- built against glibc |
||||
|
||||
* Thu May 29 1997 Michael Fulbright <msf@redhat.com> |
||||
- Fixed to include rmt |
Loading…
Reference in new issue