basebuilder_pel7ppc64bebuilder0
7 years ago
31 changed files with 15181 additions and 0 deletions
@ -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,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,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,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 |
@ -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