tar package update
Signed-off-by: basebuilder_pel7ppc64bebuilder0 <basebuilder@powerel.org>master
parent
ce1a1ccb27
commit
c8241fc466
|
@ -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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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,27 @@
|
||||||
|
diff --git a/src/extract.c b/src/extract.c
|
||||||
|
index 87b383a..340beea 100644
|
||||||
|
--- a/src/extract.c
|
||||||
|
+++ b/src/extract.c
|
||||||
|
@@ -1415,6 +1415,13 @@ extract_failure (char *file_name, int typeflag)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int
|
||||||
|
+extract_skip (char *file_name, int typeflag)
|
||||||
|
+{
|
||||||
|
+ skip_member ();
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
typedef int (*tar_extractor_t) (char *file_name, int typeflag);
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1495,7 +1502,7 @@ prepare_to_extract (char const *file_name, int typeflag, tar_extractor_t *fun)
|
||||||
|
ERROR ((0, 0,
|
||||||
|
_("%s: Cannot extract -- file is continued from another volume"),
|
||||||
|
quotearg_colon (current_stat_info.file_name)));
|
||||||
|
- *fun = extract_failure;
|
||||||
|
+ *fun = extract_skip;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GNUTYPE_LONGNAME:
|
|
@ -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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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,169 @@
|
||||||
|
From c4a4cafaa330793d776b001c272bf19869aac39c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sergey Poznyakoff <gray@gnu.org.ua>
|
||||||
|
Date: Mon, 23 Sep 2013 19:35:29 +0300
|
||||||
|
Subject: [PATCH] Changes for compatibility with Slackware installation
|
||||||
|
scripts.
|
||||||
|
|
||||||
|
* src/buffer.c (short_read): the "Record size" message
|
||||||
|
is controlled by the WARN_RECORD_SIZE warning_option bit.
|
||||||
|
* src/common.h (keep_directory_symlink_option): New global.
|
||||||
|
(WARN_RECORD_SIZE): New constant.
|
||||||
|
(WARN_VERBOSE_WARNINGS): Add WARN_RECORD_SIZE.
|
||||||
|
* src/extract.c (extract_dir): If keep_directory_symlink_option is
|
||||||
|
set, follow symlinks to directories.
|
||||||
|
* src/suffix.c (compression_suffixes): Add support for txz
|
||||||
|
suffix.
|
||||||
|
* src/tar.c (KEEP_DIRECTORY_SYMLINK_OPTION): New constant.
|
||||||
|
(options): New option --keep-directory-symlink.
|
||||||
|
(parse_opt): Handle this option.
|
||||||
|
* src/warning.c: Implement "record-size" warning control.
|
||||||
|
|
||||||
|
* NEWS: Update.
|
||||||
|
* doc/tar.texi: Document new features.
|
||||||
|
---
|
||||||
|
NEWS | 12 ++++++++++++
|
||||||
|
doc/tar.texi | 15 +++++++++++++++
|
||||||
|
src/common.h | 2 ++
|
||||||
|
src/extract.c | 19 +++++++++++++++++++
|
||||||
|
src/tar.c | 8 ++++++++
|
||||||
|
5 files changed, 56 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/NEWS b/NEWS
|
||||||
|
index 8f3c416..36a27da 100644
|
||||||
|
--- a/NEWS
|
||||||
|
+++ b/NEWS
|
||||||
|
@@ -6,6 +6,18 @@ Please send GNU tar bug reports to <bug-tar@gnu.org>
|
||||||
|
When creating a PAX-format archive, tar no longer arbitrarily restricts
|
||||||
|
the size of the representation of a sparse file to be less than 8 GiB.
|
||||||
|
|
||||||
|
+* New command line option --keep-directory-symlink
|
||||||
|
+
|
||||||
|
+By default, if when trying to extract a directory from the archive,
|
||||||
|
+tar discovers that the corresponding file name already exists and is a
|
||||||
|
+symbolic link, it first unlinks the entry, and then extracts the directory.
|
||||||
|
+
|
||||||
|
+This option disables this behavior and instructs tar to follow
|
||||||
|
+symlinks to directories when extracting from the archive.
|
||||||
|
+
|
||||||
|
+It is mainly intended to provide compatibility with the Slackware
|
||||||
|
+installation scripts.
|
||||||
|
+
|
||||||
|
|
||||||
|
version 1.26 - Sergey Poznyakoff, 2011-03-12
|
||||||
|
|
||||||
|
diff --git a/doc/tar.texi b/doc/tar.texi
|
||||||
|
index 6bd59c7..fb03b85 100644
|
||||||
|
--- a/doc/tar.texi
|
||||||
|
+++ b/doc/tar.texi
|
||||||
|
@@ -2923,6 +2923,21 @@ Specifies that @command{tar} should ask the user for confirmation before
|
||||||
|
performing potentially destructive options, such as overwriting files.
|
||||||
|
@xref{interactive}.
|
||||||
|
|
||||||
|
+@opsummary{--keep-directory-symlink}
|
||||||
|
+@item --keep-directory-symlink
|
||||||
|
+
|
||||||
|
+This option changes the behavior of tar when it encounters a symlink
|
||||||
|
+with the same name as the directory that it is about to extract. By
|
||||||
|
+default, in this case tar would first remove the symlink and then
|
||||||
|
+proceed extracting the directory.
|
||||||
|
+
|
||||||
|
+The @option{--keep-directory-symlink} option disables this behavior
|
||||||
|
+and instructs tar to follow symlinks to directories when extracting
|
||||||
|
+from the archive.
|
||||||
|
+
|
||||||
|
+It is mainly intended to provide compatibility with the Slackware
|
||||||
|
+installation scripts.
|
||||||
|
+
|
||||||
|
@opsummary{keep-newer-files}
|
||||||
|
@item --keep-newer-files
|
||||||
|
|
||||||
|
diff --git a/src/common.h b/src/common.h
|
||||||
|
index 16ba401..274da01 100644
|
||||||
|
--- a/src/common.h
|
||||||
|
+++ b/src/common.h
|
||||||
|
@@ -192,6 +192,8 @@ enum old_files
|
||||||
|
};
|
||||||
|
GLOBAL enum old_files old_files_option;
|
||||||
|
|
||||||
|
+GLOBAL bool keep_directory_symlink_option;
|
||||||
|
+
|
||||||
|
/* Specified file name for incremental list. */
|
||||||
|
GLOBAL const char *listed_incremental_option;
|
||||||
|
/* Incremental dump level */
|
||||||
|
diff --git a/src/extract.c b/src/extract.c
|
||||||
|
index 3afb95d..b622a2a 100644
|
||||||
|
--- a/src/extract.c
|
||||||
|
+++ b/src/extract.c
|
||||||
|
@@ -854,7 +854,21 @@ apply_nonancestor_delayed_set_stat (char const *file_name, bool after_links)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+static bool
|
||||||
|
+is_directory_link (const char *file_name)
|
||||||
|
+{
|
||||||
|
+ struct stat st;
|
||||||
|
+ int e = errno;
|
||||||
|
+ int res;
|
||||||
|
|
||||||
|
+ res = (fstatat (chdir_fd, file_name, &st, AT_SYMLINK_NOFOLLOW) == 0 &&
|
||||||
|
+ S_ISLNK (st.st_mode) &&
|
||||||
|
+ fstatat (chdir_fd, file_name, &st, 0) == 0 &&
|
||||||
|
+ S_ISDIR (st.st_mode));
|
||||||
|
+ errno = e;
|
||||||
|
+ return res;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Extractor functions for various member types */
|
||||||
|
|
||||||
|
static int
|
||||||
|
@@ -910,10 +924,15 @@ extract_dir (char *file_name, int typeflag)
|
||||||
|
|
||||||
|
if (errno == EEXIST
|
||||||
|
&& (interdir_made
|
||||||
|
+ || keep_directory_symlink_option
|
||||||
|
|| old_files_option == DEFAULT_OLD_FILES
|
||||||
|
|| old_files_option == OVERWRITE_OLD_FILES))
|
||||||
|
{
|
||||||
|
struct stat st;
|
||||||
|
+
|
||||||
|
+ if (keep_directory_symlink_option && is_directory_link (file_name))
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
if (deref_stat (file_name, &st) == 0)
|
||||||
|
{
|
||||||
|
current_mode = st.st_mode;
|
||||||
|
diff --git a/src/tar.c b/src/tar.c
|
||||||
|
index 18277e4..d62ca0e 100644
|
||||||
|
--- a/src/tar.c
|
||||||
|
+++ b/src/tar.c
|
||||||
|
@@ -290,6 +290,7 @@ enum
|
||||||
|
IGNORE_COMMAND_ERROR_OPTION,
|
||||||
|
IGNORE_FAILED_READ_OPTION,
|
||||||
|
INDEX_FILE_OPTION,
|
||||||
|
+ KEEP_DIRECTORY_SYMLINK_OPTION,
|
||||||
|
KEEP_NEWER_FILES_OPTION,
|
||||||
|
LEVEL_OPTION,
|
||||||
|
LZIP_OPTION,
|
||||||
|
@@ -488,6 +489,9 @@ static struct argp_option options[] = {
|
||||||
|
{"overwrite-dir", OVERWRITE_DIR_OPTION, 0, 0,
|
||||||
|
N_("overwrite metadata of existing directories when extracting (default)"),
|
||||||
|
GRID+1 },
|
||||||
|
+ {"keep-directory-symlink", KEEP_DIRECTORY_SYMLINK_OPTION, 0, 0,
|
||||||
|
+ N_("preserve existing symlinks to directories when extracting"),
|
||||||
|
+ GRID+1 },
|
||||||
|
#undef GRID
|
||||||
|
|
||||||
|
#define GRID 40
|
||||||
|
@@ -1878,6 +1882,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
|
||||||
|
ignore_failed_read_option = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ case KEEP_DIRECTORY_SYMLINK_OPTION:
|
||||||
|
+ keep_directory_symlink_option = true;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
case KEEP_NEWER_FILES_OPTION:
|
||||||
|
old_files_option = KEEP_NEWER_FILES;
|
||||||
|
break;
|
||||||
|
--
|
||||||
|
2.9.3
|
|
@ -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 @@
|
||||||
|
|
||||||
|
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,66 @@
|
||||||
|
diff --git a/NEWS b/NEWS
|
||||||
|
index 8aeae33..8f3c416 100644
|
||||||
|
--- a/NEWS
|
||||||
|
+++ b/NEWS
|
||||||
|
@@ -1,10 +1,15 @@
|
||||||
|
GNU tar NEWS - User visible changes. 2012-11-19
|
||||||
|
Please send GNU tar bug reports to <bug-tar@gnu.org>
|
||||||
|
|
||||||
|
+** Sparse files with large data
|
||||||
|
+
|
||||||
|
+When creating a PAX-format archive, tar no longer arbitrarily restricts
|
||||||
|
+the size of the representation of a sparse file to be less than 8 GiB.
|
||||||
|
+
|
||||||
|
|
||||||
|
version 1.26 - Sergey Poznyakoff, 2011-03-12
|
||||||
|
|
||||||
|
-* Bugfixes
|
||||||
|
+* Bug fixes
|
||||||
|
|
||||||
|
** Fix the --verify option, which broke in version 1.24.
|
||||||
|
|
||||||
|
diff --git a/src/sparse.c b/src/sparse.c
|
||||||
|
index 4b2f982..cfd0c66 100644
|
||||||
|
--- a/src/sparse.c
|
||||||
|
+++ b/src/sparse.c
|
||||||
|
@@ -919,6 +919,18 @@ pax_sparse_member_p (struct tar_sparse_file *file)
|
||||||
|
|| file->stat_info->sparse_major > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Start a header that uses the effective (shrunken) file size. */
|
||||||
|
+static union block *
|
||||||
|
+pax_start_header (struct tar_stat_info *st)
|
||||||
|
+{
|
||||||
|
+ off_t realsize = st->stat.st_size;
|
||||||
|
+ union block *blk;
|
||||||
|
+ st->stat.st_size = st->archive_file_size;
|
||||||
|
+ blk = start_header (st);
|
||||||
|
+ st->stat.st_size = realsize;
|
||||||
|
+ return blk;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static bool
|
||||||
|
pax_dump_header_0 (struct tar_sparse_file *file)
|
||||||
|
{
|
||||||
|
@@ -968,9 +980,7 @@ pax_dump_header_0 (struct tar_sparse_file *file)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- blk = start_header (file->stat_info);
|
||||||
|
- /* Store the effective (shrunken) file size */
|
||||||
|
- OFF_TO_CHARS (file->stat_info->archive_file_size, blk->header.size);
|
||||||
|
+ blk = pax_start_header (file->stat_info);
|
||||||
|
finish_header (file->stat_info, blk, block_ordinal);
|
||||||
|
if (save_file_name)
|
||||||
|
{
|
||||||
|
@@ -1035,9 +1045,7 @@ pax_dump_header_1 (struct tar_sparse_file *file)
|
||||||
|
if (strlen (file->stat_info->file_name) > NAME_FIELD_SIZE)
|
||||||
|
file->stat_info->file_name[NAME_FIELD_SIZE] = 0;
|
||||||
|
|
||||||
|
- blk = start_header (file->stat_info);
|
||||||
|
- /* Store the effective (shrunken) file size */
|
||||||
|
- OFF_TO_CHARS (file->stat_info->archive_file_size, blk->header.size);
|
||||||
|
+ blk = pax_start_header (file->stat_info);
|
||||||
|
finish_header (file->stat_info, blk, block_ordinal);
|
||||||
|
free (file->stat_info->file_name);
|
||||||
|
file->stat_info->file_name = save_file_name;
|
|
@ -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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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 @@
|
||||||
|
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
|
File diff suppressed because it is too large
Load Diff
|
@ -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 @@
|
||||||
|
.\" 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 @@
|
||||||
|
%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