commit 033cd33112cac4f112e0593e741adc2b0eeb3c70 Author: CentOS Sources Date: Tue May 16 06:16:28 2023 +0000 import tar-1.30-9.el8 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1ed8384 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/tar-1.30.tar.xz diff --git a/.tar.metadata b/.tar.metadata new file mode 100644 index 0000000..6be1a21 --- /dev/null +++ b/.tar.metadata @@ -0,0 +1 @@ +0d442c4565f8131745a5dff1cd08f7eaa797f679 SOURCES/tar-1.30.tar.xz diff --git a/SOURCES/tar-1.28-atime-rofs.patch b/SOURCES/tar-1.28-atime-rofs.patch new file mode 100644 index 0000000..f32114a --- /dev/null +++ b/SOURCES/tar-1.28-atime-rofs.patch @@ -0,0 +1,34 @@ +From 71769b9ea3c12b7fbb39fee2e9f4a4c1c36c0d0b Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Mon, 28 Jul 2014 08:13:31 +0200 +Subject: [PATCH 4/9] utime & read-only FS + +Ignore errors from setting utime() for source file on read-only +file-system. + +Resolves: #500742 + +Upstream bugreport (still downstream): +http://lists.gnu.org/archive/html/bug-tar/2009-06/msg00016.html + +--- + src/create.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/create.c b/src/create.c +index e2f4ede..f644f23 100644 +--- a/src/create.c ++++ b/src/create.c +@@ -1824,7 +1824,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); + } + +-- +1.9.3 + diff --git a/SOURCES/tar-1.28-document-exclude-mistakes.patch b/SOURCES/tar-1.28-document-exclude-mistakes.patch new file mode 100644 index 0000000..73f4ed3 --- /dev/null +++ b/SOURCES/tar-1.28-document-exclude-mistakes.patch @@ -0,0 +1,97 @@ +From 18112ded916cf62b3bd3c0ffb9530e4ade3d2209 Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Mon, 28 Jul 2014 08:16:33 +0200 +Subject: [PATCH 7/9] Document exclude mistakes with + +.. usually with --no-wildcards-match-slash & --anchored options. + +Upstream bugreport (still downstream): +http://www.mail-archive.com/bug-tar@gnu.org/msg04488.html + +Related: #903666 + +--- + doc/tar.texi | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 67 insertions(+) + +diff --git a/doc/tar.texi b/doc/tar.texi +index a000f3f..2695d22 100644 +--- a/doc/tar.texi ++++ b/doc/tar.texi +@@ -8051,6 +8051,73 @@ The following table summarizes pattern-matching default values: + @item Exclusion @tab @option{--wildcards --no-anchored --wildcards-match-slash} + @end multitable + ++@subsubsection Wildcard matching confusion ++Using of @option{--[no-]anchored} and @option{--[no-]wildcards-match-slash} ++was proven to make confusion. The reasons for this are probably different ++default setting for inclusion and exclusion patterns (in general: you shouldn't ++rely on defaults if possible) and maybe also because when using any of these two ++options, the position on command line matters (these options should be placed ++prior to the member name on command line). ++ ++@noindent ++Consider following directory structure: ++ ++@smallexample ++$ find path/ | sort ++path/ ++path/file1 ++path/file2 ++path/subpath ++path/subpath/file1 ++path/subpath/file2 ++path/subpath2 ++path/subpath2/file1 ++path/subpath2/file2 ++@end smallexample ++ ++@noindent ++To archive full directory @samp{path} except all files named @samp{file1} may be ++reached by any of the two following commands: ++ ++@smallexample ++$ tar -cf a.tar --no-wildcards-match-slash --no-anchored path \ ++ --exclude='*/file1' ++$ tar -cf a.tar --wildcards-match-slash path --exclude='*/file1' ++@end smallexample ++ ++@noindent ++Note that the @option{--wildcards-match-slash} and @option{--no-anchored} may be ++omitted as it is default for @option{--exclude}. Anyway, we usually want just ++concrete file (or rather subset of files with the same name). Assume we want ++exclude only files named @samp{file1} from the first subdirectory level. ++Following command obviously does not work (it still excludes all files having ++@samp{file1} name): ++ ++@smallexample ++$ tar -cf a.tar --no-wildcards-match-slash path \ ++ --exclude='*/file1' | sort ++@end smallexample ++ ++@noindent ++This is because the @option{--no-anchored} is set by default for exclusion. ++What you need to fix is to put @option{--anchored} before pathname: ++ ++@smallexample ++$ tar -cvf a.tar --no-wildcards-match-slash --anchored path \ ++ --exclude='*/file1' | sort ++path/ ++path/file2 ++path/subpath1/ ++path/subpath1/file1 ++path/subpath1/file2 ++path/subpath2/ ++path/subpath2/file1 ++path/subpath2/file2 ++@end smallexample ++ ++@noindent ++Similarly you can exclude second level by specifying @samp{*/*/file1}. ++ + @node quoting styles + @section Quoting Member Names + +-- +1.9.3 + diff --git a/SOURCES/tar-1.28-loneZeroWarning.patch b/SOURCES/tar-1.28-loneZeroWarning.patch new file mode 100644 index 0000000..c142ea3 --- /dev/null +++ b/SOURCES/tar-1.28-loneZeroWarning.patch @@ -0,0 +1,43 @@ +From 60d08c6d82f0c33a6704c79afd416902eb8c663f Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Mon, 28 Jul 2014 08:08:50 +0200 +Subject: [PATCH 1/9] Stop issuing lone zero block warnings (downstram) + +Resolves: #135601 + +--- + src/list.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/src/list.c b/src/list.c +index b4277e0..0c7a740 100644 +--- a/src/list.c ++++ b/src/list.c +@@ -240,6 +240,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, +@@ -249,6 +257,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; +-- +1.9.3 + diff --git a/SOURCES/tar-1.28-sparse-inf-loops.patch b/SOURCES/tar-1.28-sparse-inf-loops.patch new file mode 100644 index 0000000..94d2bb5 --- /dev/null +++ b/SOURCES/tar-1.28-sparse-inf-loops.patch @@ -0,0 +1,129 @@ +From b451bfd224da44e93cf842f23455d755e48421dd Mon Sep 17 00:00:00 2001 +From: Pavel Raiskup +Date: Mon, 28 Jul 2014 08:17:55 +0200 +Subject: [PATCH 8/9] Fix for infinite loops during sparse file handling + +Upstream bugreport (still downstream): +http://www.mail-archive.com/bug-tar@gnu.org/msg04432.html + +Resolves: #1082608 + +--- + THANKS | 1 + + src/sparse.c | 48 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 33 insertions(+), 16 deletions(-) + +diff --git a/THANKS b/THANKS +index b4c5427..e74f71c 100644 +--- a/THANKS ++++ b/THANKS +@@ -175,6 +175,7 @@ Fabio d'Alessi cars@civ.bio.unipd.it + Frank Heckenbach frank@g-n-u.de + Frank Koenen koenfr@lidp.com + Franz-Werner Gergen gergen@edvulx.mpi-stuttgart.mpg.de ++François Ouellet fouell@gmail.com + François Pinard pinard@iro.umontreal.ca + Fritz Elfert fritz@fsun.triltsch.de + George Chyu gschyu@ccgate.dp.beckman.com +diff --git a/src/sparse.c b/src/sparse.c +index 6a97676..53c1868 100644 +--- a/src/sparse.c ++++ b/src/sparse.c +@@ -301,6 +301,7 @@ sparse_dump_region (struct tar_sparse_file *file, size_t i) + { + union block *blk; + off_t bytes_left = file->stat_info->sparse_map[i].numbytes; ++ const char *file_name = file->stat_info->orig_file_name; + + if (!lseek_or_error (file, file->stat_info->sparse_map[i].offset)) + return false; +@@ -314,13 +315,23 @@ sparse_dump_region (struct tar_sparse_file *file, size_t i) + bytes_read = safe_read (file->fd, blk->buffer, bufsize); + if (bytes_read == SAFE_READ_ERROR) + { +- read_diag_details (file->stat_info->orig_file_name, ++ read_diag_details (file_name, + (file->stat_info->sparse_map[i].offset + + file->stat_info->sparse_map[i].numbytes + - bytes_left), + bufsize); + return false; + } ++ if (bytes_read == 0) ++ { ++ char buf[UINTMAX_STRSIZE_BOUND]; ++ FATAL_ERROR ((0, 0, ++ ngettext ("%s: File shrank by %s byte", ++ "%s: File shrank by %s bytes", ++ bytes_left), ++ quotearg_colon (file_name), ++ offtostr (bytes_left, buf))); ++ } + + memset (blk->buffer + bytes_read, 0, BLOCKSIZE - bytes_read); + bytes_left -= bytes_read; +@@ -475,33 +486,37 @@ sparse_skip_file (struct tar_stat_info *st) + static bool + check_sparse_region (struct tar_sparse_file *file, off_t beg, off_t end) + { +- if (!lseek_or_error (file, beg)) ++ off_t offset = beg; ++ ++ if (!lseek_or_error (file, offset)) + return false; + +- while (beg < end) ++ while (offset < end) + { + size_t bytes_read; +- size_t rdsize = BLOCKSIZE < end - beg ? BLOCKSIZE : end - beg; ++ size_t rdsize = BLOCKSIZE < end - offset ? BLOCKSIZE : end - offset; + char diff_buffer[BLOCKSIZE]; + + bytes_read = safe_read (file->fd, diff_buffer, rdsize); + if (bytes_read == SAFE_READ_ERROR) + { + read_diag_details (file->stat_info->orig_file_name, +- beg, +- rdsize); +- return false; +- } +- if (!zero_block_p (diff_buffer, bytes_read)) +- { +- char begbuf[INT_BUFSIZE_BOUND (off_t)]; +- report_difference (file->stat_info, +- _("File fragment at %s is not a hole"), +- offtostr (beg, begbuf)); ++ offset, rdsize); + return false; + } + +- beg += bytes_read; ++ if (bytes_read == 0 ++ || !zero_block_p (diff_buffer, bytes_read)) ++ { ++ char begbuf[INT_BUFSIZE_BOUND (off_t)]; ++ const char *msg = bytes_read ? _("File fragment at %s is not a hole") ++ : _("Hole starting at %s is truncated"); ++ ++ report_difference (file->stat_info, msg, offtostr (beg, begbuf)); ++ return false; ++ } ++ ++ offset += bytes_read; + } + return true; + } +@@ -542,7 +557,8 @@ check_data_region (struct tar_sparse_file *file, size_t i) + file->dumped_size += bytes_read; + size_left -= bytes_read; + mv_size_left (file->stat_info->archive_file_size - file->dumped_size); +- if (memcmp (blk->buffer, diff_buffer, rdsize)) ++ if (bytes_read == 0 ++ || memcmp (blk->buffer, diff_buffer, bytes_read)) + { + report_difference (file->stat_info, _("Contents differ")); + return false; +-- +1.9.3 + diff --git a/SOURCES/tar-1.28-vfatTruncate.patch b/SOURCES/tar-1.28-vfatTruncate.patch new file mode 100644 index 0000000..734fbc4 --- /dev/null +++ b/SOURCES/tar-1.28-vfatTruncate.patch @@ -0,0 +1,52 @@ +From 90f446f9b04ab820a99b9408e68c01dc6b57056c Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Mon, 28 Jul 2014 08:10:10 +0200 +Subject: [PATCH 2/9] vfat-like FS & sparse (still downstream) + +Fix extracting sparse files to a file system like vfat, when +ftruncate may fail to grow the size of a file. Still downstram, +(do we need this now? ftruncate & vfat works is now OK). + +Resolves: #179507 + +Upstream bugreport: +http://lists.gnu.org/archive/html/bug-tar/2006-02/msg00000.html + +--- + src/system.c | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/src/system.c b/src/system.c +index 9414233..37e9a3e 100644 +--- a/src/system.c ++++ b/src/system.c +@@ -243,8 +243,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 +-- +1.9.3 + diff --git a/SOURCES/tar-1.29-wildcards.patch b/SOURCES/tar-1.29-wildcards.patch new file mode 100644 index 0000000..e239155 --- /dev/null +++ b/SOURCES/tar-1.29-wildcards.patch @@ -0,0 +1,107 @@ +From ae0730a98f7269a7bf7adb6047aa421939b290b7 Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Mon, 28 Jul 2014 08:12:14 +0200 +Subject: [PATCH] wildcard defaults (downstram; compatibility) + +Change inclusion defaults of tar to "wildcards --anchored +--wildcards-match-slash" for compatibility reasons. + +Resolves: #206841 +--- + doc/tar.texi | 5 ++++- + src/names.c | 15 +++++---------- + tests/exclude01.at | 1 + + 3 files changed, 10 insertions(+), 11 deletions(-) + +diff --git a/doc/tar.texi b/doc/tar.texi +index a8969e0..0185157 100644 +--- a/doc/tar.texi ++++ b/doc/tar.texi +@@ -8439,7 +8439,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 + +@@ -12915,6 +12915,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 037b869..d96ad71 100644 +--- a/src/names.c ++++ b/src/names.c +@@ -137,7 +137,7 @@ static struct argp_option names_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 }, + {"wildcards-match-slash", WILDCARDS_MATCH_SLASH_OPTION, 0, 0, +@@ -195,8 +195,7 @@ names_parse_opt (int key, char *arg, struct argp_state *state) + /* Wildcard matching settings */ + enum wildcards + { +- default_wildcards, /* For exclusion == enable_wildcards, +- for inclusion == disable_wildcards */ ++ default_wildcards, /* enable_wildcards */ + disable_wildcards, + enable_wildcards + }; +@@ -214,7 +213,7 @@ static int include_anchored = EXCLUDE_ANCHORED; + | recursion_option) + + #define INCLUDE_OPTIONS \ +- (((wildcards == enable_wildcards) ? EXCLUDE_WILDCARDS : 0) \ ++ (((wildcards != disable_wildcards) ? EXCLUDE_WILDCARDS : 0) \ + | include_anchored \ + | matching_flags \ + | recursion_option) +@@ -1234,8 +1233,7 @@ regex_usage_warning (const char *name) + + /* Warn about implicit use of the wildcards in command line arguments. + (Default for tar prior to 1.15.91, but changed afterwards) */ +- if (wildcards == default_wildcards +- && fnmatch_pattern_has_wildcards (name, 0)) ++ if (0 && fnmatch_pattern_has_wildcards (name, 0)) + { + warned_once = 1; + WARN ((0, 0, +@@ -1618,10 +1616,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/tests/exclude01.at b/tests/exclude01.at +index c3cd10b..c590047 100644 +--- a/tests/exclude01.at ++++ b/tests/exclude01.at +@@ -61,6 +61,7 @@ testdir/dir2/file2 + testdir/dir3/ + NEXT + testdir/dir1/* ++testdir/dir1/file1 + NEXT + testdir/dir1/* + NEXT +-- +2.5.5 + diff --git a/SOURCES/tar-1.30-CVE-2022-48303.patch b/SOURCES/tar-1.30-CVE-2022-48303.patch new file mode 100644 index 0000000..1b6c8db --- /dev/null +++ b/SOURCES/tar-1.30-CVE-2022-48303.patch @@ -0,0 +1,30 @@ +From 3da78400eafcccb97e2f2fd4b227ea40d794ede8 Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Sat, 11 Feb 2023 11:57:39 +0200 +Subject: [PATCH] Fix boundary checking in base-256 decoder + +* src/list.c (from_header): Base-256 encoding is at least 2 bytes +long. +--- + src/list.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/list.c b/src/list.c +index 9fafc425..86bcfdd1 100644 +--- a/src/list.c ++++ b/src/list.c +@@ -881,8 +881,9 @@ from_header (char const *where0, size_t digs, char const *type, + where++; + } + } +- else if (*where == '\200' /* positive base-256 */ +- || *where == '\377' /* negative base-256 */) ++ else if (where <= lim - 2 ++ && (*where == '\200' /* positive base-256 */ ++ || *where == '\377' /* negative base-256 */)) + { + /* Parse base-256 output. A nonnegative number N is + represented as (256**DIGS)/2 + N; a negative number -N is +-- +2.38.1 + diff --git a/SOURCES/tar-1.30-Fix-the-no-overwrite-dir-option b/SOURCES/tar-1.30-Fix-the-no-overwrite-dir-option new file mode 100644 index 0000000..589fce0 --- /dev/null +++ b/SOURCES/tar-1.30-Fix-the-no-overwrite-dir-option @@ -0,0 +1,297 @@ +From 14d8fc718f0c872274b90991ee634b0cd8e1a6f0 Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Sat, 8 Feb 2020 13:01:47 +0200 +Subject: [PATCH] Fix the --no-overwrite-dir option + +Given this option, tar failed to preserve permissions of empty directories +and to create files under directories owned by the current user that did +not have the S_IWUSR bit set. + +* src/extract.c (fd_chmod): Rename to fd_i_chmod. +(fd_chmod): New function. +(safe_dir_mode): New function. +(extract_dir): Special handling for existing directories in +--no-overwrite-dir mode. +* tests/extrac23.at: New file. +* tests/Makefile.am: Add new test case. +* tests/testsuite.at: Likewise. +--- + src/extract.c | 128 ++++++++++++++++++++++++++++++--------------- + tests/Makefile.am | 1 + + tests/extrac23.at | 58 ++++++++++++++++++++ + tests/testsuite.at | 1 + + 4 files changed, 146 insertions(+), 42 deletions(-) + create mode 100644 tests/extrac23.at + +diff --git a/src/extract.c b/src/extract.c +index a4a35a57..5a38ba70 100644 +--- a/src/extract.c ++++ b/src/extract.c +@@ -194,7 +194,7 @@ extr_init (void) + + /* Use fchmod if possible, fchmodat otherwise. */ + static int +-fd_chmod (int fd, char const *file, mode_t mode, int atflag) ++fd_i_chmod (int fd, char const *file, mode_t mode, int atflag) + { + if (0 <= fd) + { +@@ -205,6 +205,42 @@ fd_chmod (int fd, char const *file, mode_t mode, int atflag) + return fchmodat (chdir_fd, file, mode, atflag); + } + ++/* A version of fd_i_chmod which gracefully handles several common error ++ conditions. Additional argument TYPEFLAG is the type of file in tar ++ notation. ++ */ ++static int ++fd_chmod(int fd, char const *file_name, int mode, int atflag, int typeflag) ++{ ++ int chmod_errno = fd_i_chmod (fd, file_name, mode, atflag) == 0 ? 0 : errno; ++ ++ /* On Solaris, chmod may fail if we don't have PRIV_ALL, because ++ setuid-root files would otherwise be a backdoor. See ++ http://opensolaris.org/jive/thread.jspa?threadID=95826 ++ (2009-09-03). */ ++ if (chmod_errno == EPERM && (mode & S_ISUID) ++ && priv_set_restore_linkdir () == 0) ++ { ++ chmod_errno = fd_i_chmod (fd, file_name, mode, atflag) == 0 ? 0 : errno; ++ priv_set_remove_linkdir (); ++ } ++ ++ /* Linux fchmodat does not support AT_SYMLINK_NOFOLLOW, and ++ returns ENOTSUP even when operating on non-symlinks, try ++ again with the flag disabled if it does not appear to be ++ supported and if the file is not a symlink. This ++ introduces a race, alas. */ ++ if (atflag && typeflag != SYMTYPE && ! implemented (chmod_errno)) ++ chmod_errno = fd_i_chmod (fd, file_name, mode, 0) == 0 ? 0 : errno; ++ ++ if (chmod_errno && (typeflag != SYMTYPE || implemented (chmod_errno))) ++ { ++ errno = chmod_errno; ++ return -1; ++ } ++ return 0; ++} ++ + /* Use fchown if possible, fchownat otherwise. */ + static int + fd_chown (int fd, char const *file, uid_t uid, gid_t gid, int atflag) +@@ -259,35 +295,8 @@ set_mode (char const *file_name, + + if (current_mode != mode) + { +- int chmod_errno = +- fd_chmod (fd, file_name, mode, atflag) == 0 ? 0 : errno; +- +- /* On Solaris, chmod may fail if we don't have PRIV_ALL, because +- setuid-root files would otherwise be a backdoor. See +- http://opensolaris.org/jive/thread.jspa?threadID=95826 +- (2009-09-03). */ +- if (chmod_errno == EPERM && (mode & S_ISUID) +- && priv_set_restore_linkdir () == 0) +- { +- chmod_errno = +- fd_chmod (fd, file_name, mode, atflag) == 0 ? 0 : errno; +- priv_set_remove_linkdir (); +- } +- +- /* Linux fchmodat does not support AT_SYMLINK_NOFOLLOW, and +- returns ENOTSUP even when operating on non-symlinks, try +- again with the flag disabled if it does not appear to be +- supported and if the file is not a symlink. This +- introduces a race, alas. */ +- if (atflag && typeflag != SYMTYPE && ! implemented (chmod_errno)) +- chmod_errno = fd_chmod (fd, file_name, mode, 0) == 0 ? 0 : errno; +- +- if (chmod_errno +- && (typeflag != SYMTYPE || implemented (chmod_errno))) +- { +- errno = chmod_errno; +- chmod_error_details (file_name, mode); +- } ++ if (fd_chmod (fd, file_name, mode, atflag, typeflag)) ++ chmod_error_details (file_name, mode); + } + } + } +@@ -975,6 +984,26 @@ is_directory_link (const char *file_name) + return res; + } + ++/* Given struct stat of a directory (or directory member) whose ownership ++ or permissions of will be restored later, return the temporary permissions ++ for that directory, sufficiently restrictive so that in the meantime ++ processes owned by other users do not inadvertently create files under this ++ directory that inherit the wrong owner, group, or permissions from the ++ directory. ++ ++ If not root, though, make the directory writeable and searchable at first, ++ so that files can be created under it. ++*/ ++static inline int ++safe_dir_mode (struct stat const *st) ++{ ++ return ((st->st_mode ++ & (0 < same_owner_option || 0 < same_permissions_option ++ ? S_IRWXU ++ : MODE_RWX)) ++ | (we_are_root ? 0 : MODE_WXUSR)); ++} ++ + /* Extractor functions for various member types */ + + static int +@@ -1004,18 +1033,7 @@ extract_dir (char *file_name, int typeflag) + else if (typeflag == GNUTYPE_DUMPDIR) + skip_member (); + +- /* If ownership or permissions will be restored later, create the +- directory with restrictive permissions at first, so that in the +- meantime processes owned by other users do not inadvertently +- create files under this directory that inherit the wrong owner, +- group, or permissions from the directory. If not root, though, +- make the directory writeable and searchable at first, so that +- files can be created under it. */ +- mode = ((current_stat_info.stat.st_mode +- & (0 < same_owner_option || 0 < same_permissions_option +- ? S_IRWXU +- : MODE_RWX)) +- | (we_are_root ? 0 : MODE_WXUSR)); ++ mode = safe_dir_mode (¤t_stat_info.stat); + + for (;;) + { +@@ -1031,6 +1049,7 @@ extract_dir (char *file_name, int typeflag) + if (errno == EEXIST + && (interdir_made + || keep_directory_symlink_option ++ || old_files_option == NO_OVERWRITE_DIR_OLD_FILES + || old_files_option == DEFAULT_OLD_FILES + || old_files_option == OVERWRITE_OLD_FILES)) + { +@@ -1051,6 +1070,31 @@ extract_dir (char *file_name, int typeflag) + repair_delayed_set_stat (file_name, &st); + return 0; + } ++ else if (old_files_option == NO_OVERWRITE_DIR_OLD_FILES) ++ { ++ /* Temporarily change the directory mode to a safe ++ value, to be able to create files in it, should ++ the need be. ++ */ ++ mode = safe_dir_mode (&st); ++ status = fd_chmod(-1, file_name, mode, ++ AT_SYMLINK_NOFOLLOW, DIRTYPE); ++ if (status == 0) ++ { ++ /* Store the actual directory mode, to be restored ++ later. ++ */ ++ current_stat_info.stat = st; ++ current_mode = mode & ~ current_umask; ++ current_mode_mask = MODE_RWX; ++ atflag = AT_SYMLINK_NOFOLLOW; ++ break; ++ } ++ else ++ { ++ chmod_error_details (file_name, mode); ++ } ++ } + break; + } + } +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 0369a950..31ae3460 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -121,6 +121,7 @@ TESTSUITE_AT = \ + extrac19.at\ + extrac20.at\ + extrac21.at\ ++ extrac23.at\ + filerem01.at\ + filerem02.at\ + dirrem01.at\ +diff --git a/tests/extrac23.at b/tests/extrac23.at +new file mode 100644 +index 00000000..669d18b6 +--- /dev/null ++++ b/tests/extrac23.at +@@ -0,0 +1,58 @@ ++# Test suite for GNU tar. -*- Autotest -*- ++# Copyright 2020 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 . ++AT_SETUP([--no-overwrite-dir]) ++AT_KEYWORDS([extract extrac23 no-overwrite-dir]) ++ ++# Description: Implementation of the --no-overwrite-dir option was flawed in ++# tar versions up to 1.32.90. This option is intended to preserve metadata ++# of existing directories. In fact it worked only for non-empty directories. ++# Moreover, if the actual directory was owned by the user tar runs as and the ++# S_IWUSR bit was not set in its actual permissions, tar failed to create files ++# in it. ++# ++# Reported by: Michael Kaufmann ++# References: <20200207112934.Horde.anXzYhAj2CHiwUrw5CuT0G-@webmail.michael-kaufmann.ch>, ++# https://lists.gnu.org/archive/html/bug-tar/2020-02/msg00003.html ++ ++AT_TAR_CHECK([ ++# Test if the directory permissions are restored properly. ++mkdir dir ++chmod 755 dir ++tar cf a.tar dir ++chmod 777 dir ++tar -xf a.tar --no-overwrite-dir ++genfile --stat=mode.777 dir ++ ++# Test if temprorary permissions are set correctly to allow the owner ++# to write to the directory. ++genfile --file dir/file ++tar cf a.tar dir ++rm dir/file ++chmod 400 dir ++tar -xf a.tar --no-overwrite-dir ++genfile --stat=mode.777 dir ++chmod 700 dir ++find dir ++], ++[0], ++[777 ++400 ++dir ++dir/file ++]) ++AT_CLEANUP +diff --git a/tests/testsuite.at b/tests/testsuite.at +index 2cc43a19..0620a3c7 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -343,6 +343,7 @@ m4_include([extrac19.at]) + m4_include([extrac19.at]) + m4_include([extrac20.at]) + m4_include([extrac21.at]) ++m4_include([extrac23.at]) + + m4_include([backup01.at]) + +-- +2.37.3 + diff --git a/SOURCES/tar-1.30-disk-read-error.patch b/SOURCES/tar-1.30-disk-read-error.patch new file mode 100644 index 0000000..fbf596f --- /dev/null +++ b/SOURCES/tar-1.30-disk-read-error.patch @@ -0,0 +1,53 @@ +From: Ondrej Dubaj +Date: Tue, 13 Apr 2021 11:47:32 +0200 +Subject: [PATCH] do not report read disk error as file shrank + +diff --git a/src/create.c b/src/create.c +index 181f7d9..7be10a9 100644 +--- a/src/create.c ++++ b/src/create.c +@@ -1097,7 +1097,7 @@ dump_regular_file (int fd, struct tar_stat_info *st) + size_left -= count; + set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE); + +- if (count != bufsize) ++ if (count == 0) + { + char buf[UINTMAX_STRSIZE_BOUND]; + memset (blk->buffer + count, 0, bufsize - count); +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 2d7939d..89fbf9a 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -230,7 +230,6 @@ TESTSUITE_AT = \ + spmvp10.at\ + time01.at\ + time02.at\ +- truncate.at\ + update.at\ + update01.at\ + update02.at\ +diff --git a/tests/Makefile.in b/tests/Makefile.in +index db14044..238b210 100644 +--- a/tests/Makefile.in ++++ b/tests/Makefile.in +@@ -1457,7 +1457,6 @@ TESTSUITE_AT = \ + spmvp10.at\ + time01.at\ + time02.at\ +- truncate.at\ + update.at\ + update01.at\ + update02.at\ +diff --git a/tests/testsuite.at b/tests/testsuite.at +index 2a83757..52f73a6 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -424,7 +424,6 @@ m4_include([comprec.at]) + m4_include([shortfile.at]) + m4_include([shortupd.at]) + +-m4_include([truncate.at]) + m4_include([grow.at]) + m4_include([sigpipe.at]) + m4_include([comperr.at]) diff --git a/SOURCES/tar-1.30-padding-zeros.patch b/SOURCES/tar-1.30-padding-zeros.patch new file mode 100644 index 0000000..a773b6c --- /dev/null +++ b/SOURCES/tar-1.30-padding-zeros.patch @@ -0,0 +1,179 @@ +From 910d9ff829bbdfaf1455cdb2b1813507bcb855ec Mon Sep 17 00:00:00 2001 +From: Ondrej Dubaj +Date: Tue, 13 Apr 2021 11:47:32 +0200 +Subject: [PATCH] add padding message, when read error occurs and tar is + padding with zeros + +--- + lib/paxerror.c | 44 ++++++++++++++++++++++++++++++-------------- + lib/paxlib.h | 4 ++-- + src/common.h | 2 +- + src/create.c | 2 +- + src/misc.c | 6 +++--- + src/sparse.c | 6 +++--- + 6 files changed, 40 insertions(+), 24 deletions(-) + +diff --git a/lib/paxerror.c b/lib/paxerror.c +index 134cef3..929a741 100644 +--- a/lib/paxerror.c ++++ b/lib/paxerror.c +@@ -173,29 +173,45 @@ read_error (char const *name) + } + + void +-read_error_details (char const *name, off_t offset, size_t size) ++read_error_details (char const *name, off_t offset, size_t size, bool padding) + { + char buf[UINTMAX_STRSIZE_BOUND]; + int e = errno; +- ERROR ((0, e, +- ngettext ("%s: Read error at byte %s, while reading %lu byte", +- "%s: Read error at byte %s, while reading %lu bytes", +- size), +- quotearg_colon (name), STRINGIFY_BIGINT (offset, buf), +- (unsigned long) size)); ++ if (padding) ++ ERROR ((0, e, ++ ngettext ("%s: Read error at byte %s, while reading %lu byte; padding with zeros", ++ "%s: Read error at byte %s, while reading %lu bytes; padding with zeros", ++ size), ++ quotearg_colon (name), STRINGIFY_BIGINT (offset, buf), ++ (unsigned long) size)); ++ else ++ ERROR ((0, e, ++ ngettext ("%s: Read error at byte %s, while reading %lu byte", ++ "%s: Read error at byte %s, while reading %lu bytes", ++ size), ++ quotearg_colon (name), STRINGIFY_BIGINT (offset, buf), ++ (unsigned long) size)); + } + + void +-read_warn_details (char const *name, off_t offset, size_t size) ++read_warn_details (char const *name, off_t offset, size_t size, bool padding) + { + char buf[UINTMAX_STRSIZE_BOUND]; + int e = errno; +- WARN ((0, e, +- ngettext ("%s: Warning: Read error at byte %s, while reading %lu byte", +- "%s: Warning: Read error at byte %s, while reading %lu bytes", +- size), +- quotearg_colon (name), STRINGIFY_BIGINT (offset, buf), +- (unsigned long) size)); ++ if (padding) ++ WARN ((0, e, ++ ngettext ("%s: Warning: Read error at byte %s, while reading %lu byte; padding with zeros", ++ "%s: Warning: Read error at byte %s, while reading %lu bytes; padding with zeros", ++ size), ++ quotearg_colon (name), STRINGIFY_BIGINT (offset, buf), ++ (unsigned long) size)); ++ else ++ WARN ((0, e, ++ ngettext ("%s: Warning: Read error at byte %s, while reading %lu byte", ++ "%s: Warning: Read error at byte %s, while reading %lu bytes", ++ size), ++ quotearg_colon (name), STRINGIFY_BIGINT (offset, buf), ++ (unsigned long) size)); + } + + void +diff --git a/lib/paxlib.h b/lib/paxlib.h +index d4251d1..ccf826b 100644 +--- a/lib/paxlib.h ++++ b/lib/paxlib.h +@@ -94,10 +94,10 @@ void open_error (char const *); + void open_fatal (char const *) __attribute__ ((noreturn)); + void open_warn (char const *); + void read_error (char const *); +-void read_error_details (char const *, off_t, size_t); ++void read_error_details (char const *, off_t, size_t, bool); + void read_fatal (char const *) __attribute__ ((noreturn)); + void read_fatal_details (char const *, off_t, size_t) __attribute__ ((noreturn)); +-void read_warn_details (char const *, off_t, size_t); ++void read_warn_details (char const *, off_t, size_t, bool); + void readlink_error (char const *); + void readlink_warn (char const *); + void rmdir_error (char const *); +diff --git a/src/common.h b/src/common.h +index bbe167e..34a30ec 100644 +--- a/src/common.h ++++ b/src/common.h +@@ -713,7 +713,7 @@ int chdir_count (void); + + void close_diag (char const *name); + void open_diag (char const *name); +-void read_diag_details (char const *name, off_t offset, size_t size); ++void read_diag_details (char const *name, off_t offset, size_t size, bool padding); + void readlink_diag (char const *name); + void savedir_diag (char const *name); + void seek_diag_details (char const *name, off_t offset); +diff --git a/src/create.c b/src/create.c +index 712ee18..181f7d9 100644 +--- a/src/create.c ++++ b/src/create.c +@@ -1090,7 +1090,7 @@ dump_regular_file (int fd, struct tar_stat_info *st) + if (count == SAFE_READ_ERROR) + { + read_diag_details (st->orig_file_name, +- st->stat.st_size - size_left, bufsize); ++ st->stat.st_size - size_left, bufsize, true); + pad_archive (size_left); + return dump_status_short; + } +diff --git a/src/misc.c b/src/misc.c +index eccf6f9..28c6f44 100644 +--- a/src/misc.c ++++ b/src/misc.c +@@ -1069,15 +1069,15 @@ open_diag (char const *name) + } + + void +-read_diag_details (char const *name, off_t offset, size_t size) ++read_diag_details (char const *name, off_t offset, size_t size, bool padding) + { + if (ignore_failed_read_option) + { + if (WARNING_ENABLED(WARN_FAILED_READ)) +- read_warn_details (name, offset, size); ++ read_warn_details (name, offset, size, padding); + } + else +- read_error_details (name, offset, size); ++ read_error_details (name, offset, size, padding); + } + + void +diff --git a/src/sparse.c b/src/sparse.c +index 55c874f..1f9f0af 100644 +--- a/src/sparse.c ++++ b/src/sparse.c +@@ -425,7 +425,7 @@ sparse_dump_region (struct tar_sparse_file *file, size_t i) + (file->stat_info->sparse_map[i].offset + + file->stat_info->sparse_map[i].numbytes + - bytes_left), +- bufsize); ++ bufsize, false); + return false; + } + if (bytes_read == 0) +@@ -607,7 +607,7 @@ check_sparse_region (struct tar_sparse_file *file, off_t beg, off_t end) + if (bytes_read == SAFE_READ_ERROR) + { + read_diag_details (file->stat_info->orig_file_name, +- offset, rdsize); ++ offset, rdsize, false); + return false; + } + +@@ -657,7 +657,7 @@ check_data_region (struct tar_sparse_file *file, size_t i) + (file->stat_info->sparse_map[i].offset + + file->stat_info->sparse_map[i].numbytes + - size_left), +- rdsize); ++ rdsize, false); + return false; + } + file->dumped_size += bytes_read; +-- +2.30.2 + diff --git a/SOURCES/tar-1.30-remove-capabs-test.patch b/SOURCES/tar-1.30-remove-capabs-test.patch new file mode 100644 index 0000000..2b1c1c7 --- /dev/null +++ b/SOURCES/tar-1.30-remove-capabs-test.patch @@ -0,0 +1,82 @@ +# This test is failing due to BZ#2066320 and BZ#1926332 +# So we decided to remove it from testsuite + +--- tar-1.30/tests/Makefile.am.old 2022-12-05 10:18:29.093200490 +0000 ++++ tar-1.30/tests/Makefile.am 2022-12-05 10:18:47.058200490 +0000 +@@ -261,8 +261,7 @@ TESTSUITE_AT = \ + acls02.at\ + acls03.at\ + selnx01.at\ +- selacl01.at\ +- capabs_raw01.at ++ selacl01.at + + distclean-local: + -rm -rf download +--- tar-1.30/tests/testsuite.at.old 2022-12-05 10:19:51.023200490 +0000 ++++ tar-1.30/tests/testsuite.at 2022-12-05 10:20:19.418200490 +0000 +@@ -469,8 +469,6 @@ m4_include([acls03.at]) + m4_include([selnx01.at]) + m4_include([selacl01.at]) + +-m4_include([capabs_raw01.at]) +- + AT_BANNER([One top level]) + m4_include([onetop01.at]) + m4_include([onetop02.at]) +--- tar-1.30-test/tests/capabs_raw01.at 2017-01-02 12:43:50.000000000 +0000 ++++ tar-1.30/tests/capabs_raw01.at 1970-01-01 00:00:00.000000000 +0000 +@@ -1,53 +0,0 @@ +-# Process this file with autom4te to create testsuite. -*- Autotest -*- +-# +-# Test suite for GNU tar. +-# Copyright 2012-2014, 2016-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 . +-# +-# Test description: Test if file capabilities are archived/restored correctly +-# using just the default xattr support (capabilities are stored/restored in +-# binary format -> system dependant). +- +-AT_SETUP([capabilities: binary store/restore]) +-AT_KEYWORDS([xattrs capabilities capabs_raw01]) +- +-AT_TAR_CHECK([ +-AT_PRIVILEGED_PREREQ +-AT_XATTRS_PREREQ +-AT_CAPABILITIES_UTILS_PREREQ +- +-mkdir dir +-genfile --file dir/file +- +-setcap "= cap_chown=ei" dir/file +- +-# archive whole directory including binary xattrs +-tar --xattrs -cf archive.tar dir +- +-# clear the directory +-rm -rf dir +- +-# restore _all_ xattrs (not just the user.* domain) +-tar --xattrs --xattrs-include='*' -xf archive.tar +- +-getcap dir/file +-], +-[0], +-[dir/file = cap_chown+ei +-]) +- +-AT_CLEANUP diff --git a/SOURCES/tar-1.30-tests-difflink.patch b/SOURCES/tar-1.30-tests-difflink.patch new file mode 100644 index 0000000..e4070d7 --- /dev/null +++ b/SOURCES/tar-1.30-tests-difflink.patch @@ -0,0 +1,15 @@ +Per https://www.mail-archive.com/bug-tar@gnu.org/msg05440.html + +diff --git a/tests/difflink.at b/tests/difflink.at +index eadfb08..4e01176 100644 +--- a/tests/difflink.at ++++ b/tests/difflink.at +@@ -21,7 +21,7 @@ mkdir a + genfile -f a/x + ln -s x a/y + ln a/y a/z +-tar cf a.tar a ++tar cf a.tar a/x a/y a/z + rm a/z + ln -s x a/z + tar df a.tar diff --git a/SOURCES/tar-1.30-tests-dirrem.patch b/SOURCES/tar-1.30-tests-dirrem.patch new file mode 100644 index 0000000..6280495 --- /dev/null +++ b/SOURCES/tar-1.30-tests-dirrem.patch @@ -0,0 +1,93 @@ +From 298cfc4743b9cca6cc0c685b9fce5b34827bec1b Mon Sep 17 00:00:00 2001 +From: Pavel Raiskup +Date: Thu, 4 Jan 2018 18:21:27 +0100 +Subject: [PATCH] tests: fix race in dirrem01 and dirrem02 + +Proposal: +https://www.mail-archive.com/bug-tar@gnu.org/msg05451.html + +Previously the '--checkpoint-action=echo' was triggered after +'--checkpoint-action=sleep=1' - so the order of events *usually* +was (for --format='gnu'): + + ... + 1. checkpoint handler before write of 'dir/sub' member + 2. one-second delay + 3. stderr write: 'tar: Write checkpoint 3' + 4. write the member 'dir/sub' into the archive + 5. check that the member's ctime has not been changed + 6. genfile's detecting 'Write checkpoint', doing unlink + ... + +But sometimes, the genfile was fast enough to win the race and +unlinked the directory before the member was written into the +archive (IOW, the order was 1-2-3-6-4-5). This led to the +occasional warning 'tar: dir/sub: file changed as we read it'. + +Swap the order of 'sleep=1' and 'echo' actions so the genfile +utility has (hopefully) enough time to do the unlink before +writing the file into the archive (enforce 1-2-3-6-4-5 order). + +* tests/dirrem01.at: Swap 'sleep=1' and 'echo' actions. +* tests/dirrem02.at: Likewise. +--- + tests/dirrem01.at | 5 +++-- + tests/dirrem02.at | 7 ++++--- + 2 files changed, 7 insertions(+), 5 deletions(-) + +diff --git a/tests/dirrem01.at b/tests/dirrem01.at +index 40344dc..dabc206 100644 +--- a/tests/dirrem01.at ++++ b/tests/dirrem01.at +@@ -47,14 +47,15 @@ gnu) CPT=3;; + esac + + genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \ +- tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \ +- --checkpoint-action='echo' -c -f archive.tar \ ++ tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='echo' \ ++ --checkpoint-action='sleep=1' -c -f archive.tar \ + --listed-incremental db -v dir >/dev/null + ], + [1], + [ignore], + [tar: dir: Directory is new + tar: dir/sub: Directory is new ++tar: dir/sub: file changed as we read it + tar: dir/sub: File removed before we read it + ],[],[],[gnu,posix]) + +diff --git a/tests/dirrem02.at b/tests/dirrem02.at +index e1cf9ef..924454f 100644 +--- a/tests/dirrem02.at ++++ b/tests/dirrem02.at +@@ -20,7 +20,7 @@ + + # Description: + # +-# When an explicitley named directory disappears during creation ++# When an explicitly named directory disappears during creation + # of incremental dump, tar should still exit with TAREXIT_FAILURE (2). + # + # For further details see dirrem01.at +@@ -44,14 +44,15 @@ gnu) CPT=3;; + esac + + genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \ +- tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \ +- --checkpoint-action='echo' -c -f archive.tar \ ++ tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='echo' \ ++ --checkpoint-action='sleep=1' -c -f archive.tar \ + --listed-incremental db -v dir dir/sub >/dev/null + ], + [2], + [ignore], + [tar: dir: Directory is new + tar: dir/sub: Directory is new ++tar: dir/sub: file changed as we read it + tar: dir/sub: Cannot open: No such file or directory + tar: Exiting with failure status due to previous errors + ],[],[],[gnu,posix]) +-- +2.14.3 + diff --git a/SOURCES/tar-1.30-xgetcwd-null-return-check.patch b/SOURCES/tar-1.30-xgetcwd-null-return-check.patch new file mode 100644 index 0000000..1359e06 --- /dev/null +++ b/SOURCES/tar-1.30-xgetcwd-null-return-check.patch @@ -0,0 +1,50 @@ +From 60acf5a7407ef263aaf7d3751da08167b1990eb0 Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Wed, 20 May 2020 13:35:28 +0200 +Subject: [PATCH] Check return value from xgetcwd + +* src/misc.c (chdir_arg,tar_getcdpath): Check for non-NULL +return from xgetcwd. The function returns NULL for any +error originating from getcwd. +--- + src/misc.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/src/misc.c b/src/misc.c +index cd07f53..eccf6f9 100644 +--- a/src/misc.c ++++ b/src/misc.c +@@ -301,8 +301,6 @@ normalize_filename (int cdidx, const char *name) + size_t copylen; + bool need_separator; + +- if (!cdpath) +- call_arg_fatal ("getcwd", "."); + copylen = strlen (cdpath); + need_separator = ! (DOUBLE_SLASH_IS_DISTINCT_ROOT + && copylen == 2 && ISSLASH (cdpath[1])); +@@ -909,6 +907,8 @@ chdir_arg (char const *dir) + { + wd[wd_count].name = "."; + wd[wd_count].abspath = xgetcwd (); ++ if (!wd[wd_count].abspath) ++ call_arg_fatal ("getcwd", "."); + wd[wd_count].fd = AT_FDCWD; + wd_count++; + } +@@ -1034,7 +1034,11 @@ tar_getcdpath (int idx) + { + static char *cwd; + if (!cwd) +- cwd = xgetcwd (); ++ { ++ cwd = xgetcwd (); ++ if (!cwd) ++ call_arg_fatal ("getcwd", "."); ++ } + return cwd; + } + return wd[idx].abspath; +-- +2.24.1 + diff --git a/SOURCES/tar-1.30.tar.xz.sig b/SOURCES/tar-1.30.tar.xz.sig new file mode 100644 index 0000000..3069edf --- /dev/null +++ b/SOURCES/tar-1.30.tar.xz.sig @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.15 (GNU/Linux) + +iEYEABECAAYFAlo2WDAACgkQNgKwf1XQxzLIAwCcCkJzqedt2FUq1N5ysPFomhvS +SnIAnj+0Y7vNI1E4w/ektRMB/HTQceeK +=TjVE +-----END PGP SIGNATURE----- diff --git a/SPECS/tar.spec b/SPECS/tar.spec new file mode 100644 index 0000000..476825d --- /dev/null +++ b/SPECS/tar.spec @@ -0,0 +1,876 @@ +%if %{?WITH_SELINUX:0}%{!?WITH_SELINUX:1} +%global WITH_SELINUX 1 +%endif + +Summary: A GNU file archiving program +Name: tar +Epoch: 2 +Version: 1.30 +Release: 9%{?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 + +# Note that all patches are documented in patch files (git format-patch format) +Patch1: tar-1.28-loneZeroWarning.patch +Patch2: tar-1.28-vfatTruncate.patch +Patch3: tar-1.29-wildcards.patch +Patch4: tar-1.28-atime-rofs.patch +Patch9: tar-1.28-document-exclude-mistakes.patch +Patch11: tar-1.28-sparse-inf-loops.patch +Patch12: tar-1.30-tests-difflink.patch +Patch13: tar-1.30-tests-dirrem.patch +Patch14: tar-1.30-xgetcwd-null-return-check.patch +Patch15: tar-1.30-padding-zeros.patch +Patch16: tar-1.30-disk-read-error.patch +# Source: https://git.savannah.gnu.org/cgit/tar.git/commit/?id=14d8fc718f0c872274b90991ee634b0cd8e1a6f0 +Patch17: tar-1.30-Fix-the-no-overwrite-dir-option +# Remove the capabilities test, due to fails (BZ#2066320 and BZ#1926332) +Patch18: tar-1.30-remove-capabs-test.patch +Patch19: tar-1.30-CVE-2022-48303.patch + +# run "make check" by default +%bcond_without check + +BuildRequires: autoconf automake texinfo gettext libacl-devel + +%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 +%autosetup -p1 +autoreconf -v + +# Keep only entries related to the latest release. +mv ChangeLog{,~} +awk 'stop = false; /^2014-07-27/ { stop = true; exit }; { print }' \ + < ChangeLog~ > ChangeLog + + +%build +%if ! %{WITH_SELINUX} +%global CONFIGURE_SELINUX --without-selinux +%endif + +%configure %{?CONFIGURE_SELINUX} \ + --with-lzma="xz --format=lzma" \ + DEFAULT_RMT_DIR=%{_sysconfdir} \ + RSH=/usr/bin/ssh +make %{?_smp_mflags} + +%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 +ln -s tar.1.gz $RPM_BUILD_ROOT%{_mandir}/man1/gtar.1 + +# XXX Nuke unpackaged files. +rm -f $RPM_BUILD_ROOT%{_sysconfdir}/rmt +rm -f $RPM_BUILD_ROOT%{_mandir}/man8/rmt.8* + + +%find_lang %name + +%check +%if %{with check} +rm -f $RPM_BUILD_ROOT/test/testsuite +make check || ( + # get the error log + set +x + find -name testsuite.log | while read line; do + echo "=== $line ===" + cat "$line" + echo + done + false +) +%endif + +%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 +%{!?_licensedir:%global license %%doc} +%license COPYING +%doc AUTHORS README THANKS NEWS ChangeLog +%{_bindir}/tar +%{_bindir}/gtar +%{_mandir}/man1/tar.1* +%{_mandir}/man1/gtar.1* +%{_infodir}/tar.info* + +%changelog +* Thu Feb 09 2023 Matej Mužila - 1.30-9 +- Fix CVE-2022-48303 +- Resolves: CVE-2022-48303 + +* Mon Dec 05 2022 Lukas Javorsky - 1.30-8 +- Remove the capabs_raw01 test from testsuite (#2066320) + +* Fri Nov 25 2022 Lukas Javorsky - 1.30-7 +- Fix the --no-overwrite-dir option + +* Wed May 12 2021 Ondrej Dubaj - 1.30-6 +- added "padding with zeros" info message (#1913566) +- do not report disk error as file shrank (#1913569) + +* Wed May 20 2020 Ondrej Dubaj - 1.30-5 +- fixed NULL return value from xgetcwd (#1837871) + +* Wed May 23 2018 Pavel Raiskup - 1.30-4 +- drop BuildRequires: rsh, we anyways use ./configure RSH=%%_bindir/ssh + +* Fri Feb 09 2018 Fedora Release Engineering - 2:1.30-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Jan 06 2018 Igor Gnatenko - 2:1.30-2 +- Return Epoch back + +* Thu Jan 04 2018 Pavel Raiskup - 1.30-1 +- testsuite fixes per upstream reports + +* Mon Dec 18 2017 Pavel Raiskup - 1.30-1 +- rebase to latest upstream release, per release notes + http://lists.gnu.org/archive/html/info-gnu/2017-12/msg00011.html + +* Thu Aug 03 2017 Fedora Release Engineering - 2:1.29-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 2:1.29-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed May 24 2017 Tomas Repik - 2:1.29-5 +- fix --add-file option (rhbz#1436030) + +* Sat Feb 11 2017 Fedora Release Engineering - 2:1.29-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Nov 28 2016 Pavel Raiskup - 1.29-3 +- revert back some docs +- fix --create to use --xattrs-include/exclude (rhbz#1341787) +- don't hang with '-x --skip-old-files --xattrs' (rhbz#1399036) + +* Mon Nov 7 2016 Peter Robinson 1.29-2 +- Drop large docs, minor specs cleanups + +* Tue May 17 2016 Pavel Raiskup - 1.29-1 +- new upstream release 1.29 (rhbz#1336607) + +* Fri Feb 05 2016 Fedora Release Engineering - 2:1.28-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jun 26 2015 Pavel Raiskup - 1.28-6 +- fix --files-from and -T cooperation (rhbz#1230762) +- avoid two testsuite false alarms related to --files-from option + +* Fri Jun 19 2015 Fedora Release Engineering - 2:1.28-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat Feb 21 2015 Till Maas - 2:1.28-4 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Mon Aug 18 2014 Fedora Release Engineering - 2:1.28-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Wed Aug 6 2014 Tom Callaway - 2:1.28-2 +- fix license handling + +* Mon Jul 28 2014 Pavel Raiskup - 1.28-1 +- rebase to new upstream tarball, per release notes: + https://savannah.gnu.org/forum/forum.php?forum_id=8037 + +* Sun Jun 08 2014 Fedora Release Engineering - 2:1.27.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon May 12 2014 Pavel Raiskup - 1.27.1-4 +- enable parallel build + +* Tue Apr 01 2014 Pavel Raiskup - 1.27.1-3 +- document --exclude mistakes (#903666) +- fix default ACLs propagation (#1082603) +- infinite loop(s) in sparse-file handling (#1082608) +- fix listing (and --verify) for big sparse files (#916995) +- fix eternal loop in -T option (#1083066) +- don't read/write archive from/to terminal (#1083075) + +* Fri Nov 29 2013 Pavel Raiskup - 1.27.1-2 +- sync manual page contents with help2man output + +* Mon Nov 18 2013 Pavel Raiskup - 1.27.1-1 +- minor version update to 1.27.1 + +* Tue Oct 29 2013 Pavel Raiskup - 1.27-2 +- sparse file detection based on fstat() fix (#1024095) + +* Wed Oct 09 2013 Ondrej Vasik - 1.27-1 +- new upstream release 1.27 (#1016288) + +* Mon Sep 09 2013 Pavel Raiskup - 1.26-28 +- add documenation for xattrs-like options (#996753) +- the --xattrs-include implies --xattrs now (#965969) + +* Sun Aug 04 2013 Fedora Release Engineering - 2:1.26-27 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Thu Jun 20 2013 Pavel Raiskup - 1.26-26 +- 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 - 2:1.26-25 +- fix "symlink eating" bug (already fixed in upstream git) + +* Thu May 30 2013 Pavel Raiskup - 2:1.26-24 +- 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 - 2:1.26-23 +- again search for 'rmt' binary in %%{_sbindir} on target host + +* Tue Mar 26 2013 Pavel Raiskup - 2:1.26-22 +- enable build for arm64 (#926610) +- fix the NAME part in manual page (copied from texinfo) +- silence gcc warnings (lint fixes without risk from upstream) for RPMDiff + +* Tue Mar 19 2013 Pavel Raiskup - 2:1.26-21 +- allow extracting single volume from multi-volume archive (#919897) +- usrmove: /bin/tar ~> /usr/bin/tar, selinux handling edit +- add possibility to pass arguments to commands called from tar (#819187) + +* Fri Mar 01 2013 Pavel Raiskup - 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 - 2:1.26-18 +- fix problems with big uids/gids and pax format (> 2^21) (#913406) + +* Mon Feb 18 2013 Pavel Raiskup - 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 - 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 - 2:1.26-15 +- add missing --full-time option to manpage + +* Thu Oct 18 2012 Pavel Raiskup - 2:1.26-14 +- fix bad behaviour of --keep-old-files and add --skip-old-files option + (#799252) + +* Wed Oct 10 2012 Pavel Raiskup 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 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 2:1.26-11 +- fix manpage to reflect #850291 related commit + +* Tue Aug 21 2012 Pavel Raiskup 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 - 2:1.26-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu Jul 12 2012 Pavel Raiskup 2:1.26-8 +- force the fchown() be called before xattrs_set() (#771927) + +* Sat Jun 16 2012 Ondrej Vasik 2:1.26-7 +- store&restore security.capability extended attributes category + (#771927) +- fix build failure with undefined gets + +* Tue May 15 2012 Ondrej Vasik 2:1.26-6 +- add virtual provides for bundled(gnulib) copylib (#821790) + +* Thu Apr 05 2012 Pavel Raiskup 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 - 2:1.26-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Sun Oct 2 2011 Ville Skyttä - 2:1.26-3 +- Man page heading formatting fixes. + +* Mon Sep 26 2011 Kamil Dudka 2:1.26-2 +- restore basic functionality of --acl, --selinux, and --xattr (#717684) + +* Sat Mar 12 2011 Ondrej Vasik 2:1.26-1 +- new upstream release 1.26 +* Wed Feb 09 2011 Fedora Release Engineering - 2:1.25-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Jan 20 2011 Ondrej Vasik 2:1.25-5 +- drop unnecessary hard dependency on info package(#671157) + +* Mon Jan 03 2011 Ondrej Vasik 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 2:1.25-3 +- correctly store long sparse file names in PAX archives (#656834) + +* Tue Nov 23 2010 Ondrej Vasik 2:1.25-2 +- fix issue with --one-file-system and --listed-incremental + (#654718) + +* Mon Nov 08 2010 Ondrej Vasik 2:1.25-1 +- new upstream release 1.25 + +* Mon Oct 25 2010 Ondrej Vasik 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 2:1.23-7 +- match non-stripped file names (#637085) + +* Mon Sep 20 2010 Kamil Dudka 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 2:1.23-5 +- add support for security.NTACL xattrs (#621215) + +* Tue Jun 01 2010 Ondrej Vasik 2:1.23-4 +- recognize old-archive/portability options(#594044) + +* Wed Apr 07 2010 Ondrej Vasik 2:1.23-3 +- allow storing of extended attributes for fifo and block + or character devices files(#573147) + +* Mon Mar 15 2010 Ondrej Vasik 2:1.23-2 +- update help2maned manpage + +* Fri Mar 12 2010 Ondrej Vasik 2:1.23-1 +- new upstream release 1.23, remove applied patches + +* Wed Mar 10 2010 Ondrej Vasik 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 2:1.22-16 +- support for "lustre.*" extended attributes (#561855) + +* Thu Feb 04 2010 Ondrej Vasik 2:1.22-15 +- fix segfault with corrupted metadata in code_ns_fraction + (#531441) + +* Wed Feb 03 2010 Kamil Dudka 2:1.22-14 +- allow also build with SELinux support + +* Mon Feb 01 2010 Ondrej Vasik 2:1.22-13 +- allow build without SELinux support(#556679) + +* Tue Jan 05 2010 Ondrej Vasik 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 2:1.22-11 +- fix segfault with corrupted metadata in code_ns_fraction + (#531441) +- commented patches and sources + +* Fri Nov 27 2009 Ondrej Vasik 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 2:1.22-9 +- store SELinux context for symlinks (#525992) + +* Thu Aug 27 2009 Ondrej Vasik 2:1.22-8 +- provide symlink manpage for gtar + +* Thu Aug 06 2009 Ondrej Vasik 2:1.22-7 +- do process install-info only without --excludedocs(#515923) + +* Sun Jul 26 2009 Fedora Release Engineering - 2:1.22-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Jul 16 2009 Ondrej Vasik 2:1.22-5 +- Fix restoring of directory default acls(#511145) +- Do not patch generated autotools files + +* Thu Jun 25 2009 Ondrej Vasik 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 2:1.22-3 +- ignore errors from setting utime() for source file + on read-only filesystem (#500742) + +* Fri Mar 06 2009 Kamil Dudka 2:1.22-2 +- improve tar-1.14-loneZeroWarning.patch (#487315) + +* Mon Mar 02 2009 Ondrej Vasik 2:1.22-1 +- New upstream release 1.22, removed applied patch + +* Wed Feb 25 2009 Fedora Release Engineering - 2:1.21-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Jan 05 2009 Ondrej Vasik 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 2:1.20-6 +- add BuildRequires for rsh (#475950) + +* Fri Nov 21 2008 Ondrej Vasik 2:1.20-5 +- fix off-by-one errors in xattrs patch (#472355) + +* Mon Nov 10 2008 Kamil Dudka 2:1.20-4 +- fixed bug #465803: labels with --multi-volume (upstream patch) + +* Fri Oct 10 2008 Ondrej Vasik 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 2:1.20-2 +- patch fuzz clean up + +* Mon May 26 2008 Ondrej Vasik 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 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 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 2:1.19-1 +- upgrade to 1.19 +- updated xattrs patch, removed 3 upstream patches + +* Wed Dec 12 2007 Radek Brich 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 2:1.17-4 +- upstream patch for CVE-2007-4476 + (tar stack crashing in safer_name_suffix) + +* Tue Aug 28 2007 Radek Brich 2:1.17-3 +- gawk build dependency + +* Tue Aug 28 2007 Radek Brich 2:1.17-2 +- updated license tag +- fixed CVE-2007-4131 tar directory traversal vulnerability (#251921) + +* Thu Jun 28 2007 Radek Brich 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 2:1.15.1-26 +- fix spec file to meet Fedora standards (#226478) + +* Mon Jan 22 2007 Peter Vrabec 2:1.15.1-25 +- fix non-failsafe install-info use in scriptlets (#223718) + +* Wed Jan 03 2007 Peter Vrabec 2:1.15.1-24 +- supply tar man page (#219375) + +* Tue Dec 12 2006 Florian La Roche 2:1.15.1-23 +- fix CVE-2006-6097 GNU tar directory traversal (#216937) + +* Sun Dec 10 2006 Peter Vrabec 2:1.15.1-22 +- fix some rpmlint spec file issues + +* Wed Oct 25 2006 Peter Vrabec 2:1.15.1-21 +- build with dist-tag + +* Mon Oct 09 2006 Peter Vrabec 2:1.15.1-20 +- another fix of tar-1.15.1-xattrs.patch from James Antill + +* Wed Oct 04 2006 Peter Vrabec 2:1.15.1-19 +- another fix of tar-1.15.1-xattrs.patch from James Antill + +* Sun Oct 01 2006 Peter Vrabec 2:1.15.1-18 +- fix tar-1.15.1-xattrs.patch (#208701) + +* Tue Sep 19 2006 Peter Vrabec 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 1.15.91-2 +- apply patches, which were forgotten during upgrade + +* Wed Sep 13 2006 Peter Vrabec 1.15.91-1 +- upgrade, which also fix incremental backup (#206121) + +* Fri Sep 08 2006 Peter Vrabec 1.15.90-7 +- fix tar-debuginfo package (#205615) + +* Thu Aug 10 2006 Peter Vrabec 1.15.90-6 +- add xattr support (#200925), patch from james.antill@redhat.com + +* Mon Jul 24 2006 Peter Vrabec 1.15.90-5 +- fix incompatibilities in appending files to the end + of an archive (#199515) + +* Tue Jul 18 2006 Peter Vrabec 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 - 1.15.90-3.1 +- rebuild + +* Thu Jun 29 2006 Peter Vrabec 1.15.90-3 +- fix typo in tar.1 man page + +* Tue Apr 25 2006 Peter Vrabec 1.15.90-2 +- exclude listed02.at from testsuite again, because it + still fails on s390 + +* Tue Apr 25 2006 Peter Vrabec 1.15.90-1 +- upgrade + +* Mon Apr 24 2006 Peter Vrabec 1.15.1-16 +- fix problem when options at the end of command line were + not recognized (#188707) + +* Thu Apr 13 2006 Peter Vrabec 1.15.1-15 +- fix segmentation faul introduced with hugeSparse.patch + +* Wed Mar 22 2006 Peter Vrabec 1.15.1-14 +- fix problems with extracting large sparse archive members (#185460) + +* Fri Feb 17 2006 Peter Vrabec 1.15.1-13 +- fix heap overlfow bug CVE-2006-0300 (#181773) + +* Fri Feb 10 2006 Jesse Keating - 1.15.1-12.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1.15.1-12.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Mon Feb 06 2006 Peter Vrabec 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 +- rebuilt + +* Fri Nov 04 2005 Peter Vrabec 1.15.1-11 +- correctly pad archive members that shrunk during archiving (#172373) + +* Tue Sep 06 2005 Peter Vrabec 1.15.1-10 +- provide man page (#163709, #54243, #56041) + +* Mon Aug 15 2005 Peter Vrabec 1.15.1-9 +- silence newer option (#164902) + +* Wed Jul 27 2005 Peter Vrabec 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 1.15.1-7 +- exclude listed02.at from testsuite + +* Fri Jul 22 2005 Peter Vrabec 1.15.1-6 +- remove tar-1.14-err.patch, not needed (158743) + +* Fri Apr 15 2005 Peter Vrabec 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 +- gcc4 fix (#150993) 1.15.1-4 + +* Mon Jan 31 2005 Peter Vrabec +- rebuild 1.15.1-3 + +* Mon Jan 17 2005 Peter Vrabec +- fix tests/testsuite + +* Fri Jan 07 2005 Peter Vrabec +- upgrade to 1.15.1 + +* Mon Oct 11 2004 Peter Vrabec +- patch to stop issuing lone zero block warnings +- rebuilt + +* Mon Oct 11 2004 Peter Vrabec +- URL added to spec file +- spec file clean up + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Mon Jun 7 2004 Jeff Johnson 1.14-1 +- upgrade to 1.14. + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Jun 17 2003 Jeff Johnson 1.13.25-13 +- rebuilt because of crt breakage on ppc64. +- dump automake15 requirement. + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Fri Nov 29 2002 Tim Powers 1.13.25-10 +- fix broken buildrquires on autoconf253 + +* Thu Nov 7 2002 Jeff Johnson 1.13.25-9 +- rebuild from CVS. + +* Fri Aug 23 2002 Phil Knirsch 1.13.25-8 +- Included security patch from errata release. + +* Mon Jul 1 2002 Bernhard Rosenkraenzer 1.13.25-7 +- Fix argv NULL termination (#64869) + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Tue Apr 9 2002 Bernhard Rosenkraenzer 1.13.25-4 +- Fix build with autoconf253 (LIBOBJ change; autoconf252 worked) + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Tue Oct 23 2001 Bernhard Rosenkraenzer 1.13.25-2 +- Don't include hardlinks to sockets in a tar file (#54827) + +* Thu Sep 27 2001 Bernhard Rosenkraenzer 1.13.25-1 +- 1.13.25 + +* Tue Sep 18 2001 Bernhard Rosenkraenzer 1.13.22-1 +- Update to 1.13.22, adapt patches + +* Mon Aug 27 2001 Bernhard Rosenkraenzer 1.13.19-6 +- Fix #52084 + +* Thu May 17 2001 Bernhard Rosenkraenzer 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 +- Don't depend on librt. + +* Fri Feb 23 2001 Trond Eivind Glomsröd +- langify + +* Thu Feb 22 2001 Bernhard Rosenkraenzer +- Fix up the man page (#28915) + +* Wed Feb 21 2001 Bernhard Rosenkraenzer +- 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 +- 1.3.18 +- Update man page to reflect changes + +* Thu Oct 5 2000 Bernhard Rosenkraenzer +- Fix the "ignore failed read" option (Bug #8330) + +* Mon Sep 25 2000 Bernhard Rosenkraenzer +- fix hang on tar tvzf - + +* Fri Aug 18 2000 Bernhard Rosenkraenzer +- really fix exit code (Bug #15448) + +* Mon Aug 7 2000 Bernhard Rosenkraenzer +- fix exit code (Bug #15448), patch from Tim Waugh + +* Wed Jul 12 2000 Prospector +- automatic rebuild + +* Mon Jun 19 2000 Bernhard Rosenkraenzer +- FHSify + +* Fri Apr 28 2000 Bill Nottingham +- fix for ia64 + +* Wed Feb 9 2000 Bernhard Rosenkränzer +- Fix the exclude bug (#9201) + +* Wed Feb 02 2000 Cristian Gafton +- man pages are compressed +- fix description +- fix fnmatch build problems + +* Sun Jan 9 2000 Bernhard Rosenkränzer +- 1.13.17 +- remove dotbug patch (fixed in base) +- update download URL + +* Fri Jan 7 2000 Bernhard Rosenkränzer +- Fix a severe bug (tar xf any_package_containing_. would delete the + current directory) + +* Wed Jan 5 2000 Bernhard Rosenkränzer +- 1.3.16 +- unset LINGUAS before running configure + +* Tue Nov 9 1999 Bernhard Rosenkränzer +- 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 +- upgrade to 1.13.11. + +* Wed Aug 18 1999 Jeff Johnson +- update to 1.13.9. + +* Thu Aug 12 1999 Jeff Johnson +- update to 1.13.6. +- support -y --bzip2 options for bzip2 compression (#2415). + +* Fri Jul 23 1999 Jeff Johnson +- update to 1.13.5. + +* Tue Jul 13 1999 Bill Nottingham +- update to 1.13 + +* Sat Jun 26 1999 Jeff Johnson +- update to 1.12.64014. +- pipe patch corrected for remote tars now merged in. + +* Sun Jun 20 1999 Jeff Johnson +- update to tar-1.12.64013. +- subtract (and reopen #2415) bzip2 support using -y. +- move gtar to /bin. + +* Tue Jun 15 1999 Jeff Johnson +- upgrade to tar-1.12.64011 to +- add bzip2 support (#2415) +- fix filename bug (#3479) + +* Mon Mar 29 1999 Jeff Johnson +- fix suspended tar with compression over pipe produces error (#390). + +* Sun Mar 21 1999 Cristian Gafton +- auto rebuild in the new build environment (release 8) + +* Mon Mar 08 1999 Michael Maher +- added patch for bad name cache. +- FIXES BUG 320 + +* Wed Feb 24 1999 Preston Brown +- Injected new description and group. + +* Fri Dec 18 1998 Preston Brown +- bumped spec number for initial rh 6.0 build + +* Tue Aug 4 1998 Jeff Johnson +- add /usr/bin/gtar symlink (change #421) + +* Tue Jul 14 1998 Jeff Johnson +- 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 +- translations modified for de, fr, tr + +* Thu Oct 16 1997 Donnie Barnes +- updated from 1.11.8 to 1.12 +- various spec file cleanups +- /sbin/install-info support + +* Thu Jun 19 1997 Erik Troan +- built against glibc + +* Thu May 29 1997 Michael Fulbright +- Fixed to include rmt